Commit 4e7f5489a5b57bb6d99ebb69cc8ac2c414a5034c
1 parent
95ce628c
BPM 模型重构 6:增加任务分配规则的列表 API 接口
Showing
22 changed files
with
336 additions
and
98 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.http
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition; | |
| 2 | + | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 7 | +import io.swagger.annotations.Api; | |
| 8 | +import org.springframework.validation.annotation.Validated; | |
| 9 | +import org.springframework.web.bind.annotation.GetMapping; | |
| 10 | +import org.springframework.web.bind.annotation.RequestMapping; | |
| 11 | +import org.springframework.web.bind.annotation.RequestParam; | |
| 12 | +import org.springframework.web.bind.annotation.RestController; | |
| 13 | + | |
| 14 | +import javax.annotation.Resource; | |
| 15 | +import java.util.Collections; | |
| 16 | +import java.util.List; | |
| 17 | + | |
| 18 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 19 | + | |
| 20 | +@Api(tags = "任务分配规则") | |
| 21 | +@RestController | |
| 22 | +@RequestMapping("/bpm/task-assign-rule") | |
| 23 | +@Validated | |
| 24 | +public class BpmTaskAssignRuleController { | |
| 25 | + | |
| 26 | + @Resource | |
| 27 | + private BpmTaskAssignRuleService taskAssignRuleService; | |
| 28 | + | |
| 29 | + @GetMapping("/list") | |
| 30 | + public CommonResult<List<BpmTaskAssignRuleRespVO>> getTaskAssignRuleList( | |
| 31 | + @RequestParam(value = "modelId", required = false) String modelId, | |
| 32 | + @RequestParam(value = "processDefinitionId", required = false) String processDefinitionId) { | |
| 33 | + return success(taskAssignRuleService.getTaskAssignRules(modelId, processDefinitionId)); | |
| 34 | + } | |
| 35 | + | |
| 36 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleBaseVO.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleCreateReqVO.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule; | |
| 2 | + | |
| 3 | +import lombok.Data; | |
| 4 | + | |
| 5 | +@Data | |
| 6 | +public class BpmTaskAssignRuleRespVO extends BpmTaskAssignRuleBaseVO { | |
| 7 | + | |
| 8 | + private Long id; | |
| 9 | + | |
| 10 | + private String modelId; | |
| 11 | + | |
| 12 | + private String processDefinitionId; | |
| 13 | + | |
| 14 | + private String taskDefinitionKey; | |
| 15 | + private String taskDefinitionName; | |
| 16 | + | |
| 17 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmDefinitionConvert.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmProcessDefinitionConvert.java
| ... | ... | @@ -23,9 +23,9 @@ import java.util.Map; |
| 23 | 23 | * @author yunlong.li |
| 24 | 24 | */ |
| 25 | 25 | @Mapper |
| 26 | -public interface BpmDefinitionConvert { | |
| 26 | +public interface BpmProcessDefinitionConvert { | |
| 27 | 27 | |
| 28 | - BpmDefinitionConvert INSTANCE = Mappers.getMapper(BpmDefinitionConvert.class); | |
| 28 | + BpmProcessDefinitionConvert INSTANCE = Mappers.getMapper(BpmProcessDefinitionConvert.class); | |
| 29 | 29 | |
| 30 | 30 | default List<BpmProcessDefinitionPageItemRespVO> convertList(List<ProcessDefinition> list, Map<String, Deployment> deploymentMap, |
| 31 | 31 | Map<String, BpmProcessDefinitionExtDO> processDefinitionDOMap, Map<Long, BpmFormDO> formMap) { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | |
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | |
| 7 | +import org.activiti.bpmn.model.UserTask; | |
| 8 | +import org.mapstruct.Mapper; | |
| 9 | +import org.mapstruct.factory.Mappers; | |
| 10 | + | |
| 11 | +import java.util.List; | |
| 12 | +import java.util.Map; | |
| 13 | +import java.util.function.Function; | |
| 14 | + | |
| 15 | +@Mapper | |
| 16 | +public interface BpmTaskAssignRuleConvert { | |
| 17 | + | |
| 18 | + BpmTaskAssignRuleConvert INSTANCE = Mappers.getMapper(BpmTaskAssignRuleConvert.class); | |
| 19 | + | |
| 20 | + default List<BpmTaskAssignRuleRespVO> convertList(List<UserTask> tasks, List<BpmTaskAssignRuleDO> rules) { | |
| 21 | + Map<String, BpmTaskAssignRuleDO> ruleMap = CollectionUtils.convertMap(rules, BpmTaskAssignRuleDO::getTaskDefinitionKey); | |
| 22 | + // 以 UserTask 为主维度,原因是:流程图编辑后,一些规则实际就没用了。 | |
| 23 | + return CollectionUtils.convertList(tasks, task -> { | |
| 24 | + BpmTaskAssignRuleRespVO respVO = convert(ruleMap.get(task.getId())); | |
| 25 | + if (respVO == null) { | |
| 26 | + respVO = new BpmTaskAssignRuleRespVO(); | |
| 27 | + respVO.setTaskDefinitionKey(task.getId()); | |
| 28 | + } | |
| 29 | + respVO.setTaskDefinitionName(task.getName()); | |
| 30 | + return respVO; | |
| 31 | + }); | |
| 32 | + } | |
| 33 | + | |
| 34 | + BpmTaskAssignRuleRespVO convert(BpmTaskAssignRuleDO bean); | |
| 35 | + | |
| 36 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskRuleDO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskAssignRuleDO.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleTypeEnum; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 6 | 6 | import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; |
| 7 | 7 | import com.baomidou.mybatisplus.annotation.TableField; |
| 8 | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 9 | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| 10 | -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; | |
| 11 | 10 | import lombok.*; |
| 12 | 11 | import org.activiti.engine.repository.Model; |
| 13 | 12 | import org.activiti.engine.repository.ProcessDefinition; |
| 14 | 13 | import org.activiti.engine.task.Task; |
| 15 | 14 | |
| 16 | -import java.util.List; | |
| 17 | 15 | import java.util.Set; |
| 18 | 16 | |
| 19 | 17 | /** |
| 20 | - * Bpm 任务规则表,用于自定义配置每个任务的负责人的分配规则。 | |
| 18 | + * Bpm 任务分配的规则表,用于自定义配置每个任务的负责人、候选人的分配规则。 | |
| 21 | 19 | * 也就是说,废弃 BPMN 原本的 UserTask 设置的 assignee、candidateUsers 等配置,而是通过使用该规则进行计算对应的负责人。 |
| 22 | 20 | * |
| 23 | 21 | * 1. 默认情况下,{@link #processDefinitionId} 为 {@link #PROCESS_DEFINITION_ID_NULL} 值,表示贵改则与流程模型关联 |
| ... | ... | @@ -25,19 +23,19 @@ import java.util.Set; |
| 25 | 23 | * |
| 26 | 24 | * @author 芋道源码 |
| 27 | 25 | */ |
| 28 | -@TableName(value = "bpm_task_rule", autoResultMap = true) | |
| 26 | +@TableName(value = "bpm_task_assign_rule", autoResultMap = true) | |
| 29 | 27 | @Data |
| 30 | 28 | @EqualsAndHashCode(callSuper = true) |
| 31 | 29 | @ToString(callSuper = true) |
| 32 | 30 | @Builder |
| 33 | 31 | @NoArgsConstructor |
| 34 | 32 | @AllArgsConstructor |
| 35 | -public class BpmTaskRuleDO extends BaseDO { | |
| 33 | +public class BpmTaskAssignRuleDO extends BaseDO { | |
| 36 | 34 | |
| 37 | 35 | /** |
| 38 | 36 | * {@link #processDefinitionId} 空串,用于标识属于流程模型,而不属于流程定义 |
| 39 | 37 | */ |
| 40 | - private static final String PROCESS_DEFINITION_ID_NULL = ""; | |
| 38 | + public static final String PROCESS_DEFINITION_ID_NULL = ""; | |
| 41 | 39 | |
| 42 | 40 | /** |
| 43 | 41 | * 编号 |
| ... | ... | @@ -67,7 +65,7 @@ public class BpmTaskRuleDO extends BaseDO { |
| 67 | 65 | /** |
| 68 | 66 | * 规则类型 |
| 69 | 67 | * |
| 70 | - * 枚举 {@link BpmTaskRuleTypeEnum} | |
| 68 | + * 枚举 {@link BpmTaskAssignRuleTypeEnum} | |
| 71 | 69 | */ |
| 72 | 70 | @TableField("`type`") |
| 73 | 71 | private Integer type; |
| ... | ... | @@ -75,12 +73,12 @@ public class BpmTaskRuleDO extends BaseDO { |
| 75 | 73 | * 规则值数组,一般关联指定表的编号 |
| 76 | 74 | * 根据 type 不同,对应的值是不同的: |
| 77 | 75 | * |
| 78 | - * 1. {@link BpmTaskRuleTypeEnum#ROLE} 时:角色编号 | |
| 79 | - * 2. {@link BpmTaskRuleTypeEnum#DEPT} 时:部门编号 | |
| 80 | - * 3. {@link BpmTaskRuleTypeEnum#DEPT_LEADER} 时:部门编号 | |
| 81 | - * 4. {@link BpmTaskRuleTypeEnum#USER} 时:用户编号 | |
| 82 | - * 5. {@link BpmTaskRuleTypeEnum#USER_GROUP} 时:用户组编号 | |
| 83 | - * 6. {@link BpmTaskRuleTypeEnum#SCRIPT} 时:脚本编号,目前通过 {@link BpmTaskRuleScriptEnum#getId()} 标识 | |
| 76 | + * 1. {@link BpmTaskAssignRuleTypeEnum#ROLE} 时:角色编号 | |
| 77 | + * 2. {@link BpmTaskAssignRuleTypeEnum#DEPT} 时:部门编号 | |
| 78 | + * 3. {@link BpmTaskAssignRuleTypeEnum#DEPT_LEADER} 时:部门编号 | |
| 79 | + * 4. {@link BpmTaskAssignRuleTypeEnum#USER} 时:用户编号 | |
| 80 | + * 5. {@link BpmTaskAssignRuleTypeEnum#USER_GROUP} 时:用户组编号 | |
| 81 | + * 6. {@link BpmTaskAssignRuleTypeEnum#SCRIPT} 时:脚本编号,目前通过 {@link BpmTaskRuleScriptEnum#getId()} 标识 | |
| 84 | 82 | */ |
| 85 | 83 | @TableField(typeHandler = JsonLongSetTypeHandler.class) |
| 86 | 84 | private Set<Long> options; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskMessageRuleDO.java
0 → 100644
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskRuleMapper.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskAssignRuleMapper.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.BpmTaskRuleDO; | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; |
| 6 | 6 | import org.apache.ibatis.annotations.Mapper; |
| ... | ... | @@ -9,13 +9,19 @@ import org.springframework.lang.Nullable; |
| 9 | 9 | import java.util.List; |
| 10 | 10 | |
| 11 | 11 | @Mapper |
| 12 | -public interface BpmTaskRuleMapper extends BaseMapperX<BpmTaskRuleDO> { | |
| 12 | +public interface BpmTaskAssignRuleMapper extends BaseMapperX<BpmTaskAssignRuleDO> { | |
| 13 | 13 | |
| 14 | - default List<BpmTaskRuleDO> selectListByProcessDefinitionId(String processDefinitionId, | |
| 15 | - @Nullable String taskDefinitionKey) { | |
| 16 | - return selectList(new QueryWrapperX<BpmTaskRuleDO>() | |
| 14 | + default List<BpmTaskAssignRuleDO> selectListByProcessDefinitionId(String processDefinitionId, | |
| 15 | + @Nullable String taskDefinitionKey) { | |
| 16 | + return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>() | |
| 17 | 17 | .eq("process_definition_id", processDefinitionId) |
| 18 | 18 | .eqIfPresent("task_definition_key", taskDefinitionKey)); |
| 19 | 19 | } |
| 20 | 20 | |
| 21 | + default List<BpmTaskAssignRuleDO> selectListByModelId(String modelId) { | |
| 22 | + return selectList(new QueryWrapperX<BpmTaskAssignRuleDO>() | |
| 23 | + .eq("model_id", modelId) | |
| 24 | + .eq("process_definition_id", BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL)); | |
| 25 | + } | |
| 26 | + | |
| 21 | 27 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskRuleTypeEnum.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/definition/BpmTaskAssignRuleTypeEnum.java
| ... | ... | @@ -4,13 +4,13 @@ import lombok.AllArgsConstructor; |
| 4 | 4 | import lombok.Getter; |
| 5 | 5 | |
| 6 | 6 | /** |
| 7 | - * BPM 任务规则的类型枚举 | |
| 7 | + * BPM 任务分配规则的类型枚举 | |
| 8 | 8 | * |
| 9 | 9 | * @author 芋道源码 |
| 10 | 10 | */ |
| 11 | 11 | @Getter |
| 12 | 12 | @AllArgsConstructor |
| 13 | -public enum BpmTaskRuleTypeEnum { | |
| 13 | +public enum BpmTaskAssignRuleTypeEnum { | |
| 14 | 14 | |
| 15 | 15 | ROLE(10, "指定角色"), |
| 16 | 16 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java
| ... | ... | @@ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; |
| 4 | 4 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; |
| 5 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskRuleService; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; | |
| 6 | 6 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; |
| 7 | 7 | import org.springframework.context.annotation.Bean; |
| 8 | 8 | import org.springframework.context.annotation.Configuration; |
| ... | ... | @@ -45,7 +45,7 @@ public class BpmActivitiConfiguration { |
| 45 | 45 | } |
| 46 | 46 | |
| 47 | 47 | @Bean |
| 48 | - public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskRuleService taskRuleService) { | |
| 48 | + public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskAssignRuleService taskRuleService) { | |
| 49 | 49 | BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); |
| 50 | 50 | bpmActivityBehaviorFactory.setBpmTaskRuleService(taskRuleService); |
| 51 | 51 | return bpmActivityBehaviorFactory; | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmUserTaskActivitiBehavior; | |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskRuleService; | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; | |
| 5 | 4 | import lombok.Data; |
| 6 | 5 | import lombok.EqualsAndHashCode; |
| 7 | 6 | import lombok.Setter; |
| ... | ... | @@ -22,7 +21,7 @@ import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFacto |
| 22 | 21 | public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { |
| 23 | 22 | |
| 24 | 23 | @Setter |
| 25 | - private BpmTaskRuleService bpmTaskRuleService; | |
| 24 | + private BpmTaskAssignRuleService bpmTaskRuleService; | |
| 26 | 25 | |
| 27 | 26 | @Override |
| 28 | 27 | public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java
| ... | ... | @@ -3,11 +3,10 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavio |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.util.RandomUtil; |
| 5 | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskRuleDO; | |
| 7 | -import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleTypeEnum; | |
| 8 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskRuleService; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | |
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | |
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; | |
| 9 | 9 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 10 | -import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | |
| 11 | 10 | import lombok.Setter; |
| 12 | 11 | import org.activiti.bpmn.model.UserTask; |
| 13 | 12 | import org.activiti.engine.ActivitiException; |
| ... | ... | @@ -29,7 +28,7 @@ import java.util.Set; |
| 29 | 28 | public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 30 | 29 | |
| 31 | 30 | @Setter |
| 32 | - private BpmTaskRuleService bpmTaskRuleService; | |
| 31 | + private BpmTaskAssignRuleService bpmTaskRuleService; | |
| 33 | 32 | |
| 34 | 33 | public BpmUserTaskActivitiBehavior(UserTask userTask) { |
| 35 | 34 | super(userTask); |
| ... | ... | @@ -40,7 +39,7 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 40 | 39 | String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, |
| 41 | 40 | TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { |
| 42 | 41 | // 获得任务的规则 |
| 43 | - BpmTaskRuleDO rule = getTaskRule(task); | |
| 42 | + BpmTaskAssignRuleDO rule = getTaskRule(task); | |
| 44 | 43 | // 获得任务的候选用户们 |
| 45 | 44 | Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule); |
| 46 | 45 | // 设置负责人 |
| ... | ... | @@ -53,8 +52,8 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 53 | 52 | } |
| 54 | 53 | } |
| 55 | 54 | |
| 56 | - private BpmTaskRuleDO getTaskRule(TaskEntity task) { | |
| 57 | - List<BpmTaskRuleDO> taskRules = bpmTaskRuleService.getTaskRulesByProcessDefinitionId(task.getProcessDefinitionId(), | |
| 55 | + private BpmTaskAssignRuleDO getTaskRule(TaskEntity task) { | |
| 56 | + List<BpmTaskAssignRuleDO> taskRules = bpmTaskRuleService.getTaskAssignRulesByProcessDefinitionId(task.getProcessDefinitionId(), | |
| 58 | 57 | task.getTaskDefinitionKey()); |
| 59 | 58 | if (CollUtil.isEmpty(taskRules)) { |
| 60 | 59 | throw new ActivitiException(StrUtil.format("流程任务({}/{}/{}) 找不到符合的任务规则", |
| ... | ... | @@ -73,17 +72,17 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 73 | 72 | return CollUtil.get(candidateUserIds, index); |
| 74 | 73 | } |
| 75 | 74 | |
| 76 | - private Set<Long> calculateTaskCandidateUsers(TaskEntity task, BpmTaskRuleDO rule) { | |
| 75 | + private Set<Long> calculateTaskCandidateUsers(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 77 | 76 | Set<Long> assigneeUserIds = null; |
| 78 | - if (Objects.equals(BpmTaskRuleTypeEnum.ROLE.getType(), rule.getType())) { | |
| 77 | + if (Objects.equals(BpmTaskAssignRuleTypeEnum.ROLE.getType(), rule.getType())) { | |
| 79 | 78 | assigneeUserIds = calculateTaskCandidateUsersByRole(task, rule); |
| 80 | - } else if (Objects.equals(BpmTaskRuleTypeEnum.DEPT.getType(), rule.getType())) { | |
| 79 | + } else if (Objects.equals(BpmTaskAssignRuleTypeEnum.DEPT.getType(), rule.getType())) { | |
| 81 | 80 | assigneeUserIds = calculateTaskCandidateUsersByDept(task, rule); |
| 82 | - } else if (Objects.equals(BpmTaskRuleTypeEnum.DEPT_LEADER.getType(), rule.getType())) { | |
| 81 | + } else if (Objects.equals(BpmTaskAssignRuleTypeEnum.DEPT_LEADER.getType(), rule.getType())) { | |
| 83 | 82 | assigneeUserIds = calculateTaskCandidateUsersByDept(task, rule); |
| 84 | - } else if (Objects.equals(BpmTaskRuleTypeEnum.USER.getType(), rule.getType())) { | |
| 83 | + } else if (Objects.equals(BpmTaskAssignRuleTypeEnum.USER.getType(), rule.getType())) { | |
| 85 | 84 | assigneeUserIds = calculateTaskCandidateUsersByUser(task, rule); |
| 86 | - } else if (Objects.equals(BpmTaskRuleTypeEnum.USER_GROUP.getType(), rule.getType())) { | |
| 85 | + } else if (Objects.equals(BpmTaskAssignRuleTypeEnum.USER_GROUP.getType(), rule.getType())) { | |
| 87 | 86 | assigneeUserIds = calculateTaskCandidateUsersByUser(task, rule); |
| 88 | 87 | } |
| 89 | 88 | |
| ... | ... | @@ -96,28 +95,28 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 96 | 95 | return assigneeUserIds; |
| 97 | 96 | } |
| 98 | 97 | |
| 99 | - private Set<Long> calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskRuleDO rule) { | |
| 98 | + private Set<Long> calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 100 | 99 | throw new UnsupportedOperationException("暂不支持该任务规则"); |
| 101 | 100 | } |
| 102 | 101 | |
| 103 | 102 | |
| 104 | - private Set<Long> calculateTaskCandidateUsersByDept(TaskEntity task, BpmTaskRuleDO rule) { | |
| 103 | + private Set<Long> calculateTaskCandidateUsersByDept(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 105 | 104 | throw new UnsupportedOperationException("暂不支持该任务规则"); |
| 106 | 105 | } |
| 107 | 106 | |
| 108 | - private Set<Long> calculateTaskCandidateUsersByDeptLeader(TaskEntity task, BpmTaskRuleDO rule) { | |
| 107 | + private Set<Long> calculateTaskCandidateUsersByDeptLeader(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 109 | 108 | throw new UnsupportedOperationException("暂不支持该任务规则"); |
| 110 | 109 | } |
| 111 | 110 | |
| 112 | - private Set<Long> calculateTaskCandidateUsersByUser(TaskEntity task, BpmTaskRuleDO rule) { | |
| 111 | + private Set<Long> calculateTaskCandidateUsersByUser(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 113 | 112 | return rule.getOptions(); |
| 114 | 113 | } |
| 115 | 114 | |
| 116 | - private Set<Long> calculateTaskCandidateUsersByUserGroup(TaskEntity task, BpmTaskRuleDO rule) { | |
| 115 | + private Set<Long> calculateTaskCandidateUsersByUserGroup(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 117 | 116 | throw new UnsupportedOperationException("暂不支持该任务规则"); |
| 118 | 117 | } |
| 119 | 118 | |
| 120 | - private Set<Long> calculateTaskCandidateUsersByScript(TaskEntity task, BpmTaskRuleDO rule) { | |
| 119 | + private Set<Long> calculateTaskCandidateUsersByScript(TaskEntity task, BpmTaskAssignRuleDO rule) { | |
| 121 | 120 | throw new UnsupportedOperationException("暂不支持该任务规则"); |
| 122 | 121 | } |
| 123 | 122 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmModelService.java
| ... | ... | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | +import org.activiti.bpmn.model.BpmnModel; | |
| 5 | 6 | |
| 6 | 7 | import javax.validation.Valid; |
| 7 | 8 | |
| ... | ... | @@ -66,4 +67,12 @@ public interface BpmModelService { |
| 66 | 67 | */ |
| 67 | 68 | void updateModelState(String id, Integer state); |
| 68 | 69 | |
| 70 | + /** | |
| 71 | + * 获得流程模型编号对应的 BPMN Model | |
| 72 | + * | |
| 73 | + * @param id 流程模型编号 | |
| 74 | + * @return BPMN Model | |
| 75 | + */ | |
| 76 | + BpmnModel getBpmnModel(String id); | |
| 77 | + | |
| 69 | 78 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskRuleService.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskRuleDO; | |
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; | |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | |
| 4 | 5 | import org.springframework.lang.Nullable; |
| 5 | 6 | |
| 6 | 7 | import java.util.List; |
| 7 | 8 | |
| 8 | 9 | /** |
| 9 | - * BPM 任务规则 Service 接口 | |
| 10 | + * BPM 任务分配规则 Service 接口 | |
| 10 | 11 | * |
| 11 | 12 | * @author 芋道源码 |
| 12 | 13 | */ |
| 13 | -public interface BpmTaskRuleService { | |
| 14 | +public interface BpmTaskAssignRuleService { | |
| 14 | 15 | |
| 15 | 16 | /** |
| 16 | - * 获得流程定义的任务规则数组 | |
| 17 | + * 获得流程定义的任务分配规则数组 | |
| 17 | 18 | * |
| 18 | 19 | * @param processDefinitionId 流程定义的编号 |
| 19 | 20 | * @param taskDefinitionKey 流程任务定义的 Key。允许空 |
| 20 | 21 | * @return 任务规则数组 |
| 21 | 22 | */ |
| 22 | - List<BpmTaskRuleDO> getTaskRulesByProcessDefinitionId(String processDefinitionId, | |
| 23 | - @Nullable String taskDefinitionKey); | |
| 23 | + List<BpmTaskAssignRuleDO> getTaskAssignRulesByProcessDefinitionId(String processDefinitionId, | |
| 24 | + @Nullable String taskDefinitionKey); | |
| 24 | 25 | |
| 25 | 26 | /** |
| 26 | 27 | * 获得流程模型的任务规则数组 |
| ... | ... | @@ -28,7 +29,17 @@ public interface BpmTaskRuleService { |
| 28 | 29 | * @param modelId 流程模型的编号 |
| 29 | 30 | * @return 任务规则数组 |
| 30 | 31 | */ |
| 31 | - List<BpmTaskRuleDO> getTaskRulesByModelId(Long modelId); | |
| 32 | + List<BpmTaskAssignRuleDO> getTaskAssignRulesByModelId(String modelId); | |
| 33 | + | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 获得流程定义的任务分配规则数组 | |
| 37 | + * | |
| 38 | + * @param processDefinitionId 流程模型的编号 | |
| 39 | + * @param processDefinitionId 流程定义的编号 | |
| 40 | + * @return 任务规则数组 | |
| 41 | + */ | |
| 42 | + List<BpmTaskAssignRuleRespVO> getTaskAssignRules(String modelId, String processDefinitionId); | |
| 32 | 43 | |
| 33 | 44 | // TODO 芋艿:创建任务规则 |
| 34 | 45 | // TODO 芋艿:复制任务规则 | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ArrayUtil; | |
| 3 | 4 | import cn.hutool.core.util.StrUtil; |
| 4 | 5 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.model.*; |
| 5 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmModelConvert; |
| ... | ... | @@ -9,6 +10,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefini |
| 9 | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmFormService; |
| 10 | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; |
| 11 | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO; |
| 13 | +import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; | |
| 12 | 14 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 13 | 15 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 14 | 16 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| ... | ... | @@ -210,6 +212,15 @@ public class BpmModelServiceImpl implements BpmModelService { |
| 210 | 212 | bpmProcessDefinitionService.updateProcessDefinitionState(definition.getId(), state); |
| 211 | 213 | } |
| 212 | 214 | |
| 215 | + @Override | |
| 216 | + public BpmnModel getBpmnModel(String id) { | |
| 217 | + byte[] bpmnBytes = repositoryService.getModelEditorSource(id); | |
| 218 | + if (ArrayUtil.isEmpty(bpmnBytes)) { | |
| 219 | + return null; | |
| 220 | + } | |
| 221 | + return ActivitiUtils.buildBpmnModel(bpmnBytes); | |
| 222 | + } | |
| 223 | + | |
| 213 | 224 | private Model getModelByKey(String key) { |
| 214 | 225 | return repositoryService.createModelQuery().modelKey(key).singleResult(); |
| 215 | 226 | } | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmProcessDefinitionServiceImpl.java
| ... | ... | @@ -6,7 +6,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process |
| 6 | 6 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageItemRespVO; |
| 7 | 7 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionPageReqVO; |
| 8 | 8 | import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.process.BpmProcessDefinitionRespVO; |
| 9 | -import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmDefinitionConvert; | |
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmProcessDefinitionConvert; | |
| 10 | 10 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; |
| 11 | 11 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmFormDO; |
| 12 | 12 | import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmProcessDefinitionExtMapper; |
| ... | ... | @@ -90,7 +90,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 90 | 90 | |
| 91 | 91 | // 拼接结果 |
| 92 | 92 | long definitionCount = definitionQuery.count(); |
| 93 | - return new PageResult<>(BpmDefinitionConvert.INSTANCE.convertList(processDefinitions, deploymentMap, | |
| 93 | + return new PageResult<>(BpmProcessDefinitionConvert.INSTANCE.convertList(processDefinitions, deploymentMap, | |
| 94 | 94 | processDefinitionDOMap, formMap), definitionCount); |
| 95 | 95 | } |
| 96 | 96 | |
| ... | ... | @@ -112,7 +112,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 112 | 112 | Map<String, BpmProcessDefinitionExtDO> processDefinitionDOMap = CollectionUtils.convertMap(processDefinitionDOs, |
| 113 | 113 | BpmProcessDefinitionExtDO::getProcessDefinitionId); |
| 114 | 114 | // 执行查询,并返回 |
| 115 | - return BpmDefinitionConvert.INSTANCE.convertList3(processDefinitions, processDefinitionDOMap); | |
| 115 | + return BpmProcessDefinitionConvert.INSTANCE.convertList3(processDefinitions, processDefinitionDOMap); | |
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | @Override |
| ... | ... | @@ -196,7 +196,7 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ |
| 196 | 196 | } |
| 197 | 197 | |
| 198 | 198 | // 插入拓展表 |
| 199 | - BpmProcessDefinitionExtDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO) | |
| 199 | + BpmProcessDefinitionExtDO definitionDO = BpmProcessDefinitionConvert.INSTANCE.convert2(createReqDTO) | |
| 200 | 200 | .setProcessDefinitionId(definition.getId()); |
| 201 | 201 | processDefinitionMapper.insert(definitionDO); |
| 202 | 202 | return definition.getId(); | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; | |
| 2 | + | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.hutool.core.util.StrUtil; | |
| 5 | +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO; | |
| 6 | +import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmTaskAssignRuleConvert; | |
| 7 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; | |
| 8 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; | |
| 9 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService; | |
| 10 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; | |
| 11 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService; | |
| 12 | +import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils; | |
| 13 | +import lombok.extern.slf4j.Slf4j; | |
| 14 | +import org.activiti.bpmn.model.BpmnModel; | |
| 15 | +import org.activiti.bpmn.model.UserTask; | |
| 16 | +import org.springframework.context.annotation.Lazy; | |
| 17 | +import org.springframework.stereotype.Service; | |
| 18 | +import org.springframework.validation.annotation.Validated; | |
| 19 | + | |
| 20 | +import javax.annotation.Resource; | |
| 21 | +import java.util.Collections; | |
| 22 | +import java.util.List; | |
| 23 | + | |
| 24 | +/** | |
| 25 | + * BPM 任务分配规则 Service 实现类 | |
| 26 | + */ | |
| 27 | +@Service | |
| 28 | +@Validated | |
| 29 | +@Slf4j | |
| 30 | +public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService { | |
| 31 | + | |
| 32 | + @Resource | |
| 33 | + private BpmTaskAssignRuleMapper taskRuleMapper; | |
| 34 | + | |
| 35 | + @Resource | |
| 36 | + @Lazy // 解决循环依赖 | |
| 37 | + private BpmModelService modelService; | |
| 38 | + @Resource | |
| 39 | + @Lazy // 解决循环依赖 | |
| 40 | + private BpmProcessDefinitionService processDefinitionService; | |
| 41 | + | |
| 42 | + @Override | |
| 43 | + public List<BpmTaskAssignRuleDO> getTaskAssignRulesByProcessDefinitionId(String processDefinitionId, | |
| 44 | + String taskDefinitionKey) { | |
| 45 | + return taskRuleMapper.selectListByProcessDefinitionId(processDefinitionId, taskDefinitionKey); | |
| 46 | + } | |
| 47 | + | |
| 48 | + @Override | |
| 49 | + public List<BpmTaskAssignRuleDO> getTaskAssignRulesByModelId(String modelId) { | |
| 50 | + return taskRuleMapper.selectListByModelId(modelId); | |
| 51 | + } | |
| 52 | + | |
| 53 | + @Override | |
| 54 | + public List<BpmTaskAssignRuleRespVO> getTaskAssignRules(String modelId, String processDefinitionId) { | |
| 55 | + // 获得规则 | |
| 56 | + List<BpmTaskAssignRuleDO> rules = Collections.emptyList(); | |
| 57 | + BpmnModel model = null; | |
| 58 | + if (StrUtil.isNotEmpty(modelId)) { | |
| 59 | + rules = getTaskAssignRulesByModelId(modelId); | |
| 60 | + model = modelService.getBpmnModel(modelId); | |
| 61 | + } else if (StrUtil.isNotEmpty(processDefinitionId)) { | |
| 62 | + rules = getTaskAssignRulesByProcessDefinitionId(processDefinitionId, null); | |
| 63 | + model = processDefinitionService.getBpmnModel(processDefinitionId); | |
| 64 | + } | |
| 65 | + if (CollUtil.isEmpty(rules) || model == null) { | |
| 66 | + return Collections.emptyList(); | |
| 67 | + } | |
| 68 | + | |
| 69 | + // 获得用户任务,只有用户任务才可以设置分配规则 | |
| 70 | + List<UserTask> userTasks = ActivitiUtils.getBpmnModelElements(model, UserTask.class); | |
| 71 | + if (CollUtil.isEmpty(userTasks)) { | |
| 72 | + return Collections.emptyList(); | |
| 73 | + } | |
| 74 | + | |
| 75 | + // 转换数据 | |
| 76 | + return BpmTaskAssignRuleConvert.INSTANCE.convertList(userTasks, rules); | |
| 77 | + } | |
| 78 | + | |
| 79 | +} | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskRuleServiceImpl.java deleted
| 1 | -package cn.iocoder.yudao.adminserver.modules.bpm.service.definition.impl; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskRuleDO; | |
| 4 | -import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmTaskRuleMapper; | |
| 5 | -import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskRuleService; | |
| 6 | -import lombok.extern.slf4j.Slf4j; | |
| 7 | -import org.springframework.stereotype.Service; | |
| 8 | -import org.springframework.validation.annotation.Validated; | |
| 9 | - | |
| 10 | -import javax.annotation.Resource; | |
| 11 | -import java.util.List; | |
| 12 | - | |
| 13 | -/** | |
| 14 | - * BPM 任务规则 Service 实现类 | |
| 15 | - */ | |
| 16 | -@Service | |
| 17 | -@Validated | |
| 18 | -@Slf4j | |
| 19 | -public class BpmTaskRuleServiceImpl implements BpmTaskRuleService { | |
| 20 | - | |
| 21 | - @Resource | |
| 22 | - private BpmTaskRuleMapper taskRuleMapper; | |
| 23 | - | |
| 24 | - @Override | |
| 25 | - public List<BpmTaskRuleDO> getTaskRulesByProcessDefinitionId(String processDefinitionId, | |
| 26 | - String taskDefinitionKey) { | |
| 27 | - return taskRuleMapper.selectListByProcessDefinitionId(processDefinitionId, taskDefinitionKey); | |
| 28 | - } | |
| 29 | - | |
| 30 | - @Override | |
| 31 | - public List<BpmTaskRuleDO> getTaskRulesByModelId(Long modelId) { | |
| 32 | - return null; | |
| 33 | - } | |
| 34 | - | |
| 35 | -} |
yudao-framework/yudao-spring-boot-starter-activiti/src/main/java/cn/iocoder/yudao/framework/activiti/core/util/ActivitiUtils.java
| ... | ... | @@ -4,11 +4,15 @@ import cn.hutool.core.util.ReflectUtil; |
| 4 | 4 | import com.alibaba.ttl.TransmittableThreadLocal; |
| 5 | 5 | import org.activiti.bpmn.converter.BpmnXMLConverter; |
| 6 | 6 | import org.activiti.bpmn.model.BpmnModel; |
| 7 | -import org.activiti.engine.history.HistoricProcessInstance; | |
| 7 | +import org.activiti.bpmn.model.FlowElement; | |
| 8 | +import org.activiti.bpmn.model.Process; | |
| 8 | 9 | import org.activiti.engine.impl.identity.Authentication; |
| 9 | -import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntityImpl; | |
| 10 | -import org.activiti.engine.impl.persistence.entity.HistoricScopeInstanceEntityImpl; | |
| 11 | -import org.activiti.engine.impl.util.io.StringStreamSource; | |
| 10 | +import org.activiti.engine.impl.util.io.BytesStreamSource; | |
| 11 | + | |
| 12 | +import javax.xml.bind.Element; | |
| 13 | +import java.util.ArrayList; | |
| 14 | +import java.util.List; | |
| 15 | +import java.util.function.Consumer; | |
| 12 | 16 | |
| 13 | 17 | /** |
| 14 | 18 | * Activiti 工具类 |
| ... | ... | @@ -42,4 +46,29 @@ public class ActivitiUtils { |
| 42 | 46 | |
| 43 | 47 | // ========== BPMN XML 相关 ========== |
| 44 | 48 | |
| 49 | + | |
| 50 | + /** | |
| 51 | + * 构建对应的 BPMN Model | |
| 52 | + * | |
| 53 | + * @param bpmnBytes 原始的 BPMN XML 字节数组 | |
| 54 | + * @return BPMN Model | |
| 55 | + */ | |
| 56 | + public static BpmnModel buildBpmnModel(byte[] bpmnBytes) { | |
| 57 | + // 转换成 BpmnModel 对象 | |
| 58 | + BpmnXMLConverter converter = new BpmnXMLConverter(); | |
| 59 | + return converter.convertToBpmnModel(new BytesStreamSource(bpmnBytes), true, true); | |
| 60 | + } | |
| 61 | + | |
| 62 | + public static <T extends FlowElement> List<T> getBpmnModelElements(BpmnModel model, Class<T> clazz) { | |
| 63 | + List<T> result = new ArrayList<>(); | |
| 64 | + model.getProcesses().forEach(process -> { | |
| 65 | + process.getFlowElements().forEach(flowElement -> { | |
| 66 | + if (flowElement.getClass().isAssignableFrom(clazz)) { | |
| 67 | + result.add((T) flowElement); | |
| 68 | + } | |
| 69 | + }); | |
| 70 | + }); | |
| 71 | + return result; | |
| 72 | + } | |
| 73 | + | |
| 45 | 74 | } | ... | ... |