| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- package me.zhengjie.domain.notary.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import me.zhengjie.base.ResultCode;
- import me.zhengjie.base.config.thread.ThreadPoolExecutorUtil;
- import me.zhengjie.base.face.FaceCompareHandle;
- import me.zhengjie.base.util.FileUploadUtil;
- import me.zhengjie.base.util.JuheServiceUtil;
- import me.zhengjie.base.util.tencent.utils.HttpClientUtil;
- import me.zhengjie.base.util.tencent.utils.Img2Base64Util;
- import me.zhengjie.dao.mybatis.FaceCompareRepository;
- import me.zhengjie.dao.mybatis.entity.*;
- import me.zhengjie.dao.mybatis.mapper.ContractOrderMapper;
- import me.zhengjie.dao.mybatis.mapper.FileInfoMapper;
- import me.zhengjie.dao.mybatis.mapper.SysUserMapper;
- import me.zhengjie.domain.img.CompareImageDomain;
- import me.zhengjie.domain.notary.NotaryDomain;
- import me.zhengjie.utils.RedisUtils;
- import org.springframework.stereotype.Component;
- import org.springframework.util.ObjectUtils;
- import java.io.*;
- import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
- @Component
- @RequiredArgsConstructor
- @Slf4j
- public class NotaryDomainImpl implements NotaryDomain {
- private final SysUserMapper userMapper;
- private final ContractOrderMapper contractOrderMapper;
- private final RedisUtils redis;
- private final FaceCompareRepository thirdPartyInterfaceRepository;
- private final FaceCompareHandle faceCompareHandle;
- /**
- * 获取base64取消文件头
- *
- * @param base64
- * @return
- */
- public String getBase64(String base64) {
- String[] base64s = base64.split("base64");
- if (base64s != null && base64s.length > 1) {
- base64 = base64s[1];
- }
- return base64;
- }
- /**
- * app端的人脸核身
- *
- * @param compareImageDomain
- * @return
- */
- public ResultCode appCompareFace(CompareImageDomain compareImageDomain) {
- FaceCompareEntity thirdPartyInterfaceEntity = new FaceCompareEntity();
- String base64 = compareImageDomain.getBase64();
- if (base64 == null) {
- return ResultCode.PARAM_IS_BLANK;
- }
- base64 = getBase64(base64);
- String idCard = compareImageDomain.getIdCard();
- String nickName = compareImageDomain.getName();
- //根据业务编号获取订单 判断当事人名字
- String businessNo = compareImageDomain.getBusinessNo();
- QueryWrapper<ContractOrderEntity> contractOrderEntityQueryWrapper = new QueryWrapper<>();
- contractOrderEntityQueryWrapper.eq("business_no", businessNo);
- ContractOrderEntity contractOrderEntity = contractOrderMapper.selectOne(contractOrderEntityQueryWrapper);
- Integer id = null;
- //看是哪个当事人
- if (nickName.equals(contractOrderEntity.getName())) {
- id = contractOrderEntity.getCompareImgId();
- } else if (nickName.equals(contractOrderEntity.getJointName())) {
- id = contractOrderEntity.getJointCompareImgId();
- }
- //后面需要的三个参数 base64 身份证号 姓名
- String redisCount = "idCard:" + idCard + ":COUNT:";
- Integer count = null;
- if (redis.hasKey(redisCount)) {
- count = (Integer) redis.get(redisCount);
- System.err.println("redis存入次数" + count);
- }
- File base = null;
- try {
- base = File.createTempFile("compare", ".jpeg");
- base.deleteOnExit();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- if (!Img2Base64Util.generateImage(base64, base.getPath())) {
- log.info("base64转图片异常");
- return ResultCode.FACEAUTH_FAIL;
- }
- if (!faceCompareHandle.imageSingle(base)){
- return ResultCode.SINGLE_PERSON;
- }
- thirdPartyInterfaceEntity.setBusinessNo(compareImageDomain.getBusinessNo());
- thirdPartyInterfaceEntity.setConsultNo(contractOrderEntity.getConsultNo());
- FileInfoEntity fileInfo = faceCompareHandle.uploadFaceFile(base64);
- boolean redisFlag = (count != null && count >= 2);
- if (ObjectUtils.isEmpty(id) || redisFlag) {
- if (! faceCompareHandle.imageCenter(base)){
- return ResultCode.IMAGE_NOT_STANDARD;
- }
- //要做人脸核身
- thirdPartyInterfaceEntity = JuheServiceUtil.URLPost(idCard, nickName, base64,thirdPartyInterfaceEntity);
- thirdPartyInterfaceEntity.setFileId(fileInfo.getId() + "");
- thirdPartyInterfaceRepository.insert(thirdPartyInterfaceEntity);
- if (thirdPartyInterfaceEntity.getResult() == 1) {
- ContractOrderEntity orderEntity = new ContractOrderEntity();
- orderEntity.setId(contractOrderEntity.getId());
- //判断是共同责任人还是当事人
- if (nickName.equals(contractOrderEntity.getName())) {
- orderEntity.setCompareImgId(fileInfo.getId());
- }
- if (nickName.equals(contractOrderEntity.getJointName())) {
- orderEntity.setJointCompareImgId(fileInfo.getId());
- }
- contractOrderMapper.updateById(orderEntity);
- log.info("当事人人脸核身通过");
- redis.del(redisCount);
- return ResultCode.SUCCESS;
- }
- return ResultCode.LIVE_VIDEO_INVALID;
- }
- //要做照片比对
- /*if (!compareImage(base, id, redisCount, count)) {
- return ResultCode.LIVE_VIDEO_INVALID;
- }*/
- ResultCode resultCode = faceCompareHandle.compareImage(base, id, redisCount, thirdPartyInterfaceEntity);
- if (resultCode.code()==100){
- if (count != null) {
- redis.del(redisCount);
- }
- }
- return resultCode;
- }
- /**
- * 照片比对
- *
- * @param compareImageDomain
- * @return
- */
- public ResultCode compareFace(CompareImageDomain compareImageDomain) {
- FaceCompareEntity faceCompareEntity = new FaceCompareEntity();
- String base64 = compareImageDomain.getBase64();
- if (base64 == null) {
- return ResultCode.PARAM_IS_BLANK;
- }
- base64 = getBase64(base64);
- //先判断是银行客户经理还是当事人
- String roleId = compareImageDomain.getRoleId();
- SysUserEntity sysUserEntity = null;
- String idCard = compareImageDomain.getIdCard();
- String nickName = compareImageDomain.getName();
- QueryWrapper<ContractOrderEntity> orderEntityQueryWrapper = new QueryWrapper<>();
- orderEntityQueryWrapper.eq("business_no", compareImageDomain.getBusinessNo());
- ContractOrderEntity contractOrder = contractOrderMapper.selectOne(orderEntityQueryWrapper);
- if (ObjectUtils.isEmpty(contractOrder)) {
- return ResultCode.PARAM_IS_INVALID;
- }
- Integer compareImageId = null;
- boolean flag = "-1".equals(roleId);
- if (flag) {
- //说明是银行客户经理
- QueryWrapper<ContractOrderEntity> contractOrderEntityQueryWrapper = new QueryWrapper<>();
- //通过business_no 和 客户经理姓名 判断是不是当前客户经理
- contractOrderEntityQueryWrapper.eq("business_no", compareImageDomain.getBusinessNo()).eq("customer_name", compareImageDomain.getName());
- ContractOrderEntity contractOrderEntity = contractOrderMapper.selectOne(contractOrderEntityQueryWrapper);
- if (ObjectUtils.isEmpty(contractOrderEntity)) {
- return ResultCode.ACCOUNT_MANAGER_NO_ASSIGNED;
- }
- QueryWrapper<SysUserEntity> sysUserEntityQueryWrapper = new QueryWrapper<>();
- sysUserEntityQueryWrapper.eq("id_card", idCard).eq("nick_name", nickName);
- sysUserEntity = userMapper.selectOne(sysUserEntityQueryWrapper);
- } else {
- //说明是当事人
- if (nickName.equals(contractOrder.getName())) {
- compareImageId = contractOrder.getCompareImgId();
- } else if (nickName.equals(contractOrder.getJointName())) {
- compareImageId = contractOrder.getJointCompareImgId();
- }
- }
- faceCompareEntity.setBusinessNo(compareImageDomain.getBusinessNo());
- faceCompareEntity.setConsultNo(contractOrder.getConsultNo());
- faceCompareEntity.setIdCard(idCard);
- faceCompareEntity.setName(nickName);
- //后面需要的三个参数 base64 身份证号 姓名
- String redisCount = "idCard:" + idCard + ":COUNT:";
- Integer count = null;
- if (redis.hasKey(redisCount)) {
- count = (Integer) redis.get(redisCount);
- System.err.println("redis存入次数" + count);
- }
- if (compareImageDomain.getBase64()==null){
- return ResultCode.PARAM_IS_BLANK;
- }
- File base = null;
- try {
- base = File.createTempFile("compare", ".jpeg");
- base.deleteOnExit();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- if (!Img2Base64Util.generateImage(base64, base.getPath())) {
- log.info("base64转图片异常");
- return ResultCode.FACEAUTH_FAIL;
- }
- if (!faceCompareHandle.imageSingle(base)){
- return ResultCode.SINGLE_PERSON;
- }
- boolean redisFlag = (count != null && count >= 2);
- if (flag) {
- //说明是客户经理
- if (sysUserEntity.getCompareImgId() == null || redisFlag) {
- if (! faceCompareHandle.imageCenter(base)){
- return ResultCode.IMAGE_NOT_STANDARD;
- }
- //说明客户经理需要做人脸核身
- FileInfoEntity fileInfo = faceCompareHandle.uploadFaceFile(base64);
- faceCompareEntity = JuheServiceUtil.URLPost(idCard, nickName, base64,faceCompareEntity);
- faceCompareEntity.setFileId(fileInfo.getId() + "");
- if (faceCompareEntity.getResult() == 1) {
- //上传图片到minio FileInfo
- SysUserEntity bank = new SysUserEntity();
- bank.setUserId(sysUserEntity.getUserId());
- bank.setCompareImgId(fileInfo.getId());
- userMapper.updateById(bank);
- log.info("银行客户经理人脸核身通过");
- redis.del(redisCount);
- thirdPartyInterfaceRepository.insert(faceCompareEntity);
- return ResultCode.SUCCESS;
- }
- log.info("客户经理人脸核身失败");
- thirdPartyInterfaceRepository.insert(faceCompareEntity);
- return ResultCode.LIVE_VIDEO_INVALID;
- }
- } else if (ObjectUtils.isEmpty(compareImageId) || redisFlag) {
- if (! faceCompareHandle.imageCenter(base)){
- return ResultCode.IMAGE_NOT_STANDARD;
- }
- //说明当事人需要做人脸核身
- FileInfoEntity fileInfo = faceCompareHandle.uploadFaceFile(base64);
- faceCompareEntity = JuheServiceUtil.URLPost(idCard, nickName, base64,faceCompareEntity);
- faceCompareEntity.setFileId(fileInfo.getId() + "");
- thirdPartyInterfaceRepository.insert(faceCompareEntity);
- if (faceCompareEntity.getResult() == 1) {
- //上传图片到minio FileInfo;
- ContractOrderEntity orderEntity = new ContractOrderEntity();
- orderEntity.setId(contractOrder.getId());
- //判断是共同责任人还是当事人
- if (nickName.equals(contractOrder.getName())) {
- orderEntity.setCompareImgId(fileInfo.getId());
- }
- if (nickName.equals(contractOrder.getJointName())) {
- orderEntity.setJointCompareImgId(fileInfo.getId());
- }
- redis.del(redisCount);
- contractOrderMapper.updateById(orderEntity);
- log.info("当事人人脸核身通过");
- return ResultCode.SUCCESS;
- }
- log.info("当事人人脸核身失败");
- return ResultCode.LIVE_VIDEO_INVALID;
- }
- //如果不用做人脸核身 那么就去做照片比对
- //获取比较图片的id
- Integer id = null;
- if (!ObjectUtils.isEmpty(sysUserEntity)) {
- id = sysUserEntity.getCompareImgId();
- }
- if (!ObjectUtils.isEmpty(compareImageId)) {
- id = compareImageId;
- }
- //要做照片比对
- /*if (!compareImage(base, id, redisCount, count)) {
- return ResultCode.LIVE_VIDEO_INVALID;
- }*/
- ResultCode resultCode = faceCompareHandle.compareImage(base, id, redisCount, faceCompareEntity);
- if (resultCode.code()==100){
- if (count != null) {
- redis.del(redisCount);
- }
- }
- return resultCode;
- }
- }
|