Bladeren bron

大中型优化6(取号退回逻辑)

wucl 1 jaar geleden
bovenliggende
commit
ceef1d5f28

+ 18 - 10
service/src/main/java/com/dayou/service/impl/MajorTargetServiceImpl.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -148,14 +149,18 @@ public class MajorTargetServiceImpl extends ServiceImpl<MajorTargetMapper, Major
         Long businessId = takeNumberDTO.getBusinessId();
         List<IdNameVO> takeNumberTargets = takeNumberDTO.getTargets();
         //如果选择不同的价值意见书号,来取同一个报告号。则不允许,此处selectedTargetStatementNos的size只能是1
-        List<String> selectedTargetStatementNos = takeNumberTargets.stream().map(IdNameVO::getName).distinct().collect(Collectors.toList());
-        if (CollectionUtils.isNotEmpty(selectedTargetStatementNos) && selectedTargetStatementNos.size()!=1){
-            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"取号报告号异常,请联系管理员。");
+        List<String> selectedTargetStatementNos = takeNumberTargets.stream()
+                .filter(x->StrUtil.isNotBlank(x.getName())).map(IdNameVO::getName).distinct().collect(Collectors.toList());
+
+        String statementNo = null;
+        if (CollectionUtils.isNotEmpty(selectedTargetStatementNos) && selectedTargetStatementNos.size()==1){
+            statementNo = selectedTargetStatementNos.get(0);
         }
+
         List<MajorTarget> targets = this.list(new LambdaQueryWrapper<MajorTarget>().select(BaseEntity::getId, MajorTarget::getReportNo)
                 .eq(MajorTarget::getMajorId, businessId)
-                .eq(CollectionUtils.isNotEmpty(selectedTargetStatementNos)
-                        ,MajorTarget::getStatementNo,selectedTargetStatementNos.get(0))
+                .eq(StrUtil.isNotBlank(statementNo)
+                        ,MajorTarget::getStatementNo,statementNo)
                 .eq(BaseEntity::getDeleted, Boolean.FALSE));
         List<MajorTarget> taken = targets.stream().filter(x -> StrUtil.isNotEmpty(x.getReportNo())).collect(Collectors.toList());
         List<Long> takenIds = taken.stream().map(BaseEntity::getId).collect(Collectors.toList());
@@ -195,14 +200,17 @@ public class MajorTargetServiceImpl extends ServiceImpl<MajorTargetMapper, Major
         String orderId = takeNumberDTO.getOrderId();
         TakeNumberEnum takeType = takeNumberDTO.getTakeType();
         //如果选择不同的价值意见书号,来取同一个复评函号。则不允许,此处selectedTargetStatementNos的size只能是1
-        List<String> selectedTargetStatementNos = takeNumberTargets.stream().map(IdNameVO::getName).distinct().collect(Collectors.toList());
-        if (CollectionUtils.isNotEmpty(selectedTargetStatementNos) && selectedTargetStatementNos.size()!=1){
-            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"取号报告号异常,请联系管理员。");
+        List<String> selectedTargetStatementNos = takeNumberTargets.stream()
+                .filter(x->StrUtil.isNotBlank(x.getName())).map(IdNameVO::getName).distinct().collect(Collectors.toList());
+
+        String statementNo = null;
+        if (CollectionUtils.isNotEmpty(selectedTargetStatementNos) && selectedTargetStatementNos.size()==1){
+            statementNo = selectedTargetStatementNos.get(0);
         }
         List<MajorTarget> targets = this.list(new LambdaQueryWrapper<MajorTarget>().select(BaseEntity::getId, MajorTarget::getLetterNo)
                 .eq(MajorTarget::getMajorId, businessId)
-                .eq(CollectionUtils.isNotEmpty(selectedTargetStatementNos)
-                        ,MajorTarget::getStatementNo,selectedTargetStatementNos.get(0))
+                .eq(StrUtil.isNotBlank(statementNo)
+                        ,MajorTarget::getStatementNo,statementNo)
                 .eq(BaseEntity::getDeleted, Boolean.FALSE));
 
         List<MajorTarget> taken = targets.stream().filter(x -> StrUtil.isNotEmpty(x.getLetterNo())).collect(Collectors.toList());

+ 49 - 4
service/src/main/java/com/dayou/workflow/handler/MajorNodeHandler.java

@@ -19,6 +19,7 @@ import com.dayou.service.IUserPostService;
 import com.dayou.service.IUserService;
 import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
 import com.dayou.service.workflow.IWorkNodeService;
+import com.dayou.service.workflow.IWorkTaskRecordService;
 import com.dayou.workflow.config.WorkNodeProcessable;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -30,6 +31,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.dayou.enums.ProductionEnum.STATEMENT;
+import static com.dayou.enums.workflow.NodeStateEnum.PENDING;
 import static com.dayou.enums.workflow.NodeStateEnum.SKIP;
 import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
 
@@ -59,6 +61,8 @@ public class MajorNodeHandler extends WorkNodeProcessable {
     private IUserPostService userPostService;
     @Autowired
     private IWorkNodeService workNodeService;
+    @Autowired
+    private IWorkTaskRecordService workTaskRecordService;
 
     @Autowired
     private IUserService userService;
@@ -142,11 +146,15 @@ public class MajorNodeHandler extends WorkNodeProcessable {
         WorkFlowNodeInstance currentNode = workFlowNodeInstanceMapper.getInstanceNodeInfoById(instanceNodeId);
         //如果是撰写节点(意见书,报告,复评函)退回。需删除产品业务信息
         List<String> writeNodes = Arrays.asList(new String[]{WRITE_STATEMENT.name(), WRITE_REPORT.name(), WRITE_LETTER.name()});
+        //如果是初审节点(意见书,报告,复评函)退回。需要撰写节点的状态修改回PENDING
+        List<String> checkNodes = Arrays.asList(new String[]{CHECK_STATEMENT.name(), CHECK_REPORT.name(), CHECK_LETTER.name()});
         if (writeNodes.contains(currentNode.getNodeCode()) && commit.getCleanReportNo()!=null && commit.getCleanReportNo()){
             //是否取号?
-            List<MajorTarget> productionNos = majorTargetMapper.getSubReportNo(currentNode.getBusinessId());
+            List<MajorTarget> productionNos = majorTargetMapper.getSubReportNo(currentNode.getBusinessId()).stream()
+                    .filter(x->x!=null).collect(Collectors.toList());
             if (currentNode.getNodeCode().equals(WRITE_STATEMENT.name())){
-                Set<String> statementNos = productionNos.stream().map(MajorTarget::getStatementNo).collect(Collectors.toSet());
+                Set<String> statementNos = productionNos.stream().filter(x->StrUtil.isNotBlank(x.getStatementNo()))
+                        .map(MajorTarget::getStatementNo).collect(Collectors.toSet());
                 if (CollectionUtil.isNotEmpty(statementNos)){
                     majorTargetMapper.cleanSubStatementNo(statementNos);
                     majorProductionMapper.delete(new LambdaQueryWrapper<MajorProduction>()
@@ -154,7 +162,8 @@ public class MajorNodeHandler extends WorkNodeProcessable {
                 }
             }
             if (currentNode.getNodeCode().equals(WRITE_REPORT.name())){
-                Set<String> reportNos = productionNos.stream().map(MajorTarget::getReportNo).collect(Collectors.toSet());
+                Set<String> reportNos = productionNos.stream().filter(x->StrUtil.isNotBlank(x.getReportNo()))
+                        .map(MajorTarget::getReportNo).collect(Collectors.toSet());
                 if (CollectionUtil.isNotEmpty(reportNos)){
                     majorTargetMapper.cleanSubReportNo(reportNos);
                     majorProductionMapper.delete(new LambdaQueryWrapper<MajorProduction>()
@@ -162,7 +171,8 @@ public class MajorNodeHandler extends WorkNodeProcessable {
                 }
             }
             if (currentNode.getNodeCode().equals(WRITE_LETTER.name())){
-                Set<String> letterNos = productionNos.stream().map(MajorTarget::getLetterNo).collect(Collectors.toSet());
+                Set<String> letterNos = productionNos.stream().filter(x->StrUtil.isNotBlank(x.getLetterNo()))
+                        .map(MajorTarget::getLetterNo).collect(Collectors.toSet());
                 if (CollectionUtil.isNotEmpty(letterNos)){
                     majorTargetMapper.cleanSubLetterNo(letterNos);
                     majorProductionMapper.delete(new LambdaQueryWrapper<MajorProduction>()
@@ -171,6 +181,41 @@ public class MajorNodeHandler extends WorkNodeProcessable {
             }
 
         }
+        if (checkNodes.contains(currentNode.getNodeCode())){
+            //在这些节点退回,需要特殊处理实例节点信息,不适用父类修改节点实例信息,因为上个节点还没有business_sub_id和business_min_id
+            //将上一个节点状态改为PENDING
+            if (currentNode.getNodeCode().equals(CHECK_STATEMENT.name())){
+                workFlowNodeInstanceService.update(new LambdaUpdateWrapper<WorkFlowNodeInstance>().set(WorkFlowNodeInstance::getState,PENDING)
+                        .eq(WorkFlowNodeInstance::getBusinessId,currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getFlowId,currentNode.getFlowId())
+                        .eq(WorkFlowNodeInstance::getSequence,(currentNode.getSequence()-1)).eq(BaseEntity::getDeleted,Boolean.FALSE));
+                //将上一个节点的任务状态修改为未完成
+                WorkFlowNodeInstance preNode = workFlowNodeInstanceService.getOne(new LambdaQueryWrapper<WorkFlowNodeInstance>().select(BaseEntity::getId)
+                        .eq(WorkFlowNodeInstance::getFlowId, currentNode.getFlowId())
+                        .eq(WorkFlowNodeInstance::getBusinessId, currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getSequence, (currentNode.getSequence() - 1))
+                        .eq(BaseEntity::getDeleted, Boolean.FALSE));
+
+                if (preNode!=null){
+                    workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished,Boolean.FALSE).eq(WorkTaskRecord::getInstanceId,preNode.getId()));
+                }
+            }else{
+                workFlowNodeInstanceService.update(new LambdaUpdateWrapper<WorkFlowNodeInstance>().set(WorkFlowNodeInstance::getState,PENDING)
+                        .eq(WorkFlowNodeInstance::getBusinessId,currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getFlowId,currentNode.getFlowId())
+                                .eq(StrUtil.isNotEmpty(commit.getBusinessSubId()),WorkFlowNodeInstance::getBusinessSubId,currentNode.getBusinessSubId())
+                        .eq(WorkFlowNodeInstance::getSequence,(currentNode.getSequence()-1)).eq(BaseEntity::getDeleted,Boolean.FALSE));
+                //将上一个节点的任务状态修改为未完成
+                WorkFlowNodeInstance preNode = workFlowNodeInstanceService.getOne(new LambdaQueryWrapper<WorkFlowNodeInstance>().select(BaseEntity::getId)
+                        .eq(WorkFlowNodeInstance::getFlowId, currentNode.getFlowId())
+                        .eq(StrUtil.isNotEmpty(commit.getBusinessSubId()),WorkFlowNodeInstance::getBusinessSubId,currentNode.getBusinessSubId())
+                        .eq(WorkFlowNodeInstance::getBusinessId, currentNode.getBusinessId()).eq(WorkFlowNodeInstance::getSequence, (currentNode.getSequence() - 1))
+                        .eq(BaseEntity::getDeleted, Boolean.FALSE));
+
+                if (preNode!=null){
+                    workTaskRecordService.update(new LambdaUpdateWrapper<WorkTaskRecord>().set(WorkTaskRecord::getFinished,Boolean.FALSE).eq(WorkTaskRecord::getInstanceId,preNode.getId()));
+                }
+            }
+
+
+        }
         if (currentNode.getNodeCode().equals(STATEMENT_FEEDBACK.name())){
             majorProductionMapper.cancelDelivery(currentNode.getBusinessId(),currentNode.getBusinessSubId(),STATEMENT.name());
         }