Commit 6c69eeba094c1da3a0ee973563eaa8cacdbb14e7
1 parent
32804d3e
仿钉钉流程设计- code review 部分修改
Showing
8 changed files
with
13 additions
and
197 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmUserTaskTimeoutActionEnum.java renamed to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmUserTaskTimeoutHandlerType.java
| ... | ... | @@ -7,15 +7,14 @@ import lombok.Getter; |
| 7 | 7 | |
| 8 | 8 | import java.util.Arrays; |
| 9 | 9 | |
| 10 | -// TODO @jason:BpmUserTaskTimeoutHandlerTypeEnum 会不会更匹配哈 | |
| 11 | 10 | /** |
| 12 | - * 用户任务超时处理执行动作枚举 | |
| 11 | + * 用户任务超时处理类型枚举 | |
| 13 | 12 | * |
| 14 | 13 | * @author jason |
| 15 | 14 | */ |
| 16 | 15 | @Getter |
| 17 | 16 | @AllArgsConstructor |
| 18 | -public enum BpmUserTaskTimeoutActionEnum implements IntArrayValuable { | |
| 17 | +public enum BpmUserTaskTimeoutHandlerType implements IntArrayValuable { | |
| 19 | 18 | |
| 20 | 19 | REMINDER(1,"自动提醒"), |
| 21 | 20 | APPROVE(2, "自动同意"), |
| ... | ... | @@ -24,10 +23,10 @@ public enum BpmUserTaskTimeoutActionEnum implements IntArrayValuable { |
| 24 | 23 | private final Integer action; |
| 25 | 24 | private final String name; |
| 26 | 25 | |
| 27 | - public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmUserTaskTimeoutActionEnum::getAction).toArray(); | |
| 26 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmUserTaskTimeoutHandlerType::getAction).toArray(); | |
| 28 | 27 | |
| 29 | - public static BpmUserTaskTimeoutActionEnum actionOf(Integer action) { | |
| 30 | - return ArrayUtil.firstMatch(item -> item.getAction().equals(action), values()); | |
| 28 | + public static BpmUserTaskTimeoutHandlerType typeOf(Integer type) { | |
| 29 | + return ArrayUtil.firstMatch(item -> item.getAction().equals(type), values()); | |
| 31 | 30 | } |
| 32 | 31 | |
| 33 | 32 | @Override | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java
| ... | ... | @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 4 | 4 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmApproveMethodEnum; |
| 5 | 5 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType; |
| 6 | 6 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskRejectHandlerType; |
| 7 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutActionEnum; | |
| 7 | +import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerType; | |
| 8 | 8 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; |
| 9 | 9 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| 10 | 10 | import com.fasterxml.jackson.annotation.JsonInclude; |
| ... | ... | @@ -104,7 +104,7 @@ public class BpmSimpleModelNodeVO { |
| 104 | 104 | private Boolean enable; |
| 105 | 105 | |
| 106 | 106 | @Schema(description = "任务超时未处理的行为", example = "1") |
| 107 | - @InEnum(BpmUserTaskTimeoutActionEnum.class) | |
| 107 | + @InEnum(BpmUserTaskTimeoutHandlerType.class) | |
| 108 | 108 | private Integer action; |
| 109 | 109 | |
| 110 | 110 | @Schema(description = "超时时间", example = "PT6H") | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; |
| 2 | 2 | |
| 3 | -import com.google.common.collect.ImmutableSet; | |
| 4 | -import org.flowable.bpmn.model.EndEvent; | |
| 5 | -import org.flowable.bpmn.model.FlowNode; | |
| 6 | -import org.flowable.bpmn.model.UserTask; | |
| 7 | - | |
| 8 | -import java.util.Set; | |
| 9 | - | |
| 10 | 3 | /** |
| 11 | 4 | * BPMN XML 常量信息 |
| 12 | 5 | * |
| ... | ... | @@ -89,16 +82,4 @@ public interface BpmnModelConstants { |
| 89 | 82 | */ |
| 90 | 83 | String BUTTON_SETTING_ELEMENT_ENABLE_ATTRIBUTE = "enable"; |
| 91 | 84 | |
| 92 | - // TODO @jason:这个是不是可以删除啦 | |
| 93 | - /** | |
| 94 | - * BPMN End Event 节点 Id, 用于后端生成 End Event 节点 | |
| 95 | - */ | |
| 96 | - String END_EVENT_ID = "EndEvent_1"; | |
| 97 | - | |
| 98 | - // TODO @jason:这个是不是可以删除啦 | |
| 99 | - /** | |
| 100 | - * 支持转仿钉钉设计模型的 Bpmn 节点 | |
| 101 | - */ | |
| 102 | - Set<Class<? extends FlowNode>> SUPPORT_CONVERT_SIMPLE_FlOW_NODES = ImmutableSet.of(UserTask.class, EndEvent.class); | |
| 103 | - | |
| 104 | 85 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTaskEventListener.java
| ... | ... | @@ -58,7 +58,6 @@ public class BpmTaskEventListener extends AbstractFlowableEngineEventListener { |
| 58 | 58 | |
| 59 | 59 | @Override |
| 60 | 60 | protected void activityCancelled(FlowableActivityCancelledEvent event) { |
| 61 | - // TODO @jason:如果用户主动取消,可能需要考虑这个 | |
| 62 | 61 | List<HistoricActivityInstance> activityList = activityService.getHistoricActivityListByExecutionId(event.getExecutionId()); |
| 63 | 62 | if (CollUtil.isEmpty(activityList)) { |
| 64 | 63 | log.error("[activityCancelled][使用 executionId({}) 查找不到对应的活动实例]", event.getExecutionId()); | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmTimerFiredEventListener.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; |
| 5 | 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; |
| 6 | 6 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRejectReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmBoundaryEventType; |
| 8 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutActionEnum; | |
| 8 | +import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerType; | |
| 9 | 9 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; |
| 10 | 10 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.mq.message.task.TodoTaskReminderMessage; |
| 11 | 11 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.mq.producer.task.TodoTaskReminderProducer; |
| ... | ... | @@ -78,20 +78,20 @@ public class BpmTimerFiredEventListener extends AbstractFlowableEngineEventListe |
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | private void userTaskTimeoutHandler(String processInstanceId, String taskDefKey, Integer timeoutAction) { |
| 81 | - BpmUserTaskTimeoutActionEnum userTaskTimeoutAction = BpmUserTaskTimeoutActionEnum.actionOf(timeoutAction); | |
| 81 | + BpmUserTaskTimeoutHandlerType userTaskTimeoutAction = BpmUserTaskTimeoutHandlerType.typeOf(timeoutAction); | |
| 82 | 82 | if (userTaskTimeoutAction != null) { |
| 83 | 83 | // 查询超时未处理的任务 TODO 加签的情况会不会有问题 ??? |
| 84 | 84 | List<Task> taskList = bpmTaskService.getRunningTaskListByProcessInstanceId(processInstanceId, true, |
| 85 | 85 | null, taskDefKey); |
| 86 | 86 | taskList.forEach(task -> { |
| 87 | 87 | // 自动提醒 |
| 88 | - if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.REMINDER) { | |
| 88 | + if (userTaskTimeoutAction == BpmUserTaskTimeoutHandlerType.REMINDER) { | |
| 89 | 89 | TodoTaskReminderMessage message = new TodoTaskReminderMessage().setTenantId(Long.parseLong(task.getTenantId())) |
| 90 | 90 | .setUserId(Long.parseLong(task.getAssignee())).setTaskName(task.getName()); |
| 91 | 91 | todoTaskReminderProducer.sendReminderMessage(message); |
| 92 | 92 | } |
| 93 | 93 | // 自动同意 |
| 94 | - if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.APPROVE) { | |
| 94 | + if (userTaskTimeoutAction == BpmUserTaskTimeoutHandlerType.APPROVE) { | |
| 95 | 95 | // TODO @芋艿 这个上下文如何清除呢? 任务通过后, BpmProcessInstanceEventListener 会有回调 |
| 96 | 96 | TenantContextHolder.setTenantId(Long.parseLong(task.getTenantId())); |
| 97 | 97 | TenantContextHolder.setIgnore(false); |
| ... | ... | @@ -100,7 +100,7 @@ public class BpmTimerFiredEventListener extends AbstractFlowableEngineEventListe |
| 100 | 100 | bpmTaskService.approveTask(Long.parseLong(task.getAssignee()), req); |
| 101 | 101 | } |
| 102 | 102 | // 自动拒绝 |
| 103 | - if (userTaskTimeoutAction == BpmUserTaskTimeoutActionEnum.REJECT) { | |
| 103 | + if (userTaskTimeoutAction == BpmUserTaskTimeoutHandlerType.REJECT) { | |
| 104 | 104 | // TODO @芋艿 这个上下文如何清除呢? 任务拒绝后, BpmProcessInstanceEventListener 会有回调 |
| 105 | 105 | TenantContextHolder.setTenantId(Long.parseLong(task.getTenantId())); |
| 106 | 106 | TenantContextHolder.setIgnore(false); | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/simplemodel/SimpleModelUserTaskConfig.java deleted
| 1 | -package cn.iocoder.yudao.module.bpm.framework.flowable.core.simplemodel; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmApproveMethodEnum; | |
| 4 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskRejectHandlerType; | |
| 5 | -import lombok.Data; | |
| 6 | - | |
| 7 | -import java.util.List; | |
| 8 | -import java.util.Map; | |
| 9 | - | |
| 10 | -// TODO @jason:这个貌似没用到,是不是可以删除啦 | |
| 11 | -/** | |
| 12 | - * 仿钉钉流程设计器审批节点配置 Model | |
| 13 | - * | |
| 14 | - * @author jason | |
| 15 | - */ | |
| 16 | -@Data | |
| 17 | -public class SimpleModelUserTaskConfig { | |
| 18 | - | |
| 19 | - /** | |
| 20 | - * 候选人策略 | |
| 21 | - */ | |
| 22 | - private Integer candidateStrategy; | |
| 23 | - /** | |
| 24 | - * 候选人参数 | |
| 25 | - */ | |
| 26 | - private String candidateParam; | |
| 27 | - | |
| 28 | - /** | |
| 29 | - * 字段权限 | |
| 30 | - */ | |
| 31 | - private List<Map<String,String>> fieldsPermission; | |
| 32 | - | |
| 33 | - /** | |
| 34 | - * 审批方式 {@link BpmApproveMethodEnum } | |
| 35 | - */ | |
| 36 | - private Integer approveMethod; | |
| 37 | - /** | |
| 38 | - * 通过比例 当审批方式为 多人会签(按通过比例) 需设置 | |
| 39 | - */ | |
| 40 | - private Integer approveRatio; | |
| 41 | - | |
| 42 | - /** | |
| 43 | - * 超时处理 | |
| 44 | - */ | |
| 45 | - private TimeoutHandler timeoutHandler; | |
| 46 | - | |
| 47 | - /** | |
| 48 | - * 用户任务拒绝处理 | |
| 49 | - */ | |
| 50 | - private RejectHandler rejectHandler; | |
| 51 | - | |
| 52 | - @Data | |
| 53 | - public static class TimeoutHandler { | |
| 54 | - | |
| 55 | - /** | |
| 56 | - * 是否开启超时处理 | |
| 57 | - */ | |
| 58 | - private Boolean enable; | |
| 59 | - | |
| 60 | - /** | |
| 61 | - * 超时执行的动作 | |
| 62 | - */ | |
| 63 | - private Integer action; | |
| 64 | - | |
| 65 | - /** | |
| 66 | - * 超时时间设置 | |
| 67 | - */ | |
| 68 | - private String timeDuration; | |
| 69 | - | |
| 70 | - /** | |
| 71 | - * 如果执行动作是自动提醒, 最大提醒次数 | |
| 72 | - */ | |
| 73 | - private Integer maxRemindCount; | |
| 74 | - } | |
| 75 | - | |
| 76 | - @Data | |
| 77 | - public static class RejectHandler { | |
| 78 | - | |
| 79 | - /** | |
| 80 | - * 用户任务拒绝处理类型 {@link BpmUserTaskRejectHandlerType} | |
| 81 | - */ | |
| 82 | - private Integer type; | |
| 83 | - | |
| 84 | - /** | |
| 85 | - * 用户任务拒绝后驳回的节点 Id | |
| 86 | - */ | |
| 87 | - private String returnNodeId; | |
| 88 | - } | |
| 89 | - | |
| 90 | -} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnFormUtils.java deleted
| 1 | -package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; | |
| 2 | - | |
| 3 | -import cn.hutool.core.collection.CollUtil; | |
| 4 | -import cn.hutool.core.lang.Assert; | |
| 5 | -import cn.hutool.core.map.MapUtil; | |
| 6 | -import cn.hutool.core.util.ObjUtil; | |
| 7 | -import cn.hutool.core.util.StrUtil; | |
| 8 | -import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | |
| 9 | -import cn.iocoder.yudao.module.bpm.enums.definition.BpmFieldPermissionEnum; | |
| 10 | -import com.fasterxml.jackson.core.type.TypeReference; | |
| 11 | - | |
| 12 | -import java.util.ArrayList; | |
| 13 | -import java.util.List; | |
| 14 | -import java.util.Map; | |
| 15 | - | |
| 16 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE; | |
| 17 | - | |
| 18 | -// TODO @芋艿:这块去研究下! | |
| 19 | -/** | |
| 20 | - * Bpmn 流程表单相关工具方法 | |
| 21 | - * | |
| 22 | - * @author jason | |
| 23 | - */ | |
| 24 | -public class BpmnFormUtils { | |
| 25 | - | |
| 26 | - private static final String CREATE_FORM_DISPLAY_ATTRIBUTE = "display"; | |
| 27 | - private static final String CREATE_FORM_DISABLED_ATTRIBUTE = "disabled"; | |
| 28 | - | |
| 29 | - // TODO @jason:这个方法,还要哇? | |
| 30 | - /** | |
| 31 | - * 修改 form-create 表单组件字段权限规则: 包括可编辑、只读、隐藏规则 | |
| 32 | - * | |
| 33 | - * @param fields 字段规则 | |
| 34 | - * @param fieldsPermission 字段权限 | |
| 35 | - * @return 修改权限后的字段规则 | |
| 36 | - */ | |
| 37 | - public static List<String> changeCreateFormFiledPermissionRule(List<String> fields, Map<String,Integer> fieldsPermission) { | |
| 38 | - if ( CollUtil.isEmpty(fields) || MapUtil.isEmpty(fieldsPermission)) { | |
| 39 | - return fields; | |
| 40 | - } | |
| 41 | - List<String> afterChangedFields = new ArrayList<>(fields.size()); | |
| 42 | - fields.forEach( f-> { | |
| 43 | - Map<String, Object> fieldMap = JsonUtils.parseObject(f, new TypeReference<>() {}); | |
| 44 | - String field = ObjUtil.defaultIfNull(fieldMap.get(FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE), Object::toString, ""); | |
| 45 | - if (StrUtil.isEmpty(field) || !fieldsPermission.containsKey(field)) { | |
| 46 | - afterChangedFields.add(f); | |
| 47 | - return; | |
| 48 | - } | |
| 49 | - BpmFieldPermissionEnum fieldPermission = BpmFieldPermissionEnum.valueOf(fieldsPermission.get(field)); | |
| 50 | - Assert.notNull(fieldPermission, "字段权限不匹配"); | |
| 51 | - if (BpmFieldPermissionEnum.NONE == fieldPermission) { | |
| 52 | - fieldMap.put(CREATE_FORM_DISPLAY_ATTRIBUTE, Boolean.FALSE); | |
| 53 | - } else if (BpmFieldPermissionEnum.WRITE == fieldPermission){ | |
| 54 | - Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); | |
| 55 | - if (props == null) { | |
| 56 | - props = MapUtil.newHashMap(); | |
| 57 | - fieldMap.put("props", props); | |
| 58 | - } | |
| 59 | - props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.FALSE); | |
| 60 | - } else if (BpmFieldPermissionEnum.READ == fieldPermission) { | |
| 61 | - Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); | |
| 62 | - if (props == null) { | |
| 63 | - props = MapUtil.newHashMap(); | |
| 64 | - fieldMap.put("props", props); | |
| 65 | - } | |
| 66 | - props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.TRUE); | |
| 67 | - } | |
| 68 | - afterChangedFields.add(JsonUtils.toJsonString(fieldMap)); | |
| 69 | - }); | |
| 70 | - return afterChangedFields; | |
| 71 | - } | |
| 72 | - | |
| 73 | -} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| ... | ... | @@ -27,7 +27,7 @@ import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.s |
| 27 | 27 | import static cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TimeoutHandler; |
| 28 | 28 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmBoundaryEventType.USER_TASK_TIMEOUT; |
| 29 | 29 | import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeType.*; |
| 30 | -import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutActionEnum.REMINDER; | |
| 30 | +import static cn.iocoder.yudao.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerType.REMINDER; | |
| 31 | 31 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*; |
| 32 | 32 | import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.*; |
| 33 | 33 | import static org.flowable.bpmn.constants.BpmnXMLConstants.*; | ... | ... |