zhou.xiaoning 2 anni fa
parent
commit
cb1edf93b1
2 ha cambiato i file con 47 aggiunte e 62 eliminazioni
  1. 1 1
      config.yaml
  2. 46 61
      service/sign/sign.go

+ 1 - 1
config.yaml

@@ -54,7 +54,7 @@ rabbitmq:
 # 爱签开放平台配置
 asign:
   url: 'https://prev.asign.cn/' # 测试环境 - https://prev.asign.cn/  正式环境 - https://oapi.asign.cn/
-  appId: '290912417'
+  appId: '290912417' # 测试-290912417 正式-944849860
   privateKey: 'MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAkMD+72J6iAF0ZNV+3t628lsRHfJ80nKZWK5/C7Pg+AZmOIzJlwHsKhRzCvxoxqYHQprhiFzW9l73v9vD9l1JYwIDAQABAkBVijccr01JYdKuY5t9iI8D2NzcnZc1pZMI3NUmzT18Uyg7b9CUvGHlLeg/gdT4QtVd7wIzHYCY4letEcEMh54BAiEAwzNWusj5XiLmty7PI0Hbakx4HtcND1+P0UHLEWqWOuECIQC91zQuL7nStgGzT3HvaeBB5Ouapa39fHRm2nCjHaxwwwIgRR2XdvmUOj23XWMomr5F14SN/7V7fVcD0D8wjNElsmECIDYavV5kb7tj7/wgqkInlKhzC8rZaUsTS0F9BBkY/eptAiAQJ8Saz8YlMIESdHMxANGSog01fECbcZqLFMuNf8SorA=='
   notifyUrl: 'http://218.17.158.45:15105/api/Account/HandleASignCompleted'
   openApiUrl: 'http://192.168.31.202:5015/mtp2-onlineopen'

+ 46 - 61
service/sign/sign.go

@@ -2,6 +2,7 @@ package sign
 
 import (
 	"bytes"
+	"encoding/base64"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -171,7 +172,6 @@ func SignCompleted(userId int) (err error) {
 		return
 	}
 
-	// mgk
 	var record *account.Useresignrecord
 	for i, item := range datas {
 		if item.TEMPLATETYPE == 1 {
@@ -185,60 +185,8 @@ func SignCompleted(userId int) (err error) {
 				global.M2A_LOG.Error("[SignCompleted] 查询合同状态失败", zap.Error(err))
 				return
 			}
-			if rspCTStatus.Data.Status == 2 {
-				// 已签约
-				// 下载合同
-				r, e := asign.DownloadContract(item.CONTRACTNO)
-				if e != nil {
-					err = e
-					return
-				}
-				if r.Code != 100000 {
-					err = errors.New(strconv.Itoa(r.Code))
-					global.M2A_LOG.Error("[SignCompleted] 下载合同接口调用失败", zap.Error(err))
-					return
-				}
-				if r.Data.Data != "" {
-					// 获取网上开户地址(用于客户端下载文件)
-					openconfig := account.Wskhopenaccountconfig{CONFIGID: 6}
-					has, e := openconfig.Get()
-					if e != nil || !has {
-						err = e
-						global.M2A_LOG.Error("[SignCompleted] 获取网上开户地址失败", zap.Error(err))
-						return
-					}
-					// 将Base64写入目标文件
-					uid, _ := uuid.NewV4()
-					fileName := fmt.Sprintf("%v.pdf", uid.String())
-					// openconfig.CONFIGVALUE = "./" // FIXME: - 测试代码
-					folderPath := "sign/" + time.Now().Format("20060102")
-					savePath := openconfig.CONFIGVALUE + "/uploadFile/" + folderPath
-					if exist, _ := utils.PathExists(savePath); !exist {
-						os.MkdirAll(savePath, os.ModePerm)
-					}
-					f, e := os.OpenFile(savePath+"/"+fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
-					if e != nil {
-						err = e
-						global.M2A_LOG.Error("【HandleASignCompleted】 获取网上开户地址失败", zap.Error(err))
-						return
-					}
-					defer f.Close()
-
-					// 更新数据库记录
-					contractfileaddr := fmt.Sprintf("./uploadFile/%v/%v", folderPath, fileName)
-					sql := fmt.Sprintf(`
-						UPDATE useresignrecord
-						SET RECORDSTATUS = 3,
-							UPDATETIME = SYSDATE,
-							CONTRACTFILEADDR = '%v'
-						WHERE CONTRACTNO = '%v'  
-					`, contractfileaddr, item.CONTRACTNO)
-					if _, err = global.M2A_DB.Exec(sql); err != nil {
-						global.M2A_LOG.Error("【HandleASignCompleted】 更新用户电子签记录失败", zap.Error(err))
-						return
-					}
-				}
-			}
+			// 下载合同并修改合同状态
+			err = modifyContractStatus(rspCTStatus.Data.ContractNo, strconv.Itoa(rspCTStatus.Data.Status))
 		} else if item.RECORDSTATUS != 3 && item.RECORDSTATUS != 2 {
 			err = errors.New("未完成所有合同签署")
 			global.M2A_LOG.Error(err.Error())
@@ -340,7 +288,28 @@ func HandleASignCompleted(contractNo, status string) (err error) {
 		global.M2A_LOG.Error("【HandleASignCompleted】 获取获取合同状态失败")
 		return
 	}
+	// 下载合同并修改合同状态
+	err = modifyContractStatus(contractNo, status)
+
+	return
+}
+
+// modifyContractStatus 爱签异步推送和查询合同状态后调用
+func modifyContractStatus(contractNo, status string) (err error) {
 	if status == "2" {
+		// 获取用户电子签记录
+		useresignrecord := new(account.Useresignrecord)
+		has, e := global.M2A_DB.Where("CONTRACTNO = ?", contractNo).Get(useresignrecord)
+		if e != nil || !has {
+			err = e
+			global.M2A_LOG.Error("【modifyContractStatus】 获取用户电子签记录失败", zap.Error(err))
+			return
+		}
+		if useresignrecord.RECORDSTATUS == 3 {
+			// 已完成签署,不需要再下载和修改数据库状态
+			return
+		}
+
 		// 已签约
 		// 下载合同
 		r, e := asign.DownloadContract(contractNo)
@@ -350,7 +319,7 @@ func HandleASignCompleted(contractNo, status string) (err error) {
 		}
 		if r.Code != 100000 {
 			err = errors.New(strconv.Itoa(r.Code))
-			global.M2A_LOG.Error("【HandleASignCompleted】 下载合同接口调用失败", zap.Error(err))
+			global.M2A_LOG.Error("【modifyContractStatus】 下载合同接口调用失败", zap.Error(err))
 			return
 		}
 		if r.Data.Data != "" {
@@ -359,7 +328,7 @@ func HandleASignCompleted(contractNo, status string) (err error) {
 			has, e := openconfig.Get()
 			if e != nil || !has {
 				err = e
-				global.M2A_LOG.Error("【HandleASignCompleted】 获取网上开户地址失败", zap.Error(err))
+				global.M2A_LOG.Error("【modifyContractStatus】 获取网上开户地址失败", zap.Error(err))
 				return
 			}
 			// 将Base64写入目标文件
@@ -371,13 +340,16 @@ func HandleASignCompleted(contractNo, status string) (err error) {
 			if exist, _ := utils.PathExists(savePath); !exist {
 				os.MkdirAll(savePath, os.ModePerm)
 			}
-			f, e := os.OpenFile(savePath+"/"+fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
+			fb, e := base64.StdEncoding.DecodeString(r.Data.Data)
 			if e != nil {
 				err = e
-				global.M2A_LOG.Error("【HandleASignCompleted】 获取网上开户地址失败", zap.Error(err))
+				global.M2A_LOG.Error("【modifyContractStatus】 解码pdf文件失败", zap.Error(err))
+				return
+			}
+			if err = os.WriteFile(savePath+"/"+fileName, fb, 0666); err != nil {
+				global.M2A_LOG.Error("【modifyContractStatus】 保存合同失败", zap.Error(err))
 				return
 			}
-			defer f.Close()
 
 			// 更新数据库记录
 			contractfileaddr := fmt.Sprintf("./uploadFile/%v/%v", folderPath, fileName)
@@ -389,10 +361,23 @@ func HandleASignCompleted(contractNo, status string) (err error) {
 				WHERE CONTRACTNO = '%v'  
 			`, contractfileaddr, contractNo)
 			if _, err = global.M2A_DB.Exec(sql); err != nil {
-				global.M2A_LOG.Error("【HandleASignCompleted】 更新用户电子签记录失败", zap.Error(err))
+				global.M2A_LOG.Error("【modifyContractStatus】 更新用户电子签记录失败", zap.Error(err))
 				return
 			}
 		}
+	} else {
+		// 其它状态一律改为4(签署拒绝)
+		// 更新数据库记录
+		sql := fmt.Sprintf(`
+			UPDATE useresignrecord
+			SET RECORDSTATUS = 4,
+				UPDATETIME = SYSDATE
+			WHERE CONTRACTNO = '%v'  
+		`, contractNo)
+		if _, err = global.M2A_DB.Exec(sql); err != nil {
+			global.M2A_LOG.Error("【HandleASignCompleted】 更新用户电子签记录失败", zap.Error(err))
+			return
+		}
 	}
 
 	return