ソースを参照

支持亿爵腾讯电子签新合同功能

zhou.xiaoning 1 年間 前
コミット
97a29e2d60

+ 1 - 1
config/config.xml

@@ -52,7 +52,7 @@
     <AppId value="yDwiuUUckpogfoa4UxhigrYChFMdSJQV"/>
     <ProxyOrganizationName value="天津麦顿"/>
     <ProxyOrganizationOpenId value="TJMD"/>
-    <ProxyOperatorOpenId value="TJMD01"/>
+    <ProxyOperatorOpenId value="TJMD_ADMIN"/>
     <SignToken value="D586D270A51448179277A11729F37D3E"/>
     <SignKey value="8774F484EA294C1E829EA6E2D7F99123"/>
   </Tencent>

+ 4 - 0
config/readme.md

@@ -87,6 +87,10 @@ SignKey 腾讯电子签密回调通知密钥,用于解密,使用公司账号
 
 ### 水贝亿爵正式环境
 
+OpenId
+SBYJ_LEGAL - 法人(蔡清锦)
+SBYJ_ADMIN - 管理员(郭远森)
+
 ```xml
 <Tencent>
   <Enabled value="1"/>

+ 0 - 21
controllers/tencent/qian.go

@@ -3,13 +3,11 @@ package tencent
 import (
 	"fmt"
 	"io"
-	SysConfig "mtp2_if/config"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
 	"mtp2_if/logger"
 	"mtp2_if/models"
 	"mtp2_if/services/tencent"
-	"mtp2_if/utils"
 	"net/http"
 
 	"github.com/gin-gonic/gin"
@@ -106,25 +104,6 @@ func QianNotice(c *gin.Context) {
 	}
 }
 
-// CreateConsoleLoginUrl 创建电子签控制台登录链接
-// @Summary  创建电子签控制台登录链接
-// @Produce  json
-// @Security ApiKeyAuth
-// @accept   application/json
-// @Success 200 {object} app.Response
-// @Failure  500 {object} app.Response
-// @Router   /Tencent/CreateConsoleLoginUrl [post]
-// @Tags     腾讯电子签
-func CreateConsoleLoginUrl(c *gin.Context) {
-	appG := app.Gin{C: c}
-
-	agent := utils.SetAgent()
-	proxyOrganizationName := SysConfig.SerCfg.TencentCfg.ProxyOrganizationName
-	response, _ := tencent.CreateConsoleLoginUrl(agent, proxyOrganizationName)
-
-	appG.Response(http.StatusOK, e.SUCCESS, *response.Response.ConsoleUrl)
-}
-
 type InitTencentESSReq struct {
 	UserId       int `json:"userId" binding:"required"`       // 用户ID
 	MemberUserId int `json:"memberUserId" binding:"required"` // 所属会员ID

+ 21 - 0
controllers/tencent/test.go

@@ -1,15 +1,36 @@
 package tencent
 
 import (
+	SysConfig "mtp2_if/config"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
 	"mtp2_if/logger"
 	"mtp2_if/services/tencent"
+	"mtp2_if/utils"
 	"net/http"
 
 	"github.com/gin-gonic/gin"
 )
 
+// CreateConsoleLoginUrl 创建电子签控制台登录链接
+// @Summary  创建电子签控制台登录链接
+// @Produce  json
+// @Security ApiKeyAuth
+// @accept   application/json
+// @Success 200 {object} app.Response
+// @Failure  500 {object} app.Response
+// @Router   /Tencent/CreateConsoleLoginUrl [post]
+// @Tags     腾讯电子签
+func CreateConsoleLoginUrl(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	agent := utils.SetAgent()
+	proxyOrganizationName := SysConfig.SerCfg.TencentCfg.ProxyOrganizationName
+	response, _ := tencent.CreateConsoleLoginUrl(agent, proxyOrganizationName)
+
+	appG.Response(http.StatusOK, e.SUCCESS, *response.Response.ConsoleUrl)
+}
+
 type GetTemplateInfoReq struct {
 	ContractName string `form:"contractName" binding:"required"` // 合同模块名称
 }

+ 39 - 8
services/tencent/ess.go

@@ -92,10 +92,23 @@ func CreateFlowByTemplateDirectly(tmplateName string, userType int,
 
 	// 此处为快速发起的签署方;如果是正式接入,构造签署方,请参考函数内说明,构造需要的场景参数
 	var flowApproverInfos []*essbasic.FlowApproverInfo
-	if userType == 1 {
-		flowApproverInfos = buildPersonApprovers(personName, personMobile, personIdCardNumber, recipients)
-	} else {
-		flowApproverInfos = buildOrganizationApprovers(organizationName, recipients)
+	for i := range recipients {
+		recipient := recipients[i]
+
+		if config.SerCfg.TencentCfg.ProxyOrganizationName == *recipient.RoleName &&
+			*recipient.SignType != 1 {
+			// 签署方为本企业,同时不是自动签署时(一般为甲方非自动签署)
+			flowApproverInfos = append(flowApproverInfos, buildSelfOrganizationApprovers(recipient)...)
+		} else {
+			// 乙方
+			if userType == 1 {
+				// 个人
+				flowApproverInfos = append(flowApproverInfos, buildPersonApprovers(personName, personMobile, personIdCardNumber, recipient)...)
+			} else {
+				// 企业
+				flowApproverInfos = append(flowApproverInfos, buildOrganizationApprovers(organizationName, recipient)...)
+			}
+		}
 	}
 
 	// 发起合同
@@ -232,7 +245,7 @@ func GetTemplateInfo(contractName *string) (templateInfo *essbasic.TemplateInfo,
 }
 
 // buildPersonApprovers 构造个人签署人 - 以BtoC为例, 实际请根据自己的场景构造签署方、控件
-func buildPersonApprovers(personName, personMobile, personIdCardNumber string, recipients []*essbasic.Recipient) []*essbasic.FlowApproverInfo {
+func buildPersonApprovers(personName, personMobile, personIdCardNumber string, recipient *essbasic.Recipient) []*essbasic.FlowApproverInfo {
 	var flowApproverInfos []*essbasic.FlowApproverInfo
 
 	// 传入个人签署方
@@ -244,7 +257,7 @@ func buildPersonApprovers(personName, personMobile, personIdCardNumber string, r
 	flowApproverInfo.IdCardType = utils.SetPointValue("ID_CARD")
 	flowApproverInfo.IdCardNumber = &personIdCardNumber
 	// 模板中对应签署方的参与方id
-	flowApproverInfo.RecipientId = recipients[0].RecipientId
+	flowApproverInfo.RecipientId = recipient.RecipientId
 
 	flowApproverInfos = append(flowApproverInfos, flowApproverInfo)
 
@@ -258,7 +271,7 @@ func buildPersonApprovers(personName, personMobile, personIdCardNumber string, r
 }
 
 // buildOrganizationApprovers 构造企业签署人
-func buildOrganizationApprovers(organizationName string, recipients []*essbasic.Recipient) []*essbasic.FlowApproverInfo {
+func buildOrganizationApprovers(organizationName string, recipient *essbasic.Recipient) []*essbasic.FlowApproverInfo {
 	var flowApproverInfos []*essbasic.FlowApproverInfo
 
 	// 传入企业签署方
@@ -267,7 +280,25 @@ func buildOrganizationApprovers(organizationName string, recipients []*essbasic.
 	flowApproverInfo.ApproverType = &approverType
 	flowApproverInfo.OrganizationName = &organizationName
 	// 模板中对应签署方的参与方id
-	flowApproverInfo.RecipientId = recipients[0].RecipientId
+	flowApproverInfo.RecipientId = recipient.RecipientId
+
+	flowApproverInfos = append(flowApproverInfos, flowApproverInfo)
+
+	return flowApproverInfos
+}
+
+// buildSelfOrganizationApprovers 构造本企业签署人
+func buildSelfOrganizationApprovers(recipient *essbasic.Recipient) []*essbasic.FlowApproverInfo {
+	var flowApproverInfos []*essbasic.FlowApproverInfo
+
+	// 传入企业签署方
+	flowApproverInfo := &essbasic.FlowApproverInfo{}
+	approverType := "ORGANIZATION"
+	flowApproverInfo.ApproverType = &approverType
+	flowApproverInfo.OrganizationOpenId = &config.SerCfg.TencentCfg.ProxyOrganizationOpenId // 本企业OpenID
+	// 模板中对应签署方的参与方id
+	flowApproverInfo.RecipientId = recipient.RecipientId
+	flowApproverInfo.OpenId = &config.SerCfg.TencentCfg.ProxyOperatorOpenId // 本企业员工OpenID
 
 	flowApproverInfos = append(flowApproverInfos, flowApproverInfo)
 

+ 1 - 0
services/tencent/essapi/DescribeTemplates.go

@@ -18,6 +18,7 @@ func DescribeTemplates(agent *essbasic.Agent, templateName *string) (response *e
 
 	// 实例化一个请求对象,每个接口都会对应一个request对象
 	request := essbasic.NewDescribeTemplatesRequest()
+	request.QueryAllComponents = utils.SetPointValue(true)
 
 	request.Agent = agent
 

BIN
services/tencent/templates/水贝亿爵/01 网签合同(含客户档案附件)-页尾签章(范文).docx


BIN
services/tencent/templates/水贝亿爵/01 网签合同(含客户档案附件)-页尾签章.docx