k94314517
2025-07-04 50fb58286ed3b718c39a97e0987ee7561a295651
server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -15,6 +15,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@@ -53,6 +54,8 @@
    private static String SERVICE_URL="https://api.sandbox.junziqian.com";
    private static  String APP_KEY="dcb4bd535a09df3c";
    private static  String APP_SECRET="b87c346edcb4bd535a09df3ca8c45d9a";
    @Value("${debug_model}")
    private Boolean debugModel;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
@@ -227,7 +230,7 @@
        return null;
    }
    /**
     * 查询企业签约状态 审批状态,0正在申请1通过2驳回
     * 查询企业签约状态 审核状态,0正在申请1通过2驳回
     * @param email
     * @return
     */
@@ -259,7 +262,31 @@
     * @param email
     * @param postionJson
     */
    public String applySignWidthQifengSet(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl,Float qifengSet){
      return  applySignDoByParam(name,fileUrl,fullname,creditCoe,email,postionJson,singId,notifyUrl,qifengSet);
    }
    /**
     * 发起签约
     * @param name
     * @param fileUrl
     * @param fullname
     * @param creditCoe
     * @param email
     * @param postionJson
     */
    public String applySign(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl){
      return  applySignDoByParam(name,fileUrl,fullname,creditCoe,email,postionJson,singId,notifyUrl,null);
    }
    /**
     * 发起签约
     * @param name
     * @param fileUrl
     * @param fullname
     * @param creditCoe
     * @param email
     * @param postionJson
     */
    public String applySignDoByParam(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl,Float qifengSet){
      try {
          initParams();
          String url=SERVICE_URL+"/v2/sign/applySign";
@@ -269,7 +296,8 @@
//          params.put("file",file);
          params.put("url",fileUrl);
          params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签
          params.put("positionType",2); //指定通过表单域方式设置签字位置
//          params.put("positionType",2); //指定通过表单域方式设置签字位置
          params.put("positionType",0); //指定公章位置类型:0或null使用签字座标位置或不指定签字位置;1表单域定位(表单域如果上传为pdf时,需pdf自行定义好表单域,html及url及tmpl等需定义好input标签);2关键字定义
          params.put("fileType",1);
          params.put("needQifengSign",1);
          params.put("notifyUrl",notifyUrl);
@@ -280,10 +308,11 @@
          sReq.setIdentityCard(creditCoe);//营业执照号
          sReq.setEmail(email); //在君子签注册认证的邮箱
//        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]");
//          sReq.setChapteJson(postionJson);
          sReq.setSearchKey(postionJson);
//          sReq.setChapteJson(postionJson);//表单域定位 对应positionType=1
//          sReq.setSearchKey(postionJson);//关键字 对应positionType=2
          sReq.setSignId(singId);
          sReq.setNoNeedVerify(1);
          sReq.setQiFengOffset(qifengSet);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
          System.out.println("================"+JSONObject.toJSONString(params));
@@ -295,7 +324,7 @@
              return  json.getString("data");
          }
      }catch (Exception e){
          e.printStackTrace();
      }
      return null;
@@ -303,7 +332,6 @@
    /**
     * 发起签约
     * @param name
     * @param fileUrl
     * @param file
     * @param creditCoe
     * @param email
@@ -317,7 +345,7 @@
          params.put("serverCa",1); //使用云证书
          params.put("file",new File(file));
          params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签
          params.put("positionType",1); //指定通过表单域方式设置签字位置
          params.put("positionType",0); //指定通过表单域方式设置签字位置
          params.put("fileType",0);
          params.put("needQifengSign",1);
          params.put("notifyUrl",notifyUrl);
@@ -329,9 +357,9 @@
          sReq.setEmail(email); //在君子签注册认证的邮箱
//        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]");
//          sReq.setChapteJson(postionJson);
          sReq.setSearchKey(postionJson);
//          sReq.setSearchKey(postionJson);
          sReq.setSignId(singId);
          sReq.setSearchConvertExtend("{\"fixX\":10,\"fixY\":-50}");
          sReq.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}");
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
@@ -344,9 +372,61 @@
              return  json.getString("data");
          }
      }catch (Exception e){
          e.printStackTrace();
      }
      return null;
    }
    /**
     * 发起签约
     * @param name
     * @param file
     * @param creditCoe
     * @param email
     * @param postionJson
     */
    public String applySignLocalFileByParam(String name,String fullname,String file,String creditCoe,String email,String postionJson,String singId,String notifyUrl,Float qifengSet){
        try {    initParams();
            String url=SERVICE_URL+"/v2/sign/applySign";
            Map<String, Object>  params=bodyParams;
            params.put("contractName",name); //合同名称
            params.put("serverCa",1); //使用云证书
            params.put("file",new File(file));
            params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签
            params.put("positionType",0); //指定通过表单域方式设置签字位置
            params.put("fileType",0);
            params.put("needQifengSign",1);
            params.put("notifyUrl",notifyUrl);
            JSONArray signatories=new JSONArray();
            SignatoryReq sReq=new SignatoryReq();
            sReq.setFullName(fullname); //企业姓名
            sReq.setIdentityType(11); //证件类型
            sReq.setIdentityCard(creditCoe);//营业执照号
            sReq.setEmail(email); //在君子签注册认证的邮箱
//        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.12,\"offsetY\":0.23}]},{\"page\":1,\"chaptes\":[{\"offsetX\":0.45,\"offsetY\":0.67}]}]");
//          sReq.setChapteJson(postionJson);
//          sReq.setSearchKey(postionJson);
            sReq.setSignId(singId);
            sReq.setQiFengOffset(qifengSet);
            sReq.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}");
            sReq.setNoNeedVerify(1);
            signatories.add(sReq);
            params.put("signatories",signatories.toJSONString());
            System.out.println(signatories.toJSONString());
            String str= HttpClientUtils.init().getPost(url,null,params,true);
            System.out.println(str);
            saveInterfaceLog(url,"【电子签】发起签约",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
                return  json.getString("data");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
@@ -358,7 +438,10 @@
     * @param creditCode
     */
    public String signLink(String applyNo,String name,String creditCode) {
        try {    initParams();
        try {
            //延迟2秒
//            Thread.sleep(2*1000);
            initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/sign/link";
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号
@@ -370,6 +453,37 @@
            saveInterfaceLog(url,"【电子签】获取签署链接地址",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
                String link =json.getString("data");
                if(!debugModel){
                    link = link.replace("https://h5","https://h7");
                }
                return link;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  null;
    }
    /**
     * 获取签署链接地址(返回文件地址,签署后才是文件地址,否则跳转到签署页面)
     * @param applyNo
     */
    public String  linkFileStatus(String applyNo) {
        try {    initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/sign/status";
            //构建请求参数
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号
//            params.put("fullName",fullName); //签约人名称
//            params.put("identityCard",identityCard); //签约人证件号
//            params.put("identityType",12); //证件类型 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 20子账号, 99其他
            String str= HttpClientUtils.init().getPost(url,null,params,true);
            System.out.println(str);
            saveInterfaceLog(url,"【电子签】签约状态查询",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
                //0 :未签 1 :已签 2:拒签 3:已保全
                return  json.getString("data");
            }
        }catch (Exception e){