main.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // ofcmgr project main.go
  2. package main
  3. import (
  4. "encoding/base64"
  5. "encoding/json"
  6. "log"
  7. "net/http"
  8. "os"
  9. "os/exec"
  10. "path/filepath"
  11. "runtime"
  12. "strings"
  13. "syscall"
  14. )
  15. type Params struct {
  16. Id string
  17. DocUrl string
  18. }
  19. //var httpUrl_Data string = "http://192.168.0.101:10091/api/limsdataentry/dataentrycallback"
  20. //var httpUrl_Report string = "http://192.168.0.101:10091/api/createreport/reporteditcallback"
  21. var httpUrl_Data string = "http://47.92.212.59:10091/api/limsdataentry/dataentrycallback"
  22. var httpUrl_Report string = "http://47.92.212.59:10091/api/createreport/reporteditcallback"
  23. var regFilePath string = "D:\\limsdoc\\petrotool.exe"
  24. var fileUpServer string = "weed1.labsop.cn:9333"
  25. var fileDownServer string = "weed1.labsop.cn:9390"
  26. func main() {
  27. //创建本地目录
  28. var basePath string
  29. if ret, _ := PathExists("D:/"); ret {
  30. basePath = "d:/limsdoc"
  31. } else {
  32. basePath = "c:/limsdoc"
  33. regFilePath = "c:\\limsdoc\\petrotool.exe"
  34. }
  35. if ret, _ := PathExists(basePath); !ret {
  36. CreatePath(basePath)
  37. }
  38. //生成日志文件
  39. //无参数运行,创建注册表
  40. var logfile string
  41. if len(os.Args) <= 1 {
  42. logfile = "./log.txt"
  43. } else {
  44. logfile = basePath+"/log.txt"
  45. }
  46. file, err := os.OpenFile(logfile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
  47. defer file.Close()
  48. if err != nil {
  49. panic("打开文件错误")
  50. }
  51. log.SetOutput(file)
  52. log.SetFlags(log.Lmicroseconds | log.Ldate)
  53. log.Println(os.Args)
  54. //无参数运行,创建注册表
  55. if len(os.Args) <= 1 {
  56. file, err := exec.LookPath(os.Args[0])
  57. if err != nil {
  58. return
  59. }
  60. path, err := filepath.Abs(file)
  61. if runtime.GOOS == "windows" {
  62. path = strings.Replace(path, "\\", "/", -1)
  63. }
  64. if _, err := Copy(path, regFilePath); err == nil {
  65. log.Println("文件解压成功")
  66. log.Println("")
  67. //写注册表
  68. registerOp(regFilePath)
  69. } else {
  70. log.Println("文件解压失败")
  71. log.Println("安装失败,请通过右键,以管理员的身份运行,重试安装!")
  72. }
  73. log.Println("")
  74. log.Println("")
  75. log.Println("***安装成功后,当前位置的安装文件[petrotool.exe] 和 日志文件[log.txt]已无用,可直接删除***")
  76. /*fmt.Println("")
  77. fmt.Println("")
  78. fmt.Println("请按回车键[ENTER]退出......")
  79. var ret string
  80. fmt.Scanln(&ret)*/
  81. return
  82. }
  83. params := getParams(os.Args[1])
  84. log.Println(params)
  85. retUrlByte, err := base64.RawURLEncoding.DecodeString(params["furl"])
  86. retUrl := string(retUrlByte)
  87. log.Println("retUrl = ", retUrl)
  88. log.Println("retUrl err = ", err)
  89. fileNameByte, err := base64.RawURLEncoding.DecodeString(params["fname"])
  90. fileName := string(fileNameByte)
  91. log.Println("fileName = ", fileName)
  92. log.Println("fileName err = ", err)
  93. docType := params["doctype"]
  94. entityId := params["id"]
  95. action := params["act"]
  96. if action == "edit" {
  97. //localFileName := entityId + "_" + fileName
  98. _dir := basePath + "/" + docType
  99. //下载文件到本地目录
  100. var downloadUrl string
  101. if strings.Contains(retUrl, "http://") {
  102. downloadUrl = retUrl
  103. } else {
  104. downloadUrl = "http://" + retUrl
  105. }
  106. log.Println("downloadUrl=", downloadUrl)
  107. DownloadFile(downloadUrl, fileName, _dir)
  108. if strings.Contains(runtime.GOOS, "windows") {
  109. cmd := exec.Command("CMD", "/c", _dir+"/"+fileName)
  110. cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
  111. err := cmd.Start()
  112. log.Println("打开文档: err = ", err)
  113. }
  114. } else if action == "up" {
  115. token := params["token"]
  116. //先上传文件
  117. //localFileName := entityId + "_" + fileName
  118. docPath := basePath + "/" + docType + "/" + fileName
  119. retDocUrl, _ := uploadFile(docPath, fileUpServer, fileDownServer)
  120. params := Params{
  121. Id: entityId,
  122. DocUrl: retDocUrl,
  123. }
  124. //再post调用接口,告诉服务器
  125. jsonByte, _ := json.Marshal(params)
  126. if docType == "data" {
  127. upfileRequest(httpUrl_Data, string(jsonByte), token)
  128. } else if docType == "report" {
  129. upfileRequest(httpUrl_Report, string(jsonByte), token)
  130. }
  131. } else if action == "cancel" {
  132. log.Println("取消操作: 准备备份文件-", fileName)
  133. localFile := basePath + "/" + docType + "/" + fileName
  134. _dirCancel := basePath + "/cancel"
  135. distFile := _dirCancel + "/" + docType + "_" + fileName
  136. if ret, _ := PathExists(_dirCancel); !ret {
  137. CreatePath(_dirCancel)
  138. }
  139. err := os.Rename(localFile, distFile)
  140. log.Println("备份文件err=", err)
  141. }
  142. }
  143. func upfileRequest(url string, params string, token string) {
  144. client := &http.Client{}
  145. req, err := http.NewRequest("POST", url, strings.NewReader(params))
  146. req.Header.Add("Content-Type", "application/json")
  147. req.Header.Add("Authorization", "Bearer "+token)
  148. resp, err := client.Do(req)
  149. if err != nil {
  150. log.Println("err= ", err)
  151. }
  152. log.Println("resp= ", resp)
  153. }