|
@@ -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;
|
|
@@ -26,8 +27,11 @@ import org.springframework.stereotype.Component;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+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.*;
|
|
|
|
|
@@ -57,6 +61,8 @@ public class MajorNodeHandler extends WorkNodeProcessable {
|
|
|
private IUserPostService userPostService;
|
|
|
@Autowired
|
|
|
private IWorkNodeService workNodeService;
|
|
|
+ @Autowired
|
|
|
+ private IWorkTaskRecordService workTaskRecordService;
|
|
|
|
|
|
@Autowired
|
|
|
private IUserService userService;
|
|
@@ -140,15 +146,75 @@ 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<String> reportNos = majorTargetMapper.getSubReportNo(currentNode.getBusinessId());
|
|
|
- if (CollectionUtil.isNotEmpty(reportNos)){
|
|
|
- //清除子号
|
|
|
- majorTargetMapper.cleanSubReportNo(currentNode.getBusinessId());
|
|
|
- //清除产品信息
|
|
|
- majorProductionMapper.delete(new LambdaQueryWrapper<MajorProduction>().eq(MajorProduction::getMajorId,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().filter(x->StrUtil.isNotBlank(x.getStatementNo()))
|
|
|
+ .map(MajorTarget::getStatementNo).collect(Collectors.toSet());
|
|
|
+ if (CollectionUtil.isNotEmpty(statementNos)){
|
|
|
+ majorTargetMapper.cleanSubStatementNo(statementNos);
|
|
|
+ majorProductionMapper.delete(new LambdaQueryWrapper<MajorProduction>()
|
|
|
+ .in(MajorProduction::getReportNo,statementNos));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentNode.getNodeCode().equals(WRITE_REPORT.name())){
|
|
|
+ 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>()
|
|
|
+ .in(MajorProduction::getReportNo,reportNos));
|
|
|
+ }
|
|
|
}
|
|
|
+ if (currentNode.getNodeCode().equals(WRITE_LETTER.name())){
|
|
|
+ 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>()
|
|
|
+ .in(MajorProduction::getReportNo,letterNos));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ 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());
|