Forráskód Böngészése

feat: 增加提示连续审批风险

huangzqa 1 éve
szülő
commit
4e337ffb21

+ 10 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IRiskBusiness.java

@@ -21,4 +21,14 @@ public interface IRiskBusiness {
      * @return 是否无风险信息
      */
     ResponseStatus commitApproveRepetitionRisk(String applyIdcard, String operateIdcard, String createUserName);
+
+    /**
+     * 单人联系审批风险
+     *
+     * @param approveRecordId 审批单ID
+     * @param operateIdcard   审批人
+     * @param createUserName  审批人名称
+     * @return 是否无风险信息
+     */
+    ResponseStatus singleApproveRisk(String approveRecordId, String operateIdcard, String createUserName);
 }

+ 10 - 31
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java

@@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
@@ -351,7 +350,6 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
             logIdList.add(operateLogId);
             //流程出口信息
             OutgoingVo outgoingVo = workflowClientFactory.getWorkflowTaskClient().queryStartOutgoing(flowKey);
-            String riskContent;
             if (outgoingVo != null) {
                 boolean needSaveRiskLog = true;
                 //跳过第一个节点
@@ -375,36 +373,17 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                                     createTime, SchemeTypeEnum.COMMIT_APPROVE_REPETITION_RISK.value,
                                     approveRecordId, processInstanceId, processNo, Collections.singletonList(operateLogId));
                         }
-
                     }
 
-                    //获取单人连续审批风险方案详情
-                    RiskScheme riskScheme = riskSchemeService.selectEnableSchemeByType(SchemeTypeEnum.SINGLE_APPROVE_RISK);
-                    if (riskScheme != null) {
-
-                        int continuousApproveNum = Integer.parseInt(StringUtils.isEmpty(riskScheme.getContinuousApproveNum())
-                                ? "0" : riskScheme.getContinuousApproveNum());
-                        //查询该流程单最近风险范围条数的审批记录
-                        List<ApproveCirculationInfo> list = approveCirculationService.getListByApproveRecordIdAndAgree(approveRecordId);
-                        // 过滤是当前审批人,去除重复节点,且是同意的条数
-                        long count = list.stream()
-                                .filter(item -> item.getOperateUserId().equalsIgnoreCase(operateIdcard))
-                                .map(ApproveCirculationInfo::getNodeName)
-                                .distinct()
-                                .count();
-                        // 需去除申请人节点
-                        int realCount = (int) (count - 1);
-                        if (realCount >= continuousApproveNum) {
-                            riskContent = "审批流程流转过程中,连续" + continuousApproveNum + "个节点审批人相同,审批人都是:"
-                                    + createUserName + "(" + operateIdcard + ")。";
-
-                            //产生《单人连续审批风险》
-                            saveRiskLog(businessCode, riskIp, riskContent,
-                                    title, operateIdcard, createUserName,
-                                    applyIdcard, orgName, orgCode,
-                                    createTime, riskScheme.getSchemeType(),
-                                    approveRecordId, processInstanceId, processNo, logIdList);
-                        }
+                    ResponseStatus singleApproveRiskStatus = riskBusiness.singleApproveRisk(approveRecordId, operateIdcard, createUserName);
+                    if (ResponseUtil.isFail(singleApproveRiskStatus)) {
+                        String singleApproveRiskContent = singleApproveRiskStatus.getMessage();
+                        //产生《单人连续审批风险》
+                        saveRiskLog(businessCode, riskIp, singleApproveRiskContent,
+                                title, operateIdcard, createUserName,
+                                applyIdcard, orgName, orgCode,
+                                createTime, SchemeTypeEnum.SINGLE_APPROVE_RISK.value,
+                                approveRecordId, processInstanceId, processNo, logIdList);
                     }
                 }
             }
@@ -425,7 +404,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
             }
 
         } catch (Exception e) {
-            logger.info("====================构建风险日志异常==============", e);
+            logger.error("====================构建风险日志异常==============", e);
             throw new ApplicationException(e.getMessage());
         }
     }

+ 15 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveTipsBusinessImpl.java

@@ -57,13 +57,14 @@ public class ApproveTipsBusinessImpl implements IApproveTipsBusiness {
         if (ObjectUtil.isNull(approveRecordInfo)) {
             return ResponseUtil.dtoFail("审批单不存在");
         }
+        String approveRecordInfoId = approveRecordInfo.getId();
         BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
 
         String applicantIdcard = approveRecordInfo.getApplicantIdcard();
         String idCard = currentUser.getIdcard();
         String userName = currentUser.getUserName();
 
-        List<OperateTipResp> riskTipList = getRiskTipList(applicantIdcard, idCard, userName);
+        List<OperateTipResp> riskTipList = getRiskTipList(approveRecordInfoId, applicantIdcard, idCard, userName);
         List<OperateTipResp> operateTipRespList = new ArrayList<>(riskTipList);
 
         List<OperateTipResp> securityWarningTipList = getSecurityWarningTipList(applicantIdcard);
@@ -75,12 +76,13 @@ public class ApproveTipsBusinessImpl implements IApproveTipsBusiness {
     /**
      * 获取风险信息提示
      *
-     * @param applicantIdcard 申请人
-     * @param idCard          身份证号
-     * @param userName        用户名
+     * @param approveRecordInfoId 审批单ID
+     * @param applicantIdcard     申请人
+     * @param idCard              身份证号
+     * @param userName            用户名
      * @return 提示信息
      */
-    protected List<OperateTipResp> getRiskTipList(String applicantIdcard, String idCard, String userName) {
+    protected List<OperateTipResp> getRiskTipList(String approveRecordInfoId, String applicantIdcard, String idCard, String userName) {
         List<OperateTipResp> operateTipRespList = new ArrayList<>();
 
         ResponseStatus responseStatus = riskBusiness.commitApproveRepetitionRisk(applicantIdcard, idCard, userName);
@@ -90,6 +92,14 @@ public class ApproveTipsBusinessImpl implements IApproveTipsBusiness {
             operateTipResp.setContent(responseStatus.getMessage());
             operateTipRespList.add(operateTipResp);
         }
+
+        ResponseStatus singleApproveRiskResponseStatus = riskBusiness.singleApproveRisk(approveRecordInfoId, idCard, userName);
+        if (ResponseUtil.isFail(singleApproveRiskResponseStatus)) {
+            OperateTipResp operateTipResp = new OperateTipResp();
+            operateTipResp.setType("风险");
+            operateTipResp.setContent(singleApproveRiskResponseStatus.getMessage());
+            operateTipRespList.add(operateTipResp);
+        }
         return operateTipRespList;
     }
 

+ 46 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/RiskBusinessImpl.java

@@ -1,14 +1,20 @@
 package com.dragonsoft.dcuc.approve.business.impl;
 
 import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IRiskBusiness;
+import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
 import com.dragonsoft.dcuc.approve.model.RiskScheme;
+import com.dragonsoft.dcuc.approve.service.IApproveCirculationService;
 import com.dragonsoft.dcuc.approve.service.IRiskSchemeService;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * <p>
  *
@@ -17,11 +23,19 @@ import org.springframework.stereotype.Component;
  * @author huangzqa
  * @date 2023/7/18
  */
+@Slf4j
 @Component
 public class RiskBusinessImpl implements IRiskBusiness {
 
     private IRiskSchemeService riskSchemeService;
 
+    private IApproveCirculationService approveCirculationService;
+
+    @Autowired
+    public void setApproveCirculationService(IApproveCirculationService approveCirculationService) {
+        this.approveCirculationService = approveCirculationService;
+    }
+
     @Autowired
     public void setRiskSchemeService(IRiskSchemeService riskSchemeService) {
         this.riskSchemeService = riskSchemeService;
@@ -46,4 +60,36 @@ public class RiskBusinessImpl implements IRiskBusiness {
         return ResponseStatus.success();
     }
 
+    @Override
+    public ResponseStatus singleApproveRisk(String approveRecordId, String operateIdcard, String createUserName) {
+        Assert.notBlank(approveRecordId);
+        Assert.notBlank(operateIdcard);
+        Assert.notBlank(createUserName);
+
+        RiskScheme riskScheme = riskSchemeService.selectEnableSchemeByType(SchemeTypeEnum.SINGLE_APPROVE_RISK);
+        if (riskScheme != null) {
+
+            int continuousApproveNum = Integer.parseInt(StringUtils.isEmpty(riskScheme.getContinuousApproveNum())
+                    ? "0" : riskScheme.getContinuousApproveNum());
+            //查询该流程单最近风险范围条数的审批记录
+            List<ApproveCirculationInfo> list = approveCirculationService.getListByApproveRecordIdAndAgree(approveRecordId);
+            // 过滤是当前审批人,去除重复节点,且是同意的条数
+            long count = list.stream()
+                    .filter(item -> item.getOperateUserId().equalsIgnoreCase(operateIdcard))
+                    .map(ApproveCirculationInfo::getNodeName)
+                    .distinct()
+                    .count();
+            // 需去除申请人节点
+            int realCount = (int) (count - 1);
+            log.info("审批单ID:{} 单人连续审批判断:配置的数量{},去除申请人节点的审批节点数:{}", approveRecordId, continuousApproveNum, realCount);
+
+            if (realCount >= continuousApproveNum) {
+                String riskContent = "审批流程流转过程中,连续" + continuousApproveNum + "个节点审批人相同,审批人都是:"
+                        + createUserName + "(" + operateIdcard + ")。";
+                return ResponseStatus.fail(riskContent);
+            }
+        }
+        return ResponseStatus.success();
+    }
+
 }