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 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 19 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
20 20 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
21 21 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils;
  22 +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService;
22 23 import jakarta.annotation.Resource;
23 24 import jakarta.validation.Valid;
24 25 import lombok.extern.slf4j.Slf4j;
... ... @@ -29,11 +30,13 @@ import org.flowable.common.engine.impl.db.SuspensionState;
29 30 import org.flowable.engine.HistoryService;
30 31 import org.flowable.engine.RepositoryService;
31 32 import org.flowable.engine.RuntimeService;
  33 +import org.flowable.engine.TaskService;
32 34 import org.flowable.engine.history.HistoricProcessInstance;
33 35 import org.flowable.engine.repository.Model;
34 36 import org.flowable.engine.repository.ModelQuery;
35 37 import org.flowable.engine.repository.ProcessDefinition;
36 38 import org.flowable.engine.runtime.ProcessInstance;
  39 +import org.flowable.task.api.Task;
37 40 import org.springframework.stereotype.Service;
38 41 import org.springframework.transaction.annotation.Transactional;
39 42 import org.springframework.validation.annotation.Validated;
... ... @@ -72,6 +75,10 @@ public class BpmModelServiceImpl implements BpmModelService {
72 75 private HistoryService historyService;
73 76 @Resource
74 77 private RuntimeService runtimeService;
  78 + @Resource
  79 + private TaskService taskService;
  80 + @Resource
  81 + private BpmProcessInstanceCopyService processInstanceCopyService;
75 82  
76 83 @Override
77 84 public List<Model> getModelList(String name) {
... ... @@ -262,23 +269,28 @@ public class BpmModelServiceImpl implements BpmModelService {
262 269 Model model = validateModelManager(id, userId);
263 270  
264 271 // 2. 清理所有流程数据
265   - // TODO @芋艿:这里没有找到批量操作的方法,会不会有性能问题~;
266   - // TODO @lesan:建议按照顺序?1)List<ProcessInstance> processInstances 循环处理;然后删除删除一个示实例,接着删除它的 history;
267 272 // 2.1 先取消所有正在运行的流程
268 273 List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
269 274 .processDefinitionKey(model.getKey()).list();
270 275 processInstances.forEach(processInstance -> {
271 276 runtimeService.deleteProcessInstance(processInstance.getId(),
272 277 BpmReasonEnum.CANCEL_BY_SYSTEM.getReason());
  278 + historyService.deleteHistoricProcessInstance(processInstance.getId());
  279 + processInstanceCopyService.deleteProcessInstanceCopy(processInstance.getId());
273 280 });
274 281 // 2.2 再从历史中删除所有相关的流程数据
275 282 List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery()
276 283 .processDefinitionKey(model.getKey()).list();
277 284 historicProcessInstances.forEach(historicProcessInstance -> {
278 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 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 50 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId,
51 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 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 }
... ...