Commit 281d3d1d53d15835a15f741b8f724a2353096366
Committed by
Gitee
!1194 BPM:流程清理(添加任务和抄送)
Merge pull request !1194 from Lesan/feature/bpm-流程清理
Showing
4 changed files
with
30 additions
and
4 deletions
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 | } | ... | ... |