|
|
@@ -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
|