Commit cb5cfd31f0136782012f376ad75157fb22ab3c2f

Authored by jason
1 parent 5d390d2d

仿钉钉流程设计- code review 修改

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