Kaynağa Gözat

fix: 修复判断单人联系审批风险

Closes B0066256
huangzqa 3 yıl önce
ebeveyn
işleme
e926480efe

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

@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ProofsUtil;
@@ -13,7 +12,6 @@ import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.RequestDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
 import com.dragoninfo.duceap.commons.util.kafka.KafkaServer;
-import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
@@ -95,9 +93,6 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
     @Autowired
     private IRiskSchemeService riskSchemeService;
 
-    @Autowired
-    private IApproveBusiness approveBusiness;
-
     @Autowired
     private IDcucBusiness dcucBusiness;
 
@@ -356,28 +351,26 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
 
                         int continuousApproveNum = Integer.parseInt(StringUtils.isEmpty(riskScheme.getContinuousApproveNum())
                                 ? "0" : riskScheme.getContinuousApproveNum());
-                        //获取审批记录
-                        //查询该流程单的所有的审批记录
-                        List<ApproveCirculationInfo> list = approveCirculationService.getListByApproveRecordId(approveRecordId);
-                        Set<String> idSet = new HashSet<>();
-
-                        if (CollectionUtils.isNotEmpty(list) && list.size() >= continuousApproveNum) {
-                            for (int i = 0; i < continuousApproveNum; i++) {
-                                ApproveCirculationInfo approveCirculationInfo = list.get(i);
-                                // 添加审批人用户ID Set去重
-                                idSet.add(approveCirculationInfo.getOperateUserId());
-                            }
-                            if (idSet.size() == 1) {
-                                riskContent = "审批流程流转过程中,连续" + continuousApproveNum + "个节点审批人相同,审批人都是:" + createUserName + "(" + operateIdcard + ")。";
-
-
-                                //产生《单人连续审批风险》
-                                saveRiskLog(businessCode, riskIp, riskContent,
-                                        title, operateIdcard, createUserName,
-                                        applyIdcard, orgName, orgCode,
-                                        createTime, riskScheme.getSchemeType(),
-                                        approveRecordId, processInstanceId, processNo, logIdList);
-                            }
+                        //查询该流程单最近风险范围条数的审批记录
+                        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);
                         }
                     }
                 }

+ 8 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveCirculationService.java

@@ -38,6 +38,14 @@ public interface IApproveCirculationService {
      */
     List<ApproveCirculationInfo> getListByApproveRecordId(String approveRecordId);
 
+    /**
+     * 根据审批记录号获取最近都是同意的几条流转信息
+     *
+     * @param approveRecordId 审批记录号
+     * @return 流转信息列表
+     */
+    List<ApproveCirculationInfo> getListByApproveRecordIdAndAgree(String approveRecordId);
+
     /**
      * 根据审批记录号、任务KEY获取流转信息
      *

+ 10 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveCirculationImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.mapper.ApproveCirculationMapper;
 import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
 import com.dragonsoft.dcuc.approve.model.resp.ApproveCommentVo;
@@ -51,6 +52,15 @@ public class ApproveCirculationImpl implements IApproveCirculationService {
         return approveCirculationMapper.selectList(where);
     }
 
+    @Override
+    public List<ApproveCirculationInfo> getListByApproveRecordIdAndAgree(String approveRecordId) {
+        LambdaQueryWrapper<ApproveCirculationInfo> where = Wrappers.lambdaQuery();
+        where.eq(ApproveCirculationInfo::getApproveRecordId, approveRecordId);
+        where.eq(ApproveCirculationInfo::getOperateType, ApproveWorkFlowOperationEnum.COMPLETE_AGREE.value);
+        where.orderByDesc(ApproveCirculationInfo::getCreateTime);
+        return approveCirculationMapper.selectList(where);
+    }
+
     @Override
     public List<ApproveCirculationInfo> getListByApproveRecordIdAndTaskKey(String approveRecordId, String taskKey) {
         LambdaQueryWrapper<ApproveCirculationInfo> where = Wrappers.lambdaQuery();