Procházet zdrojové kódy

fix 待办流程提醒

tjf před 7 měsíci
rodič
revize
70a43b774c

+ 21 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OcrController.java

@@ -1,11 +1,14 @@
 package com.ruoyi.web.controller.common;
 
 
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponseBody;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.IdCardVo;
 import com.ruoyi.common.core.domain.SysUserIdcardVo;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.IdCardUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,6 +22,9 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/ocr")
 public class OcrController {
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 身份证识别
      *
@@ -27,7 +33,7 @@ public class OcrController {
     @PostMapping("/ocrIdCard")
     @RepeatSubmit(interval = 1000, message = "请求过于频繁")
     public AjaxResult ocrIdCard(@RequestBody IdCardVo idCardVo) {
-        return IdCardUtil.idCard(idCardVo.getImage(),idCardVo.getIdCardSide());
+        return IdCardUtil.idCard(idCardVo.getImage(), idCardVo.getIdCardSide());
     }
 
     /**
@@ -63,6 +69,20 @@ public class OcrController {
         return IdCardUtil.ocrSampleAliYun(sysUserIdcardVo);
     }
 
+    /**
+     * 人脸识别阿里云金融级实人认证H5
+     *
+     * @return
+     */
+    @PostMapping("/ocrSampleAliYunH")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    public AjaxResult ocrSampleAliYunH(@RequestBody SysUserIdcardVo sysUserIdcardVo) {
+        InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject result = IdCardUtil.initFaceVerifyH5(sysUserIdcardVo);
+        String certifyId = result.getCertifyId();
+        redisCache.setCacheObject(certifyId, sysUserIdcardVo);
+        return AjaxResult.success(result);
+    }
+
     /**
      * 手写识别
      *

+ 50 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/idcard/SysUserIdcardController.java

@@ -1,28 +1,25 @@
 package com.ruoyi.web.controller.idcard;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.SysUserIdcardVo;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.domain.idcard.SysUserIdcard;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.idcard.ISysUserIdcardService;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 用户身份证信息Controller
@@ -42,6 +39,9 @@ public class SysUserIdcardController extends BaseController {
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询用户身份证信息列表
      */
@@ -93,7 +93,41 @@ public class SysUserIdcardController extends BaseController {
             tokenService.setLoginUser(loginUser);
             return toAjax(sysUserIdcardService.insertSysUserIdcard(sysUserIdcard));
         }
-        return  error("人脸认证更新失败");
+        return error("人脸认证更新失败");
+    }
+
+
+    /**
+     * 新增用户身份证信息H5
+     */
+    @Log(title = "用户身份证信息", businessType = BusinessType.INSERT)
+    @PostMapping("/h")
+    public AjaxResult addH5(@RequestBody SysUserIdcard sysUserIdcard) {
+        String certifyId = sysUserIdcard.getCertifyId();
+        SysUserIdcardVo sysUserIdcardVo = redisCache.getCacheObject(certifyId);
+        sysUserIdcard.setUserId(sysUserIdcardVo.getUserId());
+        sysUserIdcard.setIdCard(sysUserIdcardVo.getIdCard());
+        sysUserIdcard.setRealName(sysUserIdcardVo.getRealName());
+        sysUserIdcard.setExpirationDate(sysUserIdcardVo.getExpirationDate());
+        sysUserIdcard.setPhonenumber(sysUserIdcardVo.getPhonenumber());
+        sysUserIdcard.setAddress(sysUserIdcardVo.getAddress());
+        sysUserIdcard.setFront(sysUserIdcardVo.getFront());
+        sysUserIdcard.setBack(sysUserIdcardVo.getBack());
+        LoginUser loginUser = getLoginUser();
+        SysUser currentUser = loginUser.getUser();
+        currentUser.setInitFace("Y");
+        userService.checkUserAllowed(currentUser);
+        userService.checkUserDataScope(currentUser.getUserId());
+        currentUser.setUpdateBy(getUsername());
+        if (userService.updateUserStatus(currentUser) > 0) {
+            currentUser.setInitFace("Y");
+            // 更新缓存用户信息
+            tokenService.setLoginUser(loginUser);
+            //删除redis
+            redisCache.deleteObject(certifyId);
+            return toAjax(sysUserIdcardService.insertSysUserIdcard(sysUserIdcard));
+        }
+        return error("人脸认证更新失败");
     }
 
     /**

+ 71 - 29
ruoyi-common/src/main/java/com/ruoyi/common/utils/IdCardUtil.java

@@ -6,49 +6,32 @@ package com.ruoyi.common.utils;
  * @Describe:
  */
 
-import cn.hutool.http.HttpRequest;
-import com.alibaba.fastjson2.JSONArray;
-import com.aliyun.cloudauth20190307.Client;
-import com.aliyun.cloudauth20190307.models.*;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.teautil.models.RuntimeOptions;
-
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-
 import cn.hutool.http.HttpUtil;
-
-import java.util.Arrays;
-import java.util.List;
-
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.aliyun.cloudauth20190307.Client;
-import com.aliyun.cloudauth20190307.models.*;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponse;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponseBody;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.models.RuntimeOptions;
-import com.ruoyi.common.core.domain.SysUserIdcardVo;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.SysUserIdcardVo;
 import okhttp3.*;
-import org.apache.http.client.HttpClient;
-import org.apache.poi.util.IOUtils;
-import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
 
-
-import static com.ruoyi.common.constant.CommonConstants.*;
+import static com.ruoyi.common.constant.CommonConstants.BACK;
+import static com.ruoyi.common.constant.CommonConstants.FRONT;
 
 public class IdCardUtil {
     /**
@@ -738,6 +721,65 @@ public class IdCardUtil {
         return resultObject;
     }
 
+    /**
+     * 阿里云调用人脸识别H5
+     * 每次开始认证前通过本接口获取CertifyId,用来串联认证请求中的各个接口。
+     */
+    public static InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject initFaceVerifyH5(SysUserIdcardVo sysUserIdcardVo) {
+        InitFaceVerifyRequest request = new InitFaceVerifyRequest();
+        // 请输入场景ID+L。1000009979场景id固定值
+        request.setSceneId(1000009979L);
+        // 设置商户请求的唯一标识。
+        request.setOuterOrderNo(UUID.randomUUID().toString().replaceAll("-", ""));
+        // 认证方案。
+        request.setProductCode("ID_PRO");
+        // 模式。要进行活体检测的类型。取值:
+        //LIVENESS(默认):眨眼动作活体检测。
+        //
+        //PHOTINUS_LIVENESS:眨眼动作活体+炫彩活体双重检测。
+        //
+        //MULTI_ACTION:多动作活体检测。当前为眨眼+任意摇头检测。
+        request.setModel("PHOTINUS_LIVENESS");
+        //不同证件类型,取值均为IDENTITY_CARD
+        request.setCertType("IDENTITY_CARD");
+        //您的终端用户的真实姓名
+        request.setCertName(sysUserIdcardVo.getRealName());
+        //您的终端用户的证件号码。
+        request.setCertNo(sysUserIdcardVo.getIdCard());
+        // MetaInfo环境参数。
+        request.setMetaInfo(sysUserIdcardVo.getMetaInfo());
+        //业务页面回跳的目标地址。
+        String returnUrl = sysUserIdcardVo.getReturnUrl();
+        if (StringUtils.isNotEmpty(returnUrl)) {
+            //H5的model不一样
+            request.setModel("MULTI_ACTION");
+            request.setReturnUrl(returnUrl);
+        }
+        //request.setMobile("130xxxxxxxx");
+        //request.setIp("114.xxx.xxx.xxx");
+        //request.setUserId("12345xxxx");
+        //request.setCallbackUrl("https://www.aliyundoc.com");
+        //request.setCallbackToken("xxxxx");
+        // 如需开启个人信息加密传输。
+        //request.setEncryptType("SM2");
+        //request.setCertName("BCRD/7ZkNy7Q*****M1BMBezZe8GaYHrLwyJv558w==");
+        //request.setCertNo("BMjsstxK3S4b1YH*****Pet8ECObfxmLN92SLsNg==");
+
+        // 推荐,支持服务路由。
+        InitFaceVerifyResponse response = initFaceVerifyAutoRoute(request);
+
+        // 不支持服务自动路由。
+        //InitFaceVerifyResponse response = initFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request);
+
+        InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject resultObject = response.getBody().getResultObject();
+
+        System.out.println(response.getBody().getRequestId());
+        System.out.println(response.getBody().getCode());
+        System.out.println(response.getBody().getMessage());
+        System.out.println(response.getBody().getResultObject() == null ? null
+                : response.getBody().getResultObject().getCertifyId());
+        return resultObject;
+    }
     private static InitFaceVerifyResponse initFaceVerifyAutoRoute(InitFaceVerifyRequest request) {
         // 第一个为主区域Endpoint,第二个为备区域Endpoint。
         List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com");

+ 59 - 20
ruoyi-system/src/main/java/com/ruoyi/system/domain/idcard/SysUserIdcard.java

@@ -1,11 +1,9 @@
 package com.ruoyi.system.domain.idcard;
 
-import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
-import com.ruoyi.system.domain.loan.LoanApplication;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
+import com.ruoyi.system.domain.loan.LoanApplication;
 
 import java.util.List;
 
@@ -48,6 +46,10 @@ public class SysUserIdcard extends BaseEntity
     /** 反面地址 */
     @Excel(name = "反面地址")
     private String back;
+    /**
+     * H5新增是使用
+     */
+    private String certifyId;
     /**
      * 企业数量
      */
@@ -65,6 +67,41 @@ public class SysUserIdcard extends BaseEntity
      */
     private List<LoanApplication> loanApplicationList;
 
+    /**
+     * MetaInfo环境参数,需要通过客户端SDK获取
+     *
+     * {"zimVer":"3.0.0","appVersion": "1","bioMetaInfo": "4.1.0:1150****,0","appName": "com.aliyun.antcloudauth","deviceType": "ios","osVersion": "iOS 10.3.2","apdidToken": "","deviceModel": "iPhone9,1"}
+     */
+    private String metaInfo;
+    /**
+     *     您的业务页面回跳的目标地址。
+     */
+    private String returnUrl;
+
+    public String getMetaInfo() {
+        return metaInfo;
+    }
+
+    public void setMetaInfo(String metaInfo) {
+        this.metaInfo = metaInfo;
+    }
+
+    public String getReturnUrl() {
+        return returnUrl;
+    }
+
+    public void setReturnUrl(String returnUrl) {
+        this.returnUrl = returnUrl;
+    }
+
+    public String getCertifyId() {
+        return certifyId;
+    }
+
+    public void setCertifyId(String certifyId) {
+        this.certifyId = certifyId;
+    }
+
     public Integer getSysUserEnterpriseNum() {
         return sysUserEnterpriseNum;
     }
@@ -184,21 +221,23 @@ public class SysUserIdcard extends BaseEntity
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("idCard", getIdCard())
-            .append("realName", getRealName())
-            .append("expirationDate", getExpirationDate())
-            .append("phonenumber", getPhonenumber())
-            .append("address", getAddress())
-            .append("front", getFront())
-            .append("back", getBack())
-            .append("delFlag", getDelFlag())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
+        return "SysUserIdcard{" +
+                "userId=" + userId +
+                ", idCard='" + idCard + '\'' +
+                ", realName='" + realName + '\'' +
+                ", expirationDate='" + expirationDate + '\'' +
+                ", phonenumber='" + phonenumber + '\'' +
+                ", address='" + address + '\'' +
+                ", front='" + front + '\'' +
+                ", back='" + back + '\'' +
+                ", certifyId='" + certifyId + '\'' +
+                ", sysUserEnterpriseNum=" + sysUserEnterpriseNum +
+                ", sysUserEnterpriseList=" + sysUserEnterpriseList +
+                ", loanApplicationNum=" + loanApplicationNum +
+                ", loanApplicationList=" + loanApplicationList +
+                ", metaInfo='" + metaInfo + '\'' +
+                ", returnUrl='" + returnUrl + '\'' +
+                ", delFlag='" + delFlag + '\'' +
+                '}';
     }
 }