diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/utility/FlowUtility.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/utility/FlowUtility.java index 835fd107..279a8fde 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/utility/FlowUtility.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/utility/FlowUtility.java @@ -10,7 +10,9 @@ import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.entity.ProcessSnapshot; import com.jero.modules.activiti.process.common.service.ProcessDraftService; +import com.jero.modules.activiti.process.common.service.ProcessSnapshotService; import com.jero.modules.activiti.process.standardinterpret.vo.FlowApproveInfo; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; @@ -41,6 +43,7 @@ public class FlowUtility { private final ProcessApprovalRecordService processApprovalRecordService; private final ProcessDraftService processDraftService; private final RuntimeService runtimeService; + private final ProcessSnapshotService processSnapshotService; public void flowApprovalUpdate(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord){ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -73,6 +76,39 @@ public class FlowUtility { .set(ProcessApprovalRecord::getCommitFile, processApprovalRecord.getCommitFile())); } + public void flowSaveSnapshot(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord, String infoJsonStr){ + // 保存快照 + ProcessSnapshot processSnapshot = new ProcessSnapshot(); + BeanUtils.copyProperties(processAll, processSnapshot); + processSnapshot.setId(String.valueOf(SnowflakeUtils.snowflake())); + processSnapshot.setCreateBy(null); + processSnapshot.setCreateTime(null); + processSnapshot.setUpdateBy(null); + processSnapshot.setUpdateTime(null); + if (StringUtils.isNotBlank(processApprovalRecord.getCommitFile())){ + processSnapshot.setHandleFile(processApprovalRecord.getCommitFile()); + } + if (StringUtils.isNotBlank(processApprovalRecord.getCommitText())){ + processSnapshot.setHandleText(processApprovalRecord.getCommitFile()); + } + if (!Objects.isNull(processAll.getDueTime())){ + processSnapshot.setProcessDueDate(processAll.getDueTime()); + } + if (StringUtils.isNotBlank(processAll.getPrcMes())){ + processSnapshot.setProcessDescription(processAll.getPrcMes()); + } + if (StringUtils.isNotBlank(infoJsonStr)){ + processSnapshot.setInfoJsonStr(infoJsonStr); + } + if (StringUtils.isNotBlank(processApprovalRecord.getTaskId())){ + processSnapshot.setTaskId(processApprovalRecord.getTaskId()); + } + if (StringUtils.isNotBlank(processApprovalRecord.getUserId())){ + processSnapshot.setUserId(processApprovalRecord.getUserId()); + } + processSnapshotService.save(processSnapshot); + } + public FlowApproveInfo queryFlowApproveInfo(String projectId, String taskId){ FlowApproveInfo flowApproveInfo = new FlowApproveInfo(); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); 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 b9a09e50..cfa3984d 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 @@ -150,6 +150,13 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe // 自动完成第一个节点 taskService.complete(task.getId()); + + // 保存快照 + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + processAll.setProcessInstanceId(task.getProcessInstanceId()); + processApprovalRecord.setTaskId(task.getId()); + processApprovalRecord.setUserId(loginUser.getId()); + flowUtility.flowSaveSnapshot(processAll, processApprovalRecord, standardInterpretFlowDTO.getInfoJsonStr()); } @Override @@ -207,13 +214,17 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe // 特殊节点 String nodeId = processApprovalRecord.getNodeId(); - if (StandardInterpretCommon.MASTER_INTERPRET_APPROVE.equals(nodeId)){ + if (StandardInterpretCommon.MASTER_INTERPRET_APPROVE.equals(nodeId) + || StandardInterpretCommon.MASTER_INTERPRET_AGAIN_DISTRIBUTE.equals(nodeId)){ // 更新流程总表状态 processAllService.update(new LambdaUpdateWrapper() .eq(ProcessAll::getProjectId, processAll.getProjectId()) .set(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue())); } + // 保存快照 + flowUtility.flowSaveSnapshot(processAll, processApprovalRecord, standardInterpretFlowDTO.getInfoJsonStr()); + // 流程结束 if (flowUtility.isLastNode(processAll.getProcessInstanceId())){ // 查询业务信息