diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java index 5d47e466..0c5da3a9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java @@ -430,12 +430,8 @@ public class MyGlobalEventListener implements ActivitiEventListener { StandardInterpretCommon.KEY_3.equals(processDefinition)) { if (i == 0) { TaskService taskService = SpringContextUtil.getBean(TaskService.class); - if (StandardInterpretCommon.KEY_1.equals(processDefinition)) { - boolean b = isChildrenNodeAllComplete(processInstanceId, parentTaskId); - if (b) { - taskService.complete(parentTaskId); - } - }else { + boolean b = isChildrenNodeAllComplete(processInstanceId, parentTaskId); + if (b) { taskService.complete(parentTaskId); } } @@ -518,23 +514,25 @@ public class MyGlobalEventListener implements ActivitiEventListener { * @return true:都完成 false:未都完成 */ private boolean isChildrenNodeAllComplete(String processInstanceId, String parentTaskId) { + ProcessApprovalRecordService processApprovalRecordService = + SpringContextUtil.getBean(ProcessApprovalRecordService.class); // 判断当前parentTaskId是否是第一个自动处理任务节点 - ProcessApprovalRecordService processApprovalRecordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class); - int count = processApprovalRecordService.count( + ProcessApprovalRecord firstNodeTask = processApprovalRecordService.getOne( new LambdaQueryWrapper() .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) .eq(ProcessApprovalRecord::getNodeId, StandardInterpretCommon.INTERPRETING_PEOPLE_FILLOUT) - .eq(ProcessApprovalRecord::getParentTaskId, parentTaskId)); - if (count > 0) { - // 判断子流程是否还有未完成的节点 - int childCount = processApprovalRecordService.count( + .orderByAsc(ProcessApprovalRecord::getCreateTime) + .last("limit 1"), false); + if (firstNodeTask.getParentTaskId().equals(parentTaskId)){ + // 判断所有子流程是否都完成 + int count = processApprovalRecordService.count( new LambdaQueryWrapper() .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) .isNotNull(ProcessApprovalRecord::getParentTaskId) .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue())); - return childCount == 0; + return count == 0; } - return false; + return true; } /** diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java index d59a947a..c430b683 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java @@ -26,6 +26,9 @@ public class ProcessStandardInterpretClause extends BaseEntity { /**条款id/标准id*/ @ApiModelProperty(value = "条款id/标准id") private String clauseId; + /**唯一标识*/ + @ApiModelProperty(value = "唯一标识") + private String snowFlake; /**条款号/标准编号*/ @ApiModelProperty(value = "条款号/标准编号") @TableField(exist = false) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/mapper/xml/ProcessStandardInterpretClauseMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/mapper/xml/ProcessStandardInterpretClauseMapper.xml index 13ec8624..424717a3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/mapper/xml/ProcessStandardInterpretClauseMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/mapper/xml/ProcessStandardInterpretClauseMapper.xml @@ -13,7 +13,8 @@ psic.clause_id, interpret_person_ids, is_reject, - is_distribute + is_distribute, + snow_flake from process_standard_interpret_clause psic left join laws_domestic_standard lds on psic.clause_id = lds.id and lds.del_flag = 0 left join laws_document_split lds2 on psic.clause_id = lds2.id and lds2.del_flag = 0 diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/ProcessStandardInterpretClauseServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/ProcessStandardInterpretClauseServiceImpl.java index 2f6342e6..d169d871 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/ProcessStandardInterpretClauseServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/ProcessStandardInterpretClauseServiceImpl.java @@ -42,6 +42,8 @@ public class ProcessStandardInterpretClauseServiceImpl // 标准主解读人重新分发 节点查询驳回数据 queryWrapper.eq(StringUtils.isNotBlank(processStandardInterpretClause.getIsReject()), "is_reject", processStandardInterpretClause.getIsReject()); + queryWrapper.like(StringUtils.isNotBlank(processStandardInterpretClause.getSnowFlake()), + "snow_flake", processStandardInterpretClause.getSnowFlake()); queryWrapper.orderByAsc("id"); return processStandardInterpretClauseMapper.queryList(queryWrapper); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java index 1253322f..08953c29 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java @@ -445,6 +445,8 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe }else if (StandardInterpretCommon.AUTO_TASK_2.equals(taskDefinitionKey)){ StandardInterpretFlowDTO standardInterpretFlowDTO = new StandardInterpretFlowDTO(); // 流程信息 + String newSnowFlake = String.valueOf(SnowflakeUtils.snowflake()); + variables.put(StandardInterpretCommon.SNOWFLAKE, newSnowFlake); ProcessAll processAll = new ProcessAll(); processAll.setProjectId(processAlls.getProjectId()); standardInterpretFlowDTO.setProcessAll(processAll); @@ -461,15 +463,26 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe processStandardInterpretClauseSublistService.list( new LambdaQueryWrapper() .eq(ProcessStandardInterpretClauseSublist::getSnowFlake, snowflake)); - // 清除中间表解读人,设置驳回标识 - processStandardInterpretClauseService.update( - new LambdaUpdateWrapper() - .in(ProcessStandardInterpretClause::getId, - processStandardInterpretClauseSublistList.stream() - .map(ProcessStandardInterpretClauseSublist::getStandardInterpretClauseId) - .collect(Collectors.toList())) - .set(ProcessStandardInterpretClause::getIsReject, YesOrNoEnum.YES.getValue()) - .set(ProcessStandardInterpretClause::getInterpretPersonIds, null)); + // 清除中间表解读人,设置驳回标识,设置唯一标识 + List standardInterpretClauseIdList = processStandardInterpretClauseSublistList.stream() + .map(ProcessStandardInterpretClauseSublist::getStandardInterpretClauseId) + .collect(Collectors.toList()); + List processStandardInterpretClauseList = + processStandardInterpretClauseService.listByIds(standardInterpretClauseIdList); + + for (ProcessStandardInterpretClause processStandardInterpretClause : processStandardInterpretClauseList) { + LambdaUpdateWrapper qw = new LambdaUpdateWrapper<>(); + qw.eq(ProcessStandardInterpretClause::getId, processStandardInterpretClause.getId()); + qw.set(ProcessStandardInterpretClause::getIsReject, YesOrNoEnum.YES.getValue()); + qw.set(ProcessStandardInterpretClause::getInterpretPersonIds, null); + String snowFlake = processStandardInterpretClause.getSnowFlake(); + if (StringUtils.isNotBlank(snowFlake)){ + qw.set(ProcessStandardInterpretClause::getSnowFlake, snowFlake + "," + newSnowFlake); + }else { + qw.set(ProcessStandardInterpretClause::getSnowFlake, newSnowFlake); + } + processStandardInterpretClauseService.update(qw); + } // 删除旧分发数据 processStandardInterpretClauseSublistService.remove( @@ -706,7 +719,7 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe String node = StringUtils.isNotBlank(processApprovalRecord.getNodeId()) ? processApprovalRecord.getNodeId() : StandardInterpretCommon.REGULATORY_ENGINEER_START; LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - + String taskId = processApprovalRecord.getTaskId(); // 通过 projectId 查询 标准解读流程 processStandardInterpret.setProjectId(projectId); processStandardInterpret = processStandardInterpretService.queryOne(processStandardInterpret); @@ -723,7 +736,10 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe } // 标准主解读人重新分发(分发) if (StandardInterpretCommon.MASTER_INTERPRET_AGAIN_DISTRIBUTE.equals(node)){ - processStandardInterpretClause.setIsReject(YesOrNoEnum.YES.getValue()); + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + Object variable = runtimeService.getVariable(task.getExecutionId(), StandardInterpretCommon.SNOWFLAKE); + processStandardInterpretClause.setSnowFlake(String.valueOf(variable)); +// processStandardInterpretClause.setIsReject(YesOrNoEnum.YES.getValue()); } processStandardInterpretClauseList = processStandardInterpretClauseService.queryList(processStandardInterpretClause); @@ -749,7 +765,6 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe ProcessStandardInterpretClauseSublist processStandardInterpretClauseSublist = new ProcessStandardInterpretClauseSublist(); processStandardInterpretClauseSublist.setStandardInterpretId(processStandardInterpret.getId()); - String taskId = processApprovalRecord.getTaskId(); // 解读人填写信息(分发) if (StandardInterpretCommon.INTERPRETING_PEOPLE_FILLOUT.equals(node)){ Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); @@ -1776,6 +1791,14 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe interpretPersonIdList.add(interpretPersonId); distributeIdSubList.add(id); } + // 重新分发节点特殊处理 + if (StandardInterpretCommon.MASTER_INTERPRET_AGAIN_DISTRIBUTE.equals(node)){ + // 重置 各涉及部门解读人 + processStandardInterpretClauseService.update( + new LambdaUpdateWrapper() + .eq(ProcessStandardInterpretClause::getId, StandardInterpretClause.getId()) + .set(ProcessStandardInterpretClause::getInterpretPersonIds, null)); + } } // 设置未分配数量 map.put(StandardInterpretCommon.UNALLOCATED_QUANTITY, unallocatedQuantity); @@ -1869,6 +1892,9 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe if (pass){ processStandardInterpretClauseSublistService .saveOrUpdateBatch(processStandardInterpretClauseSublistList); + }else { + // 驳回 + } break; // 会签(分发)