Pārlūkot izejas kodu

feat: 增加操作提示

huangzqa 1 gadu atpakaļ
vecāks
revīzija
66db270d35

+ 11 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/IApproveFacade.java

@@ -16,6 +16,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -77,6 +78,16 @@ public interface IApproveFacade {
     @RequestMapping(value = "v1/approve-operate", method = RequestMethod.PUT)
     ResponseDTO<OperateRespVO> approveOperate(@Validated @RequestBody ApproveOperateReqVO approveOperateReqVO);
 
+    /**
+     * 审批操作提示
+     *
+     * @param processInstanceId 流程实例ID
+     * @return 状态
+     */
+    @ApiOperation(value = "审批操作提示", notes = "审批操作提示")
+    @RequestMapping(value = "v1/approve-operate-tips/{processInstanceId}", method = RequestMethod.GET)
+    ResponseDTO<List<OperateTipResp>> approveOperatePreTip(@Validated @NotBlank @PathVariable String processInstanceId);
+
     /**
      * 查看红名单状态
      *

+ 23 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/OperateTipResp.java

@@ -0,0 +1,23 @@
+package com.dragonsoft.dcuc.approve.model.resp;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+@Data
+public class OperateTipResp {
+
+    @ApiModelProperty(value = "类型")
+    private String type;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+}

+ 0 - 2
approve-core-service/pom.xml

@@ -43,7 +43,6 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-api</artifactId>
-            <version>2.1.2-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>com.dragonsoft</groupId>
@@ -160,7 +159,6 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-model</artifactId>
-            <version>2.1.2-SNAPSHOT</version>
         </dependency>
 
         <dependency>

+ 26 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveTipsBusiness.java

@@ -0,0 +1,26 @@
+package com.dragonsoft.dcuc.approve.business;
+
+import com.dragonsoft.dcuc.approve.model.resp.OperateTipResp;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+public interface IApproveTipsBusiness {
+
+    /**
+     * 操作提示
+     *
+     * @param processInstanceId 流程实例ID
+     * @return 状态
+     */
+    ResponseDTO<List<OperateTipResp>> operateTips(String processInstanceId);
+
+}

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

@@ -0,0 +1,24 @@
+package com.dragonsoft.dcuc.approve.business;
+
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+public interface IRiskBusiness {
+
+    /**
+     * 申请人与审批人相同风险
+     *
+     * @param applyIdcard    申请人
+     * @param operateIdcard  操作人
+     * @param createUserName 名称
+     * @return 是否无风险信息
+     */
+    ResponseStatus commitApproveRepetitionRisk(String applyIdcard, String operateIdcard, String createUserName);
+}

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

@@ -7,12 +7,14 @@ 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;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.RequestDisposeTypeEnum;
 import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.business.IRiskBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
 import com.dragonsoft.dcuc.approve.dto.ApproveLogDTO;
 import com.dragonsoft.dcuc.approve.enumresources.*;
@@ -27,6 +29,7 @@ import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.*;
 import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import com.dragonsoft.duceap.base.exception.ApplicationException;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
@@ -79,6 +82,13 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
 
     private IDcucBusiness dcucBusiness;
 
+    private IRiskBusiness riskBusiness;
+
+    @Autowired
+    public void setRiskBusiness(IRiskBusiness riskBusiness) {
+        this.riskBusiness = riskBusiness;
+    }
+
     @Autowired
     public void setFlowManageLogService(IFlowManageLogService flowManageLogService) {
         this.flowManageLogService = flowManageLogService;
@@ -129,6 +139,7 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         this.dcucBusiness = dcucBusiness;
     }
 
+
     /**
      * 操作日志/请求日志构建
      *
@@ -352,24 +363,19 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 }
 
                 if (needSaveRiskLog) {
-                    // 提交人、审批人重复风险判断,跳过第一个节点,只有操作日志才分析提交、审批人风险
                     if (logTypeEnum.equals(LogTypeEnum.OPERATE_LOG)) {
+                        // 提交人、审批人重复风险判断,跳过第一个节点,只有操作日志才分析提交、审批人风险
+                        ResponseStatus commitApproveResponseStatus = riskBusiness.commitApproveRepetitionRisk(applyIdcard, operateIdcard, createUserName);
+                        if (ResponseUtil.isFail(commitApproveResponseStatus)) {
+                            String commitRiskContent = commitApproveResponseStatus.getMessage();
 
-                        if (applyIdcard.equals(operateIdcard)) {
-
-                            RiskScheme riskScheme = riskSchemeService.selectEnableSchemeByType(SchemeTypeEnum.COMMIT_APPROVE_REPETITION_RISK);
-                            if (riskScheme != null) {
-                                riskContent = "审批流程中,提交人与审批人都是:" + createUserName + "(" + operateIdcard + ")。";
-                                //除第一个节点外,审请人和处理人同为一个人,产生《提交人与审批人重复风险》
-
-                                saveRiskLog(businessCode, riskIp, riskContent,
-                                        title, operateIdcard, createUserName,
-                                        applyIdcard, orgName, orgCode,
-                                        createTime, riskScheme.getSchemeType(),
-                                        approveRecordId, processInstanceId, processNo, Collections.singletonList(operateLogId));
-                            }
-
+                            saveRiskLog(businessCode, riskIp, commitRiskContent,
+                                    title, operateIdcard, createUserName,
+                                    applyIdcard, orgName, orgCode,
+                                    createTime, SchemeTypeEnum.COMMIT_APPROVE_REPETITION_RISK.value,
+                                    approveRecordId, processInstanceId, processNo, Collections.singletonList(operateLogId));
                         }
+
                     }
 
                     //获取单人连续审批风险方案详情

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

@@ -0,0 +1,69 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.IApproveTipsBusiness;
+import com.dragonsoft.dcuc.approve.business.IRiskBusiness;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.model.resp.OperateTipResp;
+import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+@Component
+public class ApproveTipsBusinessImpl implements IApproveTipsBusiness {
+
+    private IApproveRecordService approveRecordService;
+
+    private IRiskBusiness riskBusiness;
+
+    @Autowired
+    public void setRiskBusiness(IRiskBusiness riskBusiness) {
+        this.riskBusiness = riskBusiness;
+    }
+
+    @Autowired
+    public void setApproveRecordService(IApproveRecordService approveRecordService) {
+        this.approveRecordService = approveRecordService;
+    }
+
+    @Override
+    public ResponseDTO<List<OperateTipResp>> operateTips(String processInstanceId) {
+        ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);
+        if (ObjectUtil.isNull(approveRecordInfo)) {
+            return ResponseUtil.dtoFail("审批单不存在");
+        }
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+
+        String applicantIdcard = approveRecordInfo.getApplicantIdcard();
+        String idCard = currentUser.getIdcard();
+        String userName = currentUser.getUserName();
+
+        List<OperateTipResp> operateTipRespList = new ArrayList<>();
+
+        ResponseStatus responseStatus = riskBusiness.commitApproveRepetitionRisk(applicantIdcard, idCard, userName);
+        if (ResponseUtil.isFail(responseStatus)) {
+            OperateTipResp operateTipResp = new OperateTipResp();
+            operateTipResp.setType("风险");
+            operateTipResp.setContent(responseStatus.getMessage());
+        }
+
+        return ResponseUtil.newInstance(operateTipRespList);
+    }
+
+}

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

@@ -0,0 +1,49 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import cn.hutool.core.lang.Assert;
+import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
+import com.dragonsoft.dcuc.approve.business.IRiskBusiness;
+import com.dragonsoft.dcuc.approve.model.RiskScheme;
+import com.dragonsoft.dcuc.approve.service.IRiskSchemeService;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+@Component
+public class RiskBusinessImpl implements IRiskBusiness {
+
+    private IRiskSchemeService riskSchemeService;
+
+    @Autowired
+    public void setRiskSchemeService(IRiskSchemeService riskSchemeService) {
+        this.riskSchemeService = riskSchemeService;
+    }
+
+    @Override
+    public ResponseStatus commitApproveRepetitionRisk(String applyIdcard, String operateIdcard, String createUserName) {
+        Assert.notBlank(applyIdcard);
+        Assert.notBlank(operateIdcard);
+        Assert.notBlank(createUserName);
+
+        if (applyIdcard.equals(operateIdcard)) {
+
+            RiskScheme riskScheme = riskSchemeService.selectEnableSchemeByType(SchemeTypeEnum.COMMIT_APPROVE_REPETITION_RISK);
+            if (riskScheme != null) {
+                String riskContent = "审批流程中,提交人与审批人都是:" + createUserName + "(" + operateIdcard + ")。";
+                //除第一个节点外,审请人和处理人同为一个人,产生《提交人与审批人重复风险》
+
+                return ResponseStatus.fail(riskContent);
+            }
+        }
+        return ResponseStatus.success();
+    }
+
+}

+ 14 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveFacade.java

@@ -3,6 +3,7 @@ package com.dragonsoft.dcuc.approve.facade;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragonsoft.dcuc.approve.business.IApproveTipsBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
@@ -56,6 +57,13 @@ public class ApproveFacade implements IApproveFacade {
 
     private IDcucAuthBusiness dcucAuthBusiness;
 
+    private IApproveTipsBusiness approveTipsBusiness;
+
+    @Autowired
+    public void setApproveTipsBusiness(IApproveTipsBusiness approveTipsBusiness) {
+        this.approveTipsBusiness = approveTipsBusiness;
+    }
+
     @Autowired
     public void setApproveService(IApproveService approveService) {
         this.approveService = approveService;
@@ -133,6 +141,12 @@ public class ApproveFacade implements IApproveFacade {
         return approveService.approveOperate(operateReqDTO);
     }
 
+    @Override
+    public ResponseDTO<List<OperateTipResp>> approveOperatePreTip(String processInstanceId) {
+        return approveTipsBusiness.operateTips(processInstanceId);
+    }
+
+
     @Override
     public ResponseDTO<OperateRespVO> redListStatus(String approveNo) {
         ApproveRecordInfo approveRecordInfo = approveRecordService.selectByApproveNo(approveNo);

+ 45 - 0
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/impl/RiskBusinessImplTest.java

@@ -0,0 +1,45 @@
+package com.dragonsoft.dcuc.approve.business.impl;
+
+import com.dragoninfo.dcuc.common.utils.ResponseUtil;
+import com.dragoninfo.dcuc.duceap.enums.SchemeTypeEnum;
+import com.dragonsoft.dcuc.approve.model.RiskScheme;
+import com.dragonsoft.dcuc.approve.service.IRiskSchemeService;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import org.junit.Assert;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/7/18
+ */
+public class RiskBusinessImplTest {
+
+    @Test
+    public void commitApproveRepetitionRisk() {
+        IRiskSchemeService riskSchemeService = Mockito.mock(IRiskSchemeService.class);
+        Mockito.when(riskSchemeService.selectEnableSchemeByType(SchemeTypeEnum.COMMIT_APPROVE_REPETITION_RISK))
+                .thenReturn(new RiskScheme());
+
+        RiskBusinessImpl riskBusiness = new RiskBusinessImpl();
+        riskBusiness.setRiskSchemeService(riskSchemeService);
+
+        String applyIdcard = "421302198608160200";
+        String operateIdcard = "421302198608160200";
+        String userName = "燕菊黛";
+
+        ResponseStatus responseStatus = riskBusiness.commitApproveRepetitionRisk(applyIdcard, operateIdcard, userName);
+        Assert.assertTrue(ResponseUtil.isFail(responseStatus));
+        Assert.assertEquals("审批流程中,提交人与审批人都是:燕菊黛(421302198608160200)。", responseStatus.getMessage());
+
+        operateIdcard = "331081197203059692";
+
+        ResponseStatus responseStatus1 = riskBusiness.commitApproveRepetitionRisk(applyIdcard, operateIdcard, userName);
+        Assert.assertTrue(ResponseUtil.isSuccess(responseStatus1));
+
+    }
+}

+ 11 - 1
pom.xml

@@ -24,6 +24,7 @@
         <sm.tools.version>1.2.1-SNAPSHOT</sm.tools.version>
         <dcuc.common.version>2.1.0-tjdsj-SNAPSHOT</dcuc.common.version>
         <qm.tj.audit.version>1.0.2-SNAPSHOT</qm.tj.audit.version>
+        <dcuc.duceap.version>2.2.0-tjdsj-SNAPSHOT</dcuc.duceap.version>
     </properties>
     <artifactId>approve-core</artifactId>
     <packaging>pom</packaging>
@@ -34,7 +35,16 @@
 
     <dependencyManagement>
         <dependencies>
-
+            <dependency>
+                <groupId>com.dragoninfo</groupId>
+                <artifactId>dcuc-duceap-api</artifactId>
+                <version>${dcuc.duceap.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.dragoninfo</groupId>
+                <artifactId>dcuc-duceap-model</artifactId>
+                <version>${dcuc.duceap.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.dragonsoft</groupId>
                 <artifactId>auditlog-qm-tj</artifactId>