|
|
@@ -0,0 +1,168 @@
|
|
|
+// ofcmgr project main.go
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/base64"
|
|
|
+ "encoding/json"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "os"
|
|
|
+ "os/exec"
|
|
|
+ "path/filepath"
|
|
|
+ "runtime"
|
|
|
+ "strings"
|
|
|
+ "syscall"
|
|
|
+)
|
|
|
+
|
|
|
+type Params struct {
|
|
|
+ Id string
|
|
|
+ DocUrl string
|
|
|
+}
|
|
|
+
|
|
|
+//var httpUrl_Data string = "http://192.168.0.101:10091/api/limsdataentry/dataentrycallback"
|
|
|
+//var httpUrl_Report string = "http://192.168.0.101:10091/api/createreport/reporteditcallback"
|
|
|
+
|
|
|
+var httpUrl_Data string = "http://47.92.212.59:10091/api/limsdataentry/dataentrycallback"
|
|
|
+var httpUrl_Report string = "http://47.92.212.59:10091/api/createreport/reporteditcallback"
|
|
|
+var regFilePath string = "D:\\limsdoc\\petrotool.exe"
|
|
|
+var fileUpServer string = "weed1.labsop.cn:9333"
|
|
|
+var fileDownServer string = "weed1.labsop.cn:9390"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ //创建本地目录
|
|
|
+ var basePath string
|
|
|
+ if ret, _ := PathExists("D:/"); ret {
|
|
|
+ basePath = "d:/limsdoc"
|
|
|
+ } else {
|
|
|
+ basePath = "c:/limsdoc"
|
|
|
+ regFilePath = "c:\\limsdoc\\petrotool.exe"
|
|
|
+ }
|
|
|
+ if ret, _ := PathExists(basePath); !ret {
|
|
|
+ CreatePath(basePath)
|
|
|
+ }
|
|
|
+
|
|
|
+ //生成日志文件
|
|
|
+ //无参数运行,创建注册表
|
|
|
+ var logfile string
|
|
|
+ if len(os.Args) <= 1 {
|
|
|
+ logfile = "./log.txt"
|
|
|
+ } else {
|
|
|
+ logfile = basePath+"/log.txt"
|
|
|
+ }
|
|
|
+
|
|
|
+ file, err := os.OpenFile(logfile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
|
|
|
+ defer file.Close()
|
|
|
+ if err != nil {
|
|
|
+ panic("打开文件错误")
|
|
|
+ }
|
|
|
+ log.SetOutput(file)
|
|
|
+ log.SetFlags(log.Lmicroseconds | log.Ldate)
|
|
|
+
|
|
|
+ log.Println(os.Args)
|
|
|
+ //无参数运行,创建注册表
|
|
|
+ if len(os.Args) <= 1 {
|
|
|
+ file, err := exec.LookPath(os.Args[0])
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ path, err := filepath.Abs(file)
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ path = strings.Replace(path, "\\", "/", -1)
|
|
|
+ }
|
|
|
+ if _, err := Copy(path, regFilePath); err == nil {
|
|
|
+ log.Println("文件解压成功")
|
|
|
+ log.Println("")
|
|
|
+ //写注册表
|
|
|
+ registerOp(regFilePath)
|
|
|
+ } else {
|
|
|
+ log.Println("文件解压失败")
|
|
|
+ log.Println("安装失败,请通过右键,以管理员的身份运行,重试安装!")
|
|
|
+ }
|
|
|
+
|
|
|
+ log.Println("")
|
|
|
+ log.Println("")
|
|
|
+ log.Println("***安装成功后,当前位置的安装文件[petrotool.exe] 和 日志文件[log.txt]已无用,可直接删除***")
|
|
|
+
|
|
|
+ /*fmt.Println("")
|
|
|
+ fmt.Println("")
|
|
|
+ fmt.Println("请按回车键[ENTER]退出......")
|
|
|
+ var ret string
|
|
|
+ fmt.Scanln(&ret)*/
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ params := getParams(os.Args[1])
|
|
|
+ log.Println(params)
|
|
|
+ retUrlByte, err := base64.RawURLEncoding.DecodeString(params["furl"])
|
|
|
+ retUrl := string(retUrlByte)
|
|
|
+ log.Println("retUrl = ", retUrl)
|
|
|
+ log.Println("retUrl err = ", err)
|
|
|
+ fileNameByte, err := base64.RawURLEncoding.DecodeString(params["fname"])
|
|
|
+ fileName := string(fileNameByte)
|
|
|
+ log.Println("fileName = ", fileName)
|
|
|
+ log.Println("fileName err = ", err)
|
|
|
+
|
|
|
+ docType := params["doctype"]
|
|
|
+ entityId := params["id"]
|
|
|
+ action := params["act"]
|
|
|
+
|
|
|
+ if action == "edit" {
|
|
|
+ //localFileName := entityId + "_" + fileName
|
|
|
+ _dir := basePath + "/" + docType
|
|
|
+ //下载文件到本地目录
|
|
|
+ var downloadUrl string
|
|
|
+ if strings.Contains(retUrl, "http://") {
|
|
|
+ downloadUrl = retUrl
|
|
|
+ } else {
|
|
|
+ downloadUrl = "http://" + retUrl
|
|
|
+ }
|
|
|
+ log.Println("downloadUrl=", downloadUrl)
|
|
|
+ DownloadFile(downloadUrl, fileName, _dir)
|
|
|
+ if strings.Contains(runtime.GOOS, "windows") {
|
|
|
+ cmd := exec.Command("CMD", "/c", _dir+"/"+fileName)
|
|
|
+ cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
|
|
|
+ err := cmd.Start()
|
|
|
+ log.Println("打开文档: err = ", err)
|
|
|
+ }
|
|
|
+ } else if action == "up" {
|
|
|
+ token := params["token"]
|
|
|
+ //先上传文件
|
|
|
+ //localFileName := entityId + "_" + fileName
|
|
|
+ docPath := basePath + "/" + docType + "/" + fileName
|
|
|
+ retDocUrl, _ := uploadFile(docPath, fileUpServer, fileDownServer)
|
|
|
+ params := Params{
|
|
|
+ Id: entityId,
|
|
|
+ DocUrl: retDocUrl,
|
|
|
+ }
|
|
|
+ //再post调用接口,告诉服务器
|
|
|
+ jsonByte, _ := json.Marshal(params)
|
|
|
+ if docType == "data" {
|
|
|
+ upfileRequest(httpUrl_Data, string(jsonByte), token)
|
|
|
+ } else if docType == "report" {
|
|
|
+ upfileRequest(httpUrl_Report, string(jsonByte), token)
|
|
|
+ }
|
|
|
+ } else if action == "cancel" {
|
|
|
+ log.Println("取消操作: 准备备份文件-", fileName)
|
|
|
+ localFile := basePath + "/" + docType + "/" + fileName
|
|
|
+ _dirCancel := basePath + "/cancel"
|
|
|
+ distFile := _dirCancel + "/" + docType + "_" + fileName
|
|
|
+ if ret, _ := PathExists(_dirCancel); !ret {
|
|
|
+ CreatePath(_dirCancel)
|
|
|
+ }
|
|
|
+ err := os.Rename(localFile, distFile)
|
|
|
+ log.Println("备份文件err=", err)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func upfileRequest(url string, params string, token string) {
|
|
|
+ client := &http.Client{}
|
|
|
+ req, err := http.NewRequest("POST", url, strings.NewReader(params))
|
|
|
+ req.Header.Add("Content-Type", "application/json")
|
|
|
+ req.Header.Add("Authorization", "Bearer "+token)
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("err= ", err)
|
|
|
+ }
|
|
|
+ log.Println("resp= ", resp)
|
|
|
+}
|