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 | 31 | public CommonResult<String> createProcessInstance(@Valid @RequestBody BpmProcessInstanceCreateReqVO createReqVO) { |
| 32 | 32 | return success(processInstanceService.createProcessInstance(getLoginUserId(), createReqVO)); |
| 33 | 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 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; |
| 2 | 2 | |
| 3 | 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 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.form.BpmFormDO; |
| 6 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| ... | ... | @@ -25,17 +25,17 @@ public interface BpmDefinitionConvert { |
| 25 | 25 | BpmDefinitionConvert INSTANCE = Mappers.getMapper(BpmDefinitionConvert.class); |
| 26 | 26 | |
| 27 | 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 | 29 | return CollectionUtils.convertList(list, definition -> { |
| 30 | 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 | 32 | BpmFormDO form = definitionDO != null ? formMap.get(definitionDO.getFormId()) : null; |
| 33 | 33 | return convert(definition, deployment, definitionDO, form); |
| 34 | 34 | }); |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | default BpmProcessDefinitionPageItemRespVO convert(ProcessDefinition bean, Deployment deployment, |
| 38 | - BpmProcessDefinitionDO processDefinitionDO, BpmFormDO form) { | |
| 38 | + BpmProcessDefinitionExtDO processDefinitionDO, BpmFormDO form) { | |
| 39 | 39 | BpmProcessDefinitionPageItemRespVO respVO = convert(bean); |
| 40 | 40 | respVO.setSuspensionState(bean.isSuspended() ? SuspensionState.SUSPENDED.getStateCode() : SuspensionState.ACTIVE.getStateCode()); |
| 41 | 41 | if (deployment != null) { |
| ... | ... | @@ -53,6 +53,6 @@ public interface BpmDefinitionConvert { |
| 53 | 53 | |
| 54 | 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 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TaskStepVO; |
| 4 | 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 | 13 | * |
| 14 | 14 | * @author 芋道源码 |
| 15 | 15 | */ |
| 16 | -@TableName(value = "bpm_process_definition", autoResultMap = true) | |
| 16 | +@TableName(value = "bpm_process_definition_ext", autoResultMap = true) | |
| 17 | 17 | @Data |
| 18 | 18 | @EqualsAndHashCode(callSuper = true) |
| 19 | 19 | @ToString(callSuper = true) |
| 20 | 20 | @Builder |
| 21 | 21 | @NoArgsConstructor |
| 22 | 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 | 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 | 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 6 | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | 7 | import lombok.*; |
| ... | ... | @@ -44,13 +44,13 @@ public class BpmProcessInstanceExtDO extends BaseDO { |
| 44 | 44 | /** |
| 45 | 45 | * 流程实例的状态 |
| 46 | 46 | * |
| 47 | - * 枚举 {@link ProcessInstanceStatusEnum} | |
| 47 | + * 枚举 {@link BpmProcessInstanceStatusEnum} | |
| 48 | 48 | */ |
| 49 | 49 | private Integer status; |
| 50 | 50 | /** |
| 51 | 51 | * 结果 |
| 52 | 52 | * |
| 53 | - * 枚举 {@link ProcessInstanceResultEnum} | |
| 53 | + * 枚举 {@link BpmProcessInstanceResultEnum} | |
| 54 | 54 | */ |
| 55 | 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 | 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 | 4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| 5 | 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 6 | 6 | import org.apache.ibatis.annotations.Mapper; |
| ... | ... | @@ -9,10 +9,10 @@ import java.util.Collection; |
| 9 | 9 | import java.util.List; |
| 10 | 10 | |
| 11 | 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
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 | 10 | */ |
| 11 | 11 | @Getter |
| 12 | 12 | @AllArgsConstructor |
| 13 | -public enum ProcessInstanceStatusEnum { | |
| 13 | +public enum BpmProcessInstanceStatusEnum { | |
| 14 | 14 | |
| 15 | 15 | RUNNING(1, "进行中"), |
| 16 | 16 | FINISH(2, "已完成"); |
| ... | ... | @@ -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 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageItemRespVO; |
| 6 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.BpmProcessDefinitionPageReqVO; |
| 7 | 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 | 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 | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| 12 | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefinitionCreateReqDTO; |
| 13 | 13 | import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService; |
| ... | ... | @@ -56,7 +56,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 56 | 56 | private BpmFormService bpmFormService; |
| 57 | 57 | |
| 58 | 58 | @Resource |
| 59 | - private BpmProcessDefinitionMapper processDefinitionMapper; | |
| 59 | + private BpmProcessDefinitionExtMapper processDefinitionMapper; | |
| 60 | 60 | |
| 61 | 61 | @Override |
| 62 | 62 | public PageResult<BpmProcessDefinitionPageItemRespVO> getProcessDefinitionPage(BpmProcessDefinitionPageReqVO pageVO) { |
| ... | ... | @@ -77,14 +77,14 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 77 | 77 | Map<String, Deployment> deploymentMap = getDeploymentMap(deploymentIds); |
| 78 | 78 | |
| 79 | 79 | // 获得 BpmProcessDefinitionDO Map |
| 80 | - List<BpmProcessDefinitionDO> processDefinitionDOs = Collections.emptyList(); | |
| 80 | + List<BpmProcessDefinitionExtDO> processDefinitionDOs = Collections.emptyList(); | |
| 81 | 81 | processDefinitionDOs = processDefinitionMapper.selectListByProcessDefinitionIds( |
| 82 | 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 | 86 | // 获得 Form Map |
| 87 | - Set<Long> formIds = CollectionUtils.convertSet(processDefinitionDOs, BpmProcessDefinitionDO::getFormId); | |
| 87 | + Set<Long> formIds = CollectionUtils.convertSet(processDefinitionDOs, BpmProcessDefinitionExtDO::getFormId); | |
| 88 | 88 | Map<Long, BpmFormDO> formMap = bpmFormService.getFormMap(formIds); |
| 89 | 89 | |
| 90 | 90 | // 拼接结果 |
| ... | ... | @@ -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 | 173 | .setProcessDefinitionId(definition.getId()); |
| 174 | 174 | processDefinitionMapper.insert(definitionDO); |
| 175 | 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 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; |
| 4 | 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 | 6 | import org.activiti.engine.delegate.DelegateExecution; |
| 7 | 7 | import org.activiti.engine.delegate.ExecutionListener; |
| 8 | 8 | import org.springframework.stereotype.Component; |
| ... | ... | @@ -29,9 +29,9 @@ public class LeaveApplyEndProcessor implements ExecutionListener { |
| 29 | 29 | OALeaveDO updateDo = new OALeaveDO(); |
| 30 | 30 | updateDo.setId(Long.valueOf(businessKey)); |
| 31 | 31 | if (Objects.equals(approved, true)) { |
| 32 | - updateDo.setStatus(ProcessInstanceResultEnum.PASS.getResult()); | |
| 32 | + updateDo.setStatus(BpmProcessInstanceResultEnum.PASS.getResult()); | |
| 33 | 33 | } else { |
| 34 | - updateDo.setStatus(ProcessInstanceResultEnum.REJECT.getResult()); | |
| 34 | + updateDo.setStatus(BpmProcessInstanceResultEnum.REJECT.getResult()); | |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 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 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.oa.OALeaveConvert; |
| 7 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.leave.OALeaveDO; |
| 8 | 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 | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.oa.OALeaveService; |
| 11 | 11 | import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; |
| 12 | 12 | import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysPostMapper; |
| ... | ... | @@ -62,7 +62,7 @@ public class OALeaveServiceImpl implements OALeaveService { |
| 62 | 62 | public Long createLeave(OALeaveCreateReqVO createReqVO) { |
| 63 | 63 | // 插入 OA 请假单 |
| 64 | 64 | OALeaveDO leave = OALeaveConvert.INSTANCE.convert(createReqVO); |
| 65 | - leave.setStatus(ProcessInstanceResultEnum.PROCESS.getResult()); | |
| 65 | + leave.setStatus(BpmProcessInstanceResultEnum.PROCESS.getResult()); | |
| 66 | 66 | // TODO @jason:应该是存储 userId?? |
| 67 | 67 | leave.setUserId(SecurityFrameworkUtils.getLoginUser().getUsername()); |
| 68 | 68 | leaveMapper.insert(leave); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.task; |
| 2 | 2 | |
| 3 | 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 | 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 | 2 | |
| 3 | 3 | import cn.hutool.core.lang.Assert; |
| 4 | 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 | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; |
| 6 | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; |
| 7 | 12 | import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; |
| 8 | 13 | import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; |
| 9 | 14 | import lombok.extern.slf4j.Slf4j; |
| 10 | 15 | import org.activiti.engine.HistoryService; |
| 11 | -import org.activiti.engine.RepositoryService; | |
| 12 | 16 | import org.activiti.engine.RuntimeService; |
| 13 | 17 | import org.activiti.engine.TaskService; |
| 14 | 18 | import org.activiti.engine.history.HistoricProcessInstance; |
| ... | ... | @@ -45,8 +49,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU |
| 45 | 49 | public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { |
| 46 | 50 | |
| 47 | 51 | @Resource |
| 48 | - private RepositoryService repositoryService; | |
| 49 | - @Resource | |
| 50 | 52 | private RuntimeService runtimeService; |
| 51 | 53 | @Resource |
| 52 | 54 | private TaskService taskService; |
| ... | ... | @@ -58,7 +60,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 58 | 60 | @Resource |
| 59 | 61 | private BpmProcessDefinitionService processDefinitionService; |
| 60 | 62 | |
| 63 | + @Resource | |
| 64 | + private BpmProcessInstanceExtMapper processInstanceExtMapper; | |
| 65 | + | |
| 61 | 66 | @Override |
| 67 | +// @Transactional(rollbackFor = Exception.class) | |
| 62 | 68 | public String createProcessInstance(Long userId, BpmProcessInstanceCreateReqVO createReqVO) { |
| 63 | 69 | // 校验流程定义 |
| 64 | 70 | ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); |
| ... | ... | @@ -72,6 +78,10 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 72 | 78 | // 创建流程实例 |
| 73 | 79 | Map<String, Object> variables = createReqVO.getVariables(); |
| 74 | 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 | 86 | // 添加初始的评论 TODO 芋艿:在思考下 |
| 77 | 87 | Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult(); |
| ... | ... | @@ -88,6 +98,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 88 | 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 | 115 | public void getMyProcessInstancePage(Long userId) { |
| 92 | 116 | // id title 所属流程 当前审批环节 状态 结果 创建时间 提交申请时间 【标题、状态】「ActBusiness」 |
| 93 | 117 | // id title 流程类别 流程版本 提交时间 流程状态 耗时 当前节点 办理 【标题、提交时间】「HistoricProcessInstanceQuery」 |
| ... | ... | @@ -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 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.io.IoUtil; |
| 5 | 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 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | 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 | 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 | 5 | import org.activiti.engine.impl.identity.Authentication; |
| 4 | 6 | |
| 5 | 7 | /** |
| ... | ... | @@ -9,6 +11,19 @@ import org.activiti.engine.impl.identity.Authentication; |
| 9 | 11 | */ |
| 10 | 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 | 27 | public static void setAuthenticatedUserId(Long userId) { |
| 13 | 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 | 3 | import com.baomidou.mybatisplus.annotation.FieldFill; |
| 4 | 4 | import com.baomidou.mybatisplus.annotation.TableField; |
| 5 | 5 | import com.baomidou.mybatisplus.annotation.TableLogic; |
| 6 | +import lombok.Builder; | |
| 6 | 7 | import lombok.Data; |
| 7 | 8 | |
| 8 | 9 | import java.io.Serializable; | ... | ... |