sign.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package sign
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "mtp20access/global"
  7. "mtp20access/model/account"
  8. "mtp20access/model/account/request"
  9. "mtp20access/service/asign"
  10. "strconv"
  11. "time"
  12. "go.uber.org/zap"
  13. )
  14. // QueryUserESignRecord 查询用户电子签记录表
  15. func QueryUserESignRecord(userId int) (rsp []account.Useresignrecord, err error) {
  16. rsp = make([]account.Useresignrecord, 0)
  17. err = global.M2A_DB.Where("USERID = ?", userId).Find(&rsp)
  18. return
  19. }
  20. // AddUser 添加用户
  21. func AddUser(req request.AddUserReq, userId int) (err error) {
  22. // 调用爱签API-添加个人用户(https://{host}/user/addPersonalUser)
  23. rsp, err := asign.AddPersonalUserBy(
  24. strconv.Itoa(userId),
  25. req.Name,
  26. req.IdCard,
  27. req.Mobile,
  28. req.IdCardType,
  29. )
  30. if err != nil {
  31. return
  32. }
  33. if rsp.Code != 100000 {
  34. err = errors.New(strconv.Itoa(rsp.Code))
  35. global.M2A_LOG.Error("【AddUser】 接口调用失败", zap.Error(err))
  36. return
  37. }
  38. // 更新用户电子签记录-实名认证状态
  39. authinfo, err := json.Marshal(req)
  40. if err != nil {
  41. global.M2A_LOG.Error("【AddUser】 构建AUTHINFO失败", zap.Error(err))
  42. return
  43. }
  44. sql := fmt.Sprintf(`
  45. UPDATE useresignrecord
  46. SET RECORDSTATUS = 3,
  47. UPDATETIME = SYSDATE,
  48. AUTHINFO = '%v'
  49. WHERE USERID = %v
  50. `, string(authinfo), userId)
  51. if _, err = global.M2A_DB.Exec(sql); err != nil {
  52. global.M2A_LOG.Error("【AddUser】 添加用户电子签记录", zap.Error(err))
  53. return
  54. }
  55. return
  56. }
  57. // CreateContractAndAddSigner 上传待签署文件和添加签署方
  58. func CreateContractAndAddSigner(req request.CreateContractAndAddSignerReq, userId int) (err error) {
  59. // 获取用户电子签记录
  60. useresignrecord := new(account.Useresignrecord)
  61. has, err := global.M2A_DB.Where("USERID = ? AND TEMPLATENO = ?", userId, req.TemplateNo).Get(useresignrecord)
  62. if err != nil || !has {
  63. global.M2A_LOG.Error("【CreateContractAndAddSigner】 获取用户电子签记录失败", zap.Error(err))
  64. return
  65. }
  66. // 判断是否需要创建合同(上传待签署文件)
  67. if useresignrecord.CONTRACTNO == "" {
  68. // 生成合同编号
  69. // #{userid} || '_' || to_char(sysdate, 'yyyyMMddhh24miss') || '_' || seq_useresignrecord.currval,
  70. contractNo := fmt.Sprintf("%d_%s_%v", userId, time.Now().Format("2006-01-02 15:04:05"), useresignrecord.RECORDID)
  71. // 调用爱签API-上传待签署文件(https://{host}/contract/createContract)
  72. rsp, e := asign.CreateContract(
  73. contractNo,
  74. useresignrecord.TEMPLATENAME,
  75. useresignrecord.TEMPLATENO,
  76. )
  77. if e != nil {
  78. err = e
  79. return
  80. }
  81. if rsp.Code != 100000 {
  82. err = errors.New(strconv.Itoa(rsp.Code))
  83. global.M2A_LOG.Error("【CreateContractAndAddSigner】 上传待签署文件接口调用失败", zap.Error(err))
  84. return
  85. }
  86. // 将返回的合同编号写入数据库
  87. useresignrecord.CONTRACTNO = contractNo
  88. sql := fmt.Sprintf(`
  89. UPDATE useresignrecord
  90. SET SIGNURL = '%v'
  91. UPDATETIME = SYSDATE
  92. WHERE RECORDID = %v
  93. `, useresignrecord.CONTRACTNO, useresignrecord.RECORDID)
  94. if _, err = global.M2A_DB.Exec(sql); err != nil {
  95. global.M2A_LOG.Error("【CreateContractAndAddSigner】 写入合同编号失败", zap.Error(err))
  96. return
  97. }
  98. }
  99. // 判断是否需要添加签署方(获取合同签约地址)
  100. if useresignrecord.SIGNURL == "" {
  101. // 调用爱签API-添加签署方(https://{host}/contract/addSigner)
  102. rsp, e := asign.AddSigner(
  103. useresignrecord.CONTRACTNO,
  104. strconv.Itoa(userId),
  105. )
  106. if e != nil {
  107. err = e
  108. return
  109. }
  110. if rsp.Code != 100000 {
  111. err = errors.New(strconv.Itoa(rsp.Code))
  112. global.M2A_LOG.Error("【CreateContractAndAddSigner】 添加签署方接口调用失败", zap.Error(err))
  113. return
  114. }
  115. if len(rsp.Data.SignUser) > 0 {
  116. useresignrecord.SIGNURL = rsp.Data.SignUser[0].SignUrl
  117. }
  118. // 将返回的合同编号写入数据库
  119. sql := fmt.Sprintf(`
  120. UPDATE useresignrecord
  121. SET SIGNURL = '%v'
  122. UPDATETIME = SYSDATE
  123. WHERE RECORDID = %v
  124. `, useresignrecord.SIGNURL, useresignrecord.RECORDID)
  125. if _, err = global.M2A_DB.Exec(sql); err != nil {
  126. global.M2A_LOG.Error("【CreateContractAndAddSigner】 写入合同签署链接失败", zap.Error(err))
  127. return
  128. }
  129. }
  130. return
  131. }