Commit e863b603005e4450d4b9e4f0c7965a9790e7333d

Authored by YunaiV
1 parent 8999b7db

初步实现 BpmUserTaskActivitiBehavior 的规则

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 +}