package com.malk.ruisi.service.impl; import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.malk.ruisi.service.QysService; import com.malk.ruisi.service.RsQysService; import com.malk.ruisi.service.dingshiqi; import com.malk.server.aliwork.YDConf; import com.malk.server.aliwork.YDParam; import com.malk.server.common.McException; import com.malk.server.common.McR; import com.malk.server.dingtalk.DDConf; import com.malk.service.aliwork.YDClient; import com.malk.utils.UtilHttp; import com.malk.utils.UtilMap; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.tomcat.util.http.fileupload.FileUtils; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import static com.malk.ruisi.constant.QysConstant.QYS_SUCCESS_CODE; @Service @Slf4j public class RsQysServiceImpl implements RsQysService { @Autowired private QysService qysService; @Autowired private YDClient ydClient; @Autowired private YDConf ydConf; @Autowired private QysService QYSService; @Autowired private DDConf ddConf; @Value("${qiyuesuo.bdurl}") private String BDURL; @Value("${qiyuesuo.pdfbdurl}") private String PDFBDURL; @Value("${qiyuesuo.url}") private String URL; private String getCust(String type, String key) throws Exception { Map map = UtilMap.empty(); if (type.equals("FORM-55D56A69CCCE4043A01660C8910E33BAQ4N0")) { // 合同用印 组件编号 map.put("subject", "textField_ltsbwegw");//合同名称 map.put("sn", "serialNumberField_ltsbweh2");//合同编号 map.put("tenantName", "textField_lvz1kozf");//公司名称 map.put("tenantName1", "textField_lznvplmm");//印章公司id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lu0u6npd");//物理印章关联表单 map.put("categoryId", "textField_lvm5xmqe");//业务分类Id map.put("contractId", "textField_lwah8x72");//合同Id map.put("categoryName", "textField_lvz1kozg");//业务分类名称 map.put("fujian", "attachmentField_ltsbweir");//附件 map.put("fujian1", "attachmentField_m1gebrx1");//附件 map.put("creatorName", "employeeField_ltsbwefl");//创建人姓名 map.put("applyerNumber", "textField_lwebkb16");//创建人员工编号 map.put("sealName", "textField_lvw4umfr");//授权印章名称 map.put("sealId", "textField_m0dh8wmp");//印章id map.put("count", "numberField_ltwa0vj6");//授权次数 map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("tenantNameP", "textField_ltwa0vke");//对方个人签署人姓名 map.put("contactP", "textField_ltwa0vkf");//对方个人签署人联系电话 map.put("tenantNameA", "textField_ltwa0vk0");//对方公司名称 map.put("receiverNameA", "textField_ltwa0vk1");//对方公司签署人名称 map.put("contactA", "textField_ltwa0vk2");//对方公司签署人联系电话 } else if (type.equals("FORM-82E566F8576E44D3AB4B34033A27E76FEB75")) { // CG11-框架采购订单 map.put("subject", "textField_ltsbwef0");//合同名称 map.put("sn", "serialNumberField_ltsbweh2");//合同编号 map.put("tenantName", "textField_lvz1kozf");//公司名称 map.put("tenantName1", "textField_lznvplmm");//印章公司id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lu0u6npd");//物理印章关联表单 map.put("categoryId", "textField_lvm5xmqe");//业务分类Id map.put("contractId", "textField_lwah8x72");//合同Id map.put("categoryName", "textField_lvz1kozg");//业务分类名称 map.put("fujian", "attachmentField_ltsbweis");//附件 map.put("creatorName", "employeeField_ltsbwefl");//创建人姓名 map.put("applyerNumber", "textField_lwebkb16");//创建人员工编号 map.put("sealName", "textField_lvw4umfr");//授权印章名称 map.put("sealId", "textField_m0dh8wmp");//印章id map.put("count", "numberField_ltwa0vj6");//授权次数 map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("tenantNameP", "textField_ltwa0vke");//对方个人签署人姓名 map.put("contactP", "textField_ltwa0vkf");//对方个人签署人联系电话 map.put("tenantNameA", "textField_ltwa0vk0");//对方公司名称 map.put("receiverNameA", "textField_ltwa0vk1");//对方公司签署人名称 map.put("contactA", "textField_ltwa0vk2");//对方公司签署人联系电话 } else if (type.equals("FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO")) { // 框架类用印 map.put("subject", "textField_lvz8coad");//合同名称 map.put("sn", "serialNumberField_lvz8coae");//合同编号 map.put("tenantName", "textField_lvza5uwu");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("tenantName1", "textField_lznvplmm");//印章公司名称 map.put("glbd", "associationFormField_lvz8coby");//物理印章关联表单 map.put("categoryId", "textField_lvz8cobe");//业务分类Id map.put("contractId", "textField_lwg205ug");//合同Id map.put("categoryName", "textField_lvz8cobd");//业务分类名称 map.put("fujian", "attachmentField_lvz8cocl");//附件 map.put("fujian1", "attachmentField_m11gqbly");//附件 map.put("creatorName", "employeeField_lvz8co98");//创建人姓名 map.put("applyerNumber", "textField_lweccz0q");//创建人员工编号 map.put("sealName", "textField_lwelg27e");//授权印章名称 map.put("sealId", "textField_m0dhf7ph");//印章id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("count", "numberField_lvz8cobz");//授权次数 map.put("tenantNameP", "textField_lvz8cocg");//对方个人签署人姓名 map.put("contactP", "textField_lvz8coce");//对方个人签署人联系电话 map.put("tenantNameA", "textField_lvz8coc5");//对方公司名称 map.put("receiverNameA", "textField_lvz8coc6");//对方公司签署人名称 map.put("contactA", "textField_lvz8coc7");//对方公司签署人联系电话 } else if (type.equals("FORM-B27C1AE7298648F29E836B5FDF469DBDPFCK")) { // 其他用印 map.put("subject", "textField_ltwktal4");//合同名称 map.put("sn", "serialNumberField_ltwktal5");//合同编号 map.put("tenantName", "textField_lvz45lif");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("tenantName1", "textField_lznvplmm");//印章公司名称 map.put("categoryId", "textField_lvz45lii");//业务分类Id map.put("glbd", "associationFormField_lu0w0l7x");//物理印章关联表单 map.put("contractId", "textField_lwg1z6hk");//合同Id map.put("applyerNumber", "textField_lwelap55");//创建人员工编号 map.put("sealName", "textField_lx1gzqai");//授权印章名称 map.put("sealId", "textField_m0dhpgjr");//印章id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("count", "numberField_ltwktalp");//授权次数 map.put("categoryName", "textField_lvz45lih");//业务分类名称 map.put("fujian", "attachmentField_ltwktamq");//附件 map.put("fujian1", "attachmentField_ltwktamr");//附件 // map.put("creatorName", "employeeField_ltwktal6");//创建人姓名 // map.put("creatorContact", "textField_ltsbwef1");//创建人联系方式 // map.put("receiverNameP", "textField_ltwa0vke");//对方个人签署人姓名 // map.put("contactP", "textField_ltwa0vkf");//对方个人签署人联系电话 // map.put("tenantNameA", "textField_ltwa0vk0");//对方公司名称 // map.put("receiverNameA", "textField_ltwa0vk1");//对方公司签署人名称 // map.put("contactA", "textField_ltwa0vk2");//对方公司签署人联系电话 } else if (type.equals("FORM-FCDDD18FD63E49B2A4C652FBDB1874F6DPHW")) { // 租赁类用印 组件编号 map.put("subject", "textField_ltwcj54k");//合同名称 map.put("sn", "serialNumberField_ltwcj54l");//合同编号 map.put("tenantName", "textField_lvz3j6lq");//公司名称 map.put("tenantName1", "textField_lznvplmm");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lu0vkwu7");//物理印章关联表单 map.put("categoryId", "textField_lvz3j6ls");//业务分类Id map.put("contractId", "textField_lwg1wbix");//合同Id map.put("sealName", "textField_lwel4lyr");//授权印章名称 map.put("sealId", "textField_m0dhqv5m");//印章id map.put("count", "numberField_ltwe0wyo");//授权次数 map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("categoryName", "textField_ltwe0wyb");//业务分类名称 map.put("fujian", "attachmentField_ltwe0wyz");//附件 map.put("creatorName", "employeeField_ltwcj52j");//创建人姓名 map.put("applyerNumber", "textField_lwel4lyq");//创建人员工编号 // map.put("creatorContact", "textField_ltsbwef1");//创建人联系方式 map.put("tenantNameP", "textField_ltwe0wyw");//对方个人签署人姓名 map.put("contactP", "textField_ltwe0wyx");//对方个人签署人联系电话 map.put("tenantNameA", "textField_ltwe0wyq");//对方公司名称 map.put("receiverNameA", "textField_ltwe0wyr");//对方公司签署人名称 map.put("contactA", "textField_ltwe0wys");//对方公司签署人联系电话 } else if (type.equals("FORM-53A0FB8715FB4378B0708794DFAF7089SV8P")) { // 加盟签约 map.put("subject", "textField_ltrzli9n");//合同名称 map.put("sn", "serialNumberField_ltsaig24");//合同编号 map.put("tenantName", "textField_lybee634");//公司名称 map.put("categoryId", "textField_lw4tkat0");//业务分类Id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lwso6sgd");//物理印章关联表单 map.put("fujian", "attachmentField_luhu041t");//附件 // map.put("creatorName", "employeeField_ltrzli8r");//创建人姓名 map.put("categoryName", "textField_lvz1kozg");//业务分类名称 map.put("tenantNameP", "textField_lts1g8sc");//对方个人签署人姓名 map.put("applyerNumber", "textField_lybee62y");//创建人员工编号 map.put("sealName", "textField_lybee635");//授权印章名称 map.put("count", "numberField_lts1g8r9");//授权次数 map.put("contactP", "textField_lts1g8sd");//对方个人签署人联系电话 map.put("tenantNameA", "textField_lts1g8rs");//对方公司名称 map.put("receiverNameA", "textField_lts1g8ru");//对方公司签署人名称 map.put("contactA", "textField_lts1g8rt");//对方公司签署人联系电话 } else if (type.equals("FORM-88F968E75CC340EB91B1AC692F4184DC9I9W")) { // 合同/申购流程 map.put("subject", "textField_lu7ycpub");//合同名称 map.put("sn", "serialNumberField_lu7ycpuc");//合同编号 map.put("tenantName", "textField_lygvcsw5");//公司名称textField_lu81zom2 map.put("tenantName1", "textField_lznvplmm");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lwrmm4p7");//物理印章关联表单 map.put("categoryId", "textField_lw05x5rm");//业务分类Id map.put("contractId", "textField_lwg219kl");//合同Id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("categoryName", "textField_lwa2350q");//业务分类名称 map.put("fujian", "attachmentField_lu81zomp");//附件 map.put("applyerNumber", "textField_lwelmmkr");//创建人员工编号 map.put("sealName", "textField_lwelmmks");//授权印章名称 map.put("sealId", "textField_m0dhtx3s");//印章id map.put("count", "numberField_lual6ol8");//授权次数 // map.put("creatorName", "employeeField_ltsbwefl");//创建人姓名 // map.put("creatorContact", "textField_ltsbwef1");//创建人联系方 map.put("tenantNameP", "textField_ltwa0vke");//对方个人签署人姓名 map.put("contactP", "textField_ltwa0vkf");//对方个人签署人联系电话 map.put("tenantNameA", "textField_lu81zomd");//对方公司名称 map.put("receiverNameA", "textField_lu81zome");//对方公司签署人名称 map.put("contactA", "textField_lu81zomf");//对方公司签署人联系电话 } else if (type.equals("FORM-54972289A0B7416287A9BA44DA6CCDC50QUC")) { // HR用印 map.put("subject", "textField_lu9euh7n");//合同名称 map.put("sn", "serialNumberField_lu9euh7o");//合同编号 map.put("tenantName", "textField_lvzz59hk");//公司名称 map.put("tenantName1", "textField_lznvplmm");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("glbd", "associationFormField_lu9euh8b");//物理印章关联表单 map.put("categoryId", "textField_lvzz59hn");//业务分类Id map.put("contractId", "textField_lwg22nvj");//合同Id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("categoryName", "textField_lvzz59hm");//业务分类名称 map.put("applyerNumber", "textField_lweezm68");//创建人员工编号 map.put("sealName", "textField_lweezm69");//授权印章名称 map.put("sealId", "textField_m0dhwqon");//印章id map.put("count", "numberField_lu9euh8c");//授权次数 map.put("fujian", "attachmentField_lzvac8lu");//附件 map.put("fujian1", "attachmentField_lzv9up2n");//附件1 } else if (type.equals("FORM-0D501EF1688247DC932E7784298BD46BRYHC")) { // 新签劳动合同/协议 map.put("subject", "textField_luauhgb4");//合同名称 map.put("sn", "serialNumberField_luauhgb5");//合同编号 map.put("tenantName", "textField_lw4rpz1w");//公司名称 map.put("categoryId", "textField_lw4rpz1x");//业务分类Id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("contractId", "textField_lwg241g6");//合同Id map.put("jf", "textField_lwk0stof");//甲方名称 map.put("txdz", "textField_lup3q6ke");//甲方通讯地址 map.put("yf", "textField_lup3q6kf");//乙方 map.put("sjhm", "textField_lup3q6kg");//乙方手机号码 map.put("syqksrq", "dateField_lup3q6kv");//试用期开始日期 map.put("syqjsrq", "dateField_lup3q6kw");//试用期结束日期 map.put("ldhtksrq", "dateField_lup3q6kx");//劳动合同开始日期 map.put("ldhtjsrq", "dateField_lup3q6ky");//劳动合同结束日期 map.put("gzdd", "textField_lup3q6kk");//工作地点 map.put("yftgfw", "textField_lup3q6kh");//乙方提供服务 map.put("xchsgz", "selectField_lup3q6ki");//薪酬核算规则 map.put("dyzmtbc", "numberField_lup3q6kj");//报酬金额 map.put("dyzarksrq", "dateField_lup3q6kl");//开始日期 map.put("dyzarjsrq", "dateField_lup3q6km");//结束日期 map.put("contractId", "textField_lwg241g6");//合同Id map.put("categoryName", "textField_lwa1xm1p");//业务分类名称 map.put("tenantNameP", "textField_lup3q6kf");//对方个人签署人姓名 map.put("contactP", "textField_lup3q6kg");//对方个人签署人联系电话 } else if (type.equals("FORM-3E04D5456B2341CCBA62C955B791CF45IAH1")) { // 发文审批用印 map.put("subject", "textField_ltwmutnp");//合同名称 map.put("sn", "serialNumberField_ltwmutno");//合同编号 map.put("tenantName", "textField_lw044nmp");//公司名称 map.put("tenantName1", "textField_lznvplmm");//公司名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("categoryId", "textField_lw044nmr");//业务分类Id map.put("glbd", "associationFormField_lu6mvmik");//物理印章关联表单 map.put("contractId", "textField_lwg251gn");//合同Id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("categoryName", "textField_ltwmutoc");//业务分类名称 map.put("applyerNumber", "textField_lweluap2");//创建人员工编号 map.put("sealName", "textField_lweluap3");//授权印章名称 map.put("sealId", "textField_m0dhyj02");//印章id map.put("count", "numberField_ltwmutow");//授权次数 map.put("fujian", "attachmentField_ltwmutq4");//附件 } else if (type.equals("FORM-87BD065161F84560B999FE94713255E20E6E")) { //印章授权&承诺书 map.put("subject", "textField_ltwp3e43");//合同名称 map.put("sn", "serialNumberField_ltwp3e44");//合同编号 map.put("tenantName", "textField_lw04hhp1");//公司名称 map.put("categoryId", "textField_lw04hhp3");//业务分类Id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("contractId", "textField_lwg260n6");//合同Id map.put("mobile", "textField_lwzqvg93");//授权人手机号 map.put("categoryName", "textField_lwa29saw");//业务分类名称 map.put("fujian", "attachmentField_ltwp3e4g");//附件 map.put("tenantNameP", "textField_lw93mjk9");//授权人姓名 map.put("contactP", "textField_ltwp3e4d");//授权人联系电话 map.put("tenantNameA", "textField_lw93mjka");//被授权人姓名 map.put("contactA", "textField_ltwp3e4f");//被授权人联系电话 }else if (type.equals("FORM-040619C0CE6744EDA4154B4BBBF1843F49JY")) { //hz06定调价 map.put("subject", "textField_ltrzli9n");//合同名称 map.put("sn", "serialNumberField_ltse8sos");//合同编号 map.put("tenantName", "textField_mayy2yf8");//公司名称 map.put("categoryName", "textField_mayy2yf8");//公司名称 map.put("contractId", "textField_lwg1z6hk");//公司名称 map.put("categoryId", "textField_lvz45lii");//业务分类Id map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("sealName", "textField_lx1gzqai");//授权印章名称 map.put("sealId", "textField_m0dhpgjr");//印章id } else if (type.equals("FORM-FD73905FB9C24E3A99244F901D9C98AFH4E6")) { //合同续签流程 map.put("subject", "textField_lu991xi2");//合同名称 map.put("sn", "serialNumberField_lu991xi3");//合同编号 map.put("tenantName", "textField_lvz1kozf");//公司名称 map.put("categoryId", "textField_lvm5xmqe");//业务分类Id map.put("categoryName", "textField_lvz1kozg");//业务分类名称 map.put("creatorName", "textField_lzpdjzfp");//创建人名称 map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 map.put("contact", "textField_lu991xih");//续签人手机号码 map.put("contractId", "textField_lwah8x72");//合同Id map.put("jf", "textField_lvz1kozf");//公司主体名称 map.put("sfzh", "textField_lu991xig");//续签人身份证号码 map.put("xm", "textField_lzkz3mkq");//续签人姓名 map.put("htkssj", "dateField_lu991xii");//合同开始时间 map.put("htjssj", "dateField_lu991xij");//合同结束时间 map.put("xdqxkssj", "dateField_lu991xim");//续订期限开始时间 map.put("xdqxjzsj", "dateField_lu991xin");//续订期限结束时间 map.put("zfjjbcjrq", "dateField_lzl3nrxf");//续订期限结束时间 map.put("jjbcj", "numberField_lzl3nrxg");//续订期限结束时间 } else if (type.equals("FORM-4C410326630D4B498A1410EFBBEFE8EAORL5")) { //HZ04-合作校区警示/解约函 map.put("subject", "textField_m0yoek7p");//合同名称 map.put("sn", "serialNumberField_m0yoek7q");//合同编号 map.put("tenantName", "textField_m0z328xq");//公司名称 map.put("glbd", "associationFormField_m0yx25he");//物理印章关联表单 map.put("count", "numberField_m0yx25hf");//盖章次数 // map.put("categoryName", "textField_lvz1kozg");//业务分类名称 // map.put("creatorName", "textField_lzpdjzfp");//创建人名称 // map.put("creatorName", "textField_lzpdjzfp");//创建人名称 // map.put("creatorContact", "textField_lzpdjzfq");//创建人手机号 } else { throw new Exception(); } return map.get(key); } //todo 待完善 @Override public McR createByFile(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); String categoryName = data.get(getCust(type, "categoryName")).toString(); //把文件下载到本地路径 ,并获取到文档ID List documentId = new ArrayList<>(); if (!type.equals("FORM-FD73905FB9C24E3A99244F901D9C98AFH4E6")) { documentId = createbyfile(data, type); } //定义参数 创建合同草稿 JSONObject obj = new JSONObject(); // obj.put("subject",data.get("textField_ltsbwef0"));//合同名称 obj.put("subject", data.get(getCust(type, "subject")).toString());//合同名称 obj.put("creatorName", data.get(getCust(type, "creatorName")).toString());//发起人姓名 obj.put("creatorContact", data.get(getCust(type, "creatorContact")).toString());//发起人联系方式 // obj.put("sn",data.get("serialNumberField_ltsbweh2"));//合同编号流水号 obj.put("sn", data.get(getCust(type, "sn")));//合同编号流水号 obj.put("tenantName", data.get(getCust(type, "tenantName")));//发起方公司名称 obj.put("categoryId", data.get(getCust(type, "categoryId")));//业务分类Id data.get("textField_lvm5xmqe") if (!type.equals("FORM-FD73905FB9C24E3A99244F901D9C98AFH4E6")) { if (documentId != null) { obj.put("documents", documentId);//文档ID } } if (categoryName.equals("劳动合同") || categoryName.equals("校区劳动合同") ) { obj.put("send", true); } else if (categoryName.equals("校区劳务协议") || categoryName.equals("劳务协议")) { obj.put("send", true); } else { obj.put("send", false);// 是否发起合同;发起合同后不能再进行添加文档、指定签署位置等操作 } //签署人数据 JSONArray array = new JSONArray(); JSONArray array1 = new JSONArray(); if (categoryName.equals("多方电子用印(个人)(我方先签)") || categoryName.equals("我方电子对方物理(个人)(我方先签)")) { array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); } else if (categoryName.equals("我方电子对方物理(企业)(我方先签)") || categoryName.equals("多方电子用印(企业)(我方先签)")) { array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); array.add(getCompSignatory(data.get(getCust(type, "tenantNameA")).toString(), data.get(getCust(type, "contactA")).toString(), data.get(getCust(type, "receiverNameA")).toString())); } else if (categoryName.equals("我方电子对方物理(企业&个人)(我方先签)") || categoryName.equals("多方电子用印(企业&个人)(我方先签)")) { array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); array.add(getCompSignatory(data.get(getCust(type, "tenantNameA")).toString(), data.get(getCust(type, "contactA")).toString(), data.get(getCust(type, "receiverNameA")).toString())); array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); } else if (categoryName.equals("我方电子对方物理(个人)") || categoryName.equals("多方电子用印(个人)(对方先签)") || categoryName.equals("劳动合同") || categoryName.equals("校区劳务协议") || categoryName.equals("校区劳动合同") || categoryName.equals("劳务协议") || categoryName.equals("续签(固定几年)") || categoryName.equals("续签(无固定期限)") || categoryName.equals("续签(员工合同到期公司不再与员工续签)") || categoryName.equals("续签(员工合同到期员工本人不愿意与公司续签时签订)") || categoryName.equals("解除劳动合同") ) { array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); } else if (categoryName.equals("我方电子对方物理(企业)") || categoryName.equals("多方电子用印(企业)(对方先签)")) { array.add(getCompSignatory(data.get(getCust(type, "tenantNameA")).toString(), data.get(getCust(type, "contactA")).toString(), data.get(getCust(type, "receiverNameA")).toString())); array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); } else if (categoryName.equals("我方电子对方物理(企业&个人)") || categoryName.equals("多方电子用印(企业&个人)(对方先签)")) { array.add(getCompSignatory(data.get(getCust(type, "tenantNameA")).toString(), data.get(getCust(type, "contactA")).toString(), data.get(getCust(type, "receiverNameA")).toString())); array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); } else if (categoryName.equals("内部企业单签") || categoryName.equals("默认业务分类")) { array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); } else if (categoryName.equals("印章保管授权&承诺书")) { array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); array.add(getPeopSignatory(data.get(getCust(type, "tenantNameA")).toString(), data.get(getCust(type, "contactA")).toString())); } else if (categoryName.equals("物理用印外带场景") || categoryName.equals("物理用印公司用印场景")) { String glbdjson = data.get(getCust(type, "glbd") + "_id").toString(); String sealjson = StringEscapeUtils.unescapeJava(glbdjson.substring(1, glbdjson.length() - 1)); List sealjsonlist = (List) JSONArray.parse(sealjson); for (Map sealmap : sealjsonlist) { String sealInstanceId = (String) sealmap.get("instanceId"); if (sealInstanceId != null) { Map sealdata1 = (Map) ydClient.queryData( YDParam.builder() .formInstId(sealInstanceId) .appType(ydConf.getAppType()) .systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()) .build(), YDConf.FORM_QUERY.retrieve_id ).getFormData(); if (sealdata1 != null) { String sealName1 = (String) sealdata1.get("textField_lw6aecve"); if (sealName1 != null) { array1.add(getAuths(sealName1, data.get(getCust(type, "count")).toString())); } else { // 处理 sealName1 为空的情况 return null; } } else { // 处理 sealdata1 为空的情况 return null; } } else { // 处理 sealInstanceId 为空的情况 return null; } } } //把所有参数传到obj中 if (categoryName.equals("物理用印外带场景") || categoryName.equals("物理用印公司用印场景")) { obj.put("applyerNumber", data.get(getCust(type, "applyerNumber"))); obj.put("auths", array1); } else { obj.put("signatories", array); } System.out.println("obj:{}" + obj); try { if (categoryName.equals("物理用印外带场景") || categoryName.equals("物理用印公司用印场景")) { // qysService.createseal(obj); } else { //1.调用创建合同草稿方法 JSONObject draft = qysService.createDraft(obj); System.out.println(draft); if (draft != null) { String contractId = draft.getString("contractId"); if (contractId != "") { //发起合同 System.out.println("contractId" + contractId); // JSONObject senddata = qysService.send(contractId, data.get(getCust(type, "tenantName")).toString()); // //合同id 写入宜搭 String sc = getCust(type, "sn");//合同id字段 String sc_values = data.get(getCust(type, "sn")).toString();//合同id字段的值 String fd = getCust(type, "contractId");//字段名称 ydClient.operateData(YDParam.builder() .formUuid(type) .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, sc_values))) .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, contractId))) .build(), YDConf.FORM_OPERATION.upsert); JSONObject senddata = qysService.send(contractId, data.get(getCust(type, "tenantName")).toString()); // // FileUtil.file("C:\\Users\\Administrator\\Desktop\\合同.pdf"); System.out.println("senddata:" + senddata); } } } } catch (Exception e) { e.printStackTrace(); } return McR.success("success"); } private static final Pattern SAFE_FILENAME_PATTERN = Pattern.compile("[^\\w\\u4e00-\\u9fa5-.]"); @Override public String callback(Map param) throws Exception { String sn = param.get("sn"); String contractId = param.get("contractId"); String status = param.get("status"); log.info("sn:{}", sn); log.info("contractId:{}", contractId); //查询宜搭底表数据 String[] sns = sn.split("-"); dingshiqiImpl dingshiqi = new dingshiqiImpl(); Map formUuid = getFormUuid(sns[0]); List list1 = (List) ydClient.queryData(YDParam.builder().formUuid(formUuid.get("type")).searchCondition( JSONObject.toJSONString(UtilMap.map(formUuid.get("sn"), sn)) ).build(), YDConf.FORM_QUERY.retrieve_list).getData(); Map maplist = list1.get(0); String instanceId = (String) maplist.get("formInstanceId"); Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(instanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); log.info("list1:{}", list1); String categoryName = data.get(getCust(formUuid.get("type"), "categoryName")).toString(); List list = new ArrayList(); if (categoryName.equals("我方电子对方物理(个人)") || categoryName.equals("我方电子对方物理(个人)(我方先签)") || categoryName.equals("我方电子对方物理(企业&个人)") || categoryName.equals("我方电子对方物理(企业&个人)(我方先签)") || categoryName.equals("我方电子对方物理(企业)") || categoryName.equals("我方电子对方物理(企业)(我方先签)")) { qysService.download(contractId, new File(BDURL + sn + ".zip")); List unzippedFiles = new ArrayList<>(); String zipFilePath = BDURL + sn + ".zip"; String destDirectory = PDFBDURL + sn; try { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } byte[] buffer = new byte[1024]; ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { // String filePath = destDirectory + File.separator + entry.getName(); // 1. 获取原始文件名并清理特殊字符 String originalName = entry.getName(); String safeName = SAFE_FILENAME_PATTERN.matcher(originalName).replaceAll(""); // 2. 替换空格为下划线(可选) safeName = safeName.replace(" ", "_"); // 3. 构建安全文件路径 String filePath = destDirectory + File.separator + safeName; if (!entry.isDirectory()) { new File(filePath).getParentFile().mkdirs(); FileOutputStream fos = new FileOutputStream(filePath); int len; while ((len = zipIn.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); unzippedFiles.add(filePath); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); System.out.println("ZIP 文件解压完成。"); } catch (Exception e) { System.out.println("发生异常: " + e.getMessage()); e.printStackTrace(); } for (String unzippedFile : unzippedFiles) { Map map = new HashMap(); String fileName = FileUtil.getName(unzippedFile); if (fileName.contains("签署摘要")) { continue; // 跳过这个文件 } map.put("downloadUrl", URL + sn + "/" + fileName); map.put("name", fileName); map.put("previewUrl", map.get("downloadUrl")); map.put("url", map.get("downloadUrl")); map.put("ext", FileUtil.extName(unzippedFile)); list.add(map); } log.info("list:{}", list); } if (status.equals("COMPLETE") || status.equals("SIGNED") || status.equals("FINISHED")) { qysService.download(contractId, new File(BDURL + sn + ".zip")); List unzippedFiles = new ArrayList<>(); String zipFilePath = BDURL + sn + ".zip"; String destDirectory = PDFBDURL + sn; try { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } byte[] buffer = new byte[1024]; ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { // String filePath = destDirectory + File.separator + entry.getName(); // 1. 获取原始文件名并清理特殊字符 String originalName = entry.getName(); String safeName = SAFE_FILENAME_PATTERN.matcher(originalName).replaceAll(""); // 2. 替换空格为下划线(可选) safeName = safeName.replace(" ", "_"); // 3. 构建安全文件路径 String filePath = destDirectory + File.separator + safeName; if (!entry.isDirectory()) { new File(filePath).getParentFile().mkdirs(); FileOutputStream fos = new FileOutputStream(filePath); int len; while ((len = zipIn.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); unzippedFiles.add(filePath); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); System.out.println("ZIP 文件解压完成。"); } catch (Exception e) { System.out.println("发生异常: " + e.getMessage()); e.printStackTrace(); } for (String unzippedFile : unzippedFiles) { Map map = new HashMap(); String fileName = FileUtil.getName(unzippedFile); if (fileName.contains("签署摘要")) { continue; // 跳过这个文件 } map.put("downloadUrl", URL + sn + "/" + fileName); map.put("name", fileName); map.put("previewUrl", map.get("downloadUrl")); map.put("url", map.get("downloadUrl")); map.put("ext", FileUtil.extName(unzippedFile)); list.add(map); } log.info("list:{}", list); } Map param2 = new HashMap(); param2.put("x-acs-dingtalk-access-token", dingshiqi.getAccessToken_PJSS()); Map body3 = new HashMap(); body3.put("appType", "APP_VCTRP6227CC8368NDOID"); body3.put("systemToken", "5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3"); body3.put("processInstanceId", instanceId); body3.put("userId", "13810479803"); boolean flag = true; String taskId = ""; String s = UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/processes/operationRecords", param2, (Map) body3); JSONObject obj = JSONObject.parseObject(s); JSONArray arr = obj.getJSONArray("result"); for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); flag = false; if (json.getString("operatorUserId").equals("13810479803") ){ taskId = json.getString("taskId"); } if (json.getString("operatorUserId").equals("13810479803") && json.getString("type").equals("TODO")) { taskId = json.getString("taskId"); flag = true; break; } } if (flag){ taskExecute(instanceId, taskId); System.out.println("taskId"); }else { ydClient.operateData(YDParam.builder() .formUuid("FORM-F7B0E685C56E41FC939A581F8B7C2665PXPV") .formDataJson(JSONObject.toJSONString(UtilMap.map("textField_lzns5l3l, textField_lzns5l3k, textField_lzns5l3m", sn, instanceId, taskId))) .build(), YDConf.FORM_OPERATION.create); } if(list.size() > 0){ ydClient.operateData(YDParam.builder() .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).formInstId(instanceId) .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("attachmentField_ltsbweit", list))) .build(), YDConf.FORM_OPERATION.update); } return "success"; } //自动系统管理员自动审批流程 private void taskExecute(String instanceId, String taskId) { Map param3 = new HashMap(); param3.put("x-acs-dingtalk-access-token", new dingshiqiImpl().getAccessToken_PJSS()); Map body4 = new HashMap(); body4.put("outResult", "AGREE"); body4.put("appType", "APP_VCTRP6227CC8368NDOID"); body4.put("systemToken", "5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3"); body4.put("remark", "同意"); body4.put("taskId", taskId); body4.put("processInstanceId", instanceId); body4.put("userId", "13810479803"); String s1 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/yida/tasks/execute", param3, null, (Map) body4); System.out.println("result" + s1); } @Override public McR appointurl(String contractId) throws Exception { try { log.info("获取预签署地址 {}", contractId); JSONObject urlR = qysService.appointurl(contractId); String presignUrl = urlR.getString("presignUrl"); if (!QYS_SUCCESS_CODE.equals(urlR.getString("code"))) { return McR.error(urlR.getString("code"), urlR.getString("message")); } else { return McR.success(presignUrl); } } catch (Exception e) { return McR.error("401", "获取失败"); } } // @Override // public McR sendContract(String contractId,String tenantName) throws Exception { // JSONObject send = qysService.send(contractId, tenantName); // return McR.success(send); // } @Override public McR apply(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); Integer currentPage = Integer.valueOf(param.getString("currentPage")); Integer pageSize = Integer.valueOf(param.getString("pageSize")); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); //获取印章详情 String glbd = getCust(type, "glbd"); String glbdjson = data.get(getCust(type, "glbd") + "_id").toString(); String sealjson = StringEscapeUtils.unescapeJava(glbdjson.substring(1, glbdjson.length() - 1)); List sealjsonlist = (List) JSONArray.parse(sealjson); System.out.println("==========" + sealjsonlist); JSONObject obj = new JSONObject(); obj.put("subject", data.get(getCust(type, "subject")).toString());//合同名称 obj.put("tenantName", data.get(getCust(type, "tenantName")));//发起方公司名称 obj.put("applyerNumber", data.get(getCust(type, "applyerNumber")));//发起员工编号 ArrayList objects1 = new ArrayList<>(); for (Map sealjsonmap : sealjsonlist) { JSONObject auths = new JSONObject(); String sealInstanceId = (String) sealjsonmap.get("instanceId"); Map sealdata1 = (Map) ydClient.queryData(YDParam.builder().formInstId(sealInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); System.out.println("aaaaaaa==========" + sealdata1); String aaa = (String) sealdata1.get("textField_lwywohh0"); String aaa1 = (String) sealdata1.get("textField_lw6aecve"); ArrayList objects = new ArrayList<>(); Map hashMap = new HashMap(); hashMap.put("mobile", aaa); Map hashUser = new HashMap(); hashUser.put("number", data.get(getCust(type, "applyerNumber"))); objects.add(hashMap); objects.add(hashUser); auths.put("sealName", aaa1);//印章名称 auths.put("count", data.get(getCust(type, "count")));//授权数量 auths.put("users", objects); objects1.add(auths); } obj.put("auths", objects1); JSONObject code = qysService.applyseals(obj); System.out.println("code===========" + code); JSONObject json = code.getJSONObject("result"); JSONArray sealAuthsArray = json.getJSONArray("sealAuths"); ObjectMapper mapper = new ObjectMapper(); List> pageResult = null; Map result = new HashMap(); try { // 假设这是从文件或者网络读取的JSON数据 String jsonData = String.valueOf(sealAuthsArray); // 解析JSON数据 ArrayNode arrayNode = (ArrayNode) mapper.readTree(jsonData); // 处理每个对象 List> resultList = new ArrayList<>(); for (JsonNode node : arrayNode) { Map map = new HashMap<>(); map.put("userName", node.get("userName").asText()); map.put("sealName", node.get("sealName").asText()); String contact = node.get("contact") != null && !node.get("contact").isMissingNode() ? node.get("contact").asText() : String.valueOf(data.get(getCust(type, "applyerNumber"))); map.put("contact", contact); String vertifyCode = node.get("vertifyCode") != null && !node.get("vertifyCode").isMissingNode() ? node.get("vertifyCode").asText() : "授权码不存在"; map.put("vertifyCode", vertifyCode); resultList.add(map); } // int currentPage = 1; // 当前页码 // int pageSize = 2; // 每页的数量 pageResult = getPage(resultList, currentPage, pageSize); // 打印结果 System.out.println(pageResult); result.put("totalCount", resultList.size()); result.put("data", pageResult); result.put("currentPage", currentPage); } catch (IOException e) { e.printStackTrace(); } return McR.success(result); } private static List> getPage(List> list, int pageNum, int pageSize) { int startIndex = (pageNum - 1) * pageSize; int endIndex = Math.min(startIndex + pageSize, list.size()); return list.subList(startIndex, endIndex); } @Override public McR signurl(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); // String categoryName = data.get(getCust(type, "categoryName")).toString(); JSONObject signatory = new JSONObject(); signatory.put("tenantType", "COMPANY"); signatory.put("tenantName", data.get(getCust(type, "tenantName"))); signatory.put("contractId", data.get(getCust(type, "contractId"))); JSONObject urlR = qysService.signurla(signatory); String signUrl = urlR.getString("signUrl"); System.out.println("aaa---------------" + signUrl); System.out.println(urlR); if (!QYS_SUCCESS_CODE.equals(urlR.getString("code"))) { return McR.error(urlR.getString("code"), urlR.getString("message")); } else { return McR.success(signUrl); } } @Override public McR createContract(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); JSONObject obj = new JSONObject(); // obj.put("subject",data.get("textField_ltsbwef0"));//合同名称 obj.put("subject", data.get(getCust(type, "subject")).toString());//合同名称 obj.put("creatorName", data.get(getCust(type, "creatorName")).toString());//发起人姓名 obj.put("creatorContact", data.get(getCust(type, "creatorContact")).toString());//发起人联系方式 // obj.put("sn",data.get("serialNumberField_ltsbweh2"));//合同编号流水号 obj.put("sn", data.get(getCust(type, "sn")));//合同编号流水号 obj.put("tenantName", data.get(getCust(type, "tenantName")));//发起方公司名称 obj.put("categoryId", data.get(getCust(type, "categoryId")));//业务分类Id List> params1 = new ArrayList<>(); List> params2 = new ArrayList<>(); String categoryName = data.get(getCust(type, "categoryName")).toString(); if (type.equals("FORM-0D501EF1688247DC932E7784298BD46BRYHC")) { JSONObject jf = new JSONObject(); jf.put("name", "jf"); jf.put("value", data.get(getCust(type, "jf")));//甲方名称 JSONObject txdz = new JSONObject(); txdz.put("name", "txdz"); txdz.put("value", data.get(getCust(type, "txdz")));//甲方通讯地址 JSONObject yf = new JSONObject(); yf.put("name", "yf"); yf.put("value", data.get(getCust(type, "yf")));//乙方 JSONObject sjhm = new JSONObject(); sjhm.put("name", "sjhm"); sjhm.put("value", data.get(getCust(type, "sjhm")));//乙方手机号码 if (categoryName.equals("劳动合同") || categoryName.equals("校区劳动合同") ) { JSONObject syqksrq = new JSONObject(); long timestamp = (long) data.get(getCust(type, "syqksrq")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate = sdf.format(date); syqksrq.put("name", "syqksrq"); syqksrq.put("value", formattedDate);//试用期开始日期 JSONObject syqjsrq = new JSONObject(); long timestamp1 = (long) data.get(getCust(type, "syqjsrq")); // 将时间戳转换为 Date 对象 Date date1 = new Date(timestamp1); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate1 = sdf.format(date1); syqjsrq.put("name", "syqjsrq"); syqjsrq.put("value", formattedDate1);//试用期结束日期 JSONObject ldhtksrq = new JSONObject(); long timestamp2 = (long) data.get(getCust(type, "ldhtksrq")); // 将时间戳转换为 Date 对象 Date date2 = new Date(timestamp2); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate2 = sdf.format(date2); ldhtksrq.put("name", "ldhtksrq"); ldhtksrq.put("value", formattedDate2);//劳动合同开始日期 JSONObject ldhtjsrq = new JSONObject(); long timestamp3 = (long) data.get(getCust(type, "ldhtjsrq")); // 将时间戳转换为 Date 对象 Date date3 = new Date(timestamp3); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate3 = sdf.format(date3); ldhtjsrq.put("name", "ldhtjsrq"); ldhtjsrq.put("value", formattedDate3);//劳动合同结束日期 JSONObject gzdd = new JSONObject(); gzdd.put("name", "gzdd"); gzdd.put("value", data.get(getCust(type, "gzdd")));//工作地点 params1.add(jf); params1.add(txdz); params1.add(yf); params1.add(sjhm); params1.add(syqksrq); params1.add(syqjsrq); params1.add(ldhtksrq); params1.add(ldhtjsrq); params1.add(gzdd); } else { if (categoryName.equals("劳务协议") || categoryName.equals("校区劳务协议") ) { JSONObject yftgfw = new JSONObject(); yftgfw.put("name", "yftgfw"); yftgfw.put("value", data.get(getCust(type, "yftgfw")));//乙方提供服务 JSONObject xchsgz = new JSONObject(); xchsgz.put("name", "xchsgz"); xchsgz.put("value", data.get(getCust(type, "xchsgz")));//薪酬核算规则 JSONObject dyzmtbc = new JSONObject(); dyzmtbc.put("name", "dyzmtbc"); dyzmtbc.put("value", data.get(getCust(type, "dyzmtbc")));//报酬金额 JSONObject dyzarksrq = new JSONObject(); long timestamp4 = (long) data.get(getCust(type, "dyzarksrq")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //// 将时间戳转换为 Date 对象 Date date4 = new Date(timestamp4); //// 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate4 = sdf.format(date4); dyzarksrq.put("name", "dyzarksrq"); // dyzarksrq.put("value", timestamp4);//开始日期 dyzarksrq.put("value", formattedDate4);//开始日期 JSONObject dyzarjsrq = new JSONObject(); long timestamp5 = (long) data.get(getCust(type, "dyzarjsrq")); // 将时间戳转换为 Date 对象 Date date5 = new Date(timestamp5); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate5 = sdf.format(date5); dyzarjsrq.put("name", "dyzarjsrq"); dyzarjsrq.put("value", formattedDate5);//结束日期 // dyzarjsrq.put("value", timestamp5);//结束日期 params2.add(jf); params2.add(txdz); params2.add(yf); params2.add(sjhm); params2.add(yftgfw); params2.add(xchsgz); params2.add(dyzmtbc); params2.add(dyzarksrq); params2.add(dyzarjsrq); } } } // System.out.println("qqqqqqqqqqqqqqq" + params2); JSONArray array = new JSONArray(); if (categoryName.equals("劳动合同") || categoryName.equals("校区劳动合同") ) { array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params1); obj.put("signatories", array); obj.put("send", true); } else { array.add(getPeopSignatory(data.get(getCust(type, "tenantNameP")).toString(), data.get(getCust(type, "contactP")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params2); obj.put("signatories", array); obj.put("send", true); } JSONObject draft = qysService.createDraft(obj); System.out.println("======="+draft); if (draft != null) { String contractId = draft.getString("contractId"); if (contractId != "") { //发起合同 System.out.println("contractId" + contractId); // //合同id 写入宜搭 String sc = getCust(type, "sn");//合同id字段 String sc_values = data.get(getCust(type, "sn")).toString();//合同id字段的值 String fd = getCust(type, "contractId");//字段名称 ydClient.operateData(YDParam.builder() .formUuid(type) .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, sc_values))) .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, contractId))) .build(), YDConf.FORM_OPERATION.upsert).toString(); } } return McR.success("success"); } //TODO 封装代码 @Override public McR createReContract(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); JSONObject obj = new JSONObject(); // obj.put("subject",data.get("textField_ltsbwef0"));//合同名称 obj.put("subject", data.get(getCust(type, "subject")).toString());//合同名称 obj.put("creatorName", data.get(getCust(type, "creatorName")).toString());//发起人姓名 obj.put("creatorContact", data.get(getCust(type, "creatorContact")).toString());//发起人联系方式 // obj.put("sn",data.get("serialNumberField_ltsbweh2"));//合同编号流水号 obj.put("sn", data.get(getCust(type, "sn")));//合同编号流水号 obj.put("tenantName", data.get(getCust(type, "tenantName")));//发起方公司名称 obj.put("categoryId", data.get(getCust(type, "categoryId")));//业务分类Id List> params1 = new ArrayList<>(); List> params2 = new ArrayList<>(); List> params3 = new ArrayList<>(); List> params4 = new ArrayList<>(); String categoryName = data.get(getCust(type, "categoryName")).toString(); if (categoryName.equals("续签(固定几年)") ) { JSONObject jf = new JSONObject(); jf.put("name", "jf"); jf.put("value", data.get(getCust(type, "jf")));//甲方名称 JSONObject xm = new JSONObject(); xm.put("name", "xm"); xm.put("value", data.get(getCust(type, "xm")));//身份证号 JSONObject sfzh = new JSONObject(); sfzh.put("name", "sfzh"); sfzh.put("value", data.get(getCust(type, "sfzh")));//乙方 JSONObject htkssj = new JSONObject(); long timestamp = (long) data.get(getCust(type, "htkssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate = sdf.format(date); htkssj.put("name", "htkssj"); htkssj.put("value", formattedDate);//合同开始时间 JSONObject xdqxkssj = new JSONObject(); long timestamp1 = (long) data.get(getCust(type, "xdqxkssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date1 = new Date(timestamp1); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate1 = sdf1.format(date1); xdqxkssj.put("name", "xdqxkssj"); xdqxkssj.put("value", formattedDate1);//续订期限开始时间 JSONObject xdqxjzsj = new JSONObject(); long timestamp2 = (long) data.get(getCust(type, "xdqxjzsj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date2 = new Date(timestamp2); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate2 = sdf2.format(date2); xdqxjzsj.put("name", "xdqxjzsj"); xdqxjzsj.put("value", formattedDate2);//续订期限开始时间 params1.add(jf); params1.add(xm); params1.add(sfzh); params1.add(htkssj); params1.add(xdqxkssj); params1.add(xdqxjzsj); } else if (categoryName.equals("续签(无固定期限)")) { JSONObject jf = new JSONObject(); jf.put("name", "jf"); jf.put("value", data.get(getCust(type, "jf")));//甲方名称 JSONObject xm = new JSONObject(); xm.put("name", "xm"); xm.put("value", data.get(getCust(type, "xm")));//身份证号 JSONObject sfzh = new JSONObject(); sfzh.put("name", "sfzh"); sfzh.put("value", data.get(getCust(type, "sfzh")));//乙方 JSONObject htkssj = new JSONObject(); long timestamp = (long) data.get(getCust(type, "htkssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate = sdf.format(date); htkssj.put("name", "htkssj"); htkssj.put("value", formattedDate);//合同开始时间 params2.add(jf); params2.add(xm); params2.add(sfzh); params2.add(htkssj); } else if (categoryName.equals("续签(员工合同到期公司不再与员工续签)")) { JSONObject xm = new JSONObject(); xm.put("name", "xm"); xm.put("value", data.get(getCust(type, "xm")));//姓名 JSONObject sfzh = new JSONObject(); sfzh.put("name", "sfzh"); sfzh.put("value", data.get(getCust(type, "sfzh")));//身份证号 JSONObject htkssj = new JSONObject(); long timestamp = (long) data.get(getCust(type, "htkssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate = sdf.format(date); htkssj.put("name", "htkssj"); htkssj.put("value", formattedDate);//合同开始时间 JSONObject htjssj = new JSONObject(); long timestamp1 = (long) data.get(getCust(type, "htjssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date1 = new Date(timestamp1); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate1 = sdf1.format(date1); htjssj.put("name", "htjssj"); htjssj.put("value", formattedDate1);//续订期限开始时间 JSONObject zfjjbcjrq = new JSONObject(); long timestamp3 = (long) data.get(getCust(type, "zfjjbcjrq")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date3 = new Date(timestamp3); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate2 = sdf3.format(date3); zfjjbcjrq.put("name", "zfjjbcjrq"); zfjjbcjrq.put("value", formattedDate2);//支付经济补偿金日期 JSONObject jjbcj = new JSONObject(); jjbcj.put("name", "jjbcj"); jjbcj.put("value", data.get(getCust(type, "jjbcj")));//姓名 params3.add(jjbcj); params3.add(xm); params3.add(sfzh); params3.add(htkssj); params3.add(htjssj); params3.add(zfjjbcjrq); } else { JSONObject xm = new JSONObject(); xm.put("name", "xm"); xm.put("value", data.get(getCust(type, "xm")));//姓名 JSONObject htkssj = new JSONObject(); long timestamp = (long) data.get(getCust(type, "htkssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate = sdf.format(date); htkssj.put("name", "htkssj"); htkssj.put("value", formattedDate);//合同开始时间 JSONObject htjssj = new JSONObject(); long timestamp1 = (long) data.get(getCust(type, "htjssj")); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date1 = new Date(timestamp1); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String formattedDate1 = sdf1.format(date1); htjssj.put("name", "htjssj"); htjssj.put("value", formattedDate1);//续订期限开始时间 params4.add(xm); params4.add(htkssj); params4.add(htjssj); } JSONArray array = new JSONArray(); if (categoryName.equals("续签(固定几年)")) { array.add(getPeopSignatory(data.get(getCust(type, "xm")).toString(), data.get(getCust(type, "contact")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params1); obj.put("signatories", array); obj.put("send", true); } else if (categoryName.equals("续签(无固定期限)")) { array.add(getPeopSignatory(data.get(getCust(type, "xm")).toString(), data.get(getCust(type, "contact")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params2); obj.put("signatories", array); obj.put("send", true); } else if (categoryName.equals("续签(员工合同到期公司不再与员工续签)")) { array.add(getPeopSignatory(data.get(getCust(type, "xm")).toString(), data.get(getCust(type, "contact")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params3); obj.put("signatories", array); obj.put("send", true); } else { array.add(getPeopSignatory(data.get(getCust(type, "xm")).toString(), data.get(getCust(type, "contact")).toString())); array.add(getCompASignatory1()); obj.put("documentParams", params4); obj.put("signatories", array); obj.put("send", true); } JSONObject draft = qysService.createDraft(obj); System.out.println(draft); // System.out.println(draft); if (draft != null) { String contractId = draft.getString("contractId"); if (contractId != "") { //发起合同 System.out.println("contractId" + contractId); // //合同id 写入宜搭 String sc = getCust(type, "sn");//合同id字段 String sc_values = data.get(getCust(type, "sn")).toString();//合同id字段的值 String fd = getCust(type, "contractId");//字段名称 ydClient.operateData(YDParam.builder() .formUuid(type) .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, sc_values))) .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, contractId))) .build(), YDConf.FORM_OPERATION.upsert).toString(); } } return McR.success("success"); } @Override public String callback1(Map param) throws Exception { dingshiqiImpl dingshiqi = new dingshiqiImpl(); String sn = param.get("sn"); String[] sns = sn.split("-"); Map formUuid = getFormUuid(sns[0]); List list1 = (List) ydClient.queryData(YDParam.builder().formUuid(formUuid.get("type")).searchCondition( JSONObject.toJSONString(UtilMap.map(formUuid.get("sn"), sn)) ).build(), YDConf.FORM_QUERY.retrieve_list).getData(); Map map = list1.get(0); String instanceId = (String) map.get("formInstanceId"); Map param2 = new HashMap(); param2.put("x-acs-dingtalk-access-token", dingshiqi.getAccessToken_PJSS()); Map body3 = new HashMap(); body3.put("appType", "APP_VCTRP6227CC8368NDOID"); body3.put("systemToken", "5H9662C1X8XJLFFCE841M5VBEBQ73DM5IBPULPI3"); body3.put("processInstanceId", instanceId); body3.put("userId", "13810479803"); boolean flag = true; do { String s = UtilHttp.doGet("https://api.dingtalk.com/v1.0/yida/processes/operationRecords", param2, (Map) body3); JSONObject obj = JSONObject.parseObject(s); JSONArray arr = obj.getJSONArray("result"); for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); flag = false; if (json.getString("operatorUserId").equals("13810479803") && json.getString("type").equals("TODO")) { taskExecute(instanceId, json.getString("taskId")); flag = true; break; } } } while (flag); return "success"; } @Override public McR viewurl(String contractId, String pageType) throws Exception { try { log.info("获取合同浏览页面 {},{}", contractId,pageType); JSONObject urlR = qysService.viewurl(contractId,pageType); String viewUrl = urlR.getString("viewUrl"); if (!QYS_SUCCESS_CODE.equals(urlR.getString("code"))) { return McR.error(urlR.getString("code"), urlR.getString("message")); } else { return McR.success(viewUrl); } } catch (Exception e) { return McR.error("401", "获取失败"); } } @Override public McR audit(String contractId) throws Exception { try { log.info("合同审批 {}", contractId); JSONObject urlR = qysService.audit(contractId); String viewUrl = urlR.getString("viewUrl"); if (!QYS_SUCCESS_CODE.equals(urlR.getString("code"))) { return McR.error(urlR.getString("code"), urlR.getString("message")); } else { return McR.success(viewUrl); } } catch (Exception e) { return McR.error("401", "获取失败"); } } //TODO hz06 @Override public McR createHzContract(JSONObject param) throws Exception { String formInstanceId = param.getString("formInstanceId"); String type = param.getString("type"); log.info("formInstanceId:{}", formInstanceId); log.info("type:{}", type); //根据实例ID获取表单数据 Map data = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); log.info("data:{}", data); //把文件下载到本地路径 ,并获取到文档ID List documentId = new ArrayList<>(); documentId = createbyMoBan(formInstanceId); //定义参数 创建合同草稿 JSONObject obj = new JSONObject(); obj.put("subject", data.get(getCust(type, "subject")).toString());//合同名称 obj.put("creatorName", data.get(getCust(type, "creatorName")).toString());//发起人姓名 obj.put("creatorContact", data.get(getCust(type, "creatorContact")).toString());//发起人联系方式 obj.put("sn", data.get(getCust(type, "sn")));//合同编号流水号 obj.put("tenantName", "北京领语堂科技发展有限公司");//发起方公司名称 // obj.put("tenantName", data.get(getCust(type, "tenantName")));//发起方公司名称 // obj.put("categoryId", data.get(getCust(type, "categoryId")));//业务分类Id data.get("textField_lvm5xmqe") obj.put("categoryId", "2741593310334300984");//业务分类Id data.get("textField_lvm5xmqe") obj.put("send", true); if (documentId != null) { obj.put("documents", documentId);//文档ID } JSONArray array = new JSONArray(); array.add(getCompASignatory(data.get(getCust(type, "sealId")).toString())); obj.put("signatories", array); //1.调用创建合同草稿方法 JSONObject draft = qysService.createDraft(obj); if (draft != null) { String contractId = draft.getString("contractId"); if (contractId != "") { //发起合同 String sc = getCust(type, "sn");//合同id字段 String sc_values = data.get(getCust(type, "sn")).toString();//合同id字段的值 String fd = getCust(type, "contractId");//字段名称 ydClient.operateData(YDParam.builder() .formUuid(type) .searchCondition(JSONObject.toJSONString(UtilMap.map(sc, sc_values))) .formDataJson(JSONObject.toJSONString(UtilMap.map(fd, contractId))) .build(), YDConf.FORM_OPERATION.upsert); // JSONObject senddata = qysService.send(contractId, data.get(getCust(type, "tenantName")).toString()); // System.out.println("senddata:" + senddata); } } return McR.success(); } private List createbyMoBan( String formInstanceId) { Map data = new HashMap<>(); data.put("templateId", "2758656747503223510"); Map data1 = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId) .appType(ydConf.getAppType()).systemToken(ydConf.getSystemToken()) .userId(ddConf.getOperator()).build(), YDConf.FORM_QUERY.retrieve_id).getFormData(); String title = String.valueOf(data1.get("textField_ltrzli9n"));//发文公司 String fwgs = String.valueOf(data1.get("textField_mayy2yf8"));//发文公司 String fzf = String.valueOf(data1.get("textField_lxa4w5uh"));//发子方 String dz = String.valueOf(data1.get("textField_lxa4w5uc"));//代字 String sxh = String.valueOf(data1.get("textField_lxa4w5ud"));//红头文件编号 String syqy = String.valueOf(data1.get("textField_lxa4w5ub"));//适用区域 String cpx = String.valueOf(data1.get("textField_lxa4w5uf"));//产品线 String dtj = String.valueOf(data1.get("selectField_lxa4w5ue"));//定调价 long timestamp = (long) data1.get("dateField_m0wel9k2");//实施日期 // long timestamp = Long.parseLong("1747893049582"); // 创建 SimpleDateFormat 对象来定义输出日期的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 将时间戳转换为 Date 对象 Date date = new Date(timestamp); // 使用 SimpleDateFormat 格式化 Date 对象为所需的日期格式 String ssrq = sdf.format(date);//申请执行日期 List mapList = (List)data1.get("tableField_ltse8sqr"); Map params = new HashMap<>(); if(mapList!=null && mapList.size()>0){ List bg = new ArrayList<>(); for (int i = 0; i (); table1.put("kcjdxua", kcjdxua); table1.put("zkss", zkss); table1.put("ksfyks", ksfyks); table1.put("ksfy", ksfy); table1.put("sf", sf); table1.put("byfprekkqjrbtxyn",byfprekkqjrbtxyn); table1.put("zj", zj); bg.add(table1); params.put("bg",JSONObject.toJSONString(bg)); } } params.put("fwgs", fwgs); params.put("fzf", fzf); params.put("dz", dz); params.put("sxh", sxh); params.put("syqy", syqy); params.put("cpx", cpx); params.put("dtj", dtj); params.put("ssrq", ssrq); data.put("title", title); data.put("params", JSONObject.toJSONString(params)); JSONObject draft = null; List resultList = new ArrayList<>(); try { draft = QYSService.createbyMoban(data); if (draft != null) { resultList.add(draft.getString("documentId")); } } catch (Exception e) { e.printStackTrace(); } return resultList; } // @Override // public McR appointurldownload(String contractId) throws Exception { // try { // log.info("获取预签署地址 {}", contractId); // JSONObject urlR = qysService.appointurldownload(contractId); // String presignUrl = urlR.getString("presignUrl"); // if (!QYS_SUCCESS_CODE.equals(urlR.getString("code"))) { // return McR.error(urlR.getString("code"), urlR.getString("message")); // } else { // return McR.success(presignUrl); // } // } catch (Exception e) { // return McR.error("401", "获取失败"); // } // } private Map getFormUuid(String type) { Map map = UtilMap.empty(); switch (type) { case "HT01"://合同 map.put("type", "FORM-55D56A69CCCE4043A01660C8910E33BAQ4N0"); map.put("sn", "serialNumberField_ltsbweh2"); map.put("contractId", "textField_lwah8x72"); break; case "CG11"://框架采购 map.put("type", "FORM-82E566F8576E44D3AB4B34033A27E76FEB75"); map.put("sn", "serialNumberField_ltsbweh2"); map.put("contractId", "textField_lwah8x72"); break; case "HT02"://框架 map.put("type", "FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO"); map.put("sn", "serialNumberField_lvz8coae"); map.put("contractId", "textField_lwg205ug"); break; case "HT03"://租赁 map.put("type", "FORM-FCDDD18FD63E49B2A4C652FBDB1874F6DPHW"); map.put("sn", "serialNumberField_ltwcj54l"); map.put("contractId", "textField_lwg1wbix"); break; case "XZ04"://其他 map.put("type", "FORM-B27C1AE7298648F29E836B5FDF469DBDPFCK"); map.put("sn", "serialNumberField_ltwktal5"); break; case "HTSG"://合同/申购 map.put("type", "FORM-88F968E75CC340EB91B1AC692F4184DC9I9W"); map.put("sn", "serialNumberField_lu7ycpuc"); map.put("contractId", "textField_lwg219kl"); break; case "HR09"://hr用印 map.put("type", "FORM-54972289A0B7416287A9BA44DA6CCDC50QUC"); map.put("sn", "serialNumberField_lu9euh7o"); break; case "HR18"://新签劳动合同/协议 map.put("type", "FORM-0D501EF1688247DC932E7784298BD46BRYHC"); map.put("sn", "serialNumberField_luauhgb5"); map.put("contractId", "textField_lwg241g6"); break; case "XZ05"://发文审批 map.put("type", "FORM-3E04D5456B2341CCBA62C955B791CF45IAH1"); map.put("sn", "serialNumberField_ltwmutno"); break; case "XZ08"://印章授权 map.put("type", "FORM-87BD065161F84560B999FE94713255E20E6E"); map.put("sn", "serialNumberField_ltwp3e44"); break; case "XZQYLC"://加盟签约 map.put("type", "FORM-53A0FB8715FB4378B0708794DFAF7089SV8P"); map.put("sn", "serialNumberField_ltsaig24"); break; case "HR02"://合同续签 map.put("type", "FORM-FD73905FB9C24E3A99244F901D9C98AFH4E6"); map.put("sn", "serialNumberField_lu991xi3"); map.put("contractId", "textField_lwah8x72"); break; case "HZDTJLC"://hz06 map.put("type", "FORM-040619C0CE6744EDA4154B4BBBF1843F49JY"); map.put("sn", "serialNumberField_ltse8sos"); map.put("contractId", "textField_lwg1z6hk"); break; } return map; } /*** * 获取对方公司签署对象 * @param name * @return */ private Map getCompSignatory(String name, String contact, String receiverName) { JSONObject signatory = new JSONObject(); signatory.put("tenantType", "COMPANY"); signatory.put("tenantName", name);//对方(物理)名称 signatory.put("contact", contact); signatory.put("receiverName", receiverName); return signatory; } private Map getPeosignurl(String contractId, String name, String contact) { JSONObject signurl = new JSONObject(); signurl.put("tenantType", "PERSONAL"); signurl.put("tenantName", name); signurl.put("contractId", contractId); signurl.put("contact", contact); return signurl; } private Map getComsignurl(String contractId, String name) { JSONObject signatory = new JSONObject(); signatory.put("tenantType", "COMPANY"); signatory.put("tenantName", name); signatory.put("contractId", contractId); return signatory; } //获取物理印章信息 private Map getAuths(String name, String count) { JSONObject auths = new JSONObject(); auths.put("sealName", name);//印章名称 auths.put("count", count);//授权数量 return auths; } /*** * 获取我方公司签署对象 * @param * @return */ private Map getCompASignatory(String sealId) { JSONObject signatory = new JSONObject(); ArrayList actions = new ArrayList<>(); Map sss = new HashMap<>(); sss.put("sealId", sealId); sss.put("type", "CORPORATE"); sss.put("serialNo", 1); actions.add(sss); signatory.put("tenantType", "COMPANY"); signatory.put("actions", actions); return signatory; } private Map getCompASignatory1() { JSONObject signatory = new JSONObject(); signatory.put("tenantType", "COMPANY"); return signatory; } /*** * 获取个人签署对象 * @param name * @return */ private Map getPeopSignatory(String name, String contact) { JSONObject signatory = new JSONObject(); signatory.put("tenantType", "PERSONAL"); signatory.put("contact", contact); signatory.put("tenantName", name);//对方(个人)名称 return signatory; } //根据附件创建合同文档得到文档Id public List createbyfile(Map data, String type) throws Exception { // String jsonString = data.get("attachmentField_ltsbweir").toString(); String formuuid ="FORM-B27C1AE7298648F29E836B5FDF469DBDPFCK";//其他用印 String hrformuuid ="FORM-54972289A0B7416287A9BA44DA6CCDC50QUC";//hr09 String htformuuid ="FORM-55D56A69CCCE4043A01660C8910E33BAQ4N0";//合同用印 String kjformuuid ="FORM-5DB656AF0F0E4EFA85A4739D55C23ED85BXO";//框架用印 String jsonString = ""; // 根据categoryName的值来决定从data中获取哪个键对应的值 //其他用印处理附件选择问题 if (type.equals(formuuid)) { String categoryName = String.valueOf(data.get(getCust(formuuid, "categoryName"))); // String ghl = data.get("selectField_ltwktalx") != null ? data.get("selectField_ltwktalx").toString() : ""; if ("物理用印外带场景".equals(categoryName) || "物理用印公司用印场景".equals(categoryName) ) { jsonString = data.get(getCust(type, "fujian1")) != null ? data.get(getCust(type, "fujian1")).toString() : ""; } else { jsonString = data.get(getCust(type, "fujian")) != null ? data.get(getCust(type, "fujian")).toString() : ""; } } else if (type.equals(hrformuuid)) { String categoryName = String.valueOf(data.get(getCust(hrformuuid, "categoryName"))); String sfbh = data.get("selectField_lu9euh7u") != null ? data.get("selectField_lu9euh7u").toString() : ""; if ("内部企业单签".equals(categoryName) && "是".equals(sfbh)) { jsonString = data.get(getCust(type, "fujian")) != null ? data.get(getCust(type, "fujian")).toString() : ""; } else { jsonString = data.get(getCust(type, "fujian1")) != null ? data.get(getCust(type, "fujian1")).toString() : ""; } } else if (type.equals(htformuuid)) { // String categoryName = String.valueOf(data.get(getCust(htformuuid, "categoryName"))); String yycj = data.get("selectField_ltsbwei5") != null ? data.get("selectField_ltsbwei5").toString() : ""; if ("我方电子对方物理用印".equals(yycj)) { jsonString = data.get(getCust(type, "fujian1")) != null ? data.get(getCust(type, "fujian1")).toString() : ""; } else { jsonString = data.get(getCust(type, "fujian")) != null ? data.get(getCust(type, "fujian")).toString() : ""; } } else if (type.equals(kjformuuid)) { // String categoryName = String.valueOf(data.get(getCust(htformuuid, "categoryName"))); String yycj = data.get("selectField_lvz8cob7") != null ? data.get("selectField_lvz8cob7").toString() : ""; if ("我方电子对方物理用印".equals(yycj)) { jsonString = data.get(getCust(type, "fujian1")) != null ? data.get(getCust(type, "fujian1")).toString() : ""; } else { jsonString = data.get(getCust(type, "fujian")) != null ? data.get(getCust(type, "fujian")).toString() : ""; } } else { jsonString = data.get(getCust(type, "fujian")) != null ? data.get(getCust(type, "fujian")).toString() : ""; } JSONArray jsonArray = JSONObject.parseArray(jsonString); List resultList = new ArrayList<>(); if (jsonArray != null) { for (int i = 0; i < jsonArray.size(); i++) { // 将元素转换为JSONObject JSONObject jsonObj = jsonArray.getJSONObject(i); String fj_url = ydClient.convertTemporaryUrl(jsonObj.getString("url")); String fj_name = jsonObj.getString("name"); String localFilePath = "/home/file/" + fj_name; // String localFilePath = "C:\\Users\\EDY\\Downloads\\" + fj_name; //下载文件到本地 RsQysServiceImpl.downloadFile1(fj_url, localFilePath); Map data1 = new HashMap<>(); data1.put("file", FileUtil.file("/home/file/" + fj_name)); // data1.put("file", FileUtil.file("C:\\Users\\EDY\\Downloads\\" + fj_name)); data1.put("title", FileUtil.mainName(fj_name)); data1.put("fileType", FileUtil.extName(fj_name));// 获取文件格式(通过文件名) try { log.info("2. 根据文件类型创建合同文档"); JSONObject draft = qysService.createbyfile(data1); if (draft != null) { resultList.add(draft.getJSONObject("result").getString("documentId")); } } catch (Exception e) { e.printStackTrace(); } } } return resultList; } public static void downloadFile1(String downloadUrl, String path) { InputStream inputStream = null; OutputStream outputStream = null; try { URL url = new URL(downloadUrl); //这里没有使用 封装后的ResponseEntity 就是也是因为这里不适合一次性的拿到结果,放不下content,会造成内存溢出 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //使用bufferedInputStream 缓存流的方式来获取下载文件,不然大文件会出现内存溢出的情况 inputStream = new BufferedInputStream(connection.getInputStream()); File file = new File(path); if (file.exists()) { file.delete(); } // 创建目录和父文件夹 FileUtils.forceMkdirParent(file); outputStream = new FileOutputStream(file); //这里也很关键每次读取的大小为5M 不一次性读取完 byte[] buffer = new byte[1024 * 1024 * 5];// 5MB int len = 0; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(outputStream); IOUtils.closeQuietly(inputStream); } } }