guomengjiao 5 ヶ月 前
コミット
7968d6af05

+ 52 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/base/JzqOcrController.java

@@ -0,0 +1,52 @@
+package com.ruoyi.web.controller.base;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.tool.request.OcrRequest;
+import com.ruoyi.tool.response.OcrBankResponse;
+import com.ruoyi.tool.response.OcrBusinessLicResponse;
+import com.ruoyi.tool.response.OcrIdentityResponse;
+import com.ruoyi.tool.service.JzqService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api("君子签")
+@RestController
+@RequestMapping("/jzq/ocr")
+@AllArgsConstructor
+public class JzqOcrController {
+
+    private final JzqService jzqService;
+
+    /**
+     * 身份证识别
+     */
+    @ApiOperation("身份证识别")
+    @GetMapping("/idcard")
+    public R<OcrIdentityResponse> idcard(OcrRequest request) {
+        return R.ok(jzqService.idcard(request));
+    }
+
+    /**
+     * 银行卡识别
+     */
+    @ApiOperation("银行卡识别")
+    @GetMapping("/bank")
+    public R<OcrBankResponse> bank(OcrRequest request) {
+        return R.ok(jzqService.bank(request));
+    }
+
+    /**
+     * 营业执照识别
+     */
+    @ApiOperation("营业执照识别")
+    @GetMapping("/businessLic")
+    public R<OcrBusinessLicResponse> businessLic(OcrRequest request) {
+        return R.ok(jzqService.businessLic(request));
+    }
+
+}
+

+ 11 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/info/PlatformInfoController.java

@@ -53,4 +53,15 @@ public class PlatformInfoController extends BaseController {
         return toAjax(iPlatformInfoService.insertByBo(bo) ? 1 : 0);
     }
 
+    /**
+     * 君子签-企业实名认证上传
+     */
+    @ApiOperation("君子签-企业实名认证上传")
+    @SaCheckPermission("base:platformInfo:organizationCreate")
+    @RepeatSubmit()
+    @PostMapping("/organizationCreate")
+    public R<Void> organizationCreate() {
+        iPlatformInfoService.organizationCreate();
+        return R.ok();
+    }
 }

+ 3 - 7
ruoyi-agent/pom.xml

@@ -14,19 +14,15 @@
     <dependencies>
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-tool</artifactId>
+            <artifactId>ruoyi-user</artifactId>
         </dependency>
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-user</artifactId>
+            <artifactId>ruoyi-business</artifactId>
         </dependency>
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-business</artifactId>
+            <artifactId>ruoyi-info</artifactId>
         </dependency>
     </dependencies>
 </project>

+ 44 - 4
ruoyi-agent/src/main/java/com/ruoyi/agent/service/impl/AgentServiceImpl.java

@@ -2,9 +2,11 @@ package com.ruoyi.agent.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.junziqian.sdk.bean.req.sign.ext.SignatoryReq;
 import com.ruoyi.agent.domain.Agent;
 import com.ruoyi.agent.domain.bo.AgentBalanceRecordBo;
 import com.ruoyi.agent.domain.bo.AgentBo;
@@ -28,7 +30,9 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.BeanCopyUtils;
 import com.ruoyi.common.utils.ShareCodeUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.tool.service.ApplySignService;
+import com.ruoyi.info.base.domain.vo.PlatformInfoVo;
+import com.ruoyi.info.base.service.IPlatformInfoService;
+import com.ruoyi.tool.service.JzqService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -53,9 +57,10 @@ import java.util.stream.Collectors;
 public class AgentServiceImpl implements IAgentService {
 
     private final AgentMapper baseMapper;
-    private final ApplySignService applySignService;
+    private final JzqService jzqService;
     private final IAgentBalanceRecordService agentBalanceRecordService;
     private final IAgentAccountCodeService agentAccountCodeService;
+    private final IPlatformInfoService platformInfoService;
     @Lazy
     @Resource
     private IBusinessService businessService;
@@ -164,11 +169,11 @@ public class AgentServiceImpl implements IAgentService {
         String inviteCode = ShareCodeUtils.idToCode(Long.parseLong(add.getPhone()));
         add.setInviteCode(InviteType.AGENT.getCode() + inviteCode);
         //签合同 TODO
-//        Boolean signFlag = applySignService.uploadPersSign(bo.getIdCard(), bo.getSignImage());
+//        Boolean signFlag = jzqService.uploadPersSign(bo.getIdCard(), bo.getSignImage());
 //        if(!signFlag){
 //            throw new ServiceException(AgentExceptionEnum.Agent_SIGN_FAIL);
 //        }
-//        String contractNo = applySignService.applySign();
+//        String contractNo = jzqService.applySign(buildSignatories(add));
 //        if (StringUtils.isEmpty(contractNo)) {
 //            throw new ServiceException(AgentExceptionEnum.Agent_SIGN_CONTRACT_FAIL);
 //        }
@@ -180,6 +185,41 @@ public class AgentServiceImpl implements IAgentService {
         return flag;
     }
 
+    private JSONArray buildSignatories(Agent agent) {
+        /**
+         * 签约方1(个人)
+         */
+        JSONArray signatories = new JSONArray();
+        SignatoryReq sReq = new SignatoryReq();
+        sReq.setFullName(agent.getRealName()); //姓名
+        sReq.setIdentityType(1); //证件类型
+        sReq.setIdentityCard(agent.getIdCard());//身份证号
+        sReq.setMobile(agent.getPhone()); //手机号
+        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
+        // sReq.setSearchKey("服务组件");//关键字定位签字位置
+        sReq.setNoNeedVerify(1); //取消签约前短信校验
+        sReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
+        sReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
+        signatories.add(sReq);
+
+        PlatformInfoVo platformInfoVo = platformInfoService.getInfo();
+        /**
+         * 签约方2(企业)
+         */
+        SignatoryReq eReq = new SignatoryReq();
+        eReq.setFullName(platformInfoVo.getEnterpriseFullName()); //企业姓名
+        eReq.setIdentityType(12); //证件类型
+        eReq.setIdentityCard(platformInfoVo.getUscCode());//统一社会信用代码
+        eReq.setEmail(platformInfoVo.getEmail()); //在君子签注册认证的邮箱
+        eReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
+        // eReq.setSearchKey("服务组件");//关键字定位签字位置
+        eReq.setSignLevel(0);
+        eReq.setNoNeedVerify(1);
+        eReq.setServerCaAuto(1);//当前签约方自动签署
+        signatories.add(eReq);
+        return signatories;
+    }
+
     /**
      * 修改代理
      *

+ 4 - 0
ruoyi-info/pom.xml

@@ -27,6 +27,10 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-tool</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 0
ruoyi-info/src/main/java/com/ruoyi/info/base/service/IPlatformInfoService.java

@@ -75,4 +75,6 @@ public interface IPlatformInfoService {
     Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
 
     PlatformInfoVo getInfo();
+
+    void organizationCreate();
 }

+ 7 - 0
ruoyi-info/src/main/java/com/ruoyi/info/base/service/impl/PlatformInfoServiceImpl.java

@@ -16,6 +16,7 @@ import com.ruoyi.info.base.domain.vo.PlatformInfoVo;
 import com.ruoyi.info.base.exception.PlatformInfoExceptionEnum;
 import com.ruoyi.info.base.mapper.PlatformInfoMapper;
 import com.ruoyi.info.base.service.IPlatformInfoService;
+import com.ruoyi.tool.service.JzqService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +35,7 @@ import java.util.Map;
 public class PlatformInfoServiceImpl implements IPlatformInfoService {
 
     private final PlatformInfoMapper baseMapper;
+    private final JzqService jzqService;
 
     /**
      * 查询平台信息管理分页
@@ -186,4 +188,9 @@ public class PlatformInfoServiceImpl implements IPlatformInfoService {
         return baseMapper.selectVoOne(new LambdaQueryWrapper<PlatformInfo>().last("limit 1"));
     }
 
+    @Override
+    public void organizationCreate() {
+
+    }
+
 }

+ 0 - 110
ruoyi-tool/src/main/java/com/ruoyi/tool/service/ApplySignService.java

@@ -1,110 +0,0 @@
-package com.ruoyi.tool.service;
-
-import cn.hutool.json.JSONArray;
-import com.junziqian.sdk.bean.ResultInfo;
-import com.junziqian.sdk.bean.req.sign.ext.SignatoryReq;
-import com.junziqian.sdk.util.RequestUtils;
-import com.ruoyi.tool.config.JzqProperties;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.http.entity.mime.content.FileBody;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Base64;
-import java.util.HashMap;
-import java.util.Map;
-
-@Slf4j
-@Component
-public class ApplySignService {
-
-    @Resource
-    private JzqProperties jzqProperties;
-
-    /**
-     * 上传个人自定义印章图片
-     */
-    public Boolean uploadPersSign(String identityCard, String signImgFile) {
-        RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
-        //构建请求参数
-        Map<String, Object> params = new HashMap<>();
-        params.put("identityCard", identityCard);
-        // 解码Base64
-        String base64Data = signImgFile.split(",", 2)[1];
-        byte[] imageBytes = Base64.getDecoder().decode(base64Data);
-        Path tempFile = null;
-        try {
-            tempFile = Files.createTempFile("sign", ".png");
-            Files.write(tempFile, imageBytes);
-            params.put("signImgFile", new FileBody(tempFile.toFile()));
-            ResultInfo<Void> ri = requestUtils.doPost(jzqProperties.getUploadPersSign(), params);
-            log.info("上传个人自定义印章图片:{}", ri.getMsg());
-            return ri.isSuccess();
-        } catch (Exception e) {
-            //不处理
-        } finally {
-            // 使用后删除临时文件(重要!)
-            if (tempFile != null) {
-                tempFile.toFile().deleteOnExit();
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 签约发起-模板类API TODO 待完善
-     */
-    public String applySign() {
-        RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
-        //构建请求参数
-        Map<String, Object> params = new HashMap<>();
-        params.put("contractName", "合同名称"); //合同名称
-        params.put("serverCa", 1); //使用云证书
-        params.put("fileType", 2);
-        params.put("templateNo", "00154");
-        params.put("templateParams", "{xx:xxx}");//可以传json_string:{xx:xxx}
-        params.put("positionType", 0); //指定签字位置类型(0签字坐标,1表单域,2关键字)
-
-        /**
-         * 签约方1(个人)
-         */
-        JSONArray signatories = new JSONArray();
-        SignatoryReq sReq = new SignatoryReq();
-        sReq.setFullName("测试"); //姓名
-        sReq.setIdentityType(1); //证件类型
-        sReq.setIdentityCard("500225xxxx");//身份证号
-        sReq.setMobile("186235xxx"); //手机号
-        sReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
-        // sReq.setSearchKey("服务组件");//关键字定位签字位置
-        sReq.setNoNeedVerify(1); //取消签约前短信校验
-        sReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
-        sReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
-        signatories.add(sReq);
-
-        /**
-         * 签约方2(企业)
-         */
-        SignatoryReq eReq = new SignatoryReq();
-        eReq.setFullName("重庆小熊文化有限公司"); //企业姓名
-        eReq.setIdentityType(11); //证件类型
-        eReq.setIdentityCard("9999999XXXXX9");//营业执照号
-        eReq.setEmail("1XXXX@111.com"); //在君子签注册认证的邮箱
-        eReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
-        // eReq.setSearchKey("服务组件");//关键字定位签字位置
-        eReq.setSignLevel(0);
-        eReq.setNoNeedVerify(1);
-        eReq.setServerCaAuto(1);//当前签约方自动签署
-        signatories.add(eReq);
-
-        params.put("signatories", signatories.toString());
-
-        ResultInfo<String> ri = requestUtils.doPost(jzqProperties.getApplySign(), params);
-        log.info("签约发起-模板类API:{}", ri.getMsg());
-        if (ri.isSuccess()) {
-            return ri.getData();
-        }
-        return null;
-    }
-}

+ 73 - 28
ruoyi-tool/src/main/java/com/ruoyi/tool/controller/JzqOcrController.java

@@ -1,37 +1,88 @@
-package com.ruoyi.tool.controller;
+package com.ruoyi.tool.service;
 
+import cn.hutool.json.JSONArray;
 import com.junziqian.sdk.bean.ResultInfo;
 import com.junziqian.sdk.util.RequestUtils;
-import com.ruoyi.common.core.domain.R;
 import com.ruoyi.tool.config.JzqProperties;
 import com.ruoyi.tool.request.OcrRequest;
 import com.ruoyi.tool.response.OcrBankResponse;
 import com.ruoyi.tool.response.OcrBusinessLicResponse;
 import com.ruoyi.tool.response.OcrIdentityResponse;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.entity.mime.content.FileBody;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
 
-@Api("君子签")
-@RestController
-@RequestMapping("/jzq/ocr")
-@AllArgsConstructor
-public class JzqOcrController {
+@Slf4j
+@Component
+public class JzqService {
 
-    private final JzqProperties jzqProperties;
+    @Resource
+    private JzqProperties jzqProperties;
+
+    /**
+     * 上传个人自定义印章图片
+     */
+    public Boolean uploadPersSign(String identityCard, String signImgFile) {
+        RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
+        //构建请求参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("identityCard", identityCard);
+        // 解码Base64
+        String base64Data = signImgFile.split(",", 2)[1];
+        byte[] imageBytes = Base64.getDecoder().decode(base64Data);
+        Path tempFile = null;
+        try {
+            tempFile = Files.createTempFile("sign", ".png");
+            Files.write(tempFile, imageBytes);
+            params.put("signImgFile", new FileBody(tempFile.toFile()));
+            ResultInfo<Void> ri = requestUtils.doPost(jzqProperties.getUploadPersSign(), params);
+            log.info("上传个人自定义印章图片:{}", ri.getMsg());
+            return ri.isSuccess();
+        } catch (Exception e) {
+            //不处理
+        } finally {
+            // 使用后删除临时文件(重要!)
+            if (tempFile != null) {
+                tempFile.toFile().deleteOnExit();
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 签约发起-模板类API TODO 待完善
+     */
+    public String applySign(JSONArray signatories) {
+        RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
+        //构建请求参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("contractName", "合同名称"); //合同名称
+        params.put("serverCa", 1); //使用云证书
+        params.put("fileType", 2);
+        params.put("templateNo", "00154");
+        params.put("templateParams", "{xx:xxx}");//可以传json_string:{xx:xxx}
+        params.put("positionType", 0); //指定签字位置类型(0签字坐标,1表单域,2关键字)
+        params.put("signatories", signatories.toString());
+
+        ResultInfo<String> ri = requestUtils.doPost(jzqProperties.getApplySign(), params);
+        log.info("签约发起-模板类API:{}", ri.getMsg());
+        if (ri.isSuccess()) {
+            return ri.getData();
+        }
+        return null;
+    }
 
     /**
      * 身份证识别
      */
-    @ApiOperation("身份证识别")
-    @GetMapping("/idcard")
-    public R<OcrIdentityResponse> idcard(OcrRequest request) {
+    public OcrIdentityResponse idcard(OcrRequest request) {
         RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
         //构建请求参数
         Map<String, Object> params = new HashMap<>();
@@ -54,15 +105,13 @@ public class JzqOcrController {
             response.setOverdueTime(data.get("overdueTime") != null ? data.get("overdueTime").toString() : null);
             response.setOrderNo(data.get("orderNo") != null ? data.get("orderNo").toString() : null);
         }
-        return R.ok(response);
+        return response;
     }
 
     /**
      * 银行卡识别
      */
-    @ApiOperation("银行卡识别")
-    @GetMapping("/bank")
-    public R<OcrBankResponse> bank(OcrRequest request) {
+    public OcrBankResponse bank(OcrRequest request) {
         RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
         //构建请求参数
         Map<String, Object> params = new HashMap<>();
@@ -78,15 +127,13 @@ public class JzqOcrController {
             response.setOrderNo(data.get("orderNo") != null ? data.get("orderNo").toString() : null);
             response.setValidDate(data.get("validDate") != null ? data.get("validDate").toString() : null);
         }
-        return R.ok(response);
+        return response;
     }
 
     /**
      * 营业执照识别
      */
-    @ApiOperation("营业执照识别")
-    @GetMapping("/businessLic")
-    public R<OcrBusinessLicResponse> businessLic(OcrRequest request) {
+    public OcrBusinessLicResponse businessLic(OcrRequest request) {
         RequestUtils requestUtils = RequestUtils.init(jzqProperties.getBaseUrl(), jzqProperties.getAppKey(), jzqProperties.getAppSecret());
         //构建请求参数
         Map<String, Object> params = new HashMap<>();
@@ -104,8 +151,6 @@ public class JzqOcrController {
             response.setName(data.get("name") != null ? data.get("name").toString() : null);
             response.setValidity(data.get("validity") != null ? data.get("validity").toString() : null);
         }
-        return R.ok(response);
+        return response;
     }
-
 }
-