Commit 1031b78f64ec775ec6ed33ecd2ca4a71e615aace
1 parent
4d7ee176
1. 创建流程实例时,同时也插入流程
2. 修改 Activiti 使用 TTL 上下文
Showing
21 changed files
with
212 additions
and
37 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.java
| @@ -31,7 +31,6 @@ public class BpmProcessInstanceController { | @@ -31,7 +31,6 @@ public class BpmProcessInstanceController { | ||
| 31 | public CommonResult<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) { | 31 | public CommonResult<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) { |
| 32 | return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO)); | 32 | return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO)); |
| 33 | // processInstanceService.getMyProcessInstancePage(getLoginUserId()); | 33 | // processInstanceService.getMyProcessInstancePage(getLoginUserId()); |
| 34 | - return null; | ||
| 35 | } | 34 | } |
| 36 | 35 | ||
| 37 | } | 36 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; |
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; |
| 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| @@ -25,17 +25,17 @@ public interface BpmDefinitionConvert { | @@ -25,17 +25,17 @@ public interface BpmDefinitionConvert { | ||
| 25 | BpmDefinitionConvert INSTANCE = Mappers.getMapper(BpmDefinitionConvert.class); | 25 | BpmDefinitionConvert INSTANCE = Mappers.getMapper(BpmDefinitionConvert.class); |
| 26 | 26 | ||
| 27 | default List<BpmProcessDefinitionPageItemRespVO> convertList(List<ProcessDefinition> list, Map<String, Deployment> deploymentMap, | 27 | default List<BpmProcessDefinitionPageItemRespVO> convertList(List<ProcessDefinition> list, Map<String, Deployment> deploymentMap, |
| 28 | - Map<String, BpmProcessDefinitionDO> processDefinitionDOMap, Map<Long, BpmFormDO> formMap) { | 28 | + Map<String, BpmProcessDefinitionExtDO> processDefinitionDOMap, Map<Long, BpmFormDO> formMap) { |
| 29 | return CollectionUtils.convertList(list, definition -> { | 29 | return CollectionUtils.convertList(list, definition -> { |
| 30 | Deployment deployment = definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId()) : null; | 30 | Deployment deployment = definition.getDeploymentId() != null ? deploymentMap.get(definition.getDeploymentId()) : null; |
| 31 | - BpmProcessDefinitionDO definitionDO = processDefinitionDOMap.get(definition.getId()); | 31 | + BpmProcessDefinitionExtDO definitionDO = processDefinitionDOMap.get(definition.getId()); |
| 32 | BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; | 32 | BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; |
| 33 | return convert(definition, deployment, definitionDO, form); | 33 | return convert(definition, deployment, definitionDO, form); |
| 34 | }); | 34 | }); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, | 37 | default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, |
| 38 | - BpmProcessDefinitionDO processDefinitionDO, BpmFormDO form) { | 38 | + BpmProcessDefinitionExtDO processDefinitionDO, BpmFormDO form) { |
| 39 | BpmProcessDefinitionPageItemRespVO respVO = convert(bean); | 39 | BpmProcessDefinitionPageItemRespVO respVO = convert(bean); |
| 40 | respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); | 40 | respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); |
| 41 | if (deployment != null) { | 41 | if (deployment != null) { |
| @@ -53,6 +53,6 @@ public interface BpmDefinitionConvert { | @@ -53,6 +53,6 @@ public interface BpmDefinitionConvert { | ||
| 53 | 53 | ||
| 54 | BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean); | 54 | BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean); |
| 55 | 55 | ||
| 56 | - BpmProcessDefinitionDO convert2(BpmDefinitionCreateReqDTO bean); | 56 | + BpmProcessDefinitionExtDO convert2(BpmDefinitionCreateReqDTO bean); |
| 57 | 57 | ||
| 58 | } | 58 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | ||
| 4 | +import org.activiti.engine.runtime.ProcessInstance; | ||
| 5 | +import org.mapstruct.Mapper; | ||
| 6 | +import org.mapstruct.Mapping; | ||
| 7 | +import org.mapstruct.Mappings; | ||
| 8 | +import org.mapstruct.factory.Mappers; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 流程实例 Convert | ||
| 12 | + * | ||
| 13 | + * @author 芋道源码 | ||
| 14 | + */ | ||
| 15 | +@Mapper | ||
| 16 | +public interface BpmProcessInstanceConvert { | ||
| 17 | + | ||
| 18 | + BpmProcessInstanceConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceConvert.class); | ||
| 19 | + | ||
| 20 | + @Mappings({ | ||
| 21 | + @Mapping(source = "startUserId", target = "userId"), | ||
| 22 | + @Mapping(source = "id", target = "processInstanceId"), | ||
| 23 | + @Mapping(source = "startTime", target = "createTime") | ||
| 24 | + }) | ||
| 25 | + BpmProcessInstanceExtDO convert(ProcessInstance bean); | ||
| 26 | + | ||
| 27 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/workflow/TaskConvert.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/TaskConvert.java
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow; | 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TaskStepVO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TaskStepVO; |
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionDO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java
| @@ -13,14 +13,14 @@ import org.activiti.engine.repository.ProcessDefinition; | @@ -13,14 +13,14 @@ import org.activiti.engine.repository.ProcessDefinition; | ||
| 13 | * | 13 | * |
| 14 | * @author 芋道源码 | 14 | * @author 芋道源码 |
| 15 | */ | 15 | */ |
| 16 | -@TableName(value = "bpm_process_definition", autoResultMap = true) | 16 | +@TableName(value = "bpm_process_definition_ext", autoResultMap = true) |
| 17 | @Data | 17 | @Data |
| 18 | @EqualsAndHashCode(callSuper = true) | 18 | @EqualsAndHashCode(callSuper = true) |
| 19 | @ToString(callSuper = true) | 19 | @ToString(callSuper = true) |
| 20 | @Builder | 20 | @Builder |
| 21 | @NoArgsConstructor | 21 | @NoArgsConstructor |
| 22 | @AllArgsConstructor | 22 | @AllArgsConstructor |
| 23 | -public class BpmProcessDefinitionDO extends BaseDO { | 23 | +public class BpmProcessDefinitionExtDO extends BaseDO { |
| 24 | 24 | ||
| 25 | /** | 25 | /** |
| 26 | * 编号 | 26 | * 编号 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/task/BpmProcessInstanceExtDO.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.ProcessInstanceResultEnum; | ||
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.ProcessInstanceStatusEnum; | 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; | ||
| 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | import lombok.*; | 7 | import lombok.*; |
| @@ -44,13 +44,13 @@ public class BpmProcessInstanceExtDO extends BaseDO { | @@ -44,13 +44,13 @@ public class BpmProcessInstanceExtDO extends BaseDO { | ||
| 44 | /** | 44 | /** |
| 45 | * 流程实例的状态 | 45 | * 流程实例的状态 |
| 46 | * | 46 | * |
| 47 | - * 枚举 {@link ProcessInstanceStatusEnum} | 47 | + * 枚举 {@link BpmProcessInstanceStatusEnum} |
| 48 | */ | 48 | */ |
| 49 | private Integer status; | 49 | private Integer status; |
| 50 | /** | 50 | /** |
| 51 | * 结果 | 51 | * 结果 |
| 52 | * | 52 | * |
| 53 | - * 枚举 {@link ProcessInstanceResultEnum} | 53 | + * 枚举 {@link BpmProcessInstanceResultEnum} |
| 54 | */ | 54 | */ |
| 55 | private Integer result; | 55 | private Integer result; |
| 56 | 56 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionMapper.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmProcessDefinitionExtMapper.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 6 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| @@ -9,10 +9,10 @@ import java.util.Collection; | @@ -9,10 +9,10 @@ import java.util.Collection; | ||
| 9 | import java.util.List; | 9 | import java.util.List; |
| 10 | 10 | ||
| 11 | @Mapper | 11 | @Mapper |
| 12 | -public interface BpmProcessDefinitionMapper extends BaseMapper<BpmProcessDefinitionDO> { | 12 | +public interface BpmProcessDefinitionExtMapper extends BaseMapper<BpmProcessDefinitionExtDO> { |
| 13 | 13 | ||
| 14 | - default List<BpmProcessDefinitionDO> selectListByProcessDefinitionIds(Collection<String> processDefinitionIds) { | ||
| 15 | - return selectList(new QueryWrapper<BpmProcessDefinitionDO>().in("process_definition_id", processDefinitionIds)); | 14 | + default List<BpmProcessDefinitionExtDO> selectListByProcessDefinitionIds(Collection<String> processDefinitionIds) { |
| 15 | + return selectList(new QueryWrapper<BpmProcessDefinitionExtDO>().in("process_definition_id", processDefinitionIds)); | ||
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | } | 18 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.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.BpmProcessInstanceExtDO; | ||
| 4 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
| 5 | +import org.apache.ibatis.annotations.Mapper; | ||
| 6 | + | ||
| 7 | +@Mapper | ||
| 8 | +public interface BpmProcessInstanceExtMapper extends BaseMapper<BpmProcessInstanceExtDO> { | ||
| 9 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/ProcessInstanceResultEnum.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceResultEnum.java
| @@ -10,7 +10,7 @@ import lombok.Getter; | @@ -10,7 +10,7 @@ import lombok.Getter; | ||
| 10 | */ | 10 | */ |
| 11 | @Getter | 11 | @Getter |
| 12 | @AllArgsConstructor | 12 | @AllArgsConstructor |
| 13 | -public enum ProcessInstanceResultEnum { | 13 | +public enum BpmProcessInstanceResultEnum { |
| 14 | 14 | ||
| 15 | PROCESS(1, "处理中"), | 15 | PROCESS(1, "处理中"), |
| 16 | PASS(2, "通过"), | 16 | PASS(2, "通过"), |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/ProcessInstanceStatusEnum.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceStatusEnum.java
| @@ -10,7 +10,7 @@ import lombok.Getter; | @@ -10,7 +10,7 @@ import lombok.Getter; | ||
| 10 | */ | 10 | */ |
| 11 | @Getter | 11 | @Getter |
| 12 | @AllArgsConstructor | 12 | @AllArgsConstructor |
| 13 | -public enum ProcessInstanceStatusEnum { | 13 | +public enum BpmProcessInstanceStatusEnum { |
| 14 | 14 | ||
| 15 | RUNNING(1, "进行中"), | 15 | RUNNING(1, "进行中"), |
| 16 | FINISH(2, "已完成"); | 16 | FINISH(2, "已完成"); |
| @@ -18,7 +18,7 @@ public enum ProcessInstanceStatusEnum { | @@ -18,7 +18,7 @@ public enum ProcessInstanceStatusEnum { | ||
| 18 | /** | 18 | /** |
| 19 | * 状态 | 19 | * 状态 |
| 20 | */ | 20 | */ |
| 21 | - private final Integer result; | 21 | + private final Integer status; |
| 22 | /** | 22 | /** |
| 23 | * 描述 | 23 | * 描述 |
| 24 | */ | 24 | */ |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/BpmActivitiConfiguration.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmProcessInstanceEventListener; | ||
| 4 | +import org.activiti.spring.SpringProcessEngineConfiguration; | ||
| 5 | +import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; | ||
| 6 | +import org.springframework.context.annotation.Configuration; | ||
| 7 | + | ||
| 8 | +import javax.annotation.Resource; | ||
| 9 | +import java.util.Arrays; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * BPM 模块的 Activiti 配置类 | ||
| 13 | + */ | ||
| 14 | +@Configuration | ||
| 15 | +public class BpmActivitiConfiguration implements ProcessEngineConfigurationConfigurer { | ||
| 16 | + | ||
| 17 | + @Resource | ||
| 18 | + private BpmProcessInstanceEventListener processInstanceEventListener; | ||
| 19 | + | ||
| 20 | + @Override | ||
| 21 | + public void configure(SpringProcessEngineConfiguration configuration) { | ||
| 22 | + // 注册监听器,例如说 BpmProcessInstanceEventListener | ||
| 23 | + configuration.setEventListeners(Arrays.asList(processInstanceEventListener)); | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/package-info.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java
| @@ -5,9 +5,9 @@ import cn.hutool.core.util.StrUtil; | @@ -5,9 +5,9 @@ import cn.hutool.core.util.StrUtil; | ||
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; |
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; |
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmDefinitionConvert; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmDefinitionConvert; |
| 8 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionDO; | 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 9 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; | 9 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; |
| 10 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionMapper; | 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; |
| 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| 12 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; |
| 13 | import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; | 13 | import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; |
| @@ -56,7 +56,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | @@ -56,7 +56,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | ||
| 56 | private BpmFormService bpmFormService; | 56 | private BpmFormService bpmFormService; |
| 57 | 57 | ||
| 58 | @Resource | 58 | @Resource |
| 59 | - private BpmProcessDefinitionMapper processDefinitionMapper; | 59 | + private BpmProcessDefinitionExtMapper processDefinitionMapper; |
| 60 | 60 | ||
| 61 | @Override | 61 | @Override |
| 62 | public PageResult<BpmProcessDefinitionPageItemRespVO> getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageVO) { | 62 | public PageResult<BpmProcessDefinitionPageItemRespVO> getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageVO) { |
| @@ -77,14 +77,14 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | @@ -77,14 +77,14 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | ||
| 77 | Map<String, Deployment> deploymentMap = getDeploymentMap(deploymentIds); | 77 | Map<String, Deployment> deploymentMap = getDeploymentMap(deploymentIds); |
| 78 | 78 | ||
| 79 | // 获得 BpmProcessDefinitionDO Map | 79 | // 获得 BpmProcessDefinitionDO Map |
| 80 | - List<BpmProcessDefinitionDO> processDefinitionDOs = Collections.emptyList(); | 80 | + List<BpmProcessDefinitionExtDO> processDefinitionDOs = Collections.emptyList(); |
| 81 | processDefinitionDOs = processDefinitionMapper.selectListByProcessDefinitionIds( | 81 | processDefinitionDOs = processDefinitionMapper.selectListByProcessDefinitionIds( |
| 82 | convertList(processDefinitions, ProcessDefinition::getId)); | 82 | convertList(processDefinitions, ProcessDefinition::getId)); |
| 83 | - Map<String, BpmProcessDefinitionDO> processDefinitionDOMap = CollectionUtils.convertMap(processDefinitionDOs, | ||
| 84 | - BpmProcessDefinitionDO::getProcessDefinitionId); | 83 | + Map<String, BpmProcessDefinitionExtDO> processDefinitionDOMap = CollectionUtils.convertMap(processDefinitionDOs, |
| 84 | + BpmProcessDefinitionExtDO::getProcessDefinitionId); | ||
| 85 | 85 | ||
| 86 | // 获得 Form Map | 86 | // 获得 Form Map |
| 87 | - Set<Long> formIds = CollectionUtils.convertSet(processDefinitionDOs, BpmProcessDefinitionDO::getFormId); | 87 | + Set<Long> formIds = CollectionUtils.convertSet(processDefinitionDOs, BpmProcessDefinitionExtDO::getFormId); |
| 88 | Map<Long, BpmFormDO> formMap = bpmFormService.getFormMap(formIds); | 88 | Map<Long, BpmFormDO> formMap = bpmFormService.getFormMap(formIds); |
| 89 | 89 | ||
| 90 | // 拼接结果 | 90 | // 拼接结果 |
| @@ -169,7 +169,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | @@ -169,7 +169,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ | ||
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | // 插入拓展表 | 171 | // 插入拓展表 |
| 172 | - BpmProcessDefinitionDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO) | 172 | + BpmProcessDefinitionExtDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO) |
| 173 | .setProcessDefinitionId(definition.getId()); | 173 | .setProcessDefinitionId(definition.getId()); |
| 174 | processDefinitionMapper.insert(definitionDO); | 174 | processDefinitionMapper.insert(definitionDO); |
| 175 | return definition.getId(); | 175 | return definition.getId(); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/LeaveApplyEndProcessor.java
| @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.oa; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; |
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; |
| 5 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.ProcessInstanceResultEnum; | 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 6 | import org.activiti.engine.delegate.DelegateExecution; | 6 | import org.activiti.engine.delegate.DelegateExecution; |
| 7 | import org.activiti.engine.delegate.ExecutionListener; | 7 | import org.activiti.engine.delegate.ExecutionListener; |
| 8 | import org.springframework.stereotype.Component; | 8 | import org.springframework.stereotype.Component; |
| @@ -29,9 +29,9 @@ public class LeaveApplyEndProcessor implements ExecutionListener { | @@ -29,9 +29,9 @@ public class LeaveApplyEndProcessor implements ExecutionListener { | ||
| 29 | OALeaveDO updateDo = new OALeaveDO(); | 29 | OALeaveDO updateDo = new OALeaveDO(); |
| 30 | updateDo.setId(Long.valueOf(businessKey)); | 30 | updateDo.setId(Long.valueOf(businessKey)); |
| 31 | if (Objects.equals(approved, true)) { | 31 | if (Objects.equals(approved, true)) { |
| 32 | - updateDo.setStatus(ProcessInstanceResultEnum.PASS.getResult()); | 32 | + updateDo.setStatus(BpmProcessInstanceResultEnum.PASS.getResult()); |
| 33 | } else { | 33 | } else { |
| 34 | - updateDo.setStatus(ProcessInstanceResultEnum.REJECT.getResult()); | 34 | + updateDo.setStatus(BpmProcessInstanceResultEnum.REJECT.getResult()); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | leaveMapper.updateById(updateDo); | 37 | leaveMapper.updateById(updateDo); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/oa/impl/OALeaveServiceImpl.java
| @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; | @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.oa.vo.*; | ||
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert; | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert; |
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; |
| 8 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; | 8 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.oa.OALeaveMapper; |
| 9 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.ProcessInstanceResultEnum; | 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.OALeaveService; | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.OALeaveService; |
| 11 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; | 11 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; |
| 12 | import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; | 12 | import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; |
| @@ -62,7 +62,7 @@ public class OALeaveServiceImpl implements OALeaveService { | @@ -62,7 +62,7 @@ public class OALeaveServiceImpl implements OALeaveService { | ||
| 62 | public Long createLeave(OALeaveCreateReqVO createReqVO) { | 62 | public Long createLeave(OALeaveCreateReqVO createReqVO) { |
| 63 | // 插入 OA 请假单 | 63 | // 插入 OA 请假单 |
| 64 | OALeaveDO leave = OALeaveConvert.INSTANCE.convert(createReqVO); | 64 | OALeaveDO leave = OALeaveConvert.INSTANCE.convert(createReqVO); |
| 65 | - leave.setStatus(ProcessInstanceResultEnum.PROCESS.getResult()); | 65 | + leave.setStatus(BpmProcessInstanceResultEnum.PROCESS.getResult()); |
| 66 | // TODO @jason:应该是存储 userId?? | 66 | // TODO @jason:应该是存储 userId?? |
| 67 | leave.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); | 67 | leave.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); |
| 68 | leaveMapper.insert(leave); | 68 | leaveMapper.insert(leave); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener.BpmProcessInstanceEventListener; | ||
| 4 | 5 | ||
| 5 | import javax.validation.Valid; | 6 | import javax.validation.Valid; |
| 6 | 7 |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
| @@ -2,13 +2,17 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | @@ -2,13 +2,17 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.lang.Assert; | 3 | import cn.hutool.core.lang.Assert; |
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; | ||
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | ||
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; | ||
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; | ||
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| 6 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| 7 | import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; | 12 | import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; |
| 8 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | 13 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; |
| 9 | import lombok.extern.slf4j.Slf4j; | 14 | import lombok.extern.slf4j.Slf4j; |
| 10 | import org.activiti.engine.HistoryService; | 15 | import org.activiti.engine.HistoryService; |
| 11 | -import org.activiti.engine.RepositoryService; | ||
| 12 | import org.activiti.engine.RuntimeService; | 16 | import org.activiti.engine.RuntimeService; |
| 13 | import org.activiti.engine.TaskService; | 17 | import org.activiti.engine.TaskService; |
| 14 | import org.activiti.engine.history.HistoricProcessInstance; | 18 | import org.activiti.engine.history.HistoricProcessInstance; |
| @@ -45,8 +49,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | @@ -45,8 +49,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | ||
| 45 | public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { | 49 | public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { |
| 46 | 50 | ||
| 47 | @Resource | 51 | @Resource |
| 48 | - private RepositoryService repositoryService; | ||
| 49 | - @Resource | ||
| 50 | private RuntimeService runtimeService; | 52 | private RuntimeService runtimeService; |
| 51 | @Resource | 53 | @Resource |
| 52 | private TaskService taskService; | 54 | private TaskService taskService; |
| @@ -58,7 +60,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -58,7 +60,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 58 | @Resource | 60 | @Resource |
| 59 | private BpmProcessDefinitionService processDefinitionService; | 61 | private BpmProcessDefinitionService processDefinitionService; |
| 60 | 62 | ||
| 63 | + @Resource | ||
| 64 | + private BpmProcessInstanceExtMapper processInstanceExtMapper; | ||
| 65 | + | ||
| 61 | @Override | 66 | @Override |
| 67 | +// @Transactional(rollbackFor = Exception.class) | ||
| 62 | public String createProcessInstance(Long userId, BpmProcessInstanceCreateReqVO createReqVO) { | 68 | public String createProcessInstance(Long userId, BpmProcessInstanceCreateReqVO createReqVO) { |
| 63 | // 校验流程定义 | 69 | // 校验流程定义 |
| 64 | ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); | 70 | ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); |
| @@ -72,6 +78,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -72,6 +78,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 72 | // 创建流程实例 | 78 | // 创建流程实例 |
| 73 | Map<String, Object> variables = createReqVO.getVariables(); | 79 | Map<String, Object> variables = createReqVO.getVariables(); |
| 74 | ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); | 80 | ProcessInstance instance = runtimeService.startProcessInstanceById(createReqVO.getProcessDefinitionId(), variables); |
| 81 | + // 设置流程名字 | ||
| 82 | + runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); | ||
| 83 | + // 记录流程实例的拓展表 | ||
| 84 | + createProcessInstanceExt(instance, definition.getName()); | ||
| 75 | 85 | ||
| 76 | // 添加初始的评论 TODO 芋艿:在思考下 | 86 | // 添加初始的评论 TODO 芋艿:在思考下 |
| 77 | Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); | 87 | Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); |
| @@ -88,6 +98,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -88,6 +98,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 88 | return instance.getId(); | 98 | return instance.getId(); |
| 89 | } | 99 | } |
| 90 | 100 | ||
| 101 | + /** | ||
| 102 | + * 创建流程实例的拓展 | ||
| 103 | + * | ||
| 104 | + * @param instance 流程实例 | ||
| 105 | + * @param name 实例名。此时,instance 的 name 为空,所以需要传递该参数 | ||
| 106 | + */ | ||
| 107 | + private void createProcessInstanceExt(ProcessInstance instance, String name) { | ||
| 108 | + BpmProcessInstanceExtDO instanceExt = BpmProcessInstanceConvert.INSTANCE.convert(instance); | ||
| 109 | + instanceExt.setName(name); | ||
| 110 | + instanceExt.setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()); | ||
| 111 | + instanceExt.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); | ||
| 112 | + processInstanceExtMapper.insert(instanceExt); | ||
| 113 | + } | ||
| 114 | + | ||
| 91 | public void getMyProcessInstancePage(Long userId) { | 115 | public void getMyProcessInstancePage(Long userId) { |
| 92 | // id title 所属流程 当前审批环节 状态 结果 创建时间 提交申请时间 【标题、状态】「ActBusiness」 | 116 | // id title 所属流程 当前审批环节 状态 结果 创建时间 提交申请时间 【标题、状态】「ActBusiness」 |
| 93 | // id title 流程类别 流程版本 提交时间 流程状态 耗时 当前节点 办理 【标题、提交时间】「HistoricProcessInstanceQuery」 | 117 | // id title 流程类别 流程版本 提交时间 流程状态 耗时 当前节点 办理 【标题、提交时间】「HistoricProcessInstanceQuery」 |
| @@ -103,4 +127,24 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -103,4 +127,24 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 103 | 127 | ||
| 104 | } | 128 | } |
| 105 | 129 | ||
| 130 | + /** | ||
| 131 | + * 获得流程实例 | ||
| 132 | + * | ||
| 133 | + * @param id 流程实例的编号 | ||
| 134 | + * @return 流程实例 | ||
| 135 | + */ | ||
| 136 | + private ProcessInstance getProcessInstance(String id) { | ||
| 137 | + return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + /** | ||
| 141 | + * 获得历史的流程实例 | ||
| 142 | + * | ||
| 143 | + * @param id 流程实例的编号 | ||
| 144 | + * @return 历史的流程实例 | ||
| 145 | + */ | ||
| 146 | + private HistoricProcessInstance getHistoricProcessInstance(String id) { | ||
| 147 | + return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult(); | ||
| 148 | + } | ||
| 149 | + | ||
| 106 | } | 150 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | @@ -3,7 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.io.IoUtil; | 4 | import cn.hutool.core.io.IoUtil; |
| 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; |
| 6 | -import cn.iocoder.yudao.adminserver.modules.bpm.convert.workflow.TaskConvert; | 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.TaskConvert; |
| 7 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; |
| 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 9 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/listener/BpmProcessInstanceEventListener.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.BpmProcessInstanceExtDO; | ||
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ||
| 5 | +import org.activiti.engine.delegate.event.ActivitiEvent; | ||
| 6 | +import org.activiti.engine.delegate.event.ActivitiEventListener; | ||
| 7 | +import org.activiti.engine.delegate.event.ActivitiEventType; | ||
| 8 | +import org.activiti.engine.runtime.ProcessInstance; | ||
| 9 | +import org.springframework.context.annotation.Lazy; | ||
| 10 | +import org.springframework.stereotype.Component; | ||
| 11 | + | ||
| 12 | +import javax.annotation.Resource; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 监听 {@link ProcessInstance} 的开始与完成,创建与更新对应的 {@link BpmProcessInstanceExtDO} 记录 | ||
| 16 | + * | ||
| 17 | + * @author 芋道源码 | ||
| 18 | + */ | ||
| 19 | +@Component | ||
| 20 | +public class BpmProcessInstanceEventListener implements ActivitiEventListener { | ||
| 21 | + | ||
| 22 | + @Resource | ||
| 23 | + @Lazy // 解决循环依赖 | ||
| 24 | + private BpmProcessInstanceService processInstanceService; | ||
| 25 | + | ||
| 26 | + @Override | ||
| 27 | + public void onEvent(ActivitiEvent event) { | ||
| 28 | + // 不处理 ActivitiEventType.PROCESS_STARTED 事件。原因:事件发布时,流程实例还没进行入库,就已经发布了 ActivitiEvent 事件 | ||
| 29 | + | ||
| 30 | + // 正常完成 | ||
| 31 | + if (event.getType() == ActivitiEventType.PROCESS_COMPLETED | ||
| 32 | + || event.getType() == ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT) { | ||
| 33 | + return; | ||
| 34 | + } | ||
| 35 | + // 取消 | ||
| 36 | + if (event.getType() == ActivitiEventType.PROCESS_CANCELLED) { | ||
| 37 | + // TODO | ||
| 38 | + System.out.println(); | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public boolean isFailOnException() { | ||
| 44 | + return true; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | +} |
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/core/util/ActivitiUtils.java
| 1 | package cn.iocoder.yudao.framework.activiti.core.util; | 1 | package cn.iocoder.yudao.framework.activiti.core.util; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.ReflectUtil; | ||
| 4 | +import com.alibaba.ttl.TransmittableThreadLocal; | ||
| 3 | import org.activiti.engine.impl.identity.Authentication; | 5 | import org.activiti.engine.impl.identity.Authentication; |
| 4 | 6 | ||
| 5 | /** | 7 | /** |
| @@ -9,6 +11,19 @@ import org.activiti.engine.impl.identity.Authentication; | @@ -9,6 +11,19 @@ import org.activiti.engine.impl.identity.Authentication; | ||
| 9 | */ | 11 | */ |
| 10 | public class ActivitiUtils { | 12 | public class ActivitiUtils { |
| 11 | 13 | ||
| 14 | + static { | ||
| 15 | + setAuthenticationThreadLocal(); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + /** | ||
| 19 | + * 反射修改 Authentication 的 authenticatedUserIdThreadLocal 静态变量,使用 TTL 线程变量 | ||
| 20 | + * 目的:保证 @Async 等异步执行时,变量丢失的问题 | ||
| 21 | + */ | ||
| 22 | + private static void setAuthenticationThreadLocal() { | ||
| 23 | + ReflectUtil.setFieldValue(Authentication.class, "authenticatedUserIdThreadLocal", | ||
| 24 | + new TransmittableThreadLocal<String>()); | ||
| 25 | + } | ||
| 26 | + | ||
| 12 | public static void setAuthenticatedUserId(Long userId) { | 27 | public static void setAuthenticatedUserId(Long userId) { |
| 13 | Authentication.setAuthenticatedUserId(String.valueOf(userId)); | 28 | Authentication.setAuthenticatedUserId(String.valueOf(userId)); |
| 14 | } | 29 | } |
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.mybatis.core.dataobject; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.mybatis.core.dataobject; | ||
| 3 | import com.baomidou.mybatisplus.annotation.FieldFill; | 3 | import com.baomidou.mybatisplus.annotation.FieldFill; |
| 4 | import com.baomidou.mybatisplus.annotation.TableField; | 4 | import com.baomidou.mybatisplus.annotation.TableField; |
| 5 | import com.baomidou.mybatisplus.annotation.TableLogic; | 5 | import com.baomidou.mybatisplus.annotation.TableLogic; |
| 6 | +import lombok.Builder; | ||
| 6 | import lombok.Data; | 7 | import lombok.Data; |
| 7 | 8 | ||
| 8 | import java.io.Serializable; | 9 | import java.io.Serializable; |