Explorar o código

电子签合同

wu hai 2 semanas
pai
achega
d26212cfae

+ 195 - 0
src/custom/restcontroller/webmanage/sale/contracttask/CompanyInfo.java

@@ -0,0 +1,195 @@
+package restcontroller.webmanage.sale.contracttask;
+
+public class CompanyInfo {
+
+    //合同编号
+    private String billno;
+    //营业执照名称
+    private String licensename;
+    //营业执照地址
+    private String licenseaddress;
+    //营销区域
+    private String areaname;
+    //任务金额
+    private String taskmoney;
+    //开始期限
+    private String begindate;
+    //结束期限
+    private String enddate;
+    //保证金
+    private String securitydeposit;
+    //税号
+    private String taxno;
+    //法人
+    private String legalrep;
+    //身份证号
+    private String idcard;
+    //电话
+    private String mobile;
+    //手机
+    private String phonenumber;
+    //售前电话
+    private String presalesphonenumber;
+    //售后电话
+    private String aftersalesphonenumber;
+    //备案汇款人
+    private String paymans;
+    //省
+    private String province;
+    //市
+    private String city;
+    //县
+    private String county;
+
+    public String getBillno() {
+        return billno;
+    }
+
+    public void setBillno(String billno) {
+        this.billno = billno;
+    }
+
+    public String getLicensename() {
+        return licensename;
+    }
+
+    public void setLicensename(String licensename) {
+        this.licensename = licensename;
+    }
+
+    public String getLicenseaddress() {
+        return licenseaddress;
+    }
+
+    public void setLicenseaddress(String licenseaddress) {
+        this.licenseaddress = licenseaddress;
+    }
+
+    public String getAreaname() {
+        return areaname;
+    }
+
+    public void setAreaname(String areaname) {
+        this.areaname = areaname;
+    }
+
+    public String getTaskmoney() {
+        return taskmoney;
+    }
+
+    public void setTaskmoney(String taskmoney) {
+        this.taskmoney = taskmoney;
+    }
+
+    public String getBegindate() {
+        return begindate;
+    }
+
+    public void setBegindate(String begindate) {
+        this.begindate = begindate;
+    }
+
+    public String getEnddate() {
+        return enddate;
+    }
+
+    public void setEnddate(String enddate) {
+        this.enddate = enddate;
+    }
+
+    public String getSecuritydeposit() {
+        return securitydeposit;
+    }
+
+    public void setSecuritydeposit(String securitydeposit) {
+        this.securitydeposit = securitydeposit;
+    }
+
+    public String getTaxno() {
+        return taxno;
+    }
+
+    public void setTaxno(String taxno) {
+        this.taxno = taxno;
+    }
+
+    public String getLegalrep() {
+        return legalrep;
+    }
+
+    public void setLegalrep(String legalrep) {
+        this.legalrep = legalrep;
+    }
+
+    public String getIdcard() {
+        return idcard;
+    }
+
+    public void setIdcard(String idcard) {
+        this.idcard = idcard;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getPhonenumber() {
+        return phonenumber;
+    }
+
+    public void setPhonenumber(String phonenumber) {
+        this.phonenumber = phonenumber;
+    }
+
+    public String getPresalesphonenumber() {
+        return presalesphonenumber;
+    }
+
+    public void setPresalesphonenumber(String presalesphonenumber) {
+        this.presalesphonenumber = presalesphonenumber;
+    }
+
+    public String getAftersalesphonenumber() {
+        return aftersalesphonenumber;
+    }
+
+    public void setAftersalesphonenumber(String aftersalesphonenumber) {
+        this.aftersalesphonenumber = aftersalesphonenumber;
+    }
+
+    public String getPaymans() {
+        return paymans;
+    }
+
+    public void setPaymans(String paymans) {
+        this.paymans = paymans;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getCounty() {
+        return county;
+    }
+
+    public void setCounty(String county) {
+        this.county = county;
+    }
+}

+ 26 - 16
src/custom/restcontroller/webmanage/sale/contracttask/EsignContractTaskMX.java

@@ -10,6 +10,7 @@ import common.Controller;
 import common.YosException;
 import common.annotation.API;
 import common.data.*;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.camunda.bpm.container.impl.deployment.Attachments;
@@ -296,10 +297,14 @@ public class EsignContractTaskMX extends Controller {
             return getErrReturnObject().setErrMsg("合同模板不存在").toString();
         }
 
+        String license_name = content.getStringValue("license_name");
+        String legal_rep = content.getStringValue("legal_rep");
+        String phonenumber = content.getStringValue("phonenumber");
+
         UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_esign_contract_taskmx");
         updateSQL.setSiteid(siteid);
         updateSQL.setUniqueid(sa_esign_contract_taskmxid);
-        updateSQL.setValue("license_name", content.getStringValue("license_name"));
+        updateSQL.setValue("license_name", license_name);
         updateSQL.setValue("taxno", content.getStringValue("taxno"));
         updateSQL.setValue("license_address", content.getStringValue("license_address"));
         updateSQL.setValue("legal_rep", content.getStringValue("legal_rep"));
@@ -322,24 +327,29 @@ public class EsignContractTaskMX extends Controller {
             throw new NullPointerException("签署人不能为空");
         }
         //构造签署人信息
-        FlowApproverInfo[] flowApproverInfos = WeChatByTemplate.BuildApprovers(Arrays.asList(recipients));
+        FlowApproverInfo[] flowApproverInfos = WeChatByTemplate.BuildApprovers(Arrays.asList(recipients), license_name, legal_rep,phonenumber);
+//        String organizationOpenId = DigestUtils.sha256Hex(license_name);
+        CompanyInfo companyInfo = new CompanyInfo();
+        companyInfo.setBillno("");
+        companyInfo.setLicensename(license_name);
+
 
         // 发起合同 样例为BtoC
         Map<String, String[]> resp = wccUtil.createFlowByTemplateDirectly(flowName
-                , templateId, flowApproverInfos);
+                , templateId, flowApproverInfos,WeChatConfig.SuperProxyOperatorOpenId,companyInfo);
         int count = WeChatConfig.COUNT;
         for (int i = 0; i < count; i++) {
-//            // 返回合同Id
-//            System.out.println("您创建的合同id为:");
-//            System.out.println(resp.get("FlowIds")[i]);
-//            // 返回签署的链接
-//            System.out.println("签署链接为:");
-//            System.out.println(resp.get("Urls")[i]);
-//            // Step 3 下载合同
-//            // 返回合同下载链接
-//            String url = WeChatContractUtil.describeFileUrls(resp.get("FlowIds")[i]);
-//            System.out.println("请访问以下地址下载您的合同:");
-//            System.out.println(url);
+            // 返回合同Id
+            System.out.println("您创建的合同id为:");
+            System.out.println(resp.get("FlowIds")[i]);
+            // 返回签署的链接
+            System.out.println("签署链接为:");
+            System.out.println(resp.get("Urls")[i]);
+            // Step 3 下载合同
+            // 返回合同下载链接
+            String url = WeChatContractUtil.describeFileUrls(resp.get("FlowIds")[i]);
+            System.out.println("请访问以下地址下载您的合同:");
+            System.out.println(url);
 
             updateSQL = SQLFactory.createUpdateSQL(this, "sa_esign_contract_taskmx");
             updateSQL.setSiteid(siteid);
@@ -418,7 +428,7 @@ public class EsignContractTaskMX extends Controller {
     public String agentsList3() throws YosException {
         Long sa_agentsid = content.getLongValue("sa_agentsid");
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_esign_contract_taskmx", "sa_esign_contract_taskmxid","archiveddate").setTableAlias("t1");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_esign_contract_taskmx", "sa_esign_contract_taskmxid", "archiveddate").setTableAlias("t1");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_esign_contract_task", "t2", "t2.sa_esign_contract_taskid=t1.sa_esign_contract_taskid",
                 "taskname", "year", "senddate", "remarks");
         querySQL.addJoinTable(JOINTYPE.inner, "sa_esign_contract_template", "t3", "t3.sa_esign_contract_templateid=t2.sa_esign_contract_templateid",
@@ -432,7 +442,7 @@ public class EsignContractTaskMX extends Controller {
         for (Row row : rows) {
             Long sa_esign_contract_taskmxid = row.getLong("sa_esign_contract_taskmxid");
             row.put("attinfos", attachmentsMap.getOrDefault(sa_esign_contract_taskmxid, new Rows()));
-            row.putIfAbsent("archiveddate","");
+            row.putIfAbsent("archiveddate", "");
         }
 
         return getSucReturnObject().setData(rows).toString();

+ 15 - 10
src/custom/restcontroller/webmanage/sale/contracttask/WeChatByTemplate.java

@@ -4,6 +4,7 @@ import com.tencentcloudapi.essbasic.v20210526.models.DescribeTemplatesResponse;
 import com.tencentcloudapi.essbasic.v20210526.models.FlowApproverInfo;
 import com.tencentcloudapi.essbasic.v20210526.models.FormField;
 import com.tencentcloudapi.essbasic.v20210526.models.Recipient;
+import org.apache.commons.codec.digest.DigestUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -11,7 +12,7 @@ import java.util.Optional;
 
 public class WeChatByTemplate {
     // 构造签署人 - 以B2B2C为例, 实际请根据自己的场景构造签署方、控件
-    public static FlowApproverInfo[] BuildApprovers(List<Recipient> recipients) {
+    public static FlowApproverInfo[] BuildApprovers(List<Recipient> recipients, String organizationName, String name, String phonenumber) {
 
         List<FlowApproverInfo> approvers = new ArrayList<>();
 
@@ -20,19 +21,18 @@ public class WeChatByTemplate {
         String personMobile = "*************";
 
         // 企业签署方参数
-        String organizationName = WeChatConfig.ProxyOrganizationName;
-        String organizationOpenId = WeChatConfig.ProxyOrganizationOpenId;
-        String openId = WeChatConfig.SuperProxyOperatorOpenId;
+//        String organizationOpenId = DigestUtils.sha256Hex(organizationName);
+//        String openId = DigestUtils.sha256Hex(name + phonenumber);
 
         for (Recipient recipient : recipients) {
             switch (recipient.getRecipientType()) {
                 case "ENTERPRISE":
                     // 另一家企业签署方
-                    approvers.add(BuildOrganizationApprover(organizationName, organizationOpenId, openId, recipient.getRecipientId()));
+                    approvers.add(BuildOrganizationApprover(organizationName, name, phonenumber, recipient.getRecipientId()));
                     break;
                 case "INDIVIDUAL":
                     // 个人签署方
-                    approvers.add(BuildPersonApprover(personName,personMobile, recipient.getRecipientId()));
+                    approvers.add(BuildPersonApprover(personName, personMobile, recipient.getRecipientId()));
                     break;
 
             }
@@ -61,8 +61,11 @@ public class WeChatByTemplate {
     }
 
     // 打包企业签署方参与者信息
-    public static FlowApproverInfo BuildOrganizationApprover(String organizationName, String organizationOpenId,
-                                                             String openId, String recipientId) {
+    public static FlowApproverInfo BuildOrganizationApprover(String organizationName, String name,
+                                                             String phonenumber, String recipientId) {
+
+        String organizationOpenId = DigestUtils.sha256Hex(organizationName);
+        String openId = DigestUtils.sha256Hex(name + phonenumber);
 
         // 签署参与者信息
         // 企业签署方
@@ -77,6 +80,8 @@ public class WeChatByTemplate {
         flowApproverInfo.setOpenId(openId);
 
         flowApproverInfo.setRecipientId(recipientId);
+        flowApproverInfo.setMobile(phonenumber);
+        flowApproverInfo.setName(name);
 
         return flowApproverInfo;
     }
@@ -99,11 +104,11 @@ public class WeChatByTemplate {
         DescribeTemplatesResponse templatesResponse = WeChatContractUtil.describeTemplates(WeChatContractUtil.setAgent(WeChatConfig.SuperProxyOperatorOpenId),
                 templateId);
 
-        return  Optional.ofNullable(templatesResponse).filter(template -> template.getTemplates().length > 0).
+        return Optional.ofNullable(templatesResponse).filter(template -> template.getTemplates().length > 0).
                 map(DescribeTemplatesResponse::getTemplates).map(rec -> rec[0].getRecipients()).orElse(null);
     }
 
-    public static FormField BuildFormField(String componentName, String componentValue){
+    public static FormField BuildFormField(String componentName, String componentValue) {
         FormField formField = new FormField();
         formField.setComponentName(componentName);
         formField.setComponentValue(componentValue);

+ 25 - 5
src/custom/restcontroller/webmanage/sale/contracttask/WeChatContractUtil.java

@@ -96,7 +96,7 @@ public class WeChatContractUtil {
 
 
     //查询模板列表
-    public DescribeTemplatesResponse getTemplateList(String proxyOperatorOpenId) throws TencentCloudSDKException {
+    public static DescribeTemplatesResponse getTemplateList(String proxyOperatorOpenId) throws TencentCloudSDKException {
         EssbasicClient client = initClient();
         //根据姓名和手机号生成唯一的经办人OpenId(SHA256哈希)
         DescribeTemplatesRequest req = new DescribeTemplatesRequest();
@@ -246,10 +246,10 @@ public class WeChatContractUtil {
      */
     public static Map<String, String[]> createFlowByTemplateDirectly(String flowName,
                                                                      String templateId,
-                                                                     FlowApproverInfo[] flowApproverInfos) {
+                                                                     FlowApproverInfo[] flowApproverInfos, String organizationOpenId, CompanyInfo companyInfo) {
         Map<String, String[]> resp = new HashMap<>();
         // 设置agent参数
-        Agent agent = setAgent(SuperProxyOperatorOpenId);
+        Agent agent = setAgent(organizationOpenId);
         // 创建签署流程
         // 签署数量
         int count = WeChatConfig.COUNT;
@@ -257,7 +257,27 @@ public class WeChatContractUtil {
         for (int i = 0; i < count; i++) {
             FlowInfos[i] = fillFlowInfo(templateId, flowName, flowApproverInfos);
             // 构建内容控件填充结构(根据自己需求使用)
-            FlowInfos[i].setFormFields(new FormField[]{BuildFormField("htbh", "123456")});
+            FlowInfos[i].setFormFields(new FormField[]{
+                    BuildFormField("billno", companyInfo.getBillno()),
+                    BuildFormField("licensename", companyInfo.getLicensename()),
+                    BuildFormField("licenseaddress", companyInfo.getLicenseaddress()),
+                    BuildFormField("areaname", companyInfo.getAreaname()),
+                    BuildFormField("taskmoney", companyInfo.getTaskmoney()),
+                    BuildFormField("begindate", companyInfo.getBegindate()),
+                    BuildFormField("enddate", companyInfo.getEnddate()),
+                    BuildFormField("securitydeposit", companyInfo.getSecuritydeposit()),
+                    BuildFormField("taxno", companyInfo.getTaxno()),
+                    BuildFormField("legalrep", companyInfo.getLegalrep()),
+                    BuildFormField("idcard", companyInfo.getIdcard()),
+                    BuildFormField("mobile", companyInfo.getMobile()),
+                    BuildFormField("phonenumber", companyInfo.getPhonenumber()),
+                    BuildFormField("presalesphonenumber", companyInfo.getPresalesphonenumber()),
+                    BuildFormField("aftersalesphonenumber", companyInfo.getAftersalesphonenumber()),
+                    BuildFormField("paymans", companyInfo.getPaymans()),
+                    BuildFormField("province", companyInfo.getProvince()),
+                    BuildFormField("city", companyInfo.getCity()),
+                    BuildFormField("county", companyInfo.getCounty())
+            });
 
         }
 
@@ -409,7 +429,7 @@ public class WeChatContractUtil {
     public static void main(String[] args) throws TencentCloudSDKException {
         String[] flowIds = {"yD3g7UUckpmzhmhtU1UyFt71fypQygwg"};
 
-        DescribeFlowDetailInfoResponse res = describeFlowDetailInfo(setAgent(SuperProxyOperatorOpenId), flowIds);
+        DescribeTemplatesResponse res = getTemplateList(SuperProxyOperatorOpenId);
 
         System.err.println(DescribeTemplatesResponse.toJsonString(res));
     }