Commit 9860a7d552ab9eaf2bbede297055d69d73e659e0
1 parent
a5b8b9b6
1. 基于 BpmTaskEventListener 实现 Task 拓展表的同步
2. 基于 BpmProcessInstanceEventListener 实现 ProcessInstance 拓展表的同步
Showing
13 changed files
with
367 additions
and
56 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java
| @@ -11,6 +11,7 @@ import org.mapstruct.Mapping; | @@ -11,6 +11,7 @@ import org.mapstruct.Mapping; | ||
| 11 | import org.mapstruct.Mappings; | 11 | import org.mapstruct.Mappings; |
| 12 | import org.mapstruct.factory.Mappers; | 12 | import org.mapstruct.factory.Mappers; |
| 13 | 13 | ||
| 14 | +import java.sql.SQLXML; | ||
| 14 | import java.util.List; | 15 | import java.util.List; |
| 15 | import java.util.Map; | 16 | import java.util.Map; |
| 16 | import java.util.function.Consumer; | 17 | import java.util.function.Consumer; |
| @@ -49,4 +50,12 @@ public interface BpmProcessInstanceConvert { | @@ -49,4 +50,12 @@ public interface BpmProcessInstanceConvert { | ||
| 49 | @Mapping(source = "processInstanceId", target = "id") | 50 | @Mapping(source = "processInstanceId", target = "id") |
| 50 | BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean); | 51 | BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean); |
| 51 | 52 | ||
| 53 | + @Mappings({ | ||
| 54 | + @Mapping(source = "id", target = "processInstanceId"), | ||
| 55 | + @Mapping(source = "startDate", target = "createTime"), | ||
| 56 | + @Mapping(source = "initiator", target = "startUserId"), | ||
| 57 | + @Mapping(source = "status", target = "status", ignore = true) | ||
| 58 | + }) | ||
| 59 | + BpmProcessInstanceExtDO convert(org.activiti.api.process.model.ProcessInstance bean); | ||
| 60 | + | ||
| 52 | } | 61 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmTaskConvert.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskDonePageItemRespVO; |
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.BpmTaskTodoPageItemRespVO; |
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.TaskStepVO; | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.TaskStepVO; |
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; | ||
| 6 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | 7 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; |
| 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 8 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 8 | import org.activiti.engine.history.HistoricActivityInstance; | 9 | import org.activiti.engine.history.HistoricActivityInstance; |
| @@ -88,4 +89,11 @@ public interface BpmTaskConvert { | @@ -88,4 +89,11 @@ public interface BpmTaskConvert { | ||
| 88 | }) | 89 | }) |
| 89 | BpmTaskDonePageItemRespVO convert(HistoricTaskInstance task, HistoricProcessInstance processInstance, SysUserDO user); | 90 | BpmTaskDonePageItemRespVO convert(HistoricTaskInstance task, HistoricProcessInstance processInstance, SysUserDO user); |
| 90 | 91 | ||
| 92 | + @Mappings({ | ||
| 93 | + @Mapping(source = "id", target = "taskId"), | ||
| 94 | + @Mapping(source = "assignee", target = "assigneeUserId"), | ||
| 95 | + @Mapping(source = "createdDate", target = "createTime") | ||
| 96 | + }) | ||
| 97 | + BpmTaskExtDO convert(org.activiti.api.task.model.Task bean); | ||
| 98 | + | ||
| 91 | } | 99 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmTaskExtDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 5 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
| 6 | +import lombok.Data; | ||
| 7 | +import lombok.EqualsAndHashCode; | ||
| 8 | +import lombok.ToString; | ||
| 9 | +import org.activiti.engine.history.HistoricTaskInstance; | ||
| 10 | +import org.activiti.engine.repository.ProcessDefinition; | ||
| 11 | +import org.activiti.engine.runtime.ProcessInstance; | ||
| 12 | +import org.activiti.engine.task.Task; | ||
| 13 | + | ||
| 14 | +import java.util.Date; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * Bpm 流程任务的拓展表 | ||
| 18 | + * 主要解决 Activiti {@link Task} 和 {@link HistoricTaskInstance} 不支持拓展字段,所以新建拓展表 | ||
| 19 | + * | ||
| 20 | + * @author 芋道源码 | ||
| 21 | + */ | ||
| 22 | +@TableName(value = "bpm_task_ext", autoResultMap = true) | ||
| 23 | +@Data | ||
| 24 | +@EqualsAndHashCode(callSuper = true) | ||
| 25 | +@ToString(callSuper = true) | ||
| 26 | +//@Builder | ||
| 27 | +//@NoArgsConstructor | ||
| 28 | +//@AllArgsConstructor | ||
| 29 | +public class BpmTaskExtDO extends BaseDO { | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 任务的审批人 | ||
| 33 | + * | ||
| 34 | + * 冗余 {@link Task#getAssignee()} | ||
| 35 | + */ | ||
| 36 | + private Long assigneeUserId; | ||
| 37 | + /** | ||
| 38 | + * 任务的名字 | ||
| 39 | + * | ||
| 40 | + * 冗余 {@link Task#getName()} 为了筛选 | ||
| 41 | + */ | ||
| 42 | + private String name; | ||
| 43 | + /** | ||
| 44 | + * 任务的编号 | ||
| 45 | + * | ||
| 46 | + * 关联 {@link Task#getId()} | ||
| 47 | + */ | ||
| 48 | + private String taskId; | ||
| 49 | + /** | ||
| 50 | + * 任务的结果 | ||
| 51 | + * | ||
| 52 | + * 枚举 {@link BpmProcessInstanceResultEnum} | ||
| 53 | + */ | ||
| 54 | + private Integer result; | ||
| 55 | + /** | ||
| 56 | + * 审批建议 | ||
| 57 | + */ | ||
| 58 | + private String comment; | ||
| 59 | + /** | ||
| 60 | + * 任务的结束时间 | ||
| 61 | + * | ||
| 62 | + * 冗余 {@link HistoricTaskInstance#getEndTime()} | ||
| 63 | + */ | ||
| 64 | + private Date endTime; | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * 流程实例的编号 | ||
| 68 | + * | ||
| 69 | + * 关联 {@link ProcessInstance#getId()} | ||
| 70 | + */ | ||
| 71 | + private String processInstanceId; | ||
| 72 | + /** | ||
| 73 | + * 流程定义的编号 | ||
| 74 | + * | ||
| 75 | + * 关联 {@link ProcessDefinition#getId()} | ||
| 76 | + */ | ||
| 77 | + private String processDefinitionId; | ||
| 78 | + | ||
| 79 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java
| @@ -23,8 +23,9 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInsta | @@ -23,8 +23,9 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInsta | ||
| 23 | .orderByDesc("id")); | 23 | .orderByDesc("id")); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | - default void updateByProcessInstanceId(String processInstanceId, BpmProcessInstanceExtDO updateObj) { | ||
| 27 | - update(updateObj, new QueryWrapper<BpmProcessInstanceExtDO>().eq("process_instance_id", processInstanceId)); | 26 | + default void updateByProcessInstanceId(BpmProcessInstanceExtDO updateObj) { |
| 27 | + update(updateObj, new QueryWrapper<BpmProcessInstanceExtDO>() | ||
| 28 | + .eq("process_instance_id", updateObj.getProcessInstanceId())); | ||
| 28 | } | 29 | } |
| 29 | 30 | ||
| 30 | } | 31 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmTaskExtMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | + | ||
| 8 | +@Mapper | ||
| 9 | +public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> { | ||
| 10 | + | ||
| 11 | + default void updateByTaskId(BpmTaskExtDO entity) { | ||
| 12 | + update(entity, new QueryWrapper<BpmTaskExtDO>().eq("task_id", entity.getTaskId())); | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
| @@ -35,6 +35,7 @@ public interface BpmErrorCodeConstants { | @@ -35,6 +35,7 @@ public interface BpmErrorCodeConstants { | ||
| 35 | // ========== 流程实例 1-009-004-000 ========== | 35 | // ========== 流程实例 1-009-004-000 ========== |
| 36 | ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1009004000, "流程实例不存在"); | 36 | ErrorCode PROCESS_INSTANCE_NOT_EXISTS = new ErrorCode(1009004000, "流程实例不存在"); |
| 37 | ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1009004001, "流程取消失败,流程不处于运行中"); | 37 | ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS = new ErrorCode(1009004001, "流程取消失败,流程不处于运行中"); |
| 38 | + ErrorCode PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF = new ErrorCode(1009004002, "流程取消失败,该流程不是你发起的"); | ||
| 38 | 39 | ||
| 39 | // ========== 流程实例 1-009-005-000 ========== | 40 | // ========== 流程实例 1-009-005-000 ========== |
| 40 | ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1009004000, "审批任务失败,原因:该任务不处于未审批"); | 41 | ErrorCode TASK_COMPLETE_FAIL_NOT_EXISTS = new ErrorCode(1009004000, "审批任务失败,原因:该任务不处于未审批"); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmProcessInstanceEventListener; | ||
| 4 | import org.activiti.spring.SpringProcessEngineConfiguration; | 3 | import org.activiti.spring.SpringProcessEngineConfiguration; |
| 5 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; | 4 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; |
| 6 | import org.springframework.context.annotation.Configuration; | 5 | import org.springframework.context.annotation.Configuration; |
| 7 | 6 | ||
| 8 | -import javax.annotation.Resource; | ||
| 9 | -import java.util.Arrays; | ||
| 10 | - | ||
| 11 | /** | 7 | /** |
| 12 | * BPM 模块的 Activiti 配置类 | 8 | * BPM 模块的 Activiti 配置类 |
| 13 | */ | 9 | */ |
| 14 | @Configuration | 10 | @Configuration |
| 15 | public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { | 11 | public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { |
| 16 | 12 | ||
| 17 | - @Resource | ||
| 18 | - private BpmProcessInstanceEventListener processInstanceEventListener; | ||
| 19 | - | ||
| 20 | @Override | 13 | @Override |
| 21 | public void configure(SpringProcessEngineConfiguration configuration) { | 14 | public void configure(SpringProcessEngineConfiguration configuration) { |
| 22 | - // 注册监听器,例如说 BpmProcessInstanceEventListener | ||
| 23 | - configuration.setEventListeners(Arrays.asList(processInstanceEventListener)); | 15 | + // 注册监听器,例如说 ActivitiEventListener 的实现类 |
| 16 | +// configuration.setEventListeners(Arrays.asList(processInstanceEventListener)); | ||
| 24 | } | 17 | } |
| 25 | 18 | ||
| 26 | } | 19 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| @@ -46,10 +46,12 @@ public interface BpmProcessInstanceService { | @@ -46,10 +46,12 @@ public interface BpmProcessInstanceService { | ||
| 46 | * @param id 流程编号 | 46 | * @param id 流程编号 |
| 47 | * @param reason 删除原因。可选 {@link BpmProcessInstanceDeleteReasonEnum} | 47 | * @param reason 删除原因。可选 {@link BpmProcessInstanceDeleteReasonEnum} |
| 48 | */ | 48 | */ |
| 49 | + @Deprecated | ||
| 49 | void deleteProcessInstance(String id, String reason); | 50 | void deleteProcessInstance(String id, String reason); |
| 50 | 51 | ||
| 51 | /** | 52 | /** |
| 52 | * 更新流程实例的结果 | 53 | * 更新流程实例的结果 |
| 54 | + * 1. 如果更新为已拒绝时,会进行任务的删除 | ||
| 53 | * | 55 | * |
| 54 | * @param id 流程编号 | 56 | * @param id 流程编号 |
| 55 | * @param result 结果,{@link BpmProcessInstanceResultEnum} | 57 | * @param result 结果,{@link BpmProcessInstanceResultEnum} |
| @@ -118,4 +120,32 @@ public interface BpmProcessInstanceService { | @@ -118,4 +120,32 @@ public interface BpmProcessInstanceService { | ||
| 118 | return CollectionUtils.convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId); | 120 | return CollectionUtils.convertMap(getHistoricProcessInstances(ids), HistoricProcessInstance::getId); |
| 119 | } | 121 | } |
| 120 | 122 | ||
| 123 | + /** | ||
| 124 | + * 创建 ProcessInstance 拓展记录 | ||
| 125 | + * | ||
| 126 | + * @param instance 流程任务 | ||
| 127 | + */ | ||
| 128 | + void createProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance); | ||
| 129 | + | ||
| 130 | + /** | ||
| 131 | + * 更新 ProcessInstance 拓展记录 | ||
| 132 | + * | ||
| 133 | + * @param instance 流程任务 | ||
| 134 | + */ | ||
| 135 | + void updateProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance); | ||
| 136 | + | ||
| 137 | + /** | ||
| 138 | + * 更新 ProcessInstance 拓展记录为取消 | ||
| 139 | + * | ||
| 140 | + * @param instance 流程任务 | ||
| 141 | + */ | ||
| 142 | + void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance); | ||
| 143 | + | ||
| 144 | + /** | ||
| 145 | + * 更新 ProcessInstance 拓展记录为完成 | ||
| 146 | + * | ||
| 147 | + * @param instance 流程任务 | ||
| 148 | + */ | ||
| 149 | + void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); | ||
| 150 | + | ||
| 121 | } | 151 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java
| @@ -105,4 +105,34 @@ public interface BpmTaskService { | @@ -105,4 +105,34 @@ public interface BpmTaskService { | ||
| 105 | */ | 105 | */ |
| 106 | FileResp getHighlightImg(String processInstanceId); | 106 | FileResp getHighlightImg(String processInstanceId); |
| 107 | 107 | ||
| 108 | + // ========== Task 拓展表相关 ========== | ||
| 109 | + | ||
| 110 | + /** | ||
| 111 | + * 创建 Task 拓展记录 | ||
| 112 | + * | ||
| 113 | + * @param task 任务实体 | ||
| 114 | + */ | ||
| 115 | + void createTaskExt(org.activiti.api.task.model.Task task); | ||
| 116 | + | ||
| 117 | + /** | ||
| 118 | + * 更新 Task 拓展记录 | ||
| 119 | + * | ||
| 120 | + * @param task 任务实体 | ||
| 121 | + */ | ||
| 122 | + void updateTaskExt(org.activiti.api.task.model.Task task); | ||
| 123 | + | ||
| 124 | + /** | ||
| 125 | + * 更新 Task 拓展记录为取消 | ||
| 126 | + * | ||
| 127 | + * @param task 任务实体 | ||
| 128 | + */ | ||
| 129 | + void updateTaskExtCancel(org.activiti.api.task.model.Task task); | ||
| 130 | + | ||
| 131 | + /** | ||
| 132 | + * 更新 Task 拓展记录为完成 | ||
| 133 | + * | ||
| 134 | + * @param task 任务实体 | ||
| 135 | + */ | ||
| 136 | + void updateTaskExtComplete(org.activiti.api.task.model.Task task); | ||
| 137 | + | ||
| 108 | } | 138 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| @@ -7,8 +7,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmP | @@ -7,8 +7,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmP | ||
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; |
| 8 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; | 8 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; |
| 9 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; | 9 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; |
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; | ||
| 10 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 12 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; | ||
| 11 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; | 13 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; |
| 14 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | ||
| 12 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | 15 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 13 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; | 16 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; |
| 14 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | 17 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| @@ -33,9 +36,7 @@ import org.springframework.transaction.annotation.Transactional; | @@ -33,9 +36,7 @@ import org.springframework.transaction.annotation.Transactional; | ||
| 33 | import org.springframework.validation.annotation.Validated; | 36 | import org.springframework.validation.annotation.Validated; |
| 34 | 37 | ||
| 35 | import javax.annotation.Resource; | 38 | import javax.annotation.Resource; |
| 36 | -import java.util.List; | ||
| 37 | -import java.util.Map; | ||
| 38 | -import java.util.Set; | 39 | +import java.util.*; |
| 39 | import java.util.function.Consumer; | 40 | import java.util.function.Consumer; |
| 40 | 41 | ||
| 41 | import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; | 42 | import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; |
| @@ -92,8 +93,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -92,8 +93,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 92 | ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); | 93 | ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); |
| 93 | // 设置流程名字 | 94 | // 设置流程名字 |
| 94 | runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); | 95 | runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); |
| 95 | - // 记录流程实例的拓展表 | ||
| 96 | - createProcessInstanceExt(instance, definition); | 96 | + // 更新流程实例拓展表的 category TODO 芋艿:暂时没好的办法,task 的 category 不正确。另外,definition 返回的 category 也不太正确,后续在解决; |
| 97 | + processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO() | ||
| 98 | + .setProcessInstanceId(instance.getId()).setCategory(definition.getCategory())); | ||
| 97 | 99 | ||
| 98 | // TODO 芋艿:临时使用, 保证分配 | 100 | // TODO 芋艿:临时使用, 保证分配 |
| 99 | List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); | 101 | List<Task> tasks = taskService.getTasksByProcessInstanceId(instance.getId()); |
| @@ -114,19 +116,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -114,19 +116,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 114 | return instance.getId(); | 116 | return instance.getId(); |
| 115 | } | 117 | } |
| 116 | 118 | ||
| 117 | - /** | ||
| 118 | - * 创建流程实例的拓展 | ||
| 119 | - * | ||
| 120 | - * @param definition 流程定义 | ||
| 121 | - * @param instance 流程实例 | ||
| 122 | - */ | ||
| 123 | - private void createProcessInstanceExt(ProcessInstance instance, ProcessDefinition definition) { | ||
| 124 | - BpmProcessInstanceExtDO instanceExt = BpmProcessInstanceConvert.INSTANCE.convert(instance, definition); | ||
| 125 | - instanceExt.setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()); | ||
| 126 | - instanceExt.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | ||
| 127 | - processInstanceExtMapper.insert(instanceExt); | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | @Override | 119 | @Override |
| 131 | @Transactional(rollbackFor = Exception.class) | 120 | @Transactional(rollbackFor = Exception.class) |
| 132 | public void cancelProcessInstance(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO) { | 121 | public void cancelProcessInstance(Long userId, BpmProcessInstanceCancelReqVO cancelReqVO) { |
| @@ -135,12 +124,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -135,12 +124,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 135 | if (instance == null) { | 124 | if (instance == null) { |
| 136 | throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); | 125 | throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); |
| 137 | } | 126 | } |
| 138 | - // TODO 芋艿:只能自己取消流程 | 127 | + // 只能取消自己的 |
| 128 | + if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { | ||
| 129 | + throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); | ||
| 130 | + } | ||
| 139 | 131 | ||
| 140 | // 通过删除流程实例,实现流程实例的取消 | 132 | // 通过删除流程实例,实现流程实例的取消 |
| 141 | runtimeService.deleteProcessInstance(cancelReqVO.getId(), cancelReqVO.getReason()); | 133 | runtimeService.deleteProcessInstance(cancelReqVO.getId(), cancelReqVO.getReason()); |
| 142 | - // 更新流程实例的拓展表为取消状态 | ||
| 143 | - updateProcessInstanceResult(cancelReqVO.getId(), BpmProcessInstanceResultEnum.CANCEL.getResult()); | ||
| 144 | } | 134 | } |
| 145 | 135 | ||
| 146 | @Override | 136 | @Override |
| @@ -149,8 +139,14 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -149,8 +139,14 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 149 | } | 139 | } |
| 150 | 140 | ||
| 151 | @Override | 141 | @Override |
| 142 | + @Transactional(rollbackFor = Exception.class) | ||
| 152 | public void updateProcessInstanceResult(String id, Integer result) { | 143 | public void updateProcessInstanceResult(String id, Integer result) { |
| 153 | - processInstanceExtMapper.updateByProcessInstanceId(id, new BpmProcessInstanceExtDO() | 144 | + // 删除流程实例,以实现驳回任务时,取消整个审批流程 |
| 145 | + if (Objects.equals(result, BpmProcessInstanceResultEnum.REJECT.getResult())) { | ||
| 146 | + deleteProcessInstance(id, BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason()); | ||
| 147 | + } | ||
| 148 | + // 更新 status + result | ||
| 149 | + processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(id) | ||
| 154 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()).setResult(result)); | 150 | .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()).setResult(result)); |
| 155 | } | 151 | } |
| 156 | 152 | ||
| @@ -196,4 +192,36 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -196,4 +192,36 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 196 | return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); | 192 | return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); |
| 197 | } | 193 | } |
| 198 | 194 | ||
| 195 | + @Override | ||
| 196 | + public void createProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance) { | ||
| 197 | + BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) | ||
| 198 | + .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) | ||
| 199 | + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | ||
| 200 | + processInstanceExtMapper.insert(instanceExtDO); | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + @Override | ||
| 204 | + public void updateProcessInstanceExt(org.activiti.api.process.model.ProcessInstance instance) { | ||
| 205 | + BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance); | ||
| 206 | + processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + @Override | ||
| 210 | + public void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance) { | ||
| 211 | + BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) | ||
| 212 | + .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 | ||
| 213 | + .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) | ||
| 214 | + .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); | ||
| 215 | + processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); | ||
| 216 | + } | ||
| 217 | + | ||
| 218 | + @Override | ||
| 219 | + public void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance) { | ||
| 220 | + BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) | ||
| 221 | + .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 | ||
| 222 | + .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) | ||
| 223 | + .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 | ||
| 224 | + processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); | ||
| 225 | + } | ||
| 226 | + | ||
| 199 | } | 227 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
| @@ -5,7 +5,8 @@ import cn.hutool.core.io.IoUtil; | @@ -5,7 +5,8 @@ import cn.hutool.core.io.IoUtil; | ||
| 5 | import cn.hutool.core.util.StrUtil; | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; |
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; |
| 8 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmTaskExtMapper; | ||
| 9 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; |
| @@ -76,6 +77,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -76,6 +77,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 76 | @Lazy // 解决循环依赖 | 77 | @Lazy // 解决循环依赖 |
| 77 | private BpmProcessInstanceService processInstanceService; | 78 | private BpmProcessInstanceService processInstanceService; |
| 78 | 79 | ||
| 80 | + @Resource | ||
| 81 | + private BpmTaskExtMapper taskExtMapper; | ||
| 82 | + | ||
| 79 | @Override | 83 | @Override |
| 80 | public List<Task> getTasksByProcessInstanceId(String processInstanceId) { | 84 | public List<Task> getTasksByProcessInstanceId(String processInstanceId) { |
| 81 | return taskService.createTaskQuery().processInstanceId(processInstanceId).list(); | 85 | return taskService.createTaskQuery().processInstanceId(processInstanceId).list(); |
| @@ -175,12 +179,16 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -175,12 +179,16 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 175 | 179 | ||
| 176 | // 完成任务,审批通过 | 180 | // 完成任务,审批通过 |
| 177 | taskService.complete(task.getId(), instance.getProcessVariables()); // TODO 芋艿:variables 的选择 | 181 | taskService.complete(task.getId(), instance.getProcessVariables()); // TODO 芋艿:variables 的选择 |
| 182 | + // 更新任务拓展表为通过 | ||
| 183 | + taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId()) | ||
| 184 | + .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()).setComment(reqVO.getComment())); | ||
| 178 | 185 | ||
| 179 | // TODO 芋艿:添加评论 | 186 | // TODO 芋艿:添加评论 |
| 180 | // taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); | 187 | // taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); |
| 181 | } | 188 | } |
| 182 | 189 | ||
| 183 | @Override | 190 | @Override |
| 191 | + @Transactional(rollbackFor = Exception.class) | ||
| 184 | public void rejectTask(@Valid BpmTaskRejectReqVO reqVO) { | 192 | public void rejectTask(@Valid BpmTaskRejectReqVO reqVO) { |
| 185 | // 校验任务存在 | 193 | // 校验任务存在 |
| 186 | Task task = getTask(reqVO.getId()); | 194 | Task task = getTask(reqVO.getId()); |
| @@ -193,12 +201,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -193,12 +201,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 193 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); | 201 | throw exception(PROCESS_INSTANCE_NOT_EXISTS); |
| 194 | } | 202 | } |
| 195 | 203 | ||
| 196 | - // 删除流程实例,以实现驳回任务时,取消整个审批流程 | ||
| 197 | - processInstanceService.deleteProcessInstance(instance.getId(), BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason()); | ||
| 198 | // 更新流程实例为不通过 | 204 | // 更新流程实例为不通过 |
| 199 | processInstanceService.updateProcessInstanceResult(instance.getProcessInstanceId(), | 205 | processInstanceService.updateProcessInstanceResult(instance.getProcessInstanceId(), |
| 200 | BpmProcessInstanceResultEnum.REJECT.getResult()); | 206 | BpmProcessInstanceResultEnum.REJECT.getResult()); |
| 201 | 207 | ||
| 208 | + // 更新任务拓展表为不通过 | ||
| 209 | + taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId()) | ||
| 210 | + .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()).setComment(reqVO.getComment())); | ||
| 211 | + | ||
| 202 | // TODO 芋艿:添加评论 | 212 | // TODO 芋艿:添加评论 |
| 203 | // taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); | 213 | // taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); |
| 204 | } | 214 | } |
| @@ -382,4 +392,35 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -382,4 +392,35 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 382 | return taskService.createTaskQuery().taskId(id).singleResult(); | 392 | return taskService.createTaskQuery().taskId(id).singleResult(); |
| 383 | } | 393 | } |
| 384 | 394 | ||
| 395 | + // ========== Task 拓展表相关 ========== | ||
| 396 | + | ||
| 397 | + @Override | ||
| 398 | + public void createTaskExt(org.activiti.api.task.model.Task task) { | ||
| 399 | + BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task) | ||
| 400 | + .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | ||
| 401 | + taskExtMapper.insert(taskExtDO); | ||
| 402 | + } | ||
| 403 | + | ||
| 404 | + @Override | ||
| 405 | + public void updateTaskExt(org.activiti.api.task.model.Task task) { | ||
| 406 | + BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task); | ||
| 407 | + taskExtMapper.updateByTaskId(taskExtDO); | ||
| 408 | + } | ||
| 409 | + | ||
| 410 | + @Override | ||
| 411 | + public void updateTaskExtCancel(org.activiti.api.task.model.Task task) { | ||
| 412 | + BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task) | ||
| 413 | + .setEndTime(new Date()) // 由于 Task 里没有办法拿到 endTime,所以这里设置 | ||
| 414 | + .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); | ||
| 415 | + taskExtMapper.updateByTaskId(taskExtDO); | ||
| 416 | + } | ||
| 417 | + | ||
| 418 | + @Override | ||
| 419 | + public void updateTaskExtComplete(org.activiti.api.task.model.Task task) { | ||
| 420 | + BpmTaskExtDO taskExtDO = BpmTaskConvert.INSTANCE.convert(task) | ||
| 421 | + .setEndTime(task.getCompletedDate()) | ||
| 422 | + .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); | ||
| 423 | + taskExtMapper.updateByTaskId(taskExtDO); | ||
| 424 | + } | ||
| 425 | + | ||
| 385 | } | 426 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| 6 | -import org.activiti.engine.delegate.event.ActivitiEvent; | ||
| 7 | -import org.activiti.engine.delegate.event.ActivitiEventListener; | ||
| 8 | -import org.activiti.engine.delegate.event.ActivitiEventType; | ||
| 9 | -import org.activiti.engine.runtime.ProcessInstance; | 5 | +import org.activiti.api.model.shared.event.RuntimeEvent; |
| 6 | +import org.activiti.api.process.model.ProcessInstance; | ||
| 7 | +import org.activiti.api.process.model.events.ProcessRuntimeEvent; | ||
| 8 | +import org.activiti.api.process.runtime.events.listener.ProcessEventListener; | ||
| 9 | +import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; | ||
| 10 | +import org.activiti.api.task.model.events.TaskRuntimeEvent; | ||
| 10 | import org.springframework.context.annotation.Lazy; | 11 | import org.springframework.context.annotation.Lazy; |
| 11 | import org.springframework.stereotype.Component; | 12 | import org.springframework.stereotype.Component; |
| 12 | 13 | ||
| @@ -18,29 +19,40 @@ import javax.annotation.Resource; | @@ -18,29 +19,40 @@ import javax.annotation.Resource; | ||
| 18 | * @author 芋道源码 | 19 | * @author 芋道源码 |
| 19 | */ | 20 | */ |
| 20 | @Component | 21 | @Component |
| 21 | -public class BpmProcessInstanceEventListener implements ActivitiEventListener { | 22 | +public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>> |
| 23 | + implements ProcessRuntimeEventListener<T> { | ||
| 22 | 24 | ||
| 23 | @Resource | 25 | @Resource |
| 24 | @Lazy // 解决循环依赖 | 26 | @Lazy // 解决循环依赖 |
| 25 | private BpmProcessInstanceService processInstanceService; | 27 | private BpmProcessInstanceService processInstanceService; |
| 26 | 28 | ||
| 27 | @Override | 29 | @Override |
| 28 | - public void onEvent(ActivitiEvent event) { | ||
| 29 | - // 不处理 ActivitiEventType.PROCESS_STARTED 事件。原因:事件发布时,流程实例还没进行入库,就已经发布了 ActivitiEvent 事件 | ||
| 30 | - // 不处理 ActivitiEventType.PROCESS_CANCELLED 事件。原因:直接在 BpmTaskService#cancelProcessInstance 更新记录 | ||
| 31 | - | ||
| 32 | - // 正常完成 | ||
| 33 | - if (event.getType() == ActivitiEventType.PROCESS_COMPLETED | ||
| 34 | - || event.getType() == ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT) { | ||
| 35 | - // 正常完成,说明所有流程任务都是审批通过 | ||
| 36 | - processInstanceService.updateProcessInstanceResult(event.getProcessInstanceId(), | ||
| 37 | - BpmProcessInstanceResultEnum.APPROVE.getResult()); | 30 | + @SuppressWarnings("unchecked") |
| 31 | + public void onEvent(T rawEvent) { | ||
| 32 | + // 由于 ProcessRuntimeEventListener 无法保证只监听 ProcessRuntimeEvent 事件,所以通过这样的方式 | ||
| 33 | + if (!(rawEvent instanceof ProcessRuntimeEvent)) { | ||
| 34 | + return; | ||
| 38 | } | 35 | } |
| 39 | - } | 36 | + ProcessRuntimeEvent<ProcessInstance> event = (ProcessRuntimeEvent<ProcessInstance>) rawEvent; |
| 40 | 37 | ||
| 41 | - @Override | ||
| 42 | - public boolean isFailOnException() { | ||
| 43 | - return true; | 38 | + // 创建时,插入拓展表 |
| 39 | + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CREATED) { | ||
| 40 | + processInstanceService.createProcessInstanceExt(event.getEntity()); | ||
| 41 | + return; | ||
| 42 | + } | ||
| 43 | + // 取消时,更新拓展表为取消 | ||
| 44 | + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { | ||
| 45 | + processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); | ||
| 46 | + return; | ||
| 47 | + } | ||
| 48 | + // 完成时,更新拓展表为已完成 | ||
| 49 | + if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_COMPLETED) { | ||
| 50 | + processInstanceService.updateProcessInstanceExtComplete(event.getEntity()); | ||
| 51 | + return; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + // 其它事件,进行更新拓展表 | ||
| 55 | + processInstanceService.updateProcessInstanceExt(event.getEntity()); | ||
| 44 | } | 56 | } |
| 45 | 57 | ||
| 46 | } | 58 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmTaskEventListener.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmTaskExtDO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | ||
| 5 | +import org.activiti.api.task.model.Task; | ||
| 6 | +import org.activiti.api.task.model.events.TaskRuntimeEvent; | ||
| 7 | +import org.activiti.api.task.runtime.events.listener.TaskEventListener; | ||
| 8 | +import org.springframework.context.annotation.Lazy; | ||
| 9 | +import org.springframework.stereotype.Component; | ||
| 10 | + | ||
| 11 | +import javax.annotation.Resource; | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * 监听 {@link Task} 的开始与完成,创建与更新对应的 {@link BpmTaskExtDO} 记录 | ||
| 15 | + * | ||
| 16 | + * @author 芋道源码 | ||
| 17 | + */ | ||
| 18 | +@Component | ||
| 19 | +public class BpmTaskEventListener<T extends TaskRuntimeEvent<? extends Task>> | ||
| 20 | + implements TaskEventListener<T> { | ||
| 21 | + | ||
| 22 | + @Resource | ||
| 23 | + @Lazy // 解决循环依赖 | ||
| 24 | + private BpmTaskService taskService; | ||
| 25 | + | ||
| 26 | + @Override | ||
| 27 | + public void onEvent(T event) { | ||
| 28 | + // 创建时,插入拓展表 | ||
| 29 | + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CREATED) { | ||
| 30 | + taskService.createTaskExt(event.getEntity()); | ||
| 31 | + return; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + // 取消时,更新拓展表为取消 | ||
| 35 | + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_CANCELLED) { | ||
| 36 | + taskService.updateTaskExtCancel(event.getEntity()); | ||
| 37 | + return; | ||
| 38 | + } | ||
| 39 | + // 完成时,更新拓展表为已完成。要注意,在调用 delete ProcessInstance 才会触发该逻辑 | ||
| 40 | + if (event.getEventType() == TaskRuntimeEvent.TaskEvents.TASK_COMPLETED) { | ||
| 41 | + taskService.updateTaskExtComplete(event.getEntity()); | ||
| 42 | + return; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + // 其它事件,进行更新拓展表 | ||
| 46 | + taskService.updateTaskExt(event.getEntity()); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | +// // Task 创建时,插入拓展表 | ||
| 50 | +// if (event.getType() == ActivitiEventType.TASK_CREATED) { | ||
| 51 | +// System.out.println(event); | ||
| 52 | +// return; | ||
| 53 | +// } | ||
| 54 | +// | ||
| 55 | +// if (event.getType() == ActivitiEventType.TASK_COMPLETED) { | ||
| 56 | +// System.out.println(event); | ||
| 57 | +// // 不处理; | ||
| 58 | +// } else if (event.getType() == ActivitiEventType.ENTITY_DELETED) { | ||
| 59 | +// // 假设是 | ||
| 60 | +// System.out.println(event); | ||
| 61 | +// } | ||
| 62 | +// System.out.println(event); | ||
| 63 | + | ||
| 64 | +} |