jiangping
2024-03-04 c7a022c304c49fa91da1ebae458ccec3c484718a
server/service/src/main/java/com/doumee/service/business/third/SignService.java
@@ -19,9 +19,15 @@
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URL;
import java.util.Date;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.UUID;
/**
 * <ul>
@@ -77,11 +83,11 @@
    }
    public void initParams(){
        long ts=System.currentTimeMillis();
        long ts=System.currentTimeMillis()/1000;
        String nonce=DigestUtils.md5Hex(System.currentTimeMillis()+"");
        String sign=DigestUtils.sha256Hex("nonce"+nonce+"ts"+ts+"app_key"+APP_KEY+"app_secret"+APP_SECRET);
        bodyParams=new IdentityHashMap<>();
        bodyParams.put("ts",ts);
        bodyParams.put("ts",System.currentTimeMillis()/1000);
        bodyParams.put("app_key",APP_KEY);
        bodyParams.put("sign",sign);
        bodyParams.put("nonce",nonce);//这只只是为了生成一个随机值
@@ -91,7 +97,6 @@
     * 1.ping服务
     */
    public boolean ping(){
        initParams();
        try {
            Map<String, Object>  params=bodyParams;
            String url=SERVICE_URL+"/v2/ping";
@@ -114,13 +119,17 @@
     * @param creditCode
     * @param legalName
     * @param email
     * @param businessimg
     * @param businessimgPath
     * @param notifyUrl
     * @return
     */
    public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,File  businessimg,String notifyUrl){
    public boolean organizationCreate (String fullname,String creditCode,String legalName,String email,String businessimgPath, String notifyUrl){
        try {
            initParams();
            File  businessimg =netFileToLoclFile(businessimgPath);
            if(businessimg == null || !businessimg.isFile() || !businessimg.exists()){
                return false;
            }
            Map<String, Object>  params=bodyParams;
            String url=SERVICE_URL+"/v2/user/organizationCreate";
            params.put("name",fullname);
@@ -133,6 +142,7 @@
            params.put("legalName",legalName);
            params.put("emailOrMobile",email);
            String str= HttpClientUtils.init().getPost(url,null,params,true);
            businessimg.delete();
            saveInterfaceLog(url,"【电子签】发起企业认证申请",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
@@ -151,12 +161,17 @@
     * @param creditCode
     * @param legalName
     * @param email
     * @param businessimg
     * @param businessimgPath
     * @param notifyUrl
     * @return
     */
    public boolean organizationReApply(String fullname,String creditCode,String legalName,String email,File  businessimg,String notifyUrl){
    public boolean organizationReApply(String fullname,String creditCode,String legalName,String email,String businessimgPath,String notifyUrl){
        try {
            File  businessimg = new File(new URI(businessimgPath));
            if(businessimg == null|| !businessimg.isFile() || !businessimg.exists()){
                return false ;
            }
            initParams();
            Map<String, Object>  params=bodyParams;
            String url=SERVICE_URL+"/v2/user/organizationReapply";
@@ -170,6 +185,7 @@
            params.put("legalName",legalName);
            params.put("emailOrMobile",email);
            String str= HttpClientUtils.init().getPost(url,null,params,true);
            businessimg.delete();
            saveInterfaceLog(url,"【电子签】重新发起企业认证申请",JSONObject.toJSONString(params),str);
            JSONObject json = JSONObject.parseObject(str);
            if(json!=null && json.getBoolean("success")){
@@ -184,7 +200,34 @@
    }
    /**
     * 查询企业签约状态 审批状态,0正在申请1通过2驳回
     * 网络文件转本地临时文件
     * @param fileUrl
     * @return
     */
    public static File netFileToLoclFile(String fileUrl)  {
        try {
            URL url = new URL(fileUrl);
            InputStream inputStream = url.openConnection().getInputStream();
            File file = File.createTempFile( "temp",""+UUID.randomUUID().toString()+fileUrl.substring(fileUrl.lastIndexOf("."))); // 指定保存到本地的文件名及路径
            OutputStream outputStream = new FileOutputStream(file);
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            outputStream.close();
            inputStream.close();
            return file;
        }catch (Exception e){
        }
        return null;
    }
    /**
     * 查询企业签约状态 审核状态,0正在申请1通过2驳回
     * @param email
     * @return
     */
@@ -210,24 +253,27 @@
    /**
     * 发起签约
     * @param name
     * @param file
     * @param fileUrl
     * @param fullname
     * @param creditCoe
     * @param email
     * @param postionJson
     */
    public String applySign(String name,File file,String fullname,String creditCoe,String email,String postionJson){
    public String applySign(String name,String fileUrl,String fullname,String creditCoe,String email,String postionJson,String singId,String notifyUrl){
      try {
          String url=SERVICE_URL+"/v2/sign/applySign";
          initParams();
          String url=SERVICE_URL+"/v2/sign/applySign";
          Map<String, Object>  params=bodyParams;
          params.put("contractName",name); //合同名称
          params.put("serverCa",1); //使用云证书
          params.put("file",file);
//          params.put("file",file);
          params.put("url",fileUrl);
          params.put("dealType",5); //指定合同文件签署方式 5 为部分自动签
          params.put("positionType",0); //指定通过表单域方式设置签字位置
          params.put("fileType",0);
//          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);
          JSONArray signatories=new JSONArray();
          SignatoryReq sReq=new SignatoryReq();
          sReq.setFullName(fullname); //企业姓名
@@ -235,7 +281,58 @@
          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.setChapteJson(postionJson);//表单域定位 对应positionType=1
//          sReq.setSearchKey(postionJson);//关键字 对应positionType=2
          sReq.setSignId(singId);
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
          System.out.println("================"+JSONObject.toJSONString(params));
          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){
      }
      return null;
    }
    /**
     * 发起签约
     * @param name
     * @param fileUrl
     * @param file
     * @param creditCoe
     * @param email
     * @param postionJson
     */
    public String applySignLocalFile(String name,String fullname,String file,String creditCoe,String email,String postionJson,String singId,String notifyUrl){
      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",2); //指定通过表单域方式设置签字位置
          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.setSearchConvertExtend("{\"fixX\":-80,\"fixY\":-80}");
          sReq.setNoNeedVerify(1);
          signatories.add(sReq);
          params.put("signatories",signatories.toJSONString());
@@ -256,14 +353,13 @@
    /**
     * 获取签署链接地址
     * 获取签署链接地址(签署页面地址)
     * @param applyNo
     * @param name
     * @param creditCode
     */
    public String signLink(String applyNo,String name,String creditCode) {
        try {
            initParams();
        try {    initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/sign/link";
            params.put("applyNo",applyNo); //发起合同签署接口返回的APL编号
@@ -283,13 +379,39 @@
        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){
            e.printStackTrace();
        }
        return  null;
    }
    /**
     * 获取签署链接地址(返回文件地址,签署后才是文件地址,否则跳转到签署页面)
     * @param applyNo
     */
    public String  linkFile(String applyNo) {
        try {
            initParams();
        try {    initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/sign/linkFile";
            //构建请求参数
@@ -306,5 +428,55 @@
        }
        return  null;
    }
    /**
     * 上传企业自定义印章(返回印章ID)
     * @param signName
     * @param path
     */
    public String  uploadEntSign(String signName,String path,String email ) {
        try {    initParams();
            File signImgFile =netFileToLoclFile(path);
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/user/uploadEntSign";
            //构建请求参数
            params.put("signName",signName);
            params.put("signImgFile",signImgFile);
            params.put("email",email);
            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;
    }
    /**
     * 删除企业自定义印章
     * @param signId
     */
    public boolean  deleteEntSign(String signId ) {
        try {    initParams();
            Map<String, Object> params = bodyParams;
            String url = SERVICE_URL + "/v2/user/deleteEntSign";
            //构建请求参数
            params.put("signId",signId);
            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.getBoolean("success");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return  false;
    }
}