| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- // 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)
- }
|