浏览代码

1.资产报告撰写节点开发
2.调整查询资产评估对象vo与sql
3.AssetsNodeHandler新增对CHECK_ASSET_FOURTH_CHECK_REPORT的校验
4.WorkNode新增getNextWorkNodeByFourthCheckState方法跳过四审节点
5.WorkNodeCommit新增字段doFourthCheck

GouGengquan 1 年之前
父节点
当前提交
7f794c0ef7

+ 5 - 3
dao/src/main/resources/mapper/AssetsEvaluationTargetMapper.xml

@@ -54,14 +54,16 @@
         value_type.type_name AS valueTypeName,
         target.statement_no,
         target.report_no,
-        production.create_production_date
+#         production.create_production_date,
+        (SELECT create_production_date FROM assets_production WHERE production_no = target.statement_no) AS statementCreateProductionDate,
+        (SELECT create_production_date FROM assets_production WHERE production_no = target.report_no) AS reportCreateProductionDate
         FROM assets_evaluation_target AS target
         LEFT JOIN assets_evaluation_target_purpose AS purpose ON purpose.id = target.evaluation_purpose_id
         LEFT JOIN assets_value_type AS value_type ON value_type.id = target.assets_value_id
-        LEFT JOIN assets_production AS production ON production.production_no = target.statement_no OR production.production_no = target.report_no
+#         LEFT JOIN assets_production AS production ON production.production_no = target.statement_no OR production.production_no = target.report_no
         WHERE target.assets_id = #{id}
         <if test="(statementNo != null and statementNo != '') or (reportNo != null and reportNo != '') ">
-            AND production_no = #{statementNo} OR production_no = #{reportNo}
+            AND (statement_no = #{statementNo} OR report_no = #{reportNo})
         </if>
         <!--        <if test="(statementNo == null or statementNo == '') and (reportNo == null or reportNo == '') ">-->
         <!--            AND create_production_date IS NULL-->

+ 5 - 0
domain/src/main/java/com/dayou/dto/WorkNodeCommit.java

@@ -61,6 +61,11 @@ public class WorkNodeCommit {
     private String doThirdCheck;
 
     /**
+     * 资产四审
+     */
+    private Boolean doFourthCheck;
+
+    /**
      * 是否检查任务是否完成,在产生分叉节点时就不用校验任务是否完成
      */
     private Boolean ifCheckTask = Boolean.TRUE;

+ 3 - 4
domain/src/main/java/com/dayou/vo/AssetsEvaluationTargetVO.java

@@ -28,8 +28,7 @@ public class AssetsEvaluationTargetVO extends AssetsEvaluationTarget {
      */
     private String secTargetTypaName;
 
-    /**
-     * 产品出具日期
-     */
-    private Date createProductionDate;
+    private Date statementCreateProductionDate;
+
+    private Date reportCreateProductionDate;
 }

+ 8 - 0
service/src/main/java/com/dayou/service/workflow/IWorkNodeService.java

@@ -80,6 +80,14 @@ public interface IWorkNodeService extends IService<WorkNode> {
      */
     WorkNodeDTO getNextWorkNodeByCheckState(Long flowId, String nodeCode,String doSecondCheck,String doThirdCheck);
 
+    /**
+     * 根据四审状态判断是否要进行四审节点
+     * @param flowId 流程id
+     * @param nodeCode 节点code
+     * @return WorkNodeDTO
+     */
+    WorkNodeDTO getNextWorkNodeByFourthCheckState(Long flowId, String nodeCode);
+
     List<WorkNode> getNodesByMainBusiness(String businessType);
 
     void removeNodeCache(Long flowId);

+ 17 - 0
service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java

@@ -318,6 +318,23 @@ public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> i
         return null;
     }
 
+    /**
+     * 根据四审状态判断是否要进行四审节点
+     * @param flowId 流程id
+     * @param nodeCode 节点code
+     * @return WorkNodeDTO
+     */
+    @Override
+    public WorkNodeDTO getNextWorkNodeByFourthCheckState(Long flowId, String nodeCode) {
+        List<WorkNodeDTO> flowNodes = getFlowNodes(flowId);
+        for (int i = 0; i < flowNodes.size(); i++) {
+            if (nodeCode.equals(RECHECK_REPORT.name()) && flowNodes.get(i).getCode().equals(nodeCode)) {
+                return flowNodes.get(i + 2);
+            }
+        }
+        return null;
+    }
+
     @Override
     public List<WorkNode> getNodesByMainBusiness(String businessType) {
         List<WorkNode> list = workNodeMapper.getNodesByMainBusiness(businessType);

+ 38 - 31
service/src/main/java/com/dayou/workflow/handler/AssetsNodeHandler.java

@@ -65,46 +65,52 @@ public class AssetsNodeHandler extends WorkNodeProcessable {
     @Override
     public boolean forward(WorkNodeCommit workNodeCommit) {
         WorkFlowNodeInstance currentInstanceNode = workFlowNodeInstanceMapper.getById(workNodeCommit.getInstanceNodeId());
-        WorkNodeDTO nextWorkNode = beforeForward(workNodeCommit,currentInstanceNode);
-        if (nextWorkNode!=null){
+        WorkNodeDTO nextWorkNode = beforeForward(workNodeCommit, currentInstanceNode);
+        if (nextWorkNode != null) {
             String ifVerify = currentInstanceNode.getVerify();
-            if (StrUtil.isNotEmpty(ifVerify)){
+            if (StrUtil.isNotEmpty(ifVerify)) {
                 CallbackEnum callback = CallbackEnum.valueOf(ifVerify);
                 //根据callback 确定具体的业务数据
                 //获取产品类型
                 List<ProductionEnum> production = workNodeCommit.getProduction();
-                switch (callback){
+                switch (callback) {
+                    // 校验资产产品类型
                     case CHECK_ASSET_PRODUCTION_TYPE:
                         //1. 获取业务上出具的产品类型。
                         //2.根据出具的产品类型 确定需要哪些节点
-                        Map<String,List<WorkflowNodeEnum>> assetsNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MainBusinessEnum.ASSET_BUSINESS.name(),
+                        Map<String, List<WorkflowNodeEnum>> assetsNecessaryNodes = CallbackEnum.NecessaryNode.getByProduction(MainBusinessEnum.ASSET_BUSINESS.name(),
                                 production);
-                        nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(),MainBusinessEnum.ASSET_BUSINESS,currentInstanceNode.getNodeCode(), assetsNecessaryNodes);
+                        nextWorkNode = workNodeService.getNextWorkNodeByBusiness(currentInstanceNode.getFlowId(), MainBusinessEnum.ASSET_BUSINESS, currentInstanceNode.getNodeCode(), assetsNecessaryNodes);
+                        break;
+                    // 校验资产四审
+                    case CHECK_ASSET_FOURTH_CHECK_REPORT:
+                        // doFourthCheck为真则执行四审节点,为假则跳过四审节点
+                        if (!workNodeCommit.getDoFourthCheck()){
+                            nextWorkNode = workNodeService.getNextWorkNodeByFourthCheckState(currentInstanceNode.getFlowId(), currentInstanceNode.getNodeCode());
+                        }
                         break;
                 }
             }
-            if (CollectionUtil.isNotEmpty(workNodeCommit.getReportNos())){
+            if (CollectionUtil.isNotEmpty(workNodeCommit.getReportNos())) {
                 //主流程分支
                 String code = workNodeService.getOne(new LambdaQueryWrapper<WorkNode>()
                         .select(WorkNode::getCode)
                         .eq(BaseEntity::getId, currentInstanceNode.getNodeId()).eq(BaseEntity::getDeleted, Boolean.FALSE)).getCode();
                 WorkflowNodeEnum workflowNodeEnum = WorkflowNodeEnum.valueOf(code);
 
-                if (workflowNodeEnum.equals(WorkflowNodeEnum.GENERATE_STATEMENT)){
-                    for (String businessSubId :workNodeCommit.getReportNos()){
-                        addNextInstanceNode(currentInstanceNode,nextWorkNode, workNodeCommit.getNextHandlerId(),businessSubId,null);
+                if (workflowNodeEnum.equals(WorkflowNodeEnum.GENERATE_STATEMENT)) {
+                    for (String businessSubId : workNodeCommit.getReportNos()) {
+                        addNextInstanceNode(currentInstanceNode, nextWorkNode, workNodeCommit.getNextHandlerId(), businessSubId, null);
                     }
-                }
-                else if(workflowNodeEnum.equals(WorkflowNodeEnum.WRITE_REPORT)){
-                    for (String businessMinId :workNodeCommit.getReportNos()){
-                        addNextInstanceNode(currentInstanceNode,nextWorkNode, workNodeCommit.getNextHandlerId(),workNodeCommit.getBusinessSubId(),businessMinId);
+                } else if (workflowNodeEnum.equals(WorkflowNodeEnum.WRITE_REPORT)) {
+                    for (String businessMinId : workNodeCommit.getReportNos()) {
+                        addNextInstanceNode(currentInstanceNode, nextWorkNode, workNodeCommit.getNextHandlerId(), workNodeCommit.getBusinessSubId(), businessMinId);
                     }
-                }else {
-                    addNextInstanceNode(currentInstanceNode,nextWorkNode, workNodeCommit.getNextHandlerId(),workNodeCommit.getBusinessSubId(),workNodeCommit.getBusinessMinId());
+                } else {
+                    addNextInstanceNode(currentInstanceNode, nextWorkNode, workNodeCommit.getNextHandlerId(), workNodeCommit.getBusinessSubId(), workNodeCommit.getBusinessMinId());
                 }
-            }
-            else {
-                addNextInstanceNode(currentInstanceNode,nextWorkNode, workNodeCommit.getNextHandlerId(),workNodeCommit.getBusinessSubId(),workNodeCommit.getBusinessMinId());
+            } else {
+                addNextInstanceNode(currentInstanceNode, nextWorkNode, workNodeCommit.getNextHandlerId(), workNodeCommit.getBusinessSubId(), workNodeCommit.getBusinessMinId());
             }
             return Boolean.TRUE;
         }
@@ -112,22 +118,22 @@ public class AssetsNodeHandler extends WorkNodeProcessable {
     }
 
     @Override
-    public boolean skip(WorkNodeCommit workNodeCommit){
+    public boolean skip(WorkNodeCommit workNodeCommit) {
         WorkFlowNodeInstance instanceNode = workFlowNodeInstanceService.getById(workNodeCommit.getInstanceNodeId());
-        workFlowNodeInstanceService.update(new LambdaUpdateWrapper<WorkFlowNodeInstance>().set(WorkFlowNodeInstance::getState,SKIP)
-                .set(WorkFlowNodeInstance::getComment,workNodeCommit.getComments())
-                .eq(WorkFlowNodeInstance::getId,workNodeCommit.getInstanceNodeId()));
+        workFlowNodeInstanceService.update(new LambdaUpdateWrapper<WorkFlowNodeInstance>().set(WorkFlowNodeInstance::getState, SKIP)
+                .set(WorkFlowNodeInstance::getComment, workNodeCommit.getComments())
+                .eq(WorkFlowNodeInstance::getId, workNodeCommit.getInstanceNodeId()));
         //添加日志
-        return addWorkflowLog(workNodeCommit,instanceNode);
+        return addWorkflowLog(workNodeCommit, instanceNode);
     }
 
     @Override
-    public boolean goBack(WorkNodeCommit commit){
+    public boolean goBack(WorkNodeCommit commit) {
         Long instanceNodeId = commit.getInstanceNodeId();
         WorkFlowNodeInstance currentNode = workFlowNodeInstanceMapper.getInstanceNodeInfoById(instanceNodeId);
         //如果是撰写节点(意见书,报告,复评函)退回。需删除产品业务信息
         List<String> writeNodes = Arrays.asList(new String[]{WRITE_STATEMENT.name(), WRITE_REPORT.name(), WRITE_LETTER.name()});
-        if (writeNodes.contains(currentNode.getNodeCode()) && commit.getCleanReportNo()!=null && commit.getCleanReportNo()){
+        if (writeNodes.contains(currentNode.getNodeCode()) && commit.getCleanReportNo() != null && commit.getCleanReportNo()) {
             //是否取号?
 //            List<String> reportNos =  majorTargetMapper.getSubReportNo(currentNode.getBusinessId());
 //            if (CollectionUtil.isNotEmpty(reportNos)){
@@ -142,23 +148,24 @@ public class AssetsNodeHandler extends WorkNodeProcessable {
 
     /**
      * 选择节点处理人
-     * @param instanceNode 节点实列
+     *
+     * @param instanceNode         节点实列
      * @param handlerPermissionDTO
      * @return Long
      */
     @Override
-    public Long searchHandlerId(WorkFlowNodeInstance instanceNode, HandlerPermissionDTO handlerPermissionDTO){
+    public Long searchHandlerId(WorkFlowNodeInstance instanceNode, HandlerPermissionDTO handlerPermissionDTO) {
         HandlerPermissionEnum handlerPermissionEnum = handlerPermissionDTO.getName();
         Assets assets = assetsMapper.selectOne(new LambdaQueryWrapper<Assets>().select(Assets::getClientManagerId, Assets::getPrincipalId)
                 .eq(BaseEntity::getId, instanceNode.getBusinessId()));
-        switch (handlerPermissionEnum){
+        switch (handlerPermissionEnum) {
             case EMPLOYEE:
                 return handlerPermissionDTO.getPowerId();
             case POST:
                 Long handlerId = userPostService.getUniqueHandlerByPostForWorkNode(handlerPermissionDTO.getPowerId());
-                return handlerId==null?
+                return handlerId == null ?
                         departmentMapper.selectOne(new LambdaQueryWrapper<Department>().select(Department::getLeaderId).eq(BaseEntity::getId, assets.getDepartmentId())).getLeaderId()
-                        :handlerId;
+                        : handlerId;
             case DEPARTMENT_LEADER:
                 return departmentMapper.selectOne(new LambdaQueryWrapper<Department>().select(Department::getLeaderId).eq(BaseEntity::getId, assets.getDepartmentId())).getLeaderId();
             case CLIENT_MANAGER: