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 | package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 3 | import lombok.AllArgsConstructor; | 4 | import lombok.AllArgsConstructor; |
| 4 | import lombok.Getter; | 5 | import lombok.Getter; |
| 5 | 6 | ||
| @@ -12,8 +13,24 @@ import lombok.Getter; | @@ -12,8 +13,24 @@ import lombok.Getter; | ||
| 12 | @AllArgsConstructor | 13 | @AllArgsConstructor |
| 13 | public enum BpmProcessInstanceDeleteReasonEnum { | 14 | public enum BpmProcessInstanceDeleteReasonEnum { |
| 14 | 15 | ||
| 15 | - REJECT_TASK("不通过任务,原因:{}"); | 16 | + REJECT_TASK("不通过任务,原因:{}"); // 修改文案时,需要注意 isRejectReason 方法 |
| 16 | 17 | ||
| 17 | private final String reason; | 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,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceS | ||
| 5 | import org.activiti.api.model.shared.event.RuntimeEvent; | 5 | import org.activiti.api.model.shared.event.RuntimeEvent; |
| 6 | import org.activiti.api.process.model.ProcessInstance; | 6 | import org.activiti.api.process.model.ProcessInstance; |
| 7 | import org.activiti.api.process.model.events.ProcessRuntimeEvent; | 7 | import org.activiti.api.process.model.events.ProcessRuntimeEvent; |
| 8 | +import org.activiti.api.process.runtime.events.ProcessCancelledEvent; | ||
| 8 | import org.activiti.api.process.runtime.events.listener.ProcessEventListener; | 9 | import org.activiti.api.process.runtime.events.listener.ProcessEventListener; |
| 9 | import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; | 10 | import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; |
| 10 | import org.activiti.api.task.model.events.TaskRuntimeEvent; | 11 | import org.activiti.api.task.model.events.TaskRuntimeEvent; |
| @@ -42,7 +43,8 @@ public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>> | @@ -42,7 +43,8 @@ public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>> | ||
| 42 | } | 43 | } |
| 43 | // 取消时,更新拓展表为取消 | 44 | // 取消时,更新拓展表为取消 |
| 44 | if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { | 45 | if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { |
| 45 | - processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); | 46 | + processInstanceService.updateProcessInstanceExtCancel(event.getEntity(), |
| 47 | + ((ProcessCancelledEvent) event).getCause()); | ||
| 46 | return; | 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,13 +144,15 @@ public interface BpmProcessInstanceService { | ||
| 144 | * 更新 ProcessInstance 拓展记录为取消 | 144 | * 更新 ProcessInstance 拓展记录为取消 |
| 145 | * | 145 | * |
| 146 | * @param instance 流程任务 | 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 | * 更新 ProcessInstance 拓展记录为完成 | 152 | * 更新 ProcessInstance 拓展记录为完成 |
| 152 | * | 153 | * |
| 153 | * @param instance 流程任务 | 154 | * @param instance 流程任务 |
| 155 | + * @param reason 原因 | ||
| 154 | */ | 156 | */ |
| 155 | void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); | 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,7 +241,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | @Override | 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 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) | 251 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) |
| 246 | .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 | 252 | .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 |
| 247 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) | 253 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) |
| @@ -265,7 +271,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -265,7 +271,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 265 | public void updateProcessInstanceExtReject(String id, String comment) { | 271 | public void updateProcessInstanceExtReject(String id, String comment) { |
| 266 | ProcessInstance processInstance = getProcessInstance(id); | 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 | // 更新 status + result | 276 | // 更新 status + result |
| 271 | // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, | 277 | // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, |