Commit cb5cfd31f0136782012f376ad75157fb22ab3c2f
1 parent
5d390d2d
仿钉钉流程设计- code review 修改
Showing
7 changed files
with
35 additions
and
40 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmFieldPermissionEnum.java
| @@ -13,10 +13,9 @@ import lombok.Getter; | @@ -13,10 +13,9 @@ import lombok.Getter; | ||
| 13 | @AllArgsConstructor | 13 | @AllArgsConstructor |
| 14 | public enum BpmFieldPermissionEnum { | 14 | public enum BpmFieldPermissionEnum { |
| 15 | 15 | ||
| 16 | - // TODO @jason:改成 WRITE、READ、NONE,更符合权限的感觉哈 | ||
| 17 | - EDITABLE(1, "可编辑"), | ||
| 18 | - READONLY(2, "只读"), | ||
| 19 | - HIDE(3, "隐藏"); | 16 | + WRITE(1, "可编辑"), |
| 17 | + READ(2, "只读"), | ||
| 18 | + NONE(3, "隐藏"); | ||
| 20 | 19 | ||
| 21 | /** | 20 | /** |
| 22 | * 权限 | 21 | * 权限 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
| @@ -96,6 +96,7 @@ public interface BpmTaskConvert { | @@ -96,6 +96,7 @@ public interface BpmTaskConvert { | ||
| 96 | if (form != null) { | 96 | if (form != null) { |
| 97 | // 测试一下权限处理 | 97 | // 测试一下权限处理 |
| 98 | // TODO @jason:这里是不是还没实现完哈? | 98 | // TODO @jason:这里是不是还没实现完哈? |
| 99 | + // TODO @芋艿 测试了一下。 暂时注释掉。 前端不知道要怎样改, 可能需要讨论一下如何改 | ||
| 99 | // List<String> afterChangedFields = BpmnFormUtils.changeCreateFormFiledPermissionRule(form.getFields(), | 100 | // List<String> afterChangedFields = BpmnFormUtils.changeCreateFormFiledPermissionRule(form.getFields(), |
| 100 | // BpmnModelUtils.parseFormFieldsPermission(bpmnModel, task.getTaskDefinitionKey())); | 101 | // BpmnModelUtils.parseFormFieldsPermission(bpmnModel, task.getTaskDefinitionKey())); |
| 101 | 102 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java
| @@ -28,6 +28,21 @@ public interface BpmnModelConstants { | @@ -28,6 +28,21 @@ public interface BpmnModelConstants { | ||
| 28 | */ | 28 | */ |
| 29 | String USER_TASK_CANDIDATE_PARAM = "candidateParam"; | 29 | String USER_TASK_CANDIDATE_PARAM = "candidateParam"; |
| 30 | 30 | ||
| 31 | + /** | ||
| 32 | + * BPMN ExtensionElement 流程表单字段权限元素, 用于标记字段权限 | ||
| 33 | + */ | ||
| 34 | + String FORM_FIELD_PERMISSION_ELEMENT = "fieldsPermission"; | ||
| 35 | + | ||
| 36 | + /** | ||
| 37 | + * BPMN ExtensionElement Attribute, 用于标记表单字段 | ||
| 38 | + */ | ||
| 39 | + String FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE = "field"; | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * BPMN ExtensionElement Attribute, 用于标记表单权限 | ||
| 43 | + */ | ||
| 44 | + String FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE = "permission"; | ||
| 45 | + | ||
| 31 | // TODO @芋艿:这里后面得关注下; | 46 | // TODO @芋艿:这里后面得关注下; |
| 32 | /** | 47 | /** |
| 33 | * BPMN End Event 节点 Id, 用于后端生成 End Event 节点 | 48 | * BPMN End Event 节点 Id, 用于后端生成 End Event 节点 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/SimpleModelConstants.java
| 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; | 1 | package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; |
| 2 | 2 | ||
| 3 | -// TODO @jason:这个类,挪到 BpmnModelConstants 里,会不会好点,因为后续 BPMN 标准也需要使用这些字段哈; | ||
| 4 | /** | 3 | /** |
| 5 | * 仿钉钉快搭 JSON 常量信息 | 4 | * 仿钉钉快搭 JSON 常量信息 |
| 6 | * | 5 | * |
| @@ -8,20 +7,4 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; | @@ -8,20 +7,4 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; | ||
| 8 | */ | 7 | */ |
| 9 | public interface SimpleModelConstants { | 8 | public interface SimpleModelConstants { |
| 10 | 9 | ||
| 11 | - // TODO @jason:改成 FORM_FIELD_PERMISSION_ELEMENT 会不会更精准哈; | ||
| 12 | - /** | ||
| 13 | - * 流程表单字段权限, 用于标记字段权限 | ||
| 14 | - */ | ||
| 15 | - String FIELDS_PERMISSION = "fieldsPermission"; | ||
| 16 | - // TODO @jason:改成 FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE 会不会更精准哈; | ||
| 17 | - /** | ||
| 18 | - * 字段属性 | ||
| 19 | - */ | ||
| 20 | - String FIELD_ATTRIBUTE = "field"; | ||
| 21 | - // TODO @jason:改成 FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE 会不会更精准哈; | ||
| 22 | - /** | ||
| 23 | - * 权限属性 | ||
| 24 | - */ | ||
| 25 | - String PERMISSION_ATTRIBUTE = "permission"; | ||
| 26 | - | ||
| 27 | } | 10 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/util/BpmnFormUtils.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnFormUtils.java
| 1 | -package cn.iocoder.yudao.module.bpm.service.util; | 1 | +package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.lang.Assert; | 4 | import cn.hutool.core.lang.Assert; |
| @@ -13,9 +13,9 @@ import java.util.ArrayList; | @@ -13,9 +13,9 @@ import java.util.ArrayList; | ||
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | import java.util.Map; | 14 | import java.util.Map; |
| 15 | 15 | ||
| 16 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELD_ATTRIBUTE; | 16 | +import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE; |
| 17 | + | ||
| 17 | 18 | ||
| 18 | -// TODO @jason:这个类,挪到 framework 那的 util 包下哈; | ||
| 19 | /** | 19 | /** |
| 20 | * Bpmn 流程表单相关工具方法 | 20 | * Bpmn 流程表单相关工具方法 |
| 21 | * | 21 | * |
| @@ -39,23 +39,23 @@ public class BpmnFormUtils { | @@ -39,23 +39,23 @@ public class BpmnFormUtils { | ||
| 39 | List<String> afterChangedFields = new ArrayList<>(fields.size()); | 39 | List<String> afterChangedFields = new ArrayList<>(fields.size()); |
| 40 | fields.forEach( f-> { | 40 | fields.forEach( f-> { |
| 41 | Map<String, Object> fieldMap = JsonUtils.parseObject(f, new TypeReference<>() {}); | 41 | Map<String, Object> fieldMap = JsonUtils.parseObject(f, new TypeReference<>() {}); |
| 42 | - String field = ObjUtil.defaultIfNull(fieldMap.get(FIELD_ATTRIBUTE), Object::toString, ""); | 42 | + String field = ObjUtil.defaultIfNull(fieldMap.get(FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE), Object::toString, ""); |
| 43 | if (StrUtil.isEmpty(field) || !fieldsPermission.containsKey(field)) { | 43 | if (StrUtil.isEmpty(field) || !fieldsPermission.containsKey(field)) { |
| 44 | afterChangedFields.add(f); | 44 | afterChangedFields.add(f); |
| 45 | return; | 45 | return; |
| 46 | } | 46 | } |
| 47 | BpmFieldPermissionEnum fieldPermission = BpmFieldPermissionEnum.valueOf(fieldsPermission.get(field)); | 47 | BpmFieldPermissionEnum fieldPermission = BpmFieldPermissionEnum.valueOf(fieldsPermission.get(field)); |
| 48 | Assert.notNull(fieldPermission, "字段权限不匹配"); | 48 | Assert.notNull(fieldPermission, "字段权限不匹配"); |
| 49 | - if (BpmFieldPermissionEnum.HIDE == fieldPermission) { | 49 | + if (BpmFieldPermissionEnum.NONE == fieldPermission) { |
| 50 | fieldMap.put(CREATE_FORM_DISPLAY_ATTRIBUTE, Boolean.FALSE); | 50 | fieldMap.put(CREATE_FORM_DISPLAY_ATTRIBUTE, Boolean.FALSE); |
| 51 | - } else if (BpmFieldPermissionEnum.EDITABLE == fieldPermission){ | 51 | + } else if (BpmFieldPermissionEnum.WRITE == fieldPermission){ |
| 52 | Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); | 52 | Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); |
| 53 | if (props == null) { | 53 | if (props == null) { |
| 54 | props = MapUtil.newHashMap(); | 54 | props = MapUtil.newHashMap(); |
| 55 | fieldMap.put("props", props); | 55 | fieldMap.put("props", props); |
| 56 | } | 56 | } |
| 57 | props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.FALSE); | 57 | props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.FALSE); |
| 58 | - } else if (BpmFieldPermissionEnum.READONLY == fieldPermission) { | 58 | + } else if (BpmFieldPermissionEnum.READ == fieldPermission) { |
| 59 | Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); | 59 | Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); |
| 60 | if (props == null) { | 60 | if (props == null) { |
| 61 | props = MapUtil.newHashMap(); | 61 | props = MapUtil.newHashMap(); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| @@ -6,7 +6,6 @@ import cn.hutool.core.util.ArrayUtil; | @@ -6,7 +6,6 @@ import cn.hutool.core.util.ArrayUtil; | ||
| 6 | import cn.hutool.core.util.StrUtil; | 6 | import cn.hutool.core.util.StrUtil; |
| 7 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 7 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 8 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; | 8 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; |
| 9 | -import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants; | ||
| 10 | import org.flowable.bpmn.converter.BpmnXMLConverter; | 9 | import org.flowable.bpmn.converter.BpmnXMLConverter; |
| 11 | import org.flowable.bpmn.model.Process; | 10 | import org.flowable.bpmn.model.Process; |
| 12 | import org.flowable.bpmn.model.*; | 11 | import org.flowable.bpmn.model.*; |
| @@ -14,7 +13,7 @@ import org.flowable.common.engine.impl.util.io.BytesStreamSource; | @@ -14,7 +13,7 @@ import org.flowable.common.engine.impl.util.io.BytesStreamSource; | ||
| 14 | 13 | ||
| 15 | import java.util.*; | 14 | import java.util.*; |
| 16 | 15 | ||
| 17 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELD_ATTRIBUTE; | 16 | +import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*; |
| 18 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; | 17 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; |
| 19 | 18 | ||
| 20 | /** | 19 | /** |
| @@ -28,15 +27,13 @@ public class BpmnModelUtils { | @@ -28,15 +27,13 @@ public class BpmnModelUtils { | ||
| 28 | // TODO @芋艿 尝试从 ExtensionElement 取. 后续相关扩展是否都可以 存 extensionElement。 如表单权限。 按钮权限 | 27 | // TODO @芋艿 尝试从 ExtensionElement 取. 后续相关扩展是否都可以 存 extensionElement。 如表单权限。 按钮权限 |
| 29 | if (candidateStrategy == null) { | 28 | if (candidateStrategy == null) { |
| 30 | ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY)); | 29 | ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY)); |
| 31 | - // TODO @jason:改成下面这样,是不是看着更简洁哈 | ||
| 32 | -// candidateStrategy = element != null ? NumberUtils.parseInt(element.getElementText()) : null; | ||
| 33 | candidateStrategy = NumberUtils.parseInt(Optional.ofNullable(element).map(ExtensionElement::getElementText).orElse(null)); | 30 | candidateStrategy = NumberUtils.parseInt(Optional.ofNullable(element).map(ExtensionElement::getElementText).orElse(null)); |
| 34 | } | 31 | } |
| 35 | return candidateStrategy; | 32 | return candidateStrategy; |
| 36 | } | 33 | } |
| 37 | 34 | ||
| 38 | public static String parseCandidateParam(FlowElement userTask) { | 35 | public static String parseCandidateParam(FlowElement userTask) { |
| 39 | - String candidateParam = userTask.getAttributeValue( | 36 | + String candidateParam = userTask.getAttributeValue( |
| 40 | BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_PARAM); | 37 | BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_PARAM); |
| 41 | if (candidateParam == null) { | 38 | if (candidateParam == null) { |
| 42 | ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_PARAM)); | 39 | ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_PARAM)); |
| @@ -45,17 +42,17 @@ public class BpmnModelUtils { | @@ -45,17 +42,17 @@ public class BpmnModelUtils { | ||
| 45 | return candidateParam; | 42 | return candidateParam; |
| 46 | } | 43 | } |
| 47 | 44 | ||
| 48 | - // TODO @jason:貌似这个没地方调用??? | 45 | + // TODO @jason:貌似这个没地方调用??? @芋艿 在 BpmTaskConvert里面。暂时注释掉了。 |
| 49 | public static Map<String, Integer> parseFormFieldsPermission(BpmnModel bpmnModel, String flowElementId) { | 46 | public static Map<String, Integer> parseFormFieldsPermission(BpmnModel bpmnModel, String flowElementId) { |
| 50 | FlowElement flowElement = getFlowElementById(bpmnModel, flowElementId); | 47 | FlowElement flowElement = getFlowElementById(bpmnModel, flowElementId); |
| 51 | if (flowElement == null) { | 48 | if (flowElement == null) { |
| 52 | return null; | 49 | return null; |
| 53 | } | 50 | } |
| 54 | Map<String, Integer> fieldsPermission = MapUtil.newHashMap(); | 51 | Map<String, Integer> fieldsPermission = MapUtil.newHashMap(); |
| 55 | - List<ExtensionElement> extensionElements = flowElement.getExtensionElements().get(SimpleModelConstants.FIELDS_PERMISSION); | 52 | + List<ExtensionElement> extensionElements = flowElement.getExtensionElements().get(FORM_FIELD_PERMISSION_ELEMENT); |
| 56 | extensionElements.forEach(element -> { | 53 | extensionElements.forEach(element -> { |
| 57 | - String field = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FIELD_ATTRIBUTE); | ||
| 58 | - String permission = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, SimpleModelConstants.PERMISSION_ATTRIBUTE); | 54 | + String field = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE); |
| 55 | + String permission = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE); | ||
| 59 | if (StrUtil.isNotEmpty(field) && StrUtil.isNotEmpty(permission)) { | 56 | if (StrUtil.isNotEmpty(field) && StrUtil.isNotEmpty(permission)) { |
| 60 | fieldsPermission.put(field, Integer.parseInt(permission)); | 57 | fieldsPermission.put(field, Integer.parseInt(permission)); |
| 61 | } | 58 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| @@ -16,7 +16,7 @@ import org.flowable.bpmn.model.*; | @@ -16,7 +16,7 @@ import org.flowable.bpmn.model.*; | ||
| 16 | import java.util.List; | 16 | import java.util.List; |
| 17 | import java.util.Map; | 17 | import java.util.Map; |
| 18 | 18 | ||
| 19 | -import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELDS_PERMISSION; | 19 | +import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.FORM_FIELD_PERMISSION_ELEMENT; |
| 20 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; | 20 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; |
| 21 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_PREFIX; | 21 | import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_PREFIX; |
| 22 | 22 | ||
| @@ -267,9 +267,9 @@ public class SimpleModelUtils { | @@ -267,9 +267,9 @@ public class SimpleModelUtils { | ||
| 267 | */ | 267 | */ |
| 268 | private static void addFormFieldsPermission(BpmSimpleModelNodeVO node, FlowElement flowElement) { | 268 | private static void addFormFieldsPermission(BpmSimpleModelNodeVO node, FlowElement flowElement) { |
| 269 | List<Map<String, String>> fieldsPermissions = MapUtil.get(node.getAttributes(), | 269 | List<Map<String, String>> fieldsPermissions = MapUtil.get(node.getAttributes(), |
| 270 | - FIELDS_PERMISSION, new TypeReference<>() {}); | 270 | + FORM_FIELD_PERMISSION_ELEMENT, new TypeReference<>() {}); |
| 271 | if (CollUtil.isNotEmpty(fieldsPermissions)) { | 271 | if (CollUtil.isNotEmpty(fieldsPermissions)) { |
| 272 | - fieldsPermissions.forEach(item -> addExtensionElement(flowElement, FIELDS_PERMISSION, item)); | 272 | + fieldsPermissions.forEach(item -> addExtensionElement(flowElement, FORM_FIELD_PERMISSION_ELEMENT, item)); |
| 273 | } | 273 | } |
| 274 | } | 274 | } |
| 275 | 275 |