Pre Merge pull request !656 from tonylu/dev

This commit is contained in:
tonylu 2025-03-18 00:06:28 +00:00 committed by Gitee
commit dc68ffc893
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
15 changed files with 121 additions and 124 deletions

View File

@ -8,7 +8,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.oss.constant.OssConstant;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enumd.AccessPolicyType;
import org.dromara.common.oss.enums.AccessPolicyType;
import org.dromara.common.oss.exception.OssException;
import org.dromara.common.oss.properties.OssProperties;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;

View File

@ -1,4 +1,4 @@
package org.dromara.common.oss.enumd;
package org.dromara.common.oss.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;

View File

@ -26,7 +26,7 @@ public class SseMessageUtils {
}
/**
* 向指定的WebSocket会话发送消息
* 向指定的SSE会话发送消息
*
* @param userId 要发送消息的用户id
* @param message 要发送的消息内容

View File

@ -87,6 +87,6 @@ public class SysDept extends TenantEntity {
* 子部门
*/
@TableField(exist = false)
private List<SysMenu> children = new ArrayList<>();
private List<SysDept> children = new ArrayList<>();
}

View File

@ -7,7 +7,6 @@ import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysMenu;
import java.io.Serial;
import java.io.Serializable;
@ -105,6 +104,6 @@ public class SysDeptVo implements Serializable {
/**
* 子部门
*/
private List<SysMenu> children = new ArrayList<>();
private List<SysDept> children = new ArrayList<>();
}

View File

@ -21,7 +21,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.enumd.AccessPolicyType;
import org.dromara.common.oss.enums.AccessPolicyType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.system.domain.SysOss;
import org.dromara.system.domain.bo.SysOssBo;

View File

@ -6,7 +6,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.DictTypeDTO;
import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.warm.flow.ui.service.NodeExtService;
import org.dromara.warm.flow.ui.vo.NodeExt;
import org.dromara.workflow.common.ConditionalOnEnable;
@ -37,11 +36,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
*/
private static final String PERMISSION_TAB_NAME = "权限";
/**
* 枚举类型标识
*/
private static final String ENUM_TYPE_PREFIX = "enum:";
/**
* 基础设置
*/
@ -58,7 +52,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
private static final Map<String, Map<String, Object>> CHILD_NODE_MAP = new HashMap<>();
static {
CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getName(),
CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getSimpleName(),
Map.of("label", "权限按钮", "type", 4, "must", false, "multiple", true));
}
@ -67,33 +61,41 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
/**
* 获取节点扩展属性
*
* @return 结果
* @return 节点扩展属性列表
*/
@Override
public List<NodeExt> getNodeExt() {
List<NodeExt> nodeExtList = new ArrayList<>();
// 构建按钮权限页面
nodeExtList.add(buildNodeExt(PERMISSION_TAB, PERMISSION_TAB_NAME, TYPE_NEW_TAB,
ENUM_TYPE_PREFIX + ButtonPermissionEnum.class.getName()));
List.of(ButtonPermissionEnum.class)));
return nodeExtList;
}
/**
* 构建一个 NodeExt 对象
* 构建一个 `NodeExt` 对象
*
* @param code 编码此json中唯一
* @param name 名称如果type为新页签时作为页签名称
* @param type 节点类型1基础设置2新页签
* @param sourceTypes 字典/枚举类型来源逗号分隔
* @return 返回构建 NodeExt 对象
* @param code 唯一编码
* @param name 名称新页签时作为页签名称
* @param type 节点类型1: 基础设置2: 新页签
* @param sources 数据来源枚举类或字典类型
* @return 构建的 `NodeExt` 对象
*/
private NodeExt buildNodeExt(String code, String name, int type, String sourceTypes) {
@SuppressWarnings("unchecked cast")
private NodeExt buildNodeExt(String code, String name, int type, List<Object> sources) {
NodeExt nodeExt = new NodeExt();
nodeExt.setCode(code);
nodeExt.setType(type);
nodeExt.setName(name);
nodeExt.setChilds(StringUtils.splitList(sourceTypes)
.stream().map(this::buildChildNode)
nodeExt.setChilds(sources.stream()
.map(source -> {
if (source instanceof Class<?> clazz && NodeExtEnum.class.isAssignableFrom(clazz)) {
return buildChildNode((Class<? extends NodeExtEnum>) clazz);
} else if (source instanceof String dictType) {
return buildChildNode(dictType);
}
return null;
})
.filter(ObjectUtil::isNotNull)
.toList()
);
@ -101,52 +103,35 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
}
/**
* 构建一个 ChildNode 对象
* 根据枚举类型构建一个 `ChildNode` 对象
*
* @param sourceType 字典类型
* @return 返回构建 ChildNode 对象
* @param enumClass 枚举类必须实现 `NodeExtEnum` 接口
* @return 构建的 `ChildNode` 对象
*/
private NodeExt.ChildNode buildChildNode(String sourceType) {
return sourceType.startsWith(ENUM_TYPE_PREFIX) ?
buildChildNodeFromEnum(sourceType.substring(ENUM_TYPE_PREFIX.length())) : buildChildNodeFromDict(sourceType);
}
/**
* 根据枚举构建一个 ChildNode 对象
*
* @param enumClassName 枚举名称
* @return 返回构建好的 ChildNode 对象
*/
private NodeExt.ChildNode buildChildNodeFromEnum(String enumClassName) {
try {
Class<?> enumClass = Class.forName(enumClassName);
if (!enumClass.isEnum()) {
return null;
}
NodeExt.ChildNode childNode = buildChildNodeMap(enumClassName);
// 编码此json中唯
childNode.setCode(ENUM_TYPE_PREFIX + enumClassName);
// 字典下拉框和复选框时用到
childNode.setDict(Arrays.stream(enumClass.getEnumConstants())
.filter(NodeExtEnum.class::isInstance)
.map(NodeExtEnum.class::cast)
.map(x ->
new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected())
).toList());
return childNode;
} catch (ClassNotFoundException e) {
log.error("Enum class not found: {}", enumClassName, e);
private NodeExt.ChildNode buildChildNode(Class<? extends NodeExtEnum> enumClass) {
if (!enumClass.isEnum()) {
return null;
}
return null;
String simpleName = enumClass.getSimpleName();
NodeExt.ChildNode childNode = buildChildNodeMap(simpleName);
// 编码此json中唯
childNode.setCode(simpleName);
// 字典下拉框和复选框时用到
childNode.setDict(Arrays.stream(enumClass.getEnumConstants())
.map(NodeExtEnum.class::cast)
.map(x ->
new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected())
).toList());
return childNode;
}
/**
* 根据字典构建一个 ChildNode 对象
* 根据字典类型构建 `ChildNode` 对象
*
* @param dictType 字典类型
* @return 返回构建好的 ChildNode 对象
* @return 构建的 `ChildNode` 对象
*/
private NodeExt.ChildNode buildChildNodeFromDict(String dictType) {
private NodeExt.ChildNode buildChildNode(String dictType) {
DictTypeDTO dictTypeDTO = dictService.getDictType(dictType);
if (ObjectUtil.isNull(dictTypeDTO)) {
return null;

View File

@ -1,6 +1,7 @@
package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -25,9 +26,7 @@ import org.dromara.workflow.common.enums.TaskAssigneeEnum;
import org.dromara.workflow.service.IFlwTaskAssigneeService;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.*;
/**
* 流程设计器-获取办理人权限设置列表
@ -132,15 +131,26 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
@Override
public List<UserDTO> fetchUsersByStorageId(String storageId) {
List<UserDTO> list = new ArrayList<>();
Map<TaskAssigneeEnum, List<Long>> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class);
for (String str : storageId.split(StrUtil.COMMA)) {
String[] parts = str.split(StrUtil.COLON, 2);
TaskAssigneeEnum type;
Long id;
if (parts.length < 2) {
list.addAll(getUsersByType(TaskAssigneeEnum.USER, List.of(Long.valueOf(parts[0]))));
// 无前缀时默认是用户类型
type = TaskAssigneeEnum.USER;
id = Long.valueOf(parts[0]);
} else {
list.addAll(getUsersByType(TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON), List.of(Long.valueOf(parts[1]))));
// 根据前缀解析类型 "role:123" -> ROLE 类型
type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON);
id = Long.valueOf(parts[1]);
}
typeIdMap.computeIfAbsent(type, k -> new ArrayList<>()).add(id);
}
return list;
typeIdMap.entrySet().stream()
.filter(entry -> CollUtil.isNotEmpty(entry.getValue()))
.forEach(entry -> list.addAll(getUsersByType(entry.getKey(), entry.getValue())));
return list.stream().distinct().toList();
}
/**

View File

@ -54,7 +54,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
* @return boolean
*/
public boolean eval(Integer leaveDays) {
if (leaveDays < 2) {
if (leaveDays <= 2) {
return true;
}
return false;

View File

@ -1,7 +1,7 @@
{
"flowCode" : "leave1",
"flowName" : "请假申请-普通",
"category" : "1",
"category" : "100",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
@ -11,8 +11,8 @@
"nodeName" : "开始",
"nodeRatio" : 0.000,
"coordinate" : "200,200|200,200",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
"nextNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42",
@ -25,8 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "360,200|360,200",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42",
"nextNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf",
@ -40,8 +40,8 @@
"permissionFlag" : "role:1",
"nodeRatio" : 0.000,
"coordinate" : "540,200|540,200",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf",
"nextNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe",
@ -55,8 +55,8 @@
"permissionFlag" : "role:3,role:4",
"nodeRatio" : 0.000,
"coordinate" : "720,200|720,200",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"nextNodeCode" : "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
@ -69,7 +69,7 @@
"nodeName" : "结束",
"nodeRatio" : 0.000,
"coordinate" : "900,200|900,200",
"skipAnyNode" : "N",
"formCustom" : "N"
"formCustom" : "N",
"ext" : "[]"
} ]
}

View File

@ -1,7 +1,7 @@
{
"flowCode" : "leave2",
"flowName" : "请假申请-排他网关",
"category" : "1",
"category" : "100",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
@ -11,8 +11,8 @@
"nodeName" : "开始",
"nodeRatio" : 0.000,
"coordinate" : "300,240|300,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
"nextNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd",
@ -25,8 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "440,240|440,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd",
"nextNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
@ -38,8 +38,8 @@
"nodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"nodeRatio" : 0.000,
"coordinate" : "560,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"nextNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86",
@ -61,8 +61,8 @@
"permissionFlag" : "3,4",
"nodeRatio" : 0.000,
"coordinate" : "720,320|720,320",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
@ -76,8 +76,8 @@
"permissionFlag" : "role:1",
"nodeRatio" : 0.000,
"coordinate" : "860,240|860,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"nextNodeCode" : "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
@ -90,8 +90,8 @@
"nodeName" : "结束",
"nodeRatio" : 0.000,
"coordinate" : "1000,240|1000,240",
"skipAnyNode" : "N",
"formCustom" : "N"
"formCustom" : "N",
"ext" : "[]"
}, {
"nodeType" : 1,
"nodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605",
@ -99,8 +99,8 @@
"permissionFlag" : "role:1",
"nodeRatio" : 0.000,
"coordinate" : "720,160|720,160",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605",
"nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
@ -108,4 +108,4 @@
"coordinate" : "770,160;860,160;860,200"
} ]
} ]
}
}

View File

@ -1,7 +1,7 @@
{
"flowCode" : "leave3",
"flowName" : "请假申请-并行网关",
"category" : "1",
"category" : "100",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
@ -11,8 +11,8 @@
"nodeName" : "开始",
"nodeRatio" : 0.000,
"coordinate" : "380,220|380,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
"nextNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99",
@ -25,8 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "520,220|520,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99",
"nextNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
@ -38,8 +38,8 @@
"nodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nodeRatio" : 0.000,
"coordinate" : "680,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nextNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe",
@ -58,8 +58,8 @@
"permissionFlag" : "role:1",
"nodeRatio" : 0.000,
"coordinate" : "800,140|800,140",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
@ -71,8 +71,8 @@
"nodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nodeRatio" : 0.000,
"coordinate" : "920,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nextNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6",
@ -86,8 +86,8 @@
"permissionFlag" : "1",
"nodeRatio" : 0.000,
"coordinate" : "1040,220|1040,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6",
"nextNodeCode" : "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
@ -100,8 +100,8 @@
"nodeName" : "结束",
"nodeRatio" : 0.000,
"coordinate" : "1160,220|1160,220",
"skipAnyNode" : "N",
"formCustom" : "N"
"formCustom" : "N",
"ext" : "[]"
}, {
"nodeType" : 1,
"nodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394",
@ -109,8 +109,8 @@
"permissionFlag" : "role:3,role:4",
"nodeRatio" : 0.000,
"coordinate" : "800,300|800,300",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394",
"nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",

View File

@ -1,7 +1,7 @@
{
"flowCode" : "leave4",
"flowName" : "请假申请-会签",
"category" : "1",
"category" : "100",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
@ -11,8 +11,8 @@
"nodeName" : "开始",
"nodeRatio" : 0.000,
"coordinate" : "320,240|320,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
"nextNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f",
@ -25,8 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "460,240|460,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"nextNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045",
@ -40,8 +40,8 @@
"permissionFlag" : "${userList}",
"nodeRatio" : 60.000,
"coordinate" : "640,240|640,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"nextNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
@ -55,8 +55,8 @@
"permissionFlag" : "role:1,role:3",
"nodeRatio" : 100.000,
"coordinate" : "820,240|820,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"nextNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
@ -70,8 +70,8 @@
"permissionFlag" : "1",
"nodeRatio" : 0.000,
"coordinate" : "1000,240|1000,240",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"nextNodeCode" : "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
@ -84,7 +84,7 @@
"nodeName" : "结束",
"nodeRatio" : 0.000,
"coordinate" : "1120,240|1120,240",
"skipAnyNode" : "N",
"formCustom" : "N"
"formCustom" : "N",
"ext" : "[]"
} ]
}

View File

@ -1,7 +1,7 @@
{
"flowCode" : "leave5",
"flowName" : "请假申请-并行会签网关",
"category" : "1",
"category" : "100",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
@ -11,8 +11,8 @@
"nodeName" : "开始",
"nodeRatio" : 0.000,
"coordinate" : "300,220|300,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
"nextNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374",
@ -25,8 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "420,220|420,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374",
"nextNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
@ -38,8 +38,8 @@
"nodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nodeRatio" : 0.000,
"coordinate" : "560,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nextNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
@ -58,8 +58,8 @@
"permissionFlag" : "role:1,role:3",
"nodeRatio" : 100.000,
"coordinate" : "700,320|700,320",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
@ -71,8 +71,8 @@
"nodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"nodeRatio" : 0.000,
"coordinate" : "860,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"nextNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9",
@ -86,8 +86,8 @@
"permissionFlag" : "1",
"nodeRatio" : 0.000,
"coordinate" : "1000,220|1000,220",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9",
"nextNodeCode" : "03c4d2bc-58b5-4408-a2e4-65afb046f169",
@ -100,8 +100,8 @@
"nodeName" : "结束",
"nodeRatio" : 0.000,
"coordinate" : "1140,220|1140,220",
"skipAnyNode" : "N",
"formCustom" : "N"
"formCustom" : "N",
"ext" : "[]"
}, {
"nodeType" : 1,
"nodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
@ -109,8 +109,8 @@
"permissionFlag" : "${userList}",
"nodeRatio" : 60.000,
"coordinate" : "700,120|700,120",
"skipAnyNode" : "N",
"formCustom" : "N",
"ext" : "[]",
"skipList" : [ {
"nowNodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
"nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",

View File

@ -2,7 +2,7 @@
"flowCode" : "leave6",
"flowName" : "请假申请-排他并行会签",
"category" : "100",
"version" : "4",
"version" : "1",
"formCustom" : "N",
"formPath" : "/workflow/leaveEdit/index",
"nodeList" : [ {
@ -25,7 +25,8 @@
"nodeName" : "申请人",
"nodeRatio" : 0.000,
"coordinate" : "400,300|400,300",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"nextNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742",
@ -39,7 +40,8 @@
"permissionFlag" : "role:1@@role:3@@role:4",
"nodeRatio" : 0.000,
"coordinate" : "860,200|860,200",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
@ -54,7 +56,7 @@
"nodeRatio" : 0.000,
"coordinate" : "860,400|860,400",
"formCustom" : "N",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
@ -68,7 +70,8 @@
"permissionFlag" : "1",
"nodeRatio" : 0.000,
"coordinate" : "560,300|560,300",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination,copy,trust,transfer\"}]",
"formCustom" : "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]",
"skipList" : [ {
"nowNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"nextNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13",
@ -117,7 +120,7 @@
"nodeRatio" : 100.000,
"coordinate" : "1180,300|1180,300",
"formCustom" : "N",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
"skipList" : [ {
"nowNodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496",
"nextNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992",
@ -150,7 +153,7 @@
"nodeRatio" : 0.000,
"coordinate" : "1480,200|1480,200",
"formCustom" : "N",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4",
"nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
@ -165,7 +168,7 @@
"nodeRatio" : 0.000,
"coordinate" : "1480,400|1480,400",
"formCustom" : "N",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
@ -193,7 +196,7 @@
"nodeRatio" : 0.000,
"coordinate" : "1820,300|1820,300",
"formCustom" : "N",
"ext" : "[{\"code\":\"enum:org.dromara.workflow.common.enums.ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList" : [ {
"nowNodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828",
"nextNodeCode" : "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
@ -209,4 +212,4 @@
"formCustom" : "N",
"ext" : "[]"
} ]
}
}