Commit 281d3d1d53d15835a15f741b8f724a2353096366

Authored by 芋道源码
Committed by Gitee
2 parents a0ff1244 6c3afa7c

!1194 BPM:流程清理(添加任务和抄送)

Merge pull request !1194 from Lesan/feature/bpm-流程清理
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java
@@ -25,4 +25,7 @@ public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInst @@ -25,4 +25,7 @@ public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInst
25 BpmProcessInstanceCopyDO::getActivityId, activityId); 25 BpmProcessInstanceCopyDO::getActivityId, activityId);
26 } 26 }
27 27
  28 + default void deleteByProcessInstanceId(String processInstanceId) {
  29 + delete(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId);
  30 + }
28 } 31 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCand @@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCand
19 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; 19 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
20 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; 20 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
21 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils; 21 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils;
  22 +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService;
22 import jakarta.annotation.Resource; 23 import jakarta.annotation.Resource;
23 import jakarta.validation.Valid; 24 import jakarta.validation.Valid;
24 import lombok.extern.slf4j.Slf4j; 25 import lombok.extern.slf4j.Slf4j;
@@ -29,11 +30,13 @@ import org.flowable.common.engine.impl.db.SuspensionState; @@ -29,11 +30,13 @@ import org.flowable.common.engine.impl.db.SuspensionState;
29 import org.flowable.engine.HistoryService; 30 import org.flowable.engine.HistoryService;
30 import org.flowable.engine.RepositoryService; 31 import org.flowable.engine.RepositoryService;
31 import org.flowable.engine.RuntimeService; 32 import org.flowable.engine.RuntimeService;
  33 +import org.flowable.engine.TaskService;
32 import org.flowable.engine.history.HistoricProcessInstance; 34 import org.flowable.engine.history.HistoricProcessInstance;
33 import org.flowable.engine.repository.Model; 35 import org.flowable.engine.repository.Model;
34 import org.flowable.engine.repository.ModelQuery; 36 import org.flowable.engine.repository.ModelQuery;
35 import org.flowable.engine.repository.ProcessDefinition; 37 import org.flowable.engine.repository.ProcessDefinition;
36 import org.flowable.engine.runtime.ProcessInstance; 38 import org.flowable.engine.runtime.ProcessInstance;
  39 +import org.flowable.task.api.Task;
37 import org.springframework.stereotype.Service; 40 import org.springframework.stereotype.Service;
38 import org.springframework.transaction.annotation.Transactional; 41 import org.springframework.transaction.annotation.Transactional;
39 import org.springframework.validation.annotation.Validated; 42 import org.springframework.validation.annotation.Validated;
@@ -72,6 +75,10 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -72,6 +75,10 @@ public class BpmModelServiceImpl implements BpmModelService {
72 private HistoryService historyService; 75 private HistoryService historyService;
73 @Resource 76 @Resource
74 private RuntimeService runtimeService; 77 private RuntimeService runtimeService;
  78 + @Resource
  79 + private TaskService taskService;
  80 + @Resource
  81 + private BpmProcessInstanceCopyService processInstanceCopyService;
75 82
76 @Override 83 @Override
77 public List<Model> getModelList(String name) { 84 public List<Model> getModelList(String name) {
@@ -262,23 +269,28 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -262,23 +269,28 @@ public class BpmModelServiceImpl implements BpmModelService {
262 Model model = validateModelManager(id, userId); 269 Model model = validateModelManager(id, userId);
263 270
264 // 2. 清理所有流程数据 271 // 2. 清理所有流程数据
265 - // TODO @芋艿:这里没有找到批量操作的方法,会不会有性能问题~;  
266 - // TODO @lesan:建议按照顺序?1)List<ProcessInstance> processInstances 循环处理;然后删除删除一个示实例,接着删除它的 history;  
267 // 2.1 先取消所有正在运行的流程 272 // 2.1 先取消所有正在运行的流程
268 List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery() 273 List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
269 .processDefinitionKey(model.getKey()).list(); 274 .processDefinitionKey(model.getKey()).list();
270 processInstances.forEach(processInstance -> { 275 processInstances.forEach(processInstance -> {
271 runtimeService.deleteProcessInstance(processInstance.getId(), 276 runtimeService.deleteProcessInstance(processInstance.getId(),
272 BpmReasonEnum.CANCEL_BY_SYSTEM.getReason()); 277 BpmReasonEnum.CANCEL_BY_SYSTEM.getReason());
  278 + historyService.deleteHistoricProcessInstance(processInstance.getId());
  279 + processInstanceCopyService.deleteProcessInstanceCopy(processInstance.getId());
273 }); 280 });
274 // 2.2 再从历史中删除所有相关的流程数据 281 // 2.2 再从历史中删除所有相关的流程数据
275 List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery() 282 List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery()
276 .processDefinitionKey(model.getKey()).list(); 283 .processDefinitionKey(model.getKey()).list();
277 historicProcessInstances.forEach(historicProcessInstance -> { 284 historicProcessInstances.forEach(historicProcessInstance -> {
278 historyService.deleteHistoricProcessInstance(historicProcessInstance.getId()); 285 historyService.deleteHistoricProcessInstance(historicProcessInstance.getId());
  286 + processInstanceCopyService.deleteProcessInstanceCopy(historicProcessInstance.getId());
  287 + });
  288 + // 2.3 清理所有 Task
  289 + List<Task> tasks = taskService.createTaskQuery()
  290 + .processDefinitionKey(model.getKey()).list();
  291 + tasks.forEach(task -> {
  292 + taskService.deleteTask(task.getId());
279 }); 293 });
280 - // TODO @lesan:流程任务,是不是也要清理哈?  
281 - // TODO @lesan:抄送是不是也要清理;  
282 } 294 }
283 295
284 @Override 296 @Override
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.java
@@ -50,4 +50,10 @@ public interface BpmProcessInstanceCopyService { @@ -50,4 +50,10 @@ public interface BpmProcessInstanceCopyService {
50 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId, 50 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId,
51 BpmProcessInstanceCopyPageReqVO pageReqVO); 51 BpmProcessInstanceCopyPageReqVO pageReqVO);
52 52
  53 + /**
  54 + * 删除抄送流程
  55 + *
  56 + * @param processInstanceId 流程实例id
  57 + */
  58 + void deleteProcessInstanceCopy(String processInstanceId);
53 } 59 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
@@ -87,4 +87,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy @@ -87,4 +87,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
87 return processInstanceCopyMapper.selectPage(userId, pageReqVO); 87 return processInstanceCopyMapper.selectPage(userId, pageReqVO);
88 } 88 }
89 89
  90 + @Override
  91 + public void deleteProcessInstanceCopy(String processInstanceId) {
  92 + processInstanceCopyMapper.deleteByProcessInstanceId(processInstanceId);
  93 + }
  94 +
90 } 95 }