Commit 7c62b1a21186ce24996a11a87b890ceed8feb663
1 parent
54e7c10a
修改 bpm 流程不通过的 Listener 的逻辑
Showing
4 changed files
with
32 additions
and
5 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 3 | 4 | import lombok.AllArgsConstructor; |
| 4 | 5 | import lombok.Getter; |
| 5 | 6 | |
| ... | ... | @@ -12,8 +13,24 @@ import lombok.Getter; |
| 12 | 13 | @AllArgsConstructor |
| 13 | 14 | public enum BpmProcessInstanceDeleteReasonEnum { |
| 14 | 15 | |
| 15 | - REJECT_TASK("不通过任务,原因:{}"); | |
| 16 | + REJECT_TASK("不通过任务,原因:{}"); // 修改文案时,需要注意 isRejectReason 方法 | |
| 16 | 17 | |
| 17 | 18 | private final String reason; |
| 18 | 19 | |
| 20 | + /** | |
| 21 | + * 格式化理由 | |
| 22 | + * | |
| 23 | + * @param args 参数 | |
| 24 | + * @return 理由 | |
| 25 | + */ | |
| 26 | + public String format(Object... args) { | |
| 27 | + return StrUtil.format(reason, args); | |
| 28 | + } | |
| 29 | + | |
| 30 | + // ========== 逻辑 ========== | |
| 31 | + | |
| 32 | + public static boolean isRejectReason(String reason) { | |
| 33 | + return StrUtil.startWith(reason, "不通过任务,原因:"); | |
| 34 | + } | |
| 35 | + | |
| 19 | 36 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceS |
| 5 | 5 | import org.activiti.api.model.shared.event.RuntimeEvent; |
| 6 | 6 | import org.activiti.api.process.model.ProcessInstance; |
| 7 | 7 | import org.activiti.api.process.model.events.ProcessRuntimeEvent; |
| 8 | +import org.activiti.api.process.runtime.events.ProcessCancelledEvent; | |
| 8 | 9 | import org.activiti.api.process.runtime.events.listener.ProcessEventListener; |
| 9 | 10 | import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; |
| 10 | 11 | import org.activiti.api.task.model.events.TaskRuntimeEvent; |
| ... | ... | @@ -42,7 +43,8 @@ public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>> |
| 42 | 43 | } |
| 43 | 44 | // 取消时,更新拓展表为取消 |
| 44 | 45 | if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { |
| 45 | - processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); | |
| 46 | + processInstanceService.updateProcessInstanceExtCancel(event.getEntity(), | |
| 47 | + ((ProcessCancelledEvent) event).getCause()); | |
| 46 | 48 | return; |
| 47 | 49 | } |
| 48 | 50 | // 完成时,更新拓展表为已完成 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| ... | ... | @@ -144,13 +144,15 @@ public interface BpmProcessInstanceService { |
| 144 | 144 | * 更新 ProcessInstance 拓展记录为取消 |
| 145 | 145 | * |
| 146 | 146 | * @param instance 流程任务 |
| 147 | + * @param reason 取消原因 | |
| 147 | 148 | */ |
| 148 | - void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance); | |
| 149 | + void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance, String reason); | |
| 149 | 150 | |
| 150 | 151 | /** |
| 151 | 152 | * 更新 ProcessInstance 拓展记录为完成 |
| 152 | 153 | * |
| 153 | 154 | * @param instance 流程任务 |
| 155 | + * @param reason 原因 | |
| 154 | 156 | */ |
| 155 | 157 | void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); |
| 156 | 158 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| ... | ... | @@ -241,7 +241,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 241 | 241 | } |
| 242 | 242 | |
| 243 | 243 | @Override |
| 244 | - public void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance) { | |
| 244 | + public void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance, String reason) { | |
| 245 | + // 判断是否为 Reject 不通过。如果是,则不进行更新 | |
| 246 | + if (BpmProcessInstanceDeleteReasonEnum.isRejectReason(reason)) { | |
| 247 | + return; | |
| 248 | + } | |
| 249 | + | |
| 250 | + // 更新拓展表 | |
| 245 | 251 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) |
| 246 | 252 | .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 |
| 247 | 253 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) |
| ... | ... | @@ -265,7 +271,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 265 | 271 | public void updateProcessInstanceExtReject(String id, String comment) { |
| 266 | 272 | ProcessInstance processInstance = getProcessInstance(id); |
| 267 | 273 | // 删除流程实例,以实现驳回任务时,取消整个审批流程 |
| 268 | - deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason(), comment)); | |
| 274 | + deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(comment))); | |
| 269 | 275 | |
| 270 | 276 | // 更新 status + result |
| 271 | 277 | // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, | ... | ... |