Commit e863b603005e4450d4b9e4f0c7965a9790e7333d
1 parent
8999b7db
初步实现 BpmUserTaskActivitiBehavior 的规则
Showing
11 changed files
with
234 additions
and
14 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/model/BpmModelConvert.java
| @@ -80,6 +80,7 @@ public interface BpmModelConvert { | @@ -80,6 +80,7 @@ public interface BpmModelConvert { | ||
| 80 | 80 | ||
| 81 | default BpmDefinitionCreateReqDTO convert2(Model model) { | 81 | default BpmDefinitionCreateReqDTO convert2(Model model) { |
| 82 | BpmDefinitionCreateReqDTO createReqDTO = new BpmDefinitionCreateReqDTO(); | 82 | BpmDefinitionCreateReqDTO createReqDTO = new BpmDefinitionCreateReqDTO(); |
| 83 | + createReqDTO.setModelId(model.getId()); | ||
| 83 | createReqDTO.setName(model.getName()); | 84 | createReqDTO.setName(model.getName()); |
| 84 | createReqDTO.setKey(model.getKey()); | 85 | createReqDTO.setKey(model.getKey()); |
| 85 | createReqDTO.setCategory(model.getCategory()); | 86 | createReqDTO.setCategory(model.getCategory()); |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmProcessDefinitionExtDO.java
| @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||
| 5 | import com.baomidou.mybatisplus.annotation.TableId; | 5 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | import com.baomidou.mybatisplus.annotation.TableName; | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | import lombok.*; | 7 | import lombok.*; |
| 8 | +import org.activiti.engine.repository.Model; | ||
| 8 | import org.activiti.engine.repository.ProcessDefinition; | 9 | import org.activiti.engine.repository.ProcessDefinition; |
| 9 | 10 | ||
| 10 | /** | 11 | /** |
| @@ -34,6 +35,12 @@ public class BpmProcessDefinitionExtDO extends BaseDO { | @@ -34,6 +35,12 @@ public class BpmProcessDefinitionExtDO extends BaseDO { | ||
| 34 | */ | 35 | */ |
| 35 | private String processDefinitionId; | 36 | private String processDefinitionId; |
| 36 | /** | 37 | /** |
| 38 | + * 流程模型的编号 | ||
| 39 | + * | ||
| 40 | + * 关联 {@link Model#getId()} | ||
| 41 | + */ | ||
| 42 | + private String modelId; | ||
| 43 | + /** | ||
| 37 | * 描述 | 44 | * 描述 |
| 38 | */ | 45 | */ |
| 39 | private String description; | 46 | private String description; |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/dataobject/definition/BpmTaskRuleDO.java
| @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition; | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskRuleScriptEnum; | 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.BpmTaskRuleTypeEnum; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 5 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 6 | +import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler; | ||
| 6 | import com.baomidou.mybatisplus.annotation.TableField; | 7 | import com.baomidou.mybatisplus.annotation.TableField; |
| 7 | import com.baomidou.mybatisplus.annotation.TableId; | 8 | import com.baomidou.mybatisplus.annotation.TableId; |
| 8 | import com.baomidou.mybatisplus.annotation.TableName; | 9 | import com.baomidou.mybatisplus.annotation.TableName; |
| @@ -13,9 +14,14 @@ import org.activiti.engine.repository.ProcessDefinition; | @@ -13,9 +14,14 @@ import org.activiti.engine.repository.ProcessDefinition; | ||
| 13 | import org.activiti.engine.task.Task; | 14 | import org.activiti.engine.task.Task; |
| 14 | 15 | ||
| 15 | import java.util.List; | 16 | import java.util.List; |
| 17 | +import java.util.Set; | ||
| 16 | 18 | ||
| 17 | /** | 19 | /** |
| 18 | - * Bpm 任务规则表 | 20 | + * Bpm 任务规则表,用于自定义配置每个任务的负责人的分配规则。 |
| 21 | + * 也就是说,废弃 BPMN 原本的 UserTask 设置的 assignee、candidateUsers 等配置,而是通过使用该规则进行计算对应的负责人。 | ||
| 22 | + * | ||
| 23 | + * 1. 默认情况下,{@link #processDefinitionId} 为 {@link #PROCESS_DEFINITION_ID_NULL} 值,表示贵改则与流程模型关联 | ||
| 24 | + * 2. 在流程模型部署后,会将他的所有规则记录,复制出一份新部署出来的流程定义,通过设置 {@link #processDefinitionId} 为新的流程定义的编号进行关联 | ||
| 19 | * | 25 | * |
| 20 | * @author 芋道源码 | 26 | * @author 芋道源码 |
| 21 | */ | 27 | */ |
| @@ -29,6 +35,11 @@ import java.util.List; | @@ -29,6 +35,11 @@ import java.util.List; | ||
| 29 | public class BpmTaskRuleDO extends BaseDO { | 35 | public class BpmTaskRuleDO extends BaseDO { |
| 30 | 36 | ||
| 31 | /** | 37 | /** |
| 38 | + * {@link #processDefinitionId} 空串,用于标识属于流程模型,而不属于流程定义 | ||
| 39 | + */ | ||
| 40 | + private static final String PROCESS_DEFINITION_ID_NULL = ""; | ||
| 41 | + | ||
| 42 | + /** | ||
| 32 | * 编号 | 43 | * 编号 |
| 33 | */ | 44 | */ |
| 34 | @TableId | 45 | @TableId |
| @@ -58,6 +69,7 @@ public class BpmTaskRuleDO extends BaseDO { | @@ -58,6 +69,7 @@ public class BpmTaskRuleDO extends BaseDO { | ||
| 58 | * | 69 | * |
| 59 | * 枚举 {@link BpmTaskRuleTypeEnum} | 70 | * 枚举 {@link BpmTaskRuleTypeEnum} |
| 60 | */ | 71 | */ |
| 72 | + @TableField("`type`") | ||
| 61 | private Integer type; | 73 | private Integer type; |
| 62 | /** | 74 | /** |
| 63 | * 规则值数组,一般关联指定表的编号 | 75 | * 规则值数组,一般关联指定表的编号 |
| @@ -70,7 +82,7 @@ public class BpmTaskRuleDO extends BaseDO { | @@ -70,7 +82,7 @@ public class BpmTaskRuleDO extends BaseDO { | ||
| 70 | * 5. {@link BpmTaskRuleTypeEnum#USER_GROUP} 时:用户组编号 | 82 | * 5. {@link BpmTaskRuleTypeEnum#USER_GROUP} 时:用户组编号 |
| 71 | * 6. {@link BpmTaskRuleTypeEnum#SCRIPT} 时:脚本编号,目前通过 {@link BpmTaskRuleScriptEnum#getId()} 标识 | 83 | * 6. {@link BpmTaskRuleTypeEnum#SCRIPT} 时:脚本编号,目前通过 {@link BpmTaskRuleScriptEnum#getId()} 标识 |
| 72 | */ | 84 | */ |
| 73 | - @TableField(typeHandler = JacksonTypeHandler.class) | ||
| 74 | - private List<Long> values; | 85 | + @TableField(typeHandler = JsonLongSetTypeHandler.class) |
| 86 | + private Set<Long> options; | ||
| 75 | 87 | ||
| 76 | } | 88 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/dal/mysql/definition/BpmTaskRuleMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskRuleDO; | ||
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||
| 6 | +import org.apache.ibatis.annotations.Mapper; | ||
| 7 | +import org.springframework.lang.Nullable; | ||
| 8 | + | ||
| 9 | +import java.util.List; | ||
| 10 | + | ||
| 11 | +@Mapper | ||
| 12 | +public interface BpmTaskRuleMapper extends BaseMapperX<BpmTaskRuleDO> { | ||
| 13 | + | ||
| 14 | + default List<BpmTaskRuleDO> selectListByProcessDefinitionId(String processDefinitionId, | ||
| 15 | + @Nullable String taskDefinitionKey) { | ||
| 16 | + return selectList(new QueryWrapperX<BpmTaskRuleDO>() | ||
| 17 | + .eq("process_definition_id", processDefinitionId) | ||
| 18 | + .eqIfPresent("task_definition_key", taskDefinitionKey)); | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.config; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmActivityBehaviorFactory; |
| 4 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.listener.BpmTackActivitiEventListener; | 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 org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; | 6 | import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; |
| 6 | import org.springframework.context.annotation.Bean; | 7 | import org.springframework.context.annotation.Bean; |
| 7 | import org.springframework.context.annotation.Configuration; | 8 | import org.springframework.context.annotation.Configuration; |
| @@ -44,8 +45,10 @@ public class BpmActivitiConfiguration { | @@ -44,8 +45,10 @@ public class BpmActivitiConfiguration { | ||
| 44 | } | 45 | } |
| 45 | 46 | ||
| 46 | @Bean | 47 | @Bean |
| 47 | - public BpmActivityBehaviorFactory bpmActivityBehaviorFactory() { | ||
| 48 | - return new BpmActivityBehaviorFactory(); | 48 | + public BpmActivityBehaviorFactory bpmActivityBehaviorFactory(BpmTaskRuleService taskRuleService) { |
| 49 | + BpmActivityBehaviorFactory bpmActivityBehaviorFactory = new BpmActivityBehaviorFactory(); | ||
| 50 | + bpmActivityBehaviorFactory.setBpmTaskRuleService(taskRuleService); | ||
| 51 | + return bpmActivityBehaviorFactory; | ||
| 49 | } | 52 | } |
| 50 | 53 | ||
| 51 | } | 54 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmActivityBehaviorFactory.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; | 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; | 3 | import cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior.BpmUserTaskActivitiBehavior; |
| 4 | +import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskRuleService; | ||
| 4 | import lombok.Data; | 5 | import lombok.Data; |
| 5 | import lombok.EqualsAndHashCode; | 6 | import lombok.EqualsAndHashCode; |
| 7 | +import lombok.Setter; | ||
| 6 | import lombok.ToString; | 8 | import lombok.ToString; |
| 7 | import org.activiti.bpmn.model.UserTask; | 9 | import org.activiti.bpmn.model.UserTask; |
| 8 | import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; | 10 | import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; |
| @@ -19,9 +21,14 @@ import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFacto | @@ -19,9 +21,14 @@ import org.activiti.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFacto | ||
| 19 | @ToString(callSuper = true) | 21 | @ToString(callSuper = true) |
| 20 | public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { | 22 | public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { |
| 21 | 23 | ||
| 24 | + @Setter | ||
| 25 | + private BpmTaskRuleService bpmTaskRuleService; | ||
| 26 | + | ||
| 22 | @Override | 27 | @Override |
| 23 | public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { | 28 | public UserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask) { |
| 24 | - return new BpmUserTaskActivitiBehavior(userTask); | 29 | + BpmUserTaskActivitiBehavior userTaskActivityBehavior = new BpmUserTaskActivitiBehavior(userTask); |
| 30 | + userTaskActivityBehavior.setBpmTaskRuleService(bpmTaskRuleService); | ||
| 31 | + return userTaskActivityBehavior; | ||
| 25 | } | 32 | } |
| 26 | 33 | ||
| 27 | // TODO 芋艿:并行任务 ParallelMultiInstanceBehavior | 34 | // TODO 芋艿:并行任务 ParallelMultiInstanceBehavior |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java
| 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; | 1 | package cn.iocoder.yudao.adminserver.modules.bpm.framework.activiti.core.behavior; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.hutool.core.util.RandomUtil; | ||
| 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; | ||
| 9 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 10 | +import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | ||
| 11 | +import lombok.Setter; | ||
| 3 | import org.activiti.bpmn.model.UserTask; | 12 | import org.activiti.bpmn.model.UserTask; |
| 13 | +import org.activiti.engine.ActivitiException; | ||
| 4 | import org.activiti.engine.delegate.DelegateExecution; | 14 | import org.activiti.engine.delegate.DelegateExecution; |
| 5 | import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; | 15 | import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior; |
| 6 | import org.activiti.engine.impl.el.ExpressionManager; | 16 | import org.activiti.engine.impl.el.ExpressionManager; |
| @@ -8,6 +18,8 @@ import org.activiti.engine.impl.persistence.entity.TaskEntity; | @@ -8,6 +18,8 @@ import org.activiti.engine.impl.persistence.entity.TaskEntity; | ||
| 8 | import org.activiti.engine.impl.persistence.entity.TaskEntityManager; | 18 | import org.activiti.engine.impl.persistence.entity.TaskEntityManager; |
| 9 | 19 | ||
| 10 | import java.util.List; | 20 | import java.util.List; |
| 21 | +import java.util.Objects; | ||
| 22 | +import java.util.Set; | ||
| 11 | 23 | ||
| 12 | /** | 24 | /** |
| 13 | * 自定义的流程任务的 assignee 负责人的分配 | 25 | * 自定义的流程任务的 assignee 负责人的分配 |
| @@ -16,6 +28,9 @@ import java.util.List; | @@ -16,6 +28,9 @@ import java.util.List; | ||
| 16 | */ | 28 | */ |
| 17 | public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | 29 | public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { |
| 18 | 30 | ||
| 31 | + @Setter | ||
| 32 | + private BpmTaskRuleService bpmTaskRuleService; | ||
| 33 | + | ||
| 19 | public BpmUserTaskActivitiBehavior(UserTask userTask) { | 34 | public BpmUserTaskActivitiBehavior(UserTask userTask) { |
| 20 | super(userTask); | 35 | super(userTask); |
| 21 | } | 36 | } |
| @@ -24,8 +39,86 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | @@ -24,8 +39,86 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior { | ||
| 24 | protected void handleAssignments(TaskEntityManager taskEntityManager, | 39 | protected void handleAssignments(TaskEntityManager taskEntityManager, |
| 25 | String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, | 40 | String assignee, String owner, List<String> candidateUsers, List<String> candidateGroups, |
| 26 | TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { | 41 | TaskEntity task, ExpressionManager expressionManager, DelegateExecution execution) { |
| 27 | - System.out.println(""); | ||
| 28 | - taskEntityManager.changeTaskAssignee(task, "1"); | 42 | + // 获得任务的规则 |
| 43 | + BpmTaskRuleDO rule = getTaskRule(task); | ||
| 44 | + // 获得任务的候选用户们 | ||
| 45 | + Set<Long> candidateUserIds = calculateTaskCandidateUsers(task, rule); | ||
| 46 | + // 设置负责人 | ||
| 47 | + Long assigneeUserId = chooseTaskAssignee(candidateUserIds); | ||
| 48 | + taskEntityManager.changeTaskAssignee(task, String.valueOf(assigneeUserId)); | ||
| 49 | + // 设置候选人们 | ||
| 50 | + candidateUserIds.remove(assigneeUserId); // 已经成为负责人了,就不要在扮演候选人了 | ||
| 51 | + if (CollUtil.isNotEmpty(candidateUserIds)) { | ||
| 52 | + task.addCandidateUsers(CollectionUtils.convertSet(candidateUserIds, String::valueOf)); | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + private BpmTaskRuleDO getTaskRule(TaskEntity task) { | ||
| 57 | + List<BpmTaskRuleDO> taskRules = bpmTaskRuleService.getTaskRulesByProcessDefinitionId(task.getProcessDefinitionId(), | ||
| 58 | + task.getTaskDefinitionKey()); | ||
| 59 | + if (CollUtil.isEmpty(taskRules)) { | ||
| 60 | + throw new ActivitiException(StrUtil.format("流程任务({}/{}/{}) 找不到符合的任务规则", | ||
| 61 | + task.getId(), task.getProcessDefinitionId(), task.getTaskDefinitionKey())); | ||
| 62 | + } | ||
| 63 | + if (taskRules.size() > 1) { | ||
| 64 | + throw new ActivitiException(StrUtil.format("流程任务({}/{}/{}) 找到过多任务规则({})", | ||
| 65 | + task.getId(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), taskRules.size())); | ||
| 66 | + } | ||
| 67 | + return taskRules.get(0); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + private Long chooseTaskAssignee(Set<Long> candidateUserIds) { | ||
| 71 | + // TODO 芋艿:未来可以优化下,改成轮询的策略 | ||
| 72 | + int index = RandomUtil.randomInt(candidateUserIds.size()); | ||
| 73 | + return CollUtil.get(candidateUserIds, index); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + private Set<Long> calculateTaskCandidateUsers(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 77 | + Set<Long> assigneeUserIds = null; | ||
| 78 | + if (Objects.equals(BpmTaskRuleTypeEnum.ROLE.getType(), rule.getType())) { | ||
| 79 | + assigneeUserIds = calculateTaskCandidateUsersByRole(task, rule); | ||
| 80 | + } else if (Objects.equals(BpmTaskRuleTypeEnum.DEPT.getType(), rule.getType())) { | ||
| 81 | + assigneeUserIds = calculateTaskCandidateUsersByDept(task, rule); | ||
| 82 | + } else if (Objects.equals(BpmTaskRuleTypeEnum.DEPT_LEADER.getType(), rule.getType())) { | ||
| 83 | + assigneeUserIds = calculateTaskCandidateUsersByDept(task, rule); | ||
| 84 | + } else if (Objects.equals(BpmTaskRuleTypeEnum.USER.getType(), rule.getType())) { | ||
| 85 | + assigneeUserIds = calculateTaskCandidateUsersByUser(task, rule); | ||
| 86 | + } else if (Objects.equals(BpmTaskRuleTypeEnum.USER_GROUP.getType(), rule.getType())) { | ||
| 87 | + assigneeUserIds = calculateTaskCandidateUsersByUser(task, rule); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + // TODO 芋艿:统一过滤掉被禁用的用户 | ||
| 91 | + // 如果候选人为空,抛出异常 TODO 芋艿:没候选人的策略选择。1 - 挂起;2 - 直接结束;3 - 强制一个兜底人 | ||
| 92 | + if (CollUtil.isEmpty(assigneeUserIds)) { | ||
| 93 | + throw new ActivitiException(StrUtil.format("流程任务({}/{}/{}) 任务规则({}) 找不到候选人", | ||
| 94 | + task.getId(), task.getProcessDefinitionId(), task.getTaskDefinitionKey())); | ||
| 95 | + } | ||
| 96 | + return assigneeUserIds; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + private Set<Long> calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 100 | + throw new UnsupportedOperationException("暂不支持该任务规则"); | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + | ||
| 104 | + private Set<Long> calculateTaskCandidateUsersByDept(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 105 | + throw new UnsupportedOperationException("暂不支持该任务规则"); | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + private Set<Long> calculateTaskCandidateUsersByDeptLeader(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 109 | + throw new UnsupportedOperationException("暂不支持该任务规则"); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + private Set<Long> calculateTaskCandidateUsersByUser(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 113 | + return rule.getOptions(); | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + private Set<Long> calculateTaskCandidateUsersByUserGroup(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 117 | + throw new UnsupportedOperationException("暂不支持该任务规则"); | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + private Set<Long> calculateTaskCandidateUsersByScript(TaskEntity task, BpmTaskRuleDO rule) { | ||
| 121 | + throw new UnsupportedOperationException("暂不支持该任务规则"); | ||
| 29 | } | 122 | } |
| 30 | 123 | ||
| 31 | } | 124 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskRuleService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.adminserver.modules.bpm.service.definition; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskRuleDO; | ||
| 4 | +import org.springframework.lang.Nullable; | ||
| 5 | + | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * BPM 任务规则 Service 接口 | ||
| 10 | + * | ||
| 11 | + * @author 芋道源码 | ||
| 12 | + */ | ||
| 13 | +public interface BpmTaskRuleService { | ||
| 14 | + | ||
| 15 | + /** | ||
| 16 | + * 获得流程定义的任务规则数组 | ||
| 17 | + * | ||
| 18 | + * @param processDefinitionId 流程定义的编号 | ||
| 19 | + * @param taskDefinitionKey 流程任务定义的 Key。允许空 | ||
| 20 | + * @return 任务规则数组 | ||
| 21 | + */ | ||
| 22 | + List<BpmTaskRuleDO> getTaskRulesByProcessDefinitionId(String processDefinitionId, | ||
| 23 | + @Nullable String taskDefinitionKey); | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 获得流程模型的任务规则数组 | ||
| 27 | + * | ||
| 28 | + * @param modelId 流程模型的编号 | ||
| 29 | + * @return 任务规则数组 | ||
| 30 | + */ | ||
| 31 | + List<BpmTaskRuleDO> getTaskRulesByModelId(Long modelId); | ||
| 32 | + | ||
| 33 | + // TODO 芋艿:创建任务规则 | ||
| 34 | + // TODO 芋艿:复制任务规则 | ||
| 35 | + | ||
| 36 | +} |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/dto/BpmDefinitionCreateReqDTO.java
| @@ -11,6 +11,11 @@ import javax.validation.constraints.NotEmpty; | @@ -11,6 +11,11 @@ import javax.validation.constraints.NotEmpty; | ||
| 11 | public class BpmDefinitionCreateReqDTO { | 11 | public class BpmDefinitionCreateReqDTO { |
| 12 | 12 | ||
| 13 | /** | 13 | /** |
| 14 | + * 流程模型的编号 | ||
| 15 | + */ | ||
| 16 | + @NotEmpty(message = "流程模型编号不能为空") | ||
| 17 | + private String modelId; | ||
| 18 | + /** | ||
| 14 | * 流程标识 | 19 | * 流程标识 |
| 15 | */ | 20 | */ |
| 16 | @NotEmpty(message = "流程标识不能为空") | 21 | @NotEmpty(message = "流程标识不能为空") |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmModelServiceImpl.java
| @@ -214,11 +214,11 @@ public class BpmModelServiceImpl implements BpmModelService { | @@ -214,11 +214,11 @@ public class BpmModelServiceImpl implements BpmModelService { | ||
| 214 | } | 214 | } |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | - public static void main(String[] args) { | ||
| 218 | - // 创建转换对象 | ||
| 219 | - BpmnXMLConverter converter = new BpmnXMLConverter(); | ||
| 220 | - BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true); | ||
| 221 | - bpmnModel.getProcesses().get(0).getId() | ||
| 222 | - } | 217 | +// public static void main(String[] args) { |
| 218 | +// // 创建转换对象 | ||
| 219 | +// BpmnXMLConverter converter = new BpmnXMLConverter(); | ||
| 220 | +// BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true); | ||
| 221 | +// bpmnModel.getProcesses().get(0).getId() | ||
| 222 | +// } | ||
| 223 | 223 | ||
| 224 | } | 224 | } |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskRuleServiceImpl.java
0 → 100644
| 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 | +} |