Commit 5437775172bacfa97459e9b8158a17384a396b3a
1 parent
7c62b1a2
增加 BpmProcessInstanceResultEvent 实现,实现自定义的流程实例的状态的监听
Showing
15 changed files
with
224 additions
and
64 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/oa/vo/BpmOALeaveCreateReqVO.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo; |
| 2 | 2 | |
| 3 | -import lombok.*; | |
| 4 | -import io.swagger.annotations.*; | |
| 5 | -import org.springframework.format.annotation.DateTimeFormat; | |
| 3 | +import io.swagger.annotations.ApiModel; | |
| 4 | +import lombok.Data; | |
| 5 | +import lombok.EqualsAndHashCode; | |
| 6 | +import lombok.ToString; | |
| 6 | 7 | |
| 7 | -import javax.validation.constraints.NotNull; | |
| 8 | -import java.util.Date; | |
| 9 | -import java.util.Map; | |
| 10 | - | |
| 11 | -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | |
| 8 | +import javax.validation.constraints.AssertTrue; | |
| 12 | 9 | |
| 13 | 10 | @ApiModel("请假申请创建 Request VO") |
| 14 | 11 | @Data |
| 15 | 12 | @EqualsAndHashCode(callSuper = true) |
| 16 | 13 | @ToString(callSuper = true) |
| 17 | 14 | public class BpmOALeaveCreateReqVO extends BpmOALeaveBaseVO { |
| 15 | + | |
| 16 | + @AssertTrue(message = "结束时间,需要在开始时间之后") | |
| 17 | + public boolean isEndTimeValid() { | |
| 18 | + return !getEndTime().before(getStartTime()); | |
| 19 | + } | |
| 20 | + | |
| 18 | 21 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmP |
| 5 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskRespVO; |
| 6 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 7 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; | |
| 8 | 9 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; |
| 9 | 10 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; |
| 10 | 11 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| ... | ... | @@ -98,4 +99,22 @@ public interface BpmProcessInstanceConvert { |
| 98 | 99 | void copyTo(BpmProcessDefinitionExtDO from, @MappingTarget BpmProcessInstanceRespVO.ProcessDefinition to); |
| 99 | 100 | BpmProcessInstanceRespVO.User convert2(SysUserDO bean); |
| 100 | 101 | |
| 102 | + default BpmProcessInstanceResultEvent convert(Object source, ProcessInstance instance, Integer result) { | |
| 103 | + BpmProcessInstanceResultEvent event = new BpmProcessInstanceResultEvent(source); | |
| 104 | + event.setId(instance.getId()); | |
| 105 | + event.setProcessDefinitionKey(instance.getProcessDefinitionKey()); | |
| 106 | + event.setBusinessKey(instance.getBusinessKey()); | |
| 107 | + event.setResult(result); | |
| 108 | + return event; | |
| 109 | + } | |
| 110 | + | |
| 111 | + default BpmProcessInstanceResultEvent convert(Object source, HistoricProcessInstance instance, Integer result) { | |
| 112 | + BpmProcessInstanceResultEvent event = new BpmProcessInstanceResultEvent(source); | |
| 113 | + event.setId(instance.getId()); | |
| 114 | + event.setProcessDefinitionKey(instance.getProcessDefinitionKey()); | |
| 115 | + event.setBusinessKey(instance.getBusinessKey()); | |
| 116 | + event.setResult(result); | |
| 117 | + return event; | |
| 118 | + } | |
| 119 | + | |
| 101 | 120 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java
| ... | ... | @@ -13,7 +13,8 @@ import lombok.Getter; |
| 13 | 13 | @AllArgsConstructor |
| 14 | 14 | public enum BpmProcessInstanceDeleteReasonEnum { |
| 15 | 15 | |
| 16 | - REJECT_TASK("不通过任务,原因:{}"); // 修改文案时,需要注意 isRejectReason 方法 | |
| 16 | + REJECT_TASK("不通过任务,原因:{}"), // 修改文案时,需要注意 isRejectReason 方法 | |
| 17 | + CANCEL_TASK("主动取消任务,原因:{}"); | |
| 17 | 18 | |
| 18 | 19 | private final String reason; |
| 19 | 20 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; |
| 4 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.script.BpmTaskAssignScript; |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; | |
| 5 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.identity.EmptyUserGroupManager; |
| 6 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; |
| 7 | 8 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; |
| ... | ... | @@ -11,6 +12,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermiss |
| 11 | 12 | import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; |
| 12 | 13 | import org.activiti.api.runtime.shared.identity.UserGroupManager; |
| 13 | 14 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; |
| 15 | +import org.springframework.context.ApplicationEventPublisher; | |
| 14 | 16 | import org.springframework.context.annotation.Bean; |
| 15 | 17 | import org.springframework.context.annotation.Configuration; |
| 16 | 18 | |
| ... | ... | @@ -71,4 +73,9 @@ public class BpmActivitiConfiguration { |
| 71 | 73 | return bpmActivityBehaviorFactory; |
| 72 | 74 | } |
| 73 | 75 | |
| 76 | + @Bean | |
| 77 | + public BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher(ApplicationEventPublisher publisher) { | |
| 78 | + return new BpmProcessInstanceResultEventPublisher(publisher); | |
| 79 | + } | |
| 80 | + | |
| 74 | 81 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEvent.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | |
| 4 | +import lombok.Data; | |
| 5 | +import org.springframework.context.ApplicationEvent; | |
| 6 | + | |
| 7 | +import javax.validation.constraints.NotNull; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * 流程实例的结果发生变化的 Event | |
| 11 | + * 定位:由于额外增加了 {@link BpmProcessInstanceExtDO#getResult()} 结果,所以增加该事件 | |
| 12 | + * | |
| 13 | + * @author 芋道源码 | |
| 14 | + */ | |
| 15 | +@SuppressWarnings("ALL") | |
| 16 | +@Data | |
| 17 | +public class BpmProcessInstanceResultEvent extends ApplicationEvent { | |
| 18 | + | |
| 19 | + /** | |
| 20 | + * 流程实例的编号 | |
| 21 | + */ | |
| 22 | + @NotNull(message = "流程实例的编号不能为空") | |
| 23 | + private String id; | |
| 24 | + /** | |
| 25 | + * 流程实例的 key | |
| 26 | + */ | |
| 27 | + @NotNull(message = "流程实例的 key 不能为空") | |
| 28 | + private String processDefinitionKey; | |
| 29 | + /** | |
| 30 | + * 流程实例的结果 | |
| 31 | + */ | |
| 32 | + @NotNull(message = "流程实例的结果不能为空") | |
| 33 | + private Integer result; | |
| 34 | + /** | |
| 35 | + * 流程实例对应的业务标识 | |
| 36 | + * 例如说,请假 | |
| 37 | + */ | |
| 38 | + private String businessKey; | |
| 39 | + | |
| 40 | + public BpmProcessInstanceResultEvent(Object source) { | |
| 41 | + super(source); | |
| 42 | + } | |
| 43 | + | |
| 44 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventListener.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 4 | +import org.springframework.context.ApplicationListener; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * {@link BpmProcessInstanceResultEvent} 的监听器 | |
| 8 | + * | |
| 9 | + * @author 芋道源码 | |
| 10 | + */ | |
| 11 | +public abstract class BpmProcessInstanceResultEventListener | |
| 12 | + implements ApplicationListener<BpmProcessInstanceResultEvent> { | |
| 13 | + | |
| 14 | + @Override | |
| 15 | + public final void onApplicationEvent(BpmProcessInstanceResultEvent event) { | |
| 16 | + if (!StrUtil.equals(event.getProcessDefinitionKey(), getProcessDefinitionKey())) { | |
| 17 | + return; | |
| 18 | + } | |
| 19 | + onEvent(event); | |
| 20 | + } | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * @return 返回监听的流程定义 Key | |
| 24 | + */ | |
| 25 | + protected abstract String getProcessDefinitionKey(); | |
| 26 | + | |
| 27 | + /** | |
| 28 | + * 处理事件 | |
| 29 | + * | |
| 30 | + * @param event 事件 | |
| 31 | + */ | |
| 32 | + protected abstract void onEvent(BpmProcessInstanceResultEvent event); | |
| 33 | + | |
| 34 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/BpmProcessInstanceResultEventPublisher.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event; | |
| 2 | + | |
| 3 | +import lombok.AllArgsConstructor; | |
| 4 | +import org.springframework.context.ApplicationEventPublisher; | |
| 5 | +import org.springframework.validation.annotation.Validated; | |
| 6 | + | |
| 7 | +import javax.validation.Valid; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * {@link BpmProcessInstanceResultEvent} 的生产者 | |
| 11 | + * | |
| 12 | + * @author 芋道源码 | |
| 13 | + */ | |
| 14 | +@AllArgsConstructor | |
| 15 | +@Validated | |
| 16 | +public class BpmProcessInstanceResultEventPublisher { | |
| 17 | + | |
| 18 | + private final ApplicationEventPublisher publisher; | |
| 19 | + | |
| 20 | + public void sendProcessInstanceResultEvent(@Valid BpmProcessInstanceResultEvent event) { | |
| 21 | + publisher.publishEvent(event); | |
| 22 | + } | |
| 23 | + | |
| 24 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/event/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmProcessDefinitionCreateReqDTO.java
| ... | ... | @@ -2,10 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; | |
| 6 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmModelFormTypeEnum; |
| 7 | -import com.baomidou.mybatisplus.annotation.TableField; | |
| 8 | -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; | |
| 9 | 6 | import lombok.Data; |
| 10 | 7 | |
| 11 | 8 | import javax.validation.constraints.AssertTrue; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/BpmOALeaveService.java
| ... | ... | @@ -25,6 +25,14 @@ public interface BpmOALeaveService { |
| 25 | 25 | Long createLeave(Long userId, @Valid BpmOALeaveCreateReqVO createReqVO); |
| 26 | 26 | |
| 27 | 27 | /** |
| 28 | + * 更新请假申请的状态 | |
| 29 | + * | |
| 30 | + * @param id 编号 | |
| 31 | + * @param result 结果 | |
| 32 | + */ | |
| 33 | + void updateLeaveResult(Long id, Integer result); | |
| 34 | + | |
| 35 | + /** | |
| 28 | 36 | * 删除请假申请 |
| 29 | 37 | * |
| 30 | 38 | * @param id 编号 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/LeaveApplyEndProcessor.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.BpmOALeaveMapper; | |
| 5 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | |
| 6 | -import org.activiti.engine.delegate.DelegateExecution; | |
| 7 | -import org.activiti.engine.delegate.ExecutionListener; | |
| 8 | -import org.springframework.stereotype.Component; | |
| 9 | -import org.springframework.transaction.annotation.Transactional; | |
| 10 | - | |
| 11 | -import javax.annotation.Resource; | |
| 12 | -import java.util.Objects; | |
| 13 | - | |
| 14 | - | |
| 15 | -/** | |
| 16 | - * 请假流程结束流程监听处理服务, 根据请假申请审批通过,还是未通过, 更新请假表单 | |
| 17 | - */ | |
| 18 | -@Component | |
| 19 | -public class LeaveApplyEndProcessor implements ExecutionListener { | |
| 20 | - | |
| 21 | - @Resource | |
| 22 | - private BpmOALeaveMapper leaveMapper; | |
| 23 | - | |
| 24 | - @Override | |
| 25 | - @Transactional(rollbackFor = Exception.class) | |
| 26 | - public void notify(DelegateExecution delegateExecution) { | |
| 27 | - final String businessKey = delegateExecution.getProcessInstanceBusinessKey(); | |
| 28 | - final Object approved = delegateExecution.getVariable("approved"); | |
| 29 | - OALeaveDO updateDo = new OALeaveDO(); | |
| 30 | - updateDo.setId(Long.valueOf(businessKey)); | |
| 31 | - if (Objects.equals(approved, true)) { | |
| 32 | - updateDo.setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); | |
| 33 | - } else { | |
| 34 | - updateDo.setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); | |
| 35 | - } | |
| 36 | - | |
| 37 | - leaveMapper.updateById(updateDo); | |
| 38 | - } | |
| 39 | - | |
| 40 | -} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/OALeaveServiceImpl.java
| ... | ... | @@ -34,7 +34,7 @@ public class OALeaveServiceImpl implements BpmOALeaveService { |
| 34 | 34 | /** |
| 35 | 35 | * OA 请假对应的流程定义 KEY |
| 36 | 36 | */ |
| 37 | - private static final String PROCESS_KEY = "oa_leave"; | |
| 37 | + public static final String PROCESS_KEY = "oa_leave"; | |
| 38 | 38 | |
| 39 | 39 | @Resource |
| 40 | 40 | private BpmOALeaveMapper leaveMapper; |
| ... | ... | @@ -45,14 +45,8 @@ public class OALeaveServiceImpl implements BpmOALeaveService { |
| 45 | 45 | @Override |
| 46 | 46 | @Transactional(rollbackFor = Exception.class) |
| 47 | 47 | public Long createLeave(Long userId, BpmOALeaveCreateReqVO createReqVO) { |
| 48 | - // TODO 芋道源码 | |
| 49 | - // 校验是否超过请假天数的上限; | |
| 50 | - long day = DateUtil.betweenDay(createReqVO.getStartTime(), createReqVO.getEndTime(), false); | |
| 51 | - if (day <= 0) { | |
| 52 | - throw ServiceExceptionUtil.exception(OA_DAY_LEAVE_ERROR); | |
| 53 | - } | |
| 54 | - | |
| 55 | 48 | // 插入 OA 请假单 |
| 49 | + long day = DateUtil.betweenDay(createReqVO.getStartTime(), createReqVO.getEndTime(), false); | |
| 56 | 50 | OALeaveDO leave = OALeaveConvert.INSTANCE.convert(createReqVO).setUserId(userId).setDay(day) |
| 57 | 51 | .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); |
| 58 | 52 | leaveMapper.insert(leave); |
| ... | ... | @@ -70,6 +64,11 @@ public class OALeaveServiceImpl implements BpmOALeaveService { |
| 70 | 64 | } |
| 71 | 65 | |
| 72 | 66 | @Override |
| 67 | + public void updateLeaveResult(Long id, Integer result) { | |
| 68 | + leaveMapper.updateById(new OALeaveDO().setId(id).setResult(result)); | |
| 69 | + } | |
| 70 | + | |
| 71 | + @Override | |
| 73 | 72 | public void cancelLeave(Long id) { |
| 74 | 73 | // TODO 需要重新实现 |
| 75 | 74 | // 校验存在 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/listener/BpmOALeaveResultListener.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.oa.listener; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventListener; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.BpmOALeaveService; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.impl.OALeaveServiceImpl; | |
| 7 | +import org.springframework.stereotype.Component; | |
| 8 | + | |
| 9 | +import javax.annotation.Resource; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * OA 请假单的结果的监听器实现类 | |
| 13 | + * | |
| 14 | + * @author 芋道源码 | |
| 15 | + */ | |
| 16 | +@Component | |
| 17 | +public class BpmOALeaveResultListener extends BpmProcessInstanceResultEventListener { | |
| 18 | + | |
| 19 | + @Resource | |
| 20 | + private BpmOALeaveService leaveService; | |
| 21 | + | |
| 22 | + @Override | |
| 23 | + protected String getProcessDefinitionKey() { | |
| 24 | + return OALeaveServiceImpl.PROCESS_KEY; | |
| 25 | + } | |
| 26 | + | |
| 27 | + @Override | |
| 28 | + protected void onEvent(BpmProcessInstanceResultEvent event) { | |
| 29 | + leaveService.updateLeaveResult(Long.parseLong(event.getBusinessKey()), event.getResult()); | |
| 30 | + } | |
| 31 | + | |
| 32 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| ... | ... | @@ -152,7 +152,6 @@ public interface BpmProcessInstanceService { |
| 152 | 152 | * 更新 ProcessInstance 拓展记录为完成 |
| 153 | 153 | * |
| 154 | 154 | * @param instance 流程任务 |
| 155 | - * @param reason 原因 | |
| 156 | 155 | */ |
| 157 | 156 | void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); |
| 158 | 157 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| ... | ... | @@ -12,6 +12,9 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanc |
| 12 | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; |
| 13 | 13 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 14 | 14 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; |
| 15 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEvent; | |
| 16 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventListener; | |
| 17 | +import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.event.BpmProcessInstanceResultEventPublisher; | |
| 15 | 18 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| 16 | 19 | import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; |
| 17 | 20 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| ... | ... | @@ -77,6 +80,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 77 | 80 | private BpmMessageService messageService; |
| 78 | 81 | |
| 79 | 82 | @Resource |
| 83 | + private BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher; | |
| 84 | + | |
| 85 | + @Resource | |
| 80 | 86 | private BpmProcessInstanceExtMapper processInstanceExtMapper; |
| 81 | 87 | |
| 82 | 88 | @Override |
| ... | ... | @@ -141,7 +147,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 141 | 147 | } |
| 142 | 148 | |
| 143 | 149 | // 通过删除流程实例,实现流程实例的取消 |
| 144 | - runtimeService.deleteProcessInstance(cancelReqVO.getId(), cancelReqVO.getReason()); | |
| 150 | + runtimeService.deleteProcessInstance(cancelReqVO.getId(), | |
| 151 | + BpmProcessInstanceDeleteReasonEnum.CANCEL_TASK.format(cancelReqVO.getReason())); | |
| 145 | 152 | } |
| 146 | 153 | |
| 147 | 154 | @Override |
| ... | ... | @@ -247,16 +254,26 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 247 | 254 | return; |
| 248 | 255 | } |
| 249 | 256 | |
| 257 | + // 需要主动查询,因为 instance 只有 id 属性 | |
| 258 | + ProcessInstance processInstance = getProcessInstance(instance.getId()); | |
| 250 | 259 | // 更新拓展表 |
| 251 | 260 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) |
| 252 | 261 | .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 |
| 253 | 262 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) |
| 254 | 263 | .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); |
| 255 | 264 | processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); |
| 265 | + | |
| 266 | + // 发送流程实例的状态事件 | |
| 267 | + processInstanceResultEventPublisher.sendProcessInstanceResultEvent( | |
| 268 | + BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); | |
| 256 | 269 | } |
| 257 | 270 | |
| 258 | 271 | @Override |
| 259 | 272 | public void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance) { |
| 273 | + // 需要主动查询,因为 instance 只有 id 属性 | |
| 274 | + // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance | |
| 275 | + HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); | |
| 276 | + // 更新拓展表 | |
| 260 | 277 | BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) |
| 261 | 278 | .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 |
| 262 | 279 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) |
| ... | ... | @@ -265,10 +282,15 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 265 | 282 | |
| 266 | 283 | // 发送流程被通过的消息 |
| 267 | 284 | messageService.sendMessageWhenProcessInstanceApprove(BpmMessageConvert.INSTANCE.convert(instance)); |
| 285 | + | |
| 286 | + // 发送流程实例的状态事件 | |
| 287 | + processInstanceResultEventPublisher.sendProcessInstanceResultEvent( | |
| 288 | + BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); | |
| 268 | 289 | } |
| 269 | 290 | |
| 270 | 291 | @Transactional(rollbackFor = Exception.class) |
| 271 | 292 | public void updateProcessInstanceExtReject(String id, String comment) { |
| 293 | + // 需要主动查询,因为 instance 只有 id 属性 | |
| 272 | 294 | ProcessInstance processInstance = getProcessInstance(id); |
| 273 | 295 | // 删除流程实例,以实现驳回任务时,取消整个审批流程 |
| 274 | 296 | deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(comment))); |
| ... | ... | @@ -276,12 +298,17 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 276 | 298 | // 更新 status + result |
| 277 | 299 | // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, |
| 278 | 300 | // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的 |
| 279 | - processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(id) | |
| 301 | + BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessInstanceId(id) | |
| 280 | 302 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) |
| 281 | - .setResult(BpmProcessInstanceResultEnum.REJECT.getResult())); | |
| 303 | + .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); | |
| 304 | + processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); | |
| 282 | 305 | |
| 283 | 306 | // 发送流程被不通过的消息 |
| 284 | 307 | messageService.sendMessageWhenProcessInstanceReject(BpmMessageConvert.INSTANCE.convert(processInstance, comment)); |
| 308 | + | |
| 309 | + // 发送流程实例的状态事件 | |
| 310 | + processInstanceResultEventPublisher.sendProcessInstanceResultEvent( | |
| 311 | + BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); | |
| 285 | 312 | } |
| 286 | 313 | |
| 287 | 314 | } | ... | ... |