11 Commits

Author SHA1 Message Date
疯狂的狮子Li
6036f8750b add 增加 同步租户参数配置功能 2025-09-26 11:57:24 +08:00
疯狂的狮子Li
dbcd8f58eb fix 修复 mybatis内报token异常无法正常返回前端信息 2025-09-26 11:19:59 +08:00
疯狂的狮子Li
8905e232e5 fix 修复 mybatis内报token异常无法正常返回前端信息 2025-09-26 11:19:48 +08:00
疯狂的狮子Li
4f15158486 update 优化 satoken 异常信息 强制返回json格式 2025-09-26 09:54:43 +08:00
AprilWind
d2413abd5c update 优化工作流常量使用 2025-09-26 09:41:54 +08:00
友杰
f7ffadeaff !771 bug-修改遗漏的常量替换
* bug-修改遗漏的常量替换
2025-09-26 01:30:47 +00:00
AprilWind
f9eec856e7 !769 update 添加 JSON 格式校验注解及实现
* update 添加 JSON 格式校验注解及实现
2025-09-25 10:50:34 +00:00
疯狂的狮子Li
62562650fe update 更新流程案例json文件 2025-09-25 11:57:55 +08:00
疯狂的狮子Li
df171097c3 update 优化 后端发起流程增加扩展表对象 2025-09-24 16:52:46 +08:00
AprilWind
1977aabc9a update 忽略压缩后的日志文件 *.log.gz 2025-09-23 10:20:51 +08:00
AprilWind
483c4e6d0a update 隐藏 nginx 版本号以增强安全性 2025-09-23 09:25:42 +08:00
24 changed files with 1582 additions and 731 deletions

1
.gitignore vendored
View File

@@ -38,6 +38,7 @@ nbdist/
###################################################################### ######################################################################
# Others # Others
*.log *.log
*.log.gz
*.xml.versionsBackup *.xml.versionsBackup
*.swp *.swp

View File

@@ -0,0 +1,45 @@
package org.dromara.common.core.domain.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程实例业务扩展对象
*
* @author may
* @date 2025-08-05
*/
@Data
public class FlowInstanceBizExtDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 流程实例ID
*/
private Long instanceId;
/**
* 业务ID
*/
private String businessId;
/**
* 业务编码
*/
private String businessCode;
/**
* 业务标题
*/
private String businessTitle;
}

View File

@@ -1,6 +1,7 @@
package org.dromara.common.core.domain.dto; package org.dromara.common.core.domain.dto;
import cn.hutool.core.util.ObjectUtil;
import lombok.Data; import lombok.Data;
import java.io.Serial; import java.io.Serial;
@@ -40,6 +41,11 @@ public class StartProcessDTO implements Serializable {
*/ */
private Map<String, Object> variables; private Map<String, Object> variables;
/**
* 流程业务扩展信息
*/
private FlowInstanceBizExtDTO bizExt;
public Map<String, Object> getVariables() { public Map<String, Object> getVariables() {
if (variables == null) { if (variables == null) {
return new HashMap<>(16); return new HashMap<>(16);
@@ -47,4 +53,11 @@ public class StartProcessDTO implements Serializable {
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue())); variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
return variables; return variables;
} }
public FlowInstanceBizExtDTO getBizExt() {
if (ObjectUtil.isNull(bizExt)) {
bizExt = new FlowInstanceBizExtDTO();
}
return bizExt;
}
} }

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.MismatchedInputException; import com.fasterxml.jackson.databind.exc.MismatchedInputException;
import lombok.AccessLevel; import lombok.AccessLevel;
@@ -167,4 +168,58 @@ public class JsonUtils {
} }
} }
/**
* 判断字符串是否为合法 JSON对象或数组
*
* @param str 待校验字符串
* @return true = 合法 JSONfalse = 非法或空
*/
public static boolean isJson(String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
OBJECT_MAPPER.readTree(str);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 判断字符串是否为 JSON 对象({}
*
* @param str 待校验字符串
* @return true = JSON 对象
*/
public static boolean isJsonObject(String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
JsonNode node = OBJECT_MAPPER.readTree(str);
return node.isObject();
} catch (Exception e) {
return false;
}
}
/**
* 判断字符串是否为 JSON 数组([]
*
* @param str 待校验字符串
* @return true = JSON 数组
*/
public static boolean isJsonArray(String str) {
if (StringUtils.isBlank(str)) {
return false;
}
try {
JsonNode node = OBJECT_MAPPER.readTree(str);
return node.isArray();
} catch (Exception e) {
return false;
}
}
} }

View File

@@ -0,0 +1,33 @@
package org.dromara.common.json.validate;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
/**
* JSON 格式校验注解
*
* @author AprilWind
*/
@Documented
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = JsonPatternValidator.class)
public @interface JsonPattern {
/**
* 限制 JSON 类型,默认为 {@link JsonType#ANY},即对象或数组都允许
*/
JsonType type() default JsonType.ANY;
/**
* 校验失败时的提示消息
*/
String message() default "不是有效的 JSON 格式";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@@ -0,0 +1,51 @@
package org.dromara.common.json.validate;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
/**
* JSON 格式校验器
*
* @author AprilWind
*/
public class JsonPatternValidator implements ConstraintValidator<JsonPattern, String> {
/**
* 注解中指定的 JSON 类型枚举
*/
private JsonType jsonType;
/**
* 初始化校验器,从注解中提取 JSON 类型
*
* @param annotation 注解实例
*/
@Override
public void initialize(JsonPattern annotation) {
this.jsonType = annotation.type();
}
/**
* 校验字符串是否为合法 JSON
*
* @param value 待校验字符串
* @param context 校验上下文,可用于自定义错误信息
* @return true = 合法 JSON 或为空false = 非法 JSON
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (StringUtils.isBlank(value)) {
// 交给 @NotBlank 或 @NotNull 控制是否允许为空
return true;
}
// 根据 JSON 类型进行不同的校验
return switch (jsonType) {
case ANY -> JsonUtils.isJson(value);
case OBJECT -> JsonUtils.isJsonObject(value);
case ARRAY -> JsonUtils.isJsonArray(value);
};
}
}

View File

@@ -0,0 +1,30 @@
package org.dromara.common.json.validate;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* JSON 类型枚举
*
* @author AprilWind
*/
@Getter
@AllArgsConstructor
public enum JsonType {
/**
* JSON 对象,例如 {"a":1}
*/
OBJECT,
/**
* JSON 数组,例如 [1,2,3]
*/
ARRAY,
/**
* 任意 JSON 类型,对象或数组都可以
*/
ANY
}

View File

@@ -40,6 +40,10 @@ public class MybatisExceptionHandler {
log.error("请求地址'{}', 未找到数据源", requestURI); log.error("请求地址'{}', 未找到数据源", requestURI);
return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认"); return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认");
} }
if (StringUtils.contains(message, "NotLoginException")) {
log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage());
return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源");
}
log.error("请求地址'{}', Mybatis系统异常", requestURI, e); log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, message); return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, message);
} }

View File

@@ -7,7 +7,9 @@ import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult; import cn.dev33.satoken.util.SaResult;
import cn.dev33.satoken.util.SaTokenConsts;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.constant.HttpStatus;
@@ -55,6 +57,8 @@ public class SecurityConfig implements WebMvcConfigurer {
// 对未排除的路径进行检查 // 对未排除的路径进行检查
.check(() -> { .check(() -> {
HttpServletRequest request = ServletUtils.getRequest(); HttpServletRequest request = ServletUtils.getRequest();
HttpServletResponse response = ServletUtils.getResponse();
response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
// 检查是否登录 是否有token // 检查是否登录 是否有token
StpUtil.checkLogin(); StpUtil.checkLogin();
@@ -94,7 +98,11 @@ public class SecurityConfig implements WebMvcConfigurer {
.setAuth(obj -> { .setAuth(obj -> {
SaHttpBasicUtil.check(username + ":" + password); SaHttpBasicUtil.check(username + ":" + password);
}) })
.setError(e -> SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED)); .setError(e -> {
HttpServletResponse response = ServletUtils.getResponse();
response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
return SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED);
});
} }
} }

View File

@@ -193,4 +193,19 @@ public class SysTenantController extends BaseController {
return R.ok("同步租户字典成功"); return R.ok("同步租户字典成功");
} }
/**
* 同步租户参数配置
*/
@SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY)
@Log(title = "租户管理", businessType = BusinessType.INSERT)
@Lock4j
@GetMapping("/syncTenantConfig")
public R<Void> syncTenantConfig() {
if (!TenantHelper.isEnable()) {
return R.fail("当前未开启租户模式");
}
tenantService.syncTenantConfig();
return R.ok("同步租户参数配置成功");
}
} }

View File

@@ -9,6 +9,8 @@ import jakarta.validation.constraints.Size;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.core.constant.RegexConstants; import org.dromara.common.core.constant.RegexConstants;
import org.dromara.common.json.validate.JsonPattern;
import org.dromara.common.json.validate.JsonType;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.system.domain.SysMenu; import org.dromara.system.domain.SysMenu;
@@ -61,6 +63,7 @@ public class SysMenuBo extends BaseEntity {
/** /**
* 路由参数 * 路由参数
*/ */
@JsonPattern(type = JsonType.OBJECT, message = "路由参数必须符合JSON格式")
private String queryParam; private String queryParam;
/** /**

View File

@@ -1,9 +1,9 @@
package org.dromara.system.service; package org.dromara.system.service;
import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -84,4 +84,9 @@ public interface ISysTenantService {
* 同步租户字典 * 同步租户字典
*/ */
void syncTenantDict(); void syncTenantDict();
/**
* 同步租户参数配置
*/
void syncTenantConfig();
} }

View File

@@ -508,4 +508,60 @@ public class SysTenantServiceImpl implements ISysTenantService {
} }
} }
/**
* 同步租户参数配置
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void syncTenantConfig() {
// 查询超管 所有参数配置
List<SysConfig> configList = TenantHelper.ignore(() -> configMapper.selectList());
// 所有租户参数配置
Map<String, List<SysConfig>> configMap = StreamUtils.groupByKey(configList, TenantEntity::getTenantId);
// 默认租户字典类型列表
List<SysConfig> defaultConfigList = configMap.get(TenantConstants.DEFAULT_TENANT_ID);
// 获取所有租户编号
List<String> tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId)
.eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {
return Convert.toStr(x);
});
// 待入库的字典类型和字典数据
List<SysConfig> saveConfigList = new ArrayList<>();
// 待同步的租户编号(用于清除对于租户的字典缓存)
Set<String> syncTenantIds = new HashSet<>();
// 循环所有租户,处理需要同步的数据
for (String tenantId : tenantIds) {
// 排除默认租户
if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
continue;
}
// 根据默认租户的字典类型进行数据同步
for (SysConfig config : defaultConfigList) {
// 获取当前租户的字典类型列表
List<String> typeList = StreamUtils.toList(configMap.get(tenantId), SysConfig::getConfigKey);
if (!typeList.contains(config.getConfigKey())) {
SysConfig type = BeanUtil.toBean(config, SysConfig.class);
type.setConfigId(null);
type.setTenantId(tenantId);
type.setCreateTime(null);
type.setUpdateTime(null);
syncTenantIds.add(tenantId);
saveConfigList.add(type);
}
}
}
TenantHelper.ignore(() -> {
if (CollUtil.isNotEmpty(saveConfigList)) {
configMapper.insertBatch(saveConfigList);
}
});
for (String tenantId : syncTenantIds) {
TenantHelper.dynamic(tenantId, () -> CacheUtils.clear(CacheNames.SYS_CONFIG));
}
}
} }

View File

@@ -30,7 +30,7 @@ public enum ButtonPermissionEnum implements NodeExtEnum {
/** /**
* 是否能抄送 * 是否能抄送
*/ */
COPY("是否能抄送", "copy", false), COPY("是否能抄送", "copy", true),
/** /**
* 是否显示退回 * 是否显示退回

View File

@@ -485,9 +485,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Map<String, Object> variable = new HashMap<>(); Map<String, Object> variable = new HashMap<>();
// 消息类型 // 消息类型
variable.put("messageType", messageType); variable.put(FlowConstant.MESSAGE_TYPE, messageType);
// 消息通知 // 消息通知
variable.put("notice", notice); variable.put(FlowConstant.MESSAGE_NOTICE, notice);
FlowParams flowParams = FlowParams.build() FlowParams flowParams = FlowParams.build()
.nodeCode(bo.getNodeCode()) .nodeCode(bo.getNodeCode())
@@ -731,7 +731,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Long taskId = bo.getTaskId(); Long taskId = bo.getTaskId();
Task task = taskService.getById(taskId); Task task = taskService.getById(taskId);
FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId()); FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
if ("addSignature".equals(taskOperation) || "reductionSignature".equals(taskOperation)) { if (ADD_SIGNATURE.equals(taskOperation) || REDUCTION_SIGNATURE.equals(taskOperation)) {
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) { if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
throw new ServiceException(task.getNodeName() + "不是会签节点!"); throw new ServiceException(task.getNodeName() + "不是会签节点!");
} }

View File

@@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.TestLeave; import org.dromara.workflow.domain.TestLeave;
import org.dromara.workflow.domain.bo.TestLeaveBo; import org.dromara.workflow.domain.bo.TestLeaveBo;
import org.dromara.workflow.domain.vo.TestLeaveVo; import org.dromara.workflow.domain.vo.TestLeaveVo;
@@ -193,8 +194,8 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
String message = Convert.toStr(params.get("message")); String message = Convert.toStr(params.get("message"));
} }
if (processEvent.getSubmit()) { if (processEvent.getSubmit()) {
if(StringUtils.isBlank(testLeave.getApplyCode())){ if (StringUtils.isBlank(testLeave.getApplyCode())) {
String businessCode = MapUtil.getStr(params, "businessCode",StrUtil.EMPTY); String businessCode = MapUtil.getStr(params, FlowConstant.BUSINESS_CODE, StrUtil.EMPTY);
testLeave.setApplyCode(businessCode); testLeave.setApplyCode(businessCode);
} }
testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());

View File

@@ -12,6 +12,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.MessageTypeEnum;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import org.dromara.workflow.domain.bo.CompleteTaskBo; import org.dromara.workflow.domain.bo.CompleteTaskBo;
import org.dromara.workflow.domain.bo.StartProcessBo; import org.dromara.workflow.domain.bo.StartProcessBo;
import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwDefinitionService;
@@ -166,6 +167,7 @@ public class WorkflowServiceImpl implements WorkflowService {
processBo.setFlowCode(startProcess.getFlowCode()); processBo.setFlowCode(startProcess.getFlowCode());
processBo.setVariables(startProcess.getVariables()); processBo.setVariables(startProcess.getVariables());
processBo.setHandler(startProcess.getHandler()); processBo.setHandler(startProcess.getHandler());
processBo.setBizExt(BeanUtil.toBean(startProcess.getBizExt(), FlowInstanceBizExt.class));
StartProcessReturnDTO result = flwTaskService.startWorkFlow(processBo); StartProcessReturnDTO result = flwTaskService.startWorkFlow(processBo);
CompleteTaskBo taskBo = new CompleteTaskBo(); CompleteTaskBo taskBo = new CompleteTaskBo();

View File

@@ -16,6 +16,8 @@ http {
client_max_body_size 100m; client_max_body_size 100m;
# 开启静态资源压缩 # 开启静态资源压缩
gzip_static on; gzip_static on;
# 隐藏 nginx 版本号,防止暴露版本信息
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" ' '$status $body_bytes_sent "$http_referer" '

View File

@@ -1,75 +1,129 @@
{ {
"flowCode" : "leave1", "nodeList": [
"flowName" : "请假申请-普通", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "d5ee3ddf-3968-4379-a86f-9ceabde5faac", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "200,200|200,200", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "200,200|200,200",
"skipList" : [ { "version": "1",
"nowNodeCode" : "d5ee3ddf-3968-4379-a86f-9ceabde5faac", "skipList": [
"nextNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "220,200;310,200" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
"nodeType" : 1, "nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
"nodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42", "coordinate": "220,200;310,200"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "360,200|360,200", },
"formCustom" : "N", {
"ext" : "[]", "nodeType": "1",
"skipList" : [ { "nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
"nowNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42", "nodeName": "申请人",
"nextNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "410,200;490,200" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 1, "formCustom": "N",
"nodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf", "formPath": null,
"nodeName" : "组长", "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,copy\"}]",
"permissionFlag" : "role:1", "coordinate": "360,200|360,200",
"nodeRatio" : 0.000, "version": "1",
"coordinate" : "540,200|540,200", "skipList": [
"formCustom" : "N", {
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "skipType": "PASS",
"skipList" : [ { "skipCondition": null,
"nowNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf", "skipName": null,
"nextNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe", "nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
"skipType" : "PASS", "nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
"coordinate" : "590,200;670,200" "coordinate": "410,200;490,200"
} ] }
}, { ]
"nodeType" : 1, },
"nodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe", {
"nodeName" : "部门主管", "nodeType": "1",
"permissionFlag" : "role:3@@role:4", "nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
"nodeRatio" : 0.000, "nodeName": "组长",
"coordinate" : "720,200|720,200", "permissionFlag": "role:1",
"formCustom" : "N", "nodeRatio": "0.000",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "anyNodeSkip": null,
"skipList" : [ { "listenerType": "",
"nowNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe", "listenerPath": "",
"nextNodeCode" : "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", "formCustom": "N",
"skipType" : "PASS", "formPath": null,
"coordinate" : "770,200;880,200" "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
} ] "coordinate": "540,200|540,200",
}, { "version": "1",
"nodeType" : 2, "skipList": [
"nodeCode" : "8b82b7d7-8660-455e-b880-d6d22ea3eb6d", {
"nodeName" : "结束", "skipType": "PASS",
"nodeRatio" : 0.000, "skipCondition": null,
"coordinate" : "900,200|900,200", "skipName": null,
"formCustom" : "N", "nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
"ext" : "[]" "nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
} ] "coordinate": "590,200;670,200"
}
]
},
{
"nodeType": "1",
"nodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"nodeName": "部门主管",
"permissionFlag": "role:3@@role:4",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
"coordinate": "720,200|720,200",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"nextNodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
"coordinate": "770,200;880,200"
}
]
},
{
"nodeType": "2",
"nodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "900,200|900,200",
"version": "1",
"skipList": []
}
],
"flowCode": "leave1",
"flowName": "请假申请-普通",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }

View File

@@ -1,111 +1,187 @@
{ {
"flowCode" : "leave2", "nodeList": [
"flowName" : "请假申请-排他网关", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "300,240|300,240", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "300,240|300,240",
"skipList" : [ { "version": "1",
"nowNodeCode" : "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a", "skipList": [
"nextNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "320,240;390,240" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
"nodeType" : 1, "nextNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
"nodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd", "coordinate": "320,240;390,240"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "440,240|440,240", },
"formCustom" : "N", {
"ext" : "[]", "nodeType": "1",
"skipList" : [ { "nodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
"nowNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd", "nodeName": "申请人",
"nextNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "490,240;535,240" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 3, "formCustom": "N",
"nodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "formPath": null,
"nodeRatio" : 0.000, "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
"coordinate" : "560,240", "coordinate": "440,240|440,240",
"formCustom" : "N", "version": "1",
"ext" : "[]", "skipList": [
"skipList" : [ { {
"nowNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "skipType": "PASS",
"nextNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86", "skipCondition": null,
"skipType" : "PASS", "skipName": null,
"skipCondition" : "le@@leaveDays|2", "nowNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
"coordinate" : "560,265;560,320;670,320" "nextNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
}, { "coordinate": "490,240;535,240"
"nowNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", }
"nextNodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605", ]
"skipName" : "大于两天", },
"skipType" : "PASS", {
"skipCondition" : "gt@@leaveDays|2", "nodeType": "3",
"coordinate" : "560,215;560,160;670,160|560,187" "nodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
} ] "permissionFlag": null,
}, { "nodeRatio": "0.000",
"nodeType" : 1, "anyNodeSkip": null,
"nodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86", "listenerType": null,
"nodeName" : "组长", "listenerPath": null,
"permissionFlag" : "3@@4", "formCustom": "N",
"nodeRatio" : 0.000, "formPath": null,
"coordinate" : "720,320|720,320", "ext": "[]",
"formCustom" : "N", "coordinate": "560,240",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "version": "1",
"skipList" : [ { "skipList": [
"nowNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86", {
"nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869", "skipType": "PASS",
"skipType" : "PASS", "skipCondition": "le@@leaveDays|2",
"coordinate" : "770,320;860,320;860,280" "skipName": null,
} ] "nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
}, { "nextNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"nodeType" : 1, "coordinate": "560,265;560,320;670,320"
"nodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869", },
"nodeName" : "总经理", {
"permissionFlag" : "role:1", "skipType": "PASS",
"nodeRatio" : 0.000, "skipCondition": "gt@@leaveDays|2",
"coordinate" : "860,240|860,240", "skipName": "大于两天",
"formCustom" : "N", "nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"ext" : "[]", "nextNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
"skipList" : [ { "coordinate": "560,215;560,160;670,160|560,187"
"nowNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869", }
"nextNodeCode" : "40aa65fd-0712-4d23-b6f7-d0432b920fd1", ]
"skipType" : "PASS", },
"coordinate" : "910,240;980,240" {
} ] "nodeType": "1",
}, { "nodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"nodeType" : 2, "nodeName": "组长",
"nodeCode" : "40aa65fd-0712-4d23-b6f7-d0432b920fd1", "permissionFlag": "3@@4",
"nodeName" : "结束", "nodeRatio": "0.000",
"nodeRatio" : 0.000, "anyNodeSkip": null,
"coordinate" : "1000,240|1000,240", "listenerType": "",
"formCustom" : "N", "listenerPath": "",
"ext" : "[]" "formCustom": "N",
}, { "formPath": null,
"nodeType" : 1, "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"nodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605", "coordinate": "720,320|720,320",
"nodeName" : "部门领导", "version": "1",
"permissionFlag" : "role:1", "skipList": [
"nodeRatio" : 0.000, {
"coordinate" : "720,160|720,160", "skipType": "PASS",
"formCustom" : "N", "skipCondition": null,
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "skipName": null,
"skipList" : [ { "nowNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"nowNodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605", "nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869", "coordinate": "770,320;860,320;860,280"
"skipType" : "PASS", }
"coordinate" : "770,160;860,160;860,200" ]
} ] },
} ] {
"nodeType": "1",
"nodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"nodeName": "总经理",
"permissionFlag": "role:1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "860,240|860,240",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"nextNodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
"coordinate": "910,240;980,240"
}
]
},
{
"nodeType": "2",
"nodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1000,240|1000,240",
"version": "1",
"skipList": []
},
{
"nodeType": "1",
"nodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
"nodeName": "部门领导",
"permissionFlag": "role:1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "720,160|720,160",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"nextNodeType": "1",
"coordinate": "770,160;860,160;860,200"
}
]
}
],
"flowCode": "leave2",
"flowName": "请假申请-排他网关",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }

View File

@@ -1,121 +1,211 @@
{ {
"flowCode" : "leave3", "nodeList": [
"flowName" : "请假申请-并行网关", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "a80ecf9f-f465-4ae5-a429-e30ec5d0f957", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "380,220|380,220", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "380,220|380,220",
"skipList" : [ { "version": "1",
"nowNodeCode" : "a80ecf9f-f465-4ae5-a429-e30ec5d0f957", "skipList": [
"nextNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "400,220;470,220" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
"nodeType" : 1, "nextNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
"nodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99", "coordinate": "400,220;470,220"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "520,220|520,220", },
"formCustom" : "N", {
"ext" : "[]", "nodeType": "1",
"skipList" : [ { "nodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
"nowNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99", "nodeName": "申请人",
"nextNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "570,220;655,220" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 4, "formCustom": "N",
"nodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "formPath": null,
"nodeRatio" : 0.000, "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
"coordinate" : "680,220", "coordinate": "520,220|520,220",
"formCustom" : "N", "version": "1",
"ext" : "[]", "skipList": [
"skipList" : [ { {
"nowNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "skipType": "PASS",
"nextNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe", "skipCondition": null,
"skipType" : "PASS", "skipName": null,
"coordinate" : "680,195;680,140;750,140" "nowNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
}, { "nextNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nowNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "coordinate": "570,220;655,220"
"nextNodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394", }
"skipType" : "PASS", ]
"coordinate" : "680,245;680,300;750,300" },
} ] {
}, { "nodeType": "4",
"nodeType" : 1, "nodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe", "permissionFlag": null,
"nodeName" : "市场部", "nodeRatio": "0.000",
"permissionFlag" : "role:1", "anyNodeSkip": null,
"nodeRatio" : 0.000, "listenerType": null,
"coordinate" : "800,140|800,140", "listenerPath": null,
"formCustom" : "N", "formCustom": "N",
"ext" : "[]", "formPath": null,
"skipList" : [ { "ext": "[]",
"nowNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe", "coordinate": "680,220",
"nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", "version": "1",
"skipType" : "PASS", "skipList": [
"coordinate" : "850,140;920,140;920,195" {
} ] "skipType": "PASS",
}, { "skipCondition": null,
"nodeType" : 4, "skipName": null,
"nodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", "nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nodeRatio" : 0.000, "nextNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"coordinate" : "920,220", "coordinate": "680,195;680,140;750,140"
"formCustom" : "N", },
"ext" : "[]", {
"skipList" : [ { "skipType": "PASS",
"nowNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", "skipCondition": null,
"nextNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6", "skipName": null,
"skipType" : "PASS", "nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"coordinate" : "945,220;975,220;975,220;960,220;960,220;990,220" "nextNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
} ] "coordinate": "680,245;680,300;750,300"
}, { }
"nodeType" : 1, ]
"nodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6", },
"nodeName" : "CEO", {
"permissionFlag" : "1", "nodeType": "1",
"nodeRatio" : 0.000, "nodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"coordinate" : "1040,220|1040,220", "nodeName": "市场部",
"formCustom" : "N", "permissionFlag": "role:1",
"ext" : "[]", "nodeRatio": "0.000",
"skipList" : [ { "anyNodeSkip": null,
"nowNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6", "listenerType": "",
"nextNodeCode" : "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1", "listenerPath": "",
"skipType" : "PASS", "formCustom": "N",
"coordinate" : "1090,220;1140,220" "formPath": null,
} ] "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
}, { "coordinate": "800,140|800,140",
"nodeType" : 2, "version": "1",
"nodeCode" : "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1", "skipList": [
"nodeName" : "结束", {
"nodeRatio" : 0.000, "skipType": "PASS",
"coordinate" : "1160,220|1160,220", "skipCondition": null,
"formCustom" : "N", "skipName": null,
"ext" : "[]" "nowNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
}, { "nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nodeType" : 1, "coordinate": "850,140;920,140;920,195"
"nodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394", }
"nodeName" : "综合部", ]
"permissionFlag" : "role:3@@role:4", },
"nodeRatio" : 0.000, {
"coordinate" : "800,300|800,300", "nodeType": "4",
"formCustom" : "N", "nodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"ext" : "[]", "permissionFlag": null,
"skipList" : [ { "nodeRatio": "0.000",
"nowNodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394", "anyNodeSkip": null,
"nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", "listenerType": null,
"skipType" : "PASS", "listenerPath": null,
"coordinate" : "850,300;920,300;920,245" "formCustom": "N",
} ] "formPath": null,
} ] "ext": "[]",
"coordinate": "920,220",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nextNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
"coordinate": "945,220;975,220;975,220;960,220;960,220;990,220"
}
]
},
{
"nodeType": "1",
"nodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
"nodeName": "CEO",
"permissionFlag": "1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "1040,220|1040,220",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
"nextNodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
"coordinate": "1090,220;1140,220"
}
]
},
{
"nodeType": "2",
"nodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1160,220|1160,220",
"version": "1",
"skipList": []
},
{
"nodeType": "1",
"nodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
"nodeName": "综合部",
"permissionFlag": "role:3@@role:4",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "800,300|800,300",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nextNodeType": "4",
"coordinate": "850,300;920,300;920,245"
}
]
}
],
"flowCode": "leave3",
"flowName": "请假申请-并行网关",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }

View File

@@ -1,90 +1,154 @@
{ {
"flowCode" : "leave4", "nodeList": [
"flowName" : "请假申请-会签", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "9ce8bf00-f25b-4fc6-91b8-827082fc4876", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "320,240|320,240", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "320,240|320,240",
"skipList" : [ { "version": "1",
"nowNodeCode" : "9ce8bf00-f25b-4fc6-91b8-827082fc4876", "skipList": [
"nextNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "340,240;410,240" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
"nodeType" : 1, "nextNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"nodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f", "coordinate": "340,240;410,240"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "460,240|460,240", },
"formCustom" : "N", {
"ext" : "[]", "nodeType": "1",
"skipList" : [ { "nodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"nowNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f", "nodeName": "申请人",
"nextNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "510,240;590,240" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 1, "formCustom": "N",
"nodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045", "formPath": null,
"nodeName" : "百分之60通过", "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
"permissionFlag" : "${userList}", "coordinate": "460,240|460,240",
"nodeRatio" : 60.000, "version": "1",
"coordinate" : "640,240|640,240", "skipList": [
"formCustom" : "N", {
"ext" : "[]", "skipType": "PASS",
"skipList" : [ { "skipCondition": null,
"nowNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045", "skipName": null,
"nextNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1", "nowNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"skipType" : "PASS", "nextNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"coordinate" : "690,240;770,240" "coordinate": "510,240;590,240"
} ] }
}, { ]
"nodeType" : 1, },
"nodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1", {
"nodeName" : "全部审批通过", "nodeType": "1",
"permissionFlag" : "role:1@@role:3", "nodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"nodeRatio" : 100.000, "nodeName": "百分之60通过",
"coordinate" : "820,240|820,240", "permissionFlag": "${userList}",
"formCustom" : "N", "nodeRatio": "60.000",
"ext" : "[]", "anyNodeSkip": null,
"skipList" : [ { "listenerType": "",
"nowNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1", "listenerPath": "",
"nextNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f", "formCustom": "N",
"skipType" : "PASS", "formPath": null,
"coordinate" : "870,240;950,240" "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
} ] "coordinate": "640,240|640,240",
}, { "version": "1",
"nodeType" : 1, "skipList": [
"nodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f", {
"nodeName" : "CEO", "skipType": "PASS",
"permissionFlag" : "1", "skipCondition": null,
"nodeRatio" : 0.000, "skipName": null,
"coordinate" : "1000,240|1000,240", "nowNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"formCustom" : "N", "nextNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"ext" : "[]", "coordinate": "690,240;770,240"
"skipList" : [ { }
"nowNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f", ]
"nextNodeCode" : "b62b88c3-8d8d-4969-911e-2aaea219e7fc", },
"skipType" : "PASS", {
"coordinate" : "1050,240;1080,240;1080,240;1070,240;1070,240;1100,240" "nodeType": "1",
} ] "nodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
}, { "nodeName": "全部审批通过",
"nodeType" : 2, "permissionFlag": "role:1@@role:3",
"nodeCode" : "b62b88c3-8d8d-4969-911e-2aaea219e7fc", "nodeRatio": "100.000",
"nodeName" : "结束", "anyNodeSkip": null,
"nodeRatio" : 0.000, "listenerType": "",
"coordinate" : "1120,240|1120,240", "listenerPath": "",
"formCustom" : "N", "formCustom": "N",
"ext" : "[]" "formPath": null,
} ] "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
"coordinate": "820,240|820,240",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"nextNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"coordinate": "870,240;950,240"
}
]
},
{
"nodeType": "1",
"nodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"nodeName": "CEO",
"permissionFlag": "1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "1000,240|1000,240",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"nextNodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
"coordinate": "1050,240;1080,240;1080,240;1070,240;1070,240;1100,240"
}
]
},
{
"nodeType": "2",
"nodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1120,240|1120,240",
"version": "1",
"skipList": []
}
],
"flowCode": "leave4",
"flowName": "请假申请-会签",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }

View File

@@ -1,121 +1,211 @@
{ {
"flowCode" : "leave5", "nodeList": [
"flowName" : "请假申请-并行会签网关", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "ebebaf26-9cb6-497e-8119-4c9fed4c597c", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "300,220|300,220", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "300,220|300,220",
"skipList" : [ { "version": "1",
"nowNodeCode" : "ebebaf26-9cb6-497e-8119-4c9fed4c597c", "skipList": [
"nextNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "320,220;350,220;350,220;340,220;340,220;370,220" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
"nodeType" : 1, "nextNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
"nodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374", "coordinate": "320,220;350,220;350,220;340,220;340,220;370,220"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "420,220|420,220", },
"formCustom" : "N", {
"ext" : "[]", "nodeType": "1",
"skipList" : [ { "nodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
"nowNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374", "nodeName": "申请人",
"nextNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "470,220;535,220" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 4, "formCustom": "N",
"nodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "formPath": null,
"nodeRatio" : 0.000, "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
"coordinate" : "560,220", "coordinate": "420,220|420,220",
"formCustom" : "N", "version": "1",
"ext" : "[]", "skipList": [
"skipList" : [ { {
"nowNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "skipType": "PASS",
"nextNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "skipCondition": null,
"skipType" : "PASS", "skipName": null,
"coordinate" : "560,245;560,320;650,320" "nowNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
}, { "nextNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nowNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "coordinate": "470,220;535,220"
"nextNodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4", }
"skipType" : "PASS", ]
"coordinate" : "560,195;560,120;650,120" },
} ] {
}, { "nodeType": "4",
"nodeType" : 1, "nodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "permissionFlag": null,
"nodeName" : "会签", "nodeRatio": "0.000",
"permissionFlag" : "role:1@@role:3", "anyNodeSkip": null,
"nodeRatio" : 100.000, "listenerType": null,
"coordinate" : "700,320|700,320", "listenerPath": null,
"formCustom" : "N", "formCustom": "N",
"ext" : "[]", "formPath": null,
"skipList" : [ { "ext": "[]",
"nowNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "coordinate": "560,220",
"nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b", "version": "1",
"skipType" : "PASS", "skipList": [
"coordinate" : "750,320;860,320;860,245" {
} ] "skipType": "PASS",
}, { "skipCondition": null,
"nodeType" : 4, "skipName": null,
"nodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b", "nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nodeRatio" : 0.000, "nextNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"coordinate" : "860,220", "coordinate": "560,245;560,320;650,320"
"formCustom" : "N", },
"ext" : "[]", {
"skipList" : [ { "skipType": "PASS",
"nowNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b", "skipCondition": null,
"nextNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9", "skipName": null,
"skipType" : "PASS", "nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"coordinate" : "885,220;950,220" "nextNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
} ] "coordinate": "560,195;560,120;650,120"
}, { }
"nodeType" : 1, ]
"nodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9", },
"nodeName" : "CEO", {
"permissionFlag" : "1", "nodeType": "1",
"nodeRatio" : 0.000, "nodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"coordinate" : "1000,220|1000,220", "nodeName": "会签",
"formCustom" : "N", "permissionFlag": "role:1@@role:3",
"ext" : "[]", "nodeRatio": "100.000",
"skipList" : [ { "anyNodeSkip": null,
"nowNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9", "listenerType": "",
"nextNodeCode" : "03c4d2bc-58b5-4408-a2e4-65afb046f169", "listenerPath": "",
"skipType" : "PASS", "formCustom": "N",
"coordinate" : "1050,220;1120,220" "formPath": null,
} ] "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
}, { "coordinate": "700,320|700,320",
"nodeType" : 2, "version": "1",
"nodeCode" : "03c4d2bc-58b5-4408-a2e4-65afb046f169", "skipList": [
"nodeName" : "结束", {
"nodeRatio" : 0.000, "skipType": "PASS",
"coordinate" : "1140,220|1140,220", "skipCondition": null,
"formCustom" : "N", "skipName": null,
"ext" : "[]" "nowNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
}, { "nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
"nodeType" : 1, "coordinate": "750,320;860,320;860,245"
"nodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4", }
"nodeName" : "百分之60票签", ]
"permissionFlag" : "${userList}", },
"nodeRatio" : 60.000, {
"coordinate" : "700,120|700,120", "nodeType": "4",
"formCustom" : "N", "nodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
"ext" : "[]", "permissionFlag": null,
"skipList" : [ { "nodeRatio": "0.000",
"nowNodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4", "anyNodeSkip": null,
"nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b", "listenerType": null,
"skipType" : "PASS", "listenerPath": null,
"coordinate" : "750,120;860,120;860,195" "formCustom": "N",
} ] "formPath": null,
} ] "ext": "[]",
"coordinate": "860,220",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
"nextNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
"coordinate": "885,220;950,220"
}
]
},
{
"nodeType": "1",
"nodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
"nodeName": "CEO",
"permissionFlag": "1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
"coordinate": "1000,220|1000,220",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
"nextNodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
"coordinate": "1050,220;1120,220"
}
]
},
{
"nodeType": "2",
"nodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1140,220|1140,220",
"version": "1",
"skipList": []
},
{
"nodeType": "1",
"nodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
"nodeName": "百分之60票签",
"permissionFlag": "${userList}",
"nodeRatio": "60.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
"coordinate": "700,120|700,120",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
"nextNodeType": "4",
"coordinate": "750,120;860,120;860,195"
}
]
}
],
"flowCode": "leave5",
"flowName": "请假申请-并行会签网关",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }

View File

@@ -1,215 +1,368 @@
{ {
"flowCode" : "leave6", "nodeList": [
"flowName" : "请假申请-排他并行会签", {
"category" : "100", "nodeType": "0",
"version" : "1", "nodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
"formCustom" : "N", "nodeName": "开始",
"formPath" : "/workflow/leaveEdit/index", "permissionFlag": null,
"nodeList" : [ { "nodeRatio": "0.000",
"nodeType" : 0, "anyNodeSkip": null,
"nodeCode" : "122b89a5-7c6f-40a3-aa09-7a263f902054", "listenerType": null,
"nodeName" : "开始", "listenerPath": null,
"nodeRatio" : 0.000, "formCustom": "N",
"coordinate" : "240,300|240,300", "formPath": null,
"formCustom" : "N", "ext": "[]",
"ext" : "[]", "coordinate": "240,300|240,300",
"skipList" : [ { "version": "1",
"nowNodeCode" : "122b89a5-7c6f-40a3-aa09-7a263f902054", "skipList": [
"nextNodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd", {
"skipType" : "PASS", "skipType": "PASS",
"coordinate" : "260,300;350,300" "skipCondition": null,
} ] "skipName": null,
}, { "nowNodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
"nodeType" : 1, "nextNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"nodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd", "coordinate": "260,300;350,300"
"nodeName" : "申请人", }
"nodeRatio" : 0.000, ]
"coordinate" : "400,300|400,300", },
"formCustom" : "N", {
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "nodeType": "1",
"skipList" : [ { "nodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"nowNodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd", "nodeName": "申请人",
"nextNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742", "permissionFlag": "",
"skipType" : "PASS", "nodeRatio": "0.000",
"coordinate" : "450,300;510,300" "anyNodeSkip": null,
} ] "listenerType": "",
}, { "listenerPath": "",
"nodeType" : 1, "formCustom": "N",
"nodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9", "formPath": null,
"nodeName" : "副经理", "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
"permissionFlag" : "role:1@@role:3@@role:4", "coordinate": "400,300|400,300",
"nodeRatio" : 0.000, "version": "1",
"coordinate" : "860,200|860,200", "skipList": [
"formCustom" : "N", {
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "skipType": "PASS",
"skipList" : [ { "skipCondition": null,
"nowNodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9", "skipName": null,
"nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32", "nowNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"skipType" : "PASS", "nextNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"coordinate" : "910,200;1000,200;1000,275" "coordinate": "450,300;510,300"
} ] }
}, { ]
"nodeType" : 1, },
"nodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", {
"nodeName" : "组长", "nodeType": "1",
"permissionFlag" : "1", "nodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"nodeRatio" : 0.000, "nodeName": "副经理",
"coordinate" : "860,400|860,400", "permissionFlag": "role:1@@role:3@@role:4",
"formCustom" : "N", "nodeRatio": "0.000",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "anyNodeSkip": null,
"skipList" : [ { "listenerType": "",
"nowNodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", "listenerPath": "",
"nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32", "formCustom": "N",
"skipType" : "PASS", "formPath": null,
"coordinate" : "910,400;1000,400;1000,325" "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
} ] "coordinate": "860,200|860,200",
}, { "version": "1",
"nodeType" : 1, "skipList": [
"nodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742", {
"nodeName" : "副组长", "skipType": "PASS",
"permissionFlag" : "1", "skipCondition": null,
"nodeRatio" : 0.000, "skipName": null,
"coordinate" : "560,300|560,300", "nowNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"formCustom" : "N", "nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]", "coordinate": "910,200;1000,200;1000,275"
"skipList" : [ { }
"nowNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742", ]
"nextNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13", },
"skipType" : "PASS", {
"coordinate" : "610,300;675,300" "nodeType": "1",
} ] "nodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
}, { "nodeName": "组长",
"nodeType" : 3, "permissionFlag": "1",
"nodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13", "nodeRatio": "0.000",
"nodeRatio" : 0.000, "anyNodeSkip": null,
"coordinate" : "700,300", "listenerType": "",
"formCustom" : "N", "listenerPath": "",
"ext" : "[]", "formCustom": "N",
"skipList" : [ { "formPath": null,
"nowNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13", "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"nextNodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9", "coordinate": "860,400|860,400",
"skipName" : "大于两天", "version": "1",
"skipType" : "PASS", "skipList": [
"skipCondition" : "default@@${leaveDays > 2}", {
"coordinate" : "700,275;700,200;810,200|700,237" "skipType": "PASS",
}, { "skipCondition": null,
"nowNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13", "skipName": null,
"nextNodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", "nowNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"skipType" : "PASS", "nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"skipCondition" : "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}", "coordinate": "910,400;1000,400;1000,325"
"coordinate" : "700,325;700,400;810,400" }
} ] ]
}, { },
"nodeType" : 3, {
"nodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32", "nodeType": "1",
"nodeRatio" : 0.000, "nodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"coordinate" : "1000,300", "nodeName": "副组长",
"formCustom" : "N", "permissionFlag": "1",
"ext" : "[]", "nodeRatio": "0.000",
"skipList" : [ { "anyNodeSkip": null,
"nowNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32", "listenerType": "",
"nextNodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496", "listenerPath": "",
"skipType" : "PASS", "formCustom": "N",
"coordinate" : "1025,300;1130,300" "formPath": null,
} ] "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]",
}, { "coordinate": "560,300|560,300",
"nodeType" : 1, "version": "1",
"nodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496", "skipList": [
"nodeName" : "经理会签", {
"permissionFlag" : "1@@3", "skipType": "PASS",
"nodeRatio" : 100.000, "skipCondition": null,
"coordinate" : "1180,300|1180,300", "skipName": null,
"formCustom" : "N", "nowNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]", "nextNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
"skipList" : [ { "coordinate": "610,300;675,300"
"nowNodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496", }
"nextNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992", ]
"skipType" : "PASS", },
"coordinate" : "1230,300;1315,300" {
} ] "nodeType": "3",
}, { "nodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
"nodeType" : 4, "permissionFlag": null,
"nodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992", "nodeRatio": "0.000",
"nodeRatio" : 0.000, "anyNodeSkip": null,
"coordinate" : "1340,300", "listenerType": null,
"formCustom" : "N", "listenerPath": null,
"ext" : "[]", "formCustom": "N",
"skipList" : [ { "formPath": null,
"nowNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992", "ext": "[]",
"nextNodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5", "coordinate": "700,300",
"skipType" : "PASS", "version": "1",
"coordinate" : "1340,325;1340,400;1430,400" "skipList": [
}, { {
"nowNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992", "skipType": "PASS",
"nextNodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4", "skipCondition": "default@@${leaveDays > 2}",
"skipType" : "PASS", "skipName": "大于两天",
"coordinate" : "1340,275;1340,200;1430,200" "nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
} ] "nextNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
}, { "nextNodeType": "1",
"nodeType" : 1, "coordinate": "700,275;700,200;810,200|700,237"
"nodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4", },
"nodeName" : "总经理", {
"permissionFlag" : "3@@1", "skipType": "PASS",
"nodeRatio" : 0.000, "skipCondition": "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}",
"coordinate" : "1480,200|1480,200", "skipName": null,
"formCustom" : "N", "nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "nextNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"skipList" : [ { "nextNodeType": "1",
"nowNodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4", "coordinate": "700,325;700,400;810,400"
"nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519", }
"skipType" : "PASS", ]
"coordinate" : "1530,200;1640,200;1640,275" },
} ] {
}, { "nodeType": "3",
"nodeType" : 1, "nodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"nodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5", "permissionFlag": null,
"nodeName" : "副总经理", "nodeRatio": "0.000",
"permissionFlag" : "1@@3", "anyNodeSkip": null,
"nodeRatio" : 0.000, "listenerType": null,
"coordinate" : "1480,400|1480,400", "listenerPath": null,
"formCustom" : "N", "formCustom": "N",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "formPath": null,
"skipList" : [ { "ext": "[]",
"nowNodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5", "coordinate": "1000,300",
"nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519", "version": "1",
"skipType" : "PASS", "skipList": [
"coordinate" : "1530,400;1640,400;1640,325" {
} ] "skipType": "PASS",
}, { "skipCondition": null,
"nodeType" : 4, "skipName": null,
"nodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519", "nowNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"nodeRatio" : 0.000, "nextNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
"coordinate" : "1640,300", "coordinate": "1025,300;1130,300"
"formCustom" : "N", }
"ext" : "[]", ]
"skipList" : [ { },
"nowNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519", {
"nextNodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828", "nodeType": "1",
"skipType" : "PASS", "nodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
"coordinate" : "1665,300;1770,300" "nodeName": "经理会签",
} ] "permissionFlag": "1@@3",
}, { "nodeRatio": "100.000",
"nodeType" : 1, "anyNodeSkip": null,
"nodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828", "listenerType": "",
"nodeName" : "董事", "listenerPath": "",
"permissionFlag" : "1", "formCustom": "N",
"nodeRatio" : 0.000, "formPath": null,
"coordinate" : "1820,300|1820,300", "ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
"formCustom" : "N", "coordinate": "1180,300|1180,300",
"ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "version": "1",
"skipList" : [ { "skipList": [
"nowNodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828", {
"nextNodeCode" : "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31", "skipType": "PASS",
"skipType" : "PASS", "skipCondition": null,
"coordinate" : "1870,300;1960,300" "skipName": null,
} ] "nowNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
}, { "nextNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"nodeType" : 2, "coordinate": "1230,300;1315,300"
"nodeCode" : "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31", }
"nodeName" : "结束", ]
"nodeRatio" : 0.000, },
"coordinate" : "1980,300|1980,300", {
"formCustom" : "N", "nodeType": "4",
"ext" : "[]" "nodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
} ] "permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1340,300",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"nextNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"coordinate": "1340,325;1340,400;1430,400"
},
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"nextNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
"coordinate": "1340,275;1340,200;1430,200"
}
]
},
{
"nodeType": "1",
"nodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
"nodeName": "总经理",
"permissionFlag": "3@@1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"coordinate": "1480,200|1480,200",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
"coordinate": "1530,200;1640,200;1640,275"
}
]
},
{
"nodeType": "1",
"nodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"nodeName": "副总经理",
"permissionFlag": "1@@3",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"coordinate": "1480,400|1480,400",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
"coordinate": "1530,400;1640,400;1640,325"
}
]
},
{
"nodeType": "4",
"nodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1640,300",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
"nextNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
"coordinate": "1665,300;1770,300"
}
]
},
{
"nodeType": "1",
"nodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
"nodeName": "董事",
"permissionFlag": "1",
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": "",
"listenerPath": "",
"formCustom": "N",
"formPath": null,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"coordinate": "1820,300|1820,300",
"version": "1",
"skipList": [
{
"skipType": "PASS",
"skipCondition": null,
"skipName": null,
"nowNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
"nextNodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
"coordinate": "1870,300;1960,300"
}
]
},
{
"nodeType": "2",
"nodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
"nodeName": "结束",
"permissionFlag": null,
"nodeRatio": "0.000",
"anyNodeSkip": null,
"listenerType": null,
"listenerPath": null,
"formCustom": "N",
"formPath": null,
"ext": "[]",
"coordinate": "1980,300|1980,300",
"version": "1",
"skipList": []
}
],
"flowCode": "leave6",
"flowName": "请假申请-排他并行会签",
"modelValue": "CLASSICS",
"category": "103",
"version": "1",
"formCustom": "N",
"formPath": "/workflow/leaveEdit/index",
"listenerType": null,
"listenerPath": null
} }