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

This commit is contained in:
jason 2024-04-18 20:47:02 +08:00
parent 5d390d2d65
commit cb5cfd31f0
7 changed files with 35 additions and 40 deletions

View File

@ -13,10 +13,9 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum BpmFieldPermissionEnum { public enum BpmFieldPermissionEnum {
// TODO @jason改成 WRITEREADNONE更符合权限的感觉哈 WRITE(1, "可编辑"),
EDITABLE(1, "可编辑"), READ(2, "只读"),
READONLY(2, "只读"), NONE(3, "隐藏");
HIDE(3, "隐藏");
/** /**
* 权限 * 权限

View File

@ -96,6 +96,7 @@ public interface BpmTaskConvert {
if (form != null) { if (form != null) {
// 测试一下权限处理 // 测试一下权限处理
// TODO @jason这里是不是还没实现完哈 // TODO @jason这里是不是还没实现完哈
// TODO @芋艿 测试了一下 暂时注释掉 前端不知道要怎样改 可能需要讨论一下如何改
// List<String> afterChangedFields = BpmnFormUtils.changeCreateFormFiledPermissionRule(form.getFields(), // List<String> afterChangedFields = BpmnFormUtils.changeCreateFormFiledPermissionRule(form.getFields(),
// BpmnModelUtils.parseFormFieldsPermission(bpmnModel, task.getTaskDefinitionKey())); // BpmnModelUtils.parseFormFieldsPermission(bpmnModel, task.getTaskDefinitionKey()));

View File

@ -28,6 +28,21 @@ public interface BpmnModelConstants {
*/ */
String USER_TASK_CANDIDATE_PARAM = "candidateParam"; String USER_TASK_CANDIDATE_PARAM = "candidateParam";
/**
* BPMN ExtensionElement 流程表单字段权限元素, 用于标记字段权限
*/
String FORM_FIELD_PERMISSION_ELEMENT = "fieldsPermission";
/**
* BPMN ExtensionElement Attribute, 用于标记表单字段
*/
String FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE = "field";
/**
* BPMN ExtensionElement Attribute, 用于标记表单权限
*/
String FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE = "permission";
// TODO @芋艿这里后面得关注下 // TODO @芋艿这里后面得关注下
/** /**
* BPMN End Event 节点 Id 用于后端生成 End Event 节点 * BPMN End Event 节点 Id 用于后端生成 End Event 节点

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums; package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums;
// TODO @jason这个类挪到 BpmnModelConstants 会不会好点因为后续 BPMN 标准也需要使用这些字段哈
/** /**
* 仿钉钉快搭 JSON 常量信息 * 仿钉钉快搭 JSON 常量信息
* *
@ -8,20 +7,4 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.enums;
*/ */
public interface SimpleModelConstants { public interface SimpleModelConstants {
// TODO @jason改成 FORM_FIELD_PERMISSION_ELEMENT 会不会更精准哈
/**
* 流程表单字段权限, 用于标记字段权限
*/
String FIELDS_PERMISSION = "fieldsPermission";
// TODO @jason改成 FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE 会不会更精准哈
/**
* 字段属性
*/
String FIELD_ATTRIBUTE = "field";
// TODO @jason改成 FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE 会不会更精准哈
/**
* 权限属性
*/
String PERMISSION_ATTRIBUTE = "permission";
} }

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.bpm.service.util; package cn.iocoder.yudao.module.bpm.framework.flowable.core.util;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
@ -13,9 +13,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELD_ATTRIBUTE; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE;
// TODO @jason这个类挪到 framework 那的 util 包下哈
/** /**
* Bpmn 流程表单相关工具方法 * Bpmn 流程表单相关工具方法
* *
@ -39,23 +39,23 @@ public class BpmnFormUtils {
List<String> afterChangedFields = new ArrayList<>(fields.size()); List<String> afterChangedFields = new ArrayList<>(fields.size());
fields.forEach( f-> { fields.forEach( f-> {
Map<String, Object> fieldMap = JsonUtils.parseObject(f, new TypeReference<>() {}); Map<String, Object> fieldMap = JsonUtils.parseObject(f, new TypeReference<>() {});
String field = ObjUtil.defaultIfNull(fieldMap.get(FIELD_ATTRIBUTE), Object::toString, ""); String field = ObjUtil.defaultIfNull(fieldMap.get(FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE), Object::toString, "");
if (StrUtil.isEmpty(field) || !fieldsPermission.containsKey(field)) { if (StrUtil.isEmpty(field) || !fieldsPermission.containsKey(field)) {
afterChangedFields.add(f); afterChangedFields.add(f);
return; return;
} }
BpmFieldPermissionEnum fieldPermission = BpmFieldPermissionEnum.valueOf(fieldsPermission.get(field)); BpmFieldPermissionEnum fieldPermission = BpmFieldPermissionEnum.valueOf(fieldsPermission.get(field));
Assert.notNull(fieldPermission, "字段权限不匹配"); Assert.notNull(fieldPermission, "字段权限不匹配");
if (BpmFieldPermissionEnum.HIDE == fieldPermission) { if (BpmFieldPermissionEnum.NONE == fieldPermission) {
fieldMap.put(CREATE_FORM_DISPLAY_ATTRIBUTE, Boolean.FALSE); fieldMap.put(CREATE_FORM_DISPLAY_ATTRIBUTE, Boolean.FALSE);
} else if (BpmFieldPermissionEnum.EDITABLE == fieldPermission){ } else if (BpmFieldPermissionEnum.WRITE == fieldPermission){
Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {});
if (props == null) { if (props == null) {
props = MapUtil.newHashMap(); props = MapUtil.newHashMap();
fieldMap.put("props", props); fieldMap.put("props", props);
} }
props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.FALSE); props.put(CREATE_FORM_DISABLED_ATTRIBUTE, Boolean.FALSE);
} else if (BpmFieldPermissionEnum.READONLY == fieldPermission) { } else if (BpmFieldPermissionEnum.READ == fieldPermission) {
Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {}); Map<String, Object> props = MapUtil.get(fieldMap, "props", new cn.hutool.core.lang.TypeReference<>() {});
if (props == null) { if (props == null) {
props = MapUtil.newHashMap(); props = MapUtil.newHashMap();

View File

@ -6,7 +6,6 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants;
import org.flowable.bpmn.converter.BpmnXMLConverter; import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
@ -14,7 +13,7 @@ import org.flowable.common.engine.impl.util.io.BytesStreamSource;
import java.util.*; import java.util.*;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELD_ATTRIBUTE; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*;
import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE;
/** /**
@ -28,15 +27,13 @@ public class BpmnModelUtils {
// TODO @芋艿 尝试从 ExtensionElement . 后续相关扩展是否都可以 extensionElement 如表单权限 按钮权限 // TODO @芋艿 尝试从 ExtensionElement . 后续相关扩展是否都可以 extensionElement 如表单权限 按钮权限
if (candidateStrategy == null) { if (candidateStrategy == null) {
ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY)); ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY));
// TODO @jason改成下面这样是不是看着更简洁哈
// candidateStrategy = element != null ? NumberUtils.parseInt(element.getElementText()) : null;
candidateStrategy = NumberUtils.parseInt(Optional.ofNullable(element).map(ExtensionElement::getElementText).orElse(null)); candidateStrategy = NumberUtils.parseInt(Optional.ofNullable(element).map(ExtensionElement::getElementText).orElse(null));
} }
return candidateStrategy; return candidateStrategy;
} }
public static String parseCandidateParam(FlowElement userTask) { public static String parseCandidateParam(FlowElement userTask) {
String candidateParam = userTask.getAttributeValue( String candidateParam = userTask.getAttributeValue(
BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_PARAM); BpmnModelConstants.NAMESPACE, BpmnModelConstants.USER_TASK_CANDIDATE_PARAM);
if (candidateParam == null) { if (candidateParam == null) {
ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_PARAM)); ExtensionElement element = CollUtil.getFirst(userTask.getExtensionElements().get(BpmnModelConstants.USER_TASK_CANDIDATE_PARAM));
@ -45,17 +42,17 @@ public class BpmnModelUtils {
return candidateParam; return candidateParam;
} }
// TODO @jason貌似这个没地方调用 // TODO @jason貌似这个没地方调用 @芋艿 BpmTaskConvert里面暂时注释掉了
public static Map<String, Integer> parseFormFieldsPermission(BpmnModel bpmnModel, String flowElementId) { public static Map<String, Integer> parseFormFieldsPermission(BpmnModel bpmnModel, String flowElementId) {
FlowElement flowElement = getFlowElementById(bpmnModel, flowElementId); FlowElement flowElement = getFlowElementById(bpmnModel, flowElementId);
if (flowElement == null) { if (flowElement == null) {
return null; return null;
} }
Map<String, Integer> fieldsPermission = MapUtil.newHashMap(); Map<String, Integer> fieldsPermission = MapUtil.newHashMap();
List<ExtensionElement> extensionElements = flowElement.getExtensionElements().get(SimpleModelConstants.FIELDS_PERMISSION); List<ExtensionElement> extensionElements = flowElement.getExtensionElements().get(FORM_FIELD_PERMISSION_ELEMENT);
extensionElements.forEach(element -> { extensionElements.forEach(element -> {
String field = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FIELD_ATTRIBUTE); String field = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FORM_FIELD_PERMISSION_ELEMENT_FIELD_ATTRIBUTE);
String permission = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, SimpleModelConstants.PERMISSION_ATTRIBUTE); String permission = element.getAttributeValue(FLOWABLE_EXTENSIONS_NAMESPACE, FORM_FIELD_PERMISSION_ELEMENT_PERMISSION_ATTRIBUTE);
if (StrUtil.isNotEmpty(field) && StrUtil.isNotEmpty(permission)) { if (StrUtil.isNotEmpty(field) && StrUtil.isNotEmpty(permission)) {
fieldsPermission.put(field, Integer.parseInt(permission)); fieldsPermission.put(field, Integer.parseInt(permission));
} }

View File

@ -16,7 +16,7 @@ import org.flowable.bpmn.model.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.SimpleModelConstants.FIELDS_PERMISSION; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.FORM_FIELD_PERMISSION_ELEMENT;
import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE; import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_NAMESPACE;
import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_PREFIX; import static org.flowable.bpmn.constants.BpmnXMLConstants.FLOWABLE_EXTENSIONS_PREFIX;
@ -267,9 +267,9 @@ public class SimpleModelUtils {
*/ */
private static void addFormFieldsPermission(BpmSimpleModelNodeVO node, FlowElement flowElement) { private static void addFormFieldsPermission(BpmSimpleModelNodeVO node, FlowElement flowElement) {
List<Map<String, String>> fieldsPermissions = MapUtil.get(node.getAttributes(), List<Map<String, String>> fieldsPermissions = MapUtil.get(node.getAttributes(),
FIELDS_PERMISSION, new TypeReference<>() {}); FORM_FIELD_PERMISSION_ELEMENT, new TypeReference<>() {});
if (CollUtil.isNotEmpty(fieldsPermissions)) { if (CollUtil.isNotEmpty(fieldsPermissions)) {
fieldsPermissions.forEach(item -> addExtensionElement(flowElement, FIELDS_PERMISSION, item)); fieldsPermissions.forEach(item -> addExtensionElement(flowElement, FORM_FIELD_PERMISSION_ELEMENT, item));
} }
} }