24 Commits
dev ... v5.5.0

Author SHA1 Message Date
疯狂的狮子Li
b30ffa952f !766 发布 5.5.0 喜迎国庆
Merge pull request !766 from 疯狂的狮子Li/dev
2025-09-22 03:17:27 +00:00
疯狂的狮子Li
fd5d028e95 fix 修复 有某些无聊人士 对一个demo案例提漏洞 CVE-2025-6925
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2025-07-04 01:10:49 +00:00
疯狂的狮子Li
64100cf1ff !712 发布 5.4.1 小步迭代修复问题
Merge pull request !712 from 疯狂的狮子Li/dev
2025-07-01 01:12:39 +00:00
疯狂的狮子Li
7e7d857ba5 Merge remote-tracking branch 'origin/dev' into 5.X 2025-05-29 18:18:20 +08:00
疯狂的狮子Li
d22b2a10df update 优化 PermissionService 无实现类也可以启动服务 2025-05-29 16:28:56 +08:00
疯狂的狮子Li
957a4d1fcd fix 修复 监听器 flowParams 为null报错问题 2025-05-29 16:28:56 +08:00
疯狂的狮子Li
49ef8378fe !691 发布 5.4.0 正式版
Merge pull request !691 from 疯狂的狮子Li/dev
2025-05-29 03:14:59 +00:00
疯狂的狮子Li
57dd6831d3 !664 发布 5.3.1 正式版
Merge pull request !664 from 疯狂的狮子Li/dev
2025-03-27 02:54:00 +00:00
疯狂的狮子Li
8aa60abb1f !663 回退 'Pull Request !662 : 发布 5.3.1 正式版'
* 回退 'Pull Request !662 : 发布 5.3.1 正式版'
2025-03-27 02:53:23 +00:00
疯狂的狮子Li
7a9f51fc7a !662 发布 5.3.1 正式版
* 🐳发布 5.3.1 正式版
* update 优化 删除无用配置
* fix 修复 excel模板导出数据被覆盖的问题
* update 优化 统一用户密码校验长度
* update mybatis-plus 3.5.10.1 => 3.5.11
* fix 修复 跨域未设置请求头问题(cloud版本不需要 vue版本需要)
2025-03-27 02:51:57 +00:00
疯狂的狮子Li
159e30c982 !661 发布 5.3.1-BETA2 公测版本
Merge pull request !661 from 疯狂的狮子Li/dev
2025-03-21 07:25:25 +00:00
疯狂的狮子Li
7334d91d6b !652 发布 5.3.1-BETA 公测版本
Merge pull request !652 from 疯狂的狮子Li/dev
2025-03-13 05:27:36 +00:00
疯狂的狮子Li
95c01301f6 !644 同步修复一些问题
Merge pull request !644 from 疯狂的狮子Li/dev
2025-02-07 06:19:28 +00:00
疯狂的狮子Li
296466fa13 !640 发布 5.3.0 新春版 祝大家新年快乐
Merge pull request !640 from 疯狂的狮子Li/dev
2025-01-24 05:08:28 +00:00
疯狂的狮子Li
3c8d864b5f !639 发布 5.3.0-BETA 公测版本
Merge pull request !639 from 疯狂的狮子Li/dev
2025-01-20 03:35:45 +00:00
疯狂的狮子Li
ea50a57602 update 优化 xss包装器 Parameter 处理 兼容某些容器不允许改参数的情况 2024-11-21 10:17:34 +08:00
疯狂的狮子Li
7e14b98676 reset 回滚错误修改
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-10-28 09:46:28 +00:00
疯狂的狮子Li
015b406001 !591 发布 5.2.3 正式版
Merge pull request !591 from 疯狂的狮子Li/dev
2024-10-25 03:09:23 +00:00
疯狂的狮子Li
098d3347a0 !577 发布 5.2.2 正式版 安全性提升
Merge pull request !577 from 疯狂的狮子Li/dev
2024-08-26 03:43:59 +00:00
疯狂的狮子Li
08d4493994 update 优化 bug 模板 2024-07-15 15:19:22 +08:00
疯狂的狮子Li
367d739e2d Merge remote-tracking branch 'origin/5.X' into 5.X 2024-07-09 16:38:43 +08:00
疯狂的狮子Li
d6688a367d !562 ♥️发布 5.2.1 正式版本
Merge pull request !562 from 疯狂的狮子Li/dev
2024-07-09 02:42:40 +00:00
疯狂的狮子Li
0b331796e2 !551 ♥️发布 5.2.0 正式版本
Merge pull request !551 from 疯狂的狮子Li/dev
2024-06-20 02:10:15 +00:00
疯狂的狮子Li
456620b638 !549 ♥️发布 5.2.0-BETA2 公测版本
Merge pull request !549 from 疯狂的狮子Li/dev
2024-06-06 03:13:46 +00:00
44 changed files with 888 additions and 2309 deletions

1
.gitignore vendored
View File

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

View File

@@ -27,7 +27,7 @@
<mybatis-plus.version>3.5.14</mybatis-plus.version> <mybatis-plus.version>3.5.14</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version> <p6spy.version>3.9.1</p6spy.version>
<hutool.version>5.8.40</hutool.version> <hutool.version>5.8.40</hutool.version>
<spring-boot-admin.version>3.5.5</spring-boot-admin.version> <spring-boot-admin.version>3.5.3</spring-boot-admin.version>
<redisson.version>3.51.0</redisson.version> <redisson.version>3.51.0</redisson.version>
<lock4j.version>2.2.7</lock4j.version> <lock4j.version>2.2.7</lock4j.version>
<dynamic-ds.version>4.3.1</dynamic-ds.version> <dynamic-ds.version>4.3.1</dynamic-ds.version>
@@ -48,7 +48,7 @@
<!-- 面向运行时的D-ORM依赖 --> <!-- 面向运行时的D-ORM依赖 -->
<anyline.version>8.7.2-20250603</anyline.version> <anyline.version>8.7.2-20250603</anyline.version>
<!-- 工作流配置 --> <!-- 工作流配置 -->
<warm-flow.version>1.8.2</warm-flow.version> <warm-flow.version>1.8.1</warm-flow.version>
<!-- 插件版本 --> <!-- 插件版本 -->
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version> <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>

View File

@@ -5,12 +5,15 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.dromara.common.core.config.properties.ThreadPoolProperties; import org.dromara.common.core.config.properties.ThreadPoolProperties;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.Threads;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.task.VirtualThreadTaskExecutor; import org.springframework.core.task.VirtualThreadTaskExecutor;
import java.util.concurrent.*; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/** /**
* 线程池配置 * 线程池配置
@@ -47,7 +50,7 @@ public class ThreadPoolConfig {
@Override @Override
protected void afterExecute(Runnable r, Throwable t) { protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t); super.afterExecute(r, t);
printException(r, t); Threads.printException(r, t);
} }
}; };
this.scheduledExecutorService = scheduledThreadPoolExecutor; this.scheduledExecutorService = scheduledThreadPoolExecutor;
@@ -56,57 +59,15 @@ public class ThreadPoolConfig {
/** /**
* 销毁事件 * 销毁事件
* 停止线程池
* 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
* 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数.
* 如果仍然超時,則強制退出.
* 另对在shutdown时线程本身被调用中断做了处理.
*/ */
@PreDestroy @PreDestroy
public void destroy() { public void destroy() {
try { try {
log.info("====关闭后台任务任务线程池===="); log.info("====关闭后台任务任务线程池====");
ScheduledExecutorService pool = scheduledExecutorService; Threads.shutdownAndAwaitTermination(scheduledExecutorService);
if (pool != null && !pool.isShutdown()) {
pool.shutdown();
try {
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
pool.shutdownNow();
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
log.info("Pool did not terminate");
}
}
} catch (InterruptedException ie) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}
}
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
/**
* 打印线程异常信息
*/
public static void printException(Runnable r, Throwable t) {
if (t == null && r instanceof Future<?>) {
try {
Future<?> future = (Future<?>) r;
if (future.isDone()) {
future.get();
}
} catch (CancellationException ce) {
t = ce;
} catch (ExecutionException ee) {
t = ee.getCause();
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
}
if (t != null) {
log.error(t.getMessage(), t);
}
}
} }

View File

@@ -1,45 +0,0 @@
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,7 +1,6 @@
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;
@@ -41,11 +40,6 @@ 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);
@@ -53,11 +47,4 @@ 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

@@ -0,0 +1,63 @@
package org.dromara.common.core.utils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*;
/**
* 线程相关工具类.
*
* @author ruoyi
*/
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class Threads {
/**
* 停止线程池
* 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
* 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数.
* 如果仍然超時,則強制退出.
* 另对在shutdown时线程本身被调用中断做了处理.
*/
public static void shutdownAndAwaitTermination(ExecutorService pool) {
if (pool != null && !pool.isShutdown()) {
pool.shutdown();
try {
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
pool.shutdownNow();
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
log.info("Pool did not terminate");
}
}
} catch (InterruptedException ie) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}
}
}
/**
* 打印线程异常信息
*/
public static void printException(Runnable r, Throwable t) {
if (t == null && r instanceof Future<?>) {
try {
Future<?> future = (Future<?>) r;
if (future.isDone()) {
future.get();
}
} catch (CancellationException ce) {
t = ce;
} catch (ExecutionException ee) {
t = ee.getCause();
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
}
if (t != null) {
log.error(t.getMessage(), t);
}
}
}

View File

@@ -5,7 +5,6 @@ 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;
@@ -168,58 +167,4 @@ 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

@@ -1,33 +0,0 @@
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

@@ -1,51 +0,0 @@
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

@@ -1,30 +0,0 @@
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

@@ -1,11 +1,10 @@
package org.dromara.common.mybatis.handler; package org.dromara.common.mybatis.handler;
import cn.dev33.satoken.exception.NotLoginException;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import com.baomidou.dynamic.datasource.exception.CannotFindDataSourceException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.mybatis.spring.MyBatisSystemException; import org.mybatis.spring.MyBatisSystemException;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -36,54 +35,13 @@ public class MybatisExceptionHandler {
@ExceptionHandler(MyBatisSystemException.class) @ExceptionHandler(MyBatisSystemException.class)
public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) { public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
Throwable root = getRootCause(e); String message = e.getMessage();
if (root instanceof NotLoginException) { if (StringUtils.contains(message, "CannotFindDataSourceException")) {
log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, root.getMessage());
return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源");
}
if (root instanceof CannotFindDataSourceException) {
log.error("请求地址'{}', 未找到数据源", requestURI); log.error("请求地址'{}', 未找到数据源", requestURI);
return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认"); return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认");
} }
log.error("请求地址'{}', Mybatis系统异常", requestURI, e); log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, e.getMessage()); return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, message);
}
/**
* 获取异常的根因(递归查找)
*
* @param e 当前异常
* @return 根因异常(最底层的 cause
* <p>
* 逻辑说明:
* 1. 如果 e 没有 cause说明 e 本身就是根因,直接返回
* 2. 如果 e 的 cause 和自身相同(防止循环引用),也返回 e
* 3. 否则递归调用,继续向下寻找最底层的 cause
*/
public static Throwable getRootCause(Throwable e) {
Throwable cause = e.getCause();
if (cause == null || cause == e) {
return e;
}
return getRootCause(cause);
}
/**
* 在异常链中查找指定类型的异常
*
* @param e 当前异常
* @param clazz 目标异常类
* @return 找到的指定类型异常,如果没有找到返回 null
*/
public static Throwable findCause(Throwable e, Class<? extends Throwable> clazz) {
Throwable t = e;
while (t != null && t != t.getCause()) {
if (clazz.isInstance(t)) {
return t;
}
t = t.getCause();
}
return null;
} }
} }

View File

@@ -7,9 +7,7 @@ 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;
@@ -57,8 +55,6 @@ 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();
@@ -98,11 +94,7 @@ public class SecurityConfig implements WebMvcConfigurer {
.setAuth(obj -> { .setAuth(obj -> {
SaHttpBasicUtil.check(username + ":" + password); SaHttpBasicUtil.check(username + ":" + password);
}) })
.setError(e -> { .setError(e -> SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED));
HttpServletResponse response = ServletUtils.getResponse();
response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
return SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED);
});
} }
} }

View File

@@ -1,109 +0,0 @@
package me.zhyd.oauth.request;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.support.HttpHeader;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthDefaultSource;
import me.zhyd.oauth.enums.scope.AuthDingTalkScope;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.utils.AuthScopeUtils;
import me.zhyd.oauth.utils.GlobalAuthUtils;
import me.zhyd.oauth.utils.HttpUtils;
import me.zhyd.oauth.utils.UrlBuilder;
import java.util.HashMap;
import java.util.Map;
/**
* 新版钉钉二维码登录
*
* @author yadong.zhang (yadong.zhang0415(a)gmail.com)
* @since 1.16.7
*/
public class AuthDingTalkV2Request extends AuthDefaultRequest {
public AuthDingTalkV2Request(AuthConfig config) {
super(config, AuthDefaultSource.DINGTALK_V2);
}
public AuthDingTalkV2Request(AuthConfig config, AuthStateCache authStateCache) {
super(config, AuthDefaultSource.DINGTALK_V2, authStateCache);
}
@Override
public String authorize(String state) {
return UrlBuilder.fromBaseUrl(source.authorize())
.queryParam("response_type", "code")
.queryParam("client_id", config.getClientId())
.queryParam("scope", this.getScopes(",", true, AuthScopeUtils.getDefaultScopes(AuthDingTalkScope.values())))
.queryParam("redirect_uri", GlobalAuthUtils.urlEncode(config.getRedirectUri()))
.queryParam("prompt", "consent")
.queryParam("org_type", config.getDingTalkOrgType())
.queryParam("corpId", config.getDingTalkCorpId())
.queryParam("exclusiveLogin", config.isDingTalkExclusiveLogin())
.queryParam("exclusiveCorpId", config.getDingTalkExclusiveCorpId())
.queryParam("state", getRealState(state))
.build();
}
@Override
public AuthToken getAccessToken(AuthCallback authCallback) {
Map<String, String> params = new HashMap<>();
params.put("grantType", "authorization_code");
params.put("clientId", config.getClientId());
params.put("clientSecret", config.getClientSecret());
params.put("code", authCallback.getCode());
String response = new HttpUtils(config.getHttpConfig()).post(this.source.accessToken(), JSONObject.toJSONString(params)).getBody();
JSONObject accessTokenObject = JSONObject.parseObject(response);
if (!accessTokenObject.containsKey("accessToken")) {
throw new AuthException(JSONObject.toJSONString(response), source);
}
return AuthToken.builder()
.accessToken(accessTokenObject.getString("accessToken"))
.refreshToken(accessTokenObject.getString("refreshToken"))
.expireIn(accessTokenObject.getIntValue("expireIn"))
.corpId(accessTokenObject.getString("corpId"))
.build();
}
@Override
public AuthUser getUserInfo(AuthToken authToken) {
HttpHeader header = new HttpHeader();
header.add("x-acs-dingtalk-access-token", authToken.getAccessToken());
String response = new HttpUtils(config.getHttpConfig()).get(this.source.userInfo(), null, header, false).getBody();
JSONObject object = JSONObject.parseObject(response);
authToken.setOpenId(object.getString("openId"));
authToken.setUnionId(object.getString("unionId"));
return AuthUser.builder()
.rawUserInfo(object)
.uuid(object.getString("unionId"))
.username(object.getString("nick"))
.nickname(object.getString("nick"))
.avatar(object.getString("avatarUrl"))
.snapshotUser(object.getBooleanValue("visitor"))
.token(authToken)
.source(source.toString())
.build();
}
/**
* 返回获取accessToken的url
*
* @param code 授权码
* @return 返回获取accessToken的url
*/
protected String accessTokenUrl(String code) {
return UrlBuilder.fromBaseUrl(source.accessToken())
.queryParam("code", code)
.queryParam("clientId", config.getClientId())
.queryParam("clientSecret", config.getClientSecret())
.queryParam("grantType", "authorization_code")
.build();
}
}

View File

@@ -14,6 +14,9 @@ import org.dromara.common.social.gitea.AuthGiteaRequest;
import org.dromara.common.social.maxkey.AuthMaxKeyRequest; import org.dromara.common.social.maxkey.AuthMaxKeyRequest;
import org.dromara.common.social.topiam.AuthTopIamRequest; import org.dromara.common.social.topiam.AuthTopIamRequest;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/** /**
* 认证授权工具类 * 认证授权工具类
* *
@@ -40,7 +43,7 @@ public class SocialUtils {
AuthConfig.AuthConfigBuilder builder = AuthConfig.builder() AuthConfig.AuthConfigBuilder builder = AuthConfig.builder()
.clientId(obj.getClientId()) .clientId(obj.getClientId())
.clientSecret(obj.getClientSecret()) .clientSecret(obj.getClientSecret())
.redirectUri(obj.getRedirectUri()) .redirectUri(URLEncoder.encode(obj.getRedirectUri(), StandardCharsets.UTF_8))
.scopes(obj.getScopes()); .scopes(obj.getScopes());
return switch (source.toLowerCase()) { return switch (source.toLowerCase()) {
case "dingtalk" -> new AuthDingTalkV2Request(builder.build(), STATE_CACHE); case "dingtalk" -> new AuthDingTalkV2Request(builder.build(), STATE_CACHE);

View File

@@ -46,14 +46,8 @@ public class TranslationHandler extends JsonSerializer<Object> implements Contex
gen.writeNull(); gen.writeNull();
return; return;
} }
try { Object result = trans.translation(value, translation.other());
Object result = trans.translation(value, translation.other()); gen.writeObject(result);
gen.writeObject(result);
} catch (Exception e) {
log.error("翻译处理异常type: {}, value: {}", translation.type(), value, e);
// 出现异常时输出原始值而不是中断序列化
gen.writeObject(value);
}
} else { } else {
gen.writeObject(value); gen.writeObject(value);
} }

View File

@@ -23,7 +23,6 @@ import org.springframework.web.bind.MissingPathVariableException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.NoHandlerFoundException;
@@ -124,7 +123,7 @@ public class GlobalExceptionHandler {
*/ */
@ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(IOException.class) @ExceptionHandler(IOException.class)
public void handleIoException(IOException e, HttpServletRequest request) { public void handleRuntimeException(IOException e, HttpServletRequest request) {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
if (requestURI.contains("sse")) { if (requestURI.contains("sse")) {
// sse 经常性连接中断 例如关闭浏览器 直接屏蔽 // sse 经常性连接中断 例如关闭浏览器 直接屏蔽
@@ -133,13 +132,6 @@ public class GlobalExceptionHandler {
log.error("请求地址'{}',连接中断", requestURI, e); log.error("请求地址'{}',连接中断", requestURI, e);
} }
/**
* sse 连接超时异常 不需要处理
*/
@ExceptionHandler(AsyncRequestTimeoutException.class)
public void handleRuntimeException(AsyncRequestTimeoutException e) {
}
/** /**
* 拦截未知的运行时异常 * 拦截未知的运行时异常
*/ */

View File

@@ -193,19 +193,4 @@ 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,8 +9,6 @@ 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;
@@ -63,7 +61,6 @@ 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.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 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 java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -84,9 +84,4 @@ public interface ISysTenantService {
* 同步租户字典 * 同步租户字典
*/ */
void syncTenantDict(); void syncTenantDict();
/**
* 同步租户参数配置
*/
void syncTenantConfig();
} }

View File

@@ -241,8 +241,6 @@ public class SysMenuServiceImpl implements ISysMenuService {
.setWeight(menu.getOrderNum()); .setWeight(menu.getOrderNum());
menuTree.put("menuType", menu.getMenuType()); menuTree.put("menuType", menu.getMenuType());
menuTree.put("icon", menu.getIcon()); menuTree.put("icon", menu.getIcon());
menuTree.put("visible", menu.getVisible());
menuTree.put("status", menu.getStatus());
}); });
} }

View File

@@ -508,60 +508,4 @@ 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

@@ -103,7 +103,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
w.in(SysUser::getDeptId, ids); w.in(SysUser::getDeptId, ids);
}).orderByAsc(SysUser::getUserId); }).orderByAsc(SysUser::getUserId);
if (StringUtils.isNotBlank(user.getExcludeUserIds())) { if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn(SysUser::getUserId, StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong)); wrapper.notIn(SysUser::getUserId, StringUtils.splitList(user.getExcludeUserIds()));
} }
return wrapper; return wrapper;
} }

View File

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

View File

@@ -72,8 +72,8 @@ public class WorkflowGlobalListener implements GlobalListener {
public void start(ListenerVariable listenerVariable) { public void start(ListenerVariable listenerVariable) {
String ext = listenerVariable.getNode().getExt(); String ext = listenerVariable.getNode().getExt();
if (StringUtils.isNotBlank(ext)) { if (StringUtils.isNotBlank(ext)) {
NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext);
Map<String, Object> variable = listenerVariable.getVariable(); Map<String, Object> variable = listenerVariable.getVariable();
NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext, variable);
Set<String> copyList = nodeExt.getCopySettings(); Set<String> copyList = nodeExt.getCopySettings();
if (CollUtil.isNotEmpty(copyList)) { if (CollUtil.isNotEmpty(copyList)) {
List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> { List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
@@ -180,14 +180,12 @@ public class WorkflowGlobalListener implements GlobalListener {
} }
if (variable.containsKey(FlowConstant.FLOW_COPY_LIST)) { if (variable.containsKey(FlowConstant.FLOW_COPY_LIST)) {
List<FlowCopyBo> flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() { List<FlowCopyBo> flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() {});
});
// 添加抄送人 // 添加抄送人
flwTaskService.setCopy(task, flowCopyList); flwTaskService.setCopy(task, flowCopyList);
} }
if (variable.containsKey(FlowConstant.MESSAGE_TYPE)) { if (variable.containsKey(FlowConstant.MESSAGE_TYPE)) {
List<String> messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() { List<String> messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {});
});
String notice = MapUtil.getStr(variable, FlowConstant.MESSAGE_NOTICE); String notice = MapUtil.getStr(variable, FlowConstant.MESSAGE_NOTICE);
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
} }

View File

@@ -2,8 +2,6 @@ package org.dromara.workflow.service;
import org.dromara.workflow.domain.vo.NodeExtVo; import org.dromara.workflow.domain.vo.NodeExtVo;
import java.util.Map;
/** /**
* 流程节点扩展属性 服务层 * 流程节点扩展属性 服务层
* *
@@ -26,10 +24,9 @@ public interface IFlwNodeExtService {
* {"code": "VariablesEnum", "value": "key1=value1,key2=value2"} * {"code": "VariablesEnum", "value": "key1=value1,key2=value2"}
* ] * ]
* *
* @param ext 扩展属性 JSON 字符串 * @param ext 扩展属性 JSON 字符串
* @param variable 流程变量
* @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map * @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map
*/ */
NodeExtVo parseNodeExt(String ext, Map<String, Object> variable); NodeExtVo parseNodeExt(String ext);
} }

View File

@@ -9,9 +9,6 @@ import org.dromara.common.core.domain.dto.DictTypeDTO;
import org.dromara.common.core.service.DictService; import org.dromara.common.core.service.DictService;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import org.dromara.warm.flow.core.FlowEngine;
import org.dromara.warm.flow.core.utils.CollUtil;
import org.dromara.warm.flow.core.utils.ExpressionUtil;
import org.dromara.warm.flow.ui.service.NodeExtService; import org.dromara.warm.flow.ui.service.NodeExtService;
import org.dromara.warm.flow.ui.vo.NodeExt; import org.dromara.warm.flow.ui.vo.NodeExt;
import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.ConditionalOnEnable;
@@ -48,7 +45,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
CopySettingEnum.class.getSimpleName(), CopySettingEnum.class.getSimpleName(),
Map.of( Map.of(
"label", "抄送对象", "label", "抄送对象",
"type", 5, "type", 2,
"must", false, "must", false,
"multiple", false, "multiple", false,
"desc", "设置该节点的抄送办理人" "desc", "设置该节点的抄送办理人"
@@ -59,7 +56,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
"type", 2, "type", 2,
"must", false, "must", false,
"multiple", false, "multiple", false,
"desc", "节点执行时可设置自定义参数多个参数以逗号分隔key1=value1,key2=value2" "desc", "节点执行时可以使用的自定义参数"
), ),
ButtonPermissionEnum.class.getSimpleName(), ButtonPermissionEnum.class.getSimpleName(),
Map.of( Map.of(
@@ -140,7 +137,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
childNode.setCode(simpleName); childNode.setCode(simpleName);
// label名称 // label名称
childNode.setLabel(Convert.toStr(map.get("label"))); childNode.setLabel(Convert.toStr(map.get("label")));
// 1输入框 2文本域 3下拉框 4选择框 5用户选择器 // 1输入框 2文本域 3下拉框 4选择框
childNode.setType(Convert.toInt(map.get("type"), 1)); childNode.setType(Convert.toInt(map.get("type"), 1));
// 是否必填 // 是否必填
childNode.setMust(Convert.toBool(map.get("must"), false)); childNode.setMust(Convert.toBool(map.get("must"), false));
@@ -173,7 +170,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
childNode.setCode(dictType); childNode.setCode(dictType);
// label名称 // label名称
childNode.setLabel(dictTypeDTO.getDictName()); childNode.setLabel(dictTypeDTO.getDictName());
// 1输入框 2文本域 3下拉框 4选择框 5用户选择器 // 1输入框 2文本域 3下拉框 4选择框
childNode.setType(3); childNode.setType(3);
// 是否必填 // 是否必填
childNode.setMust(false); childNode.setMust(false);
@@ -200,16 +197,15 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
* <p>示例 JSON * <p>示例 JSON
* [ * [
* {"code": "ButtonPermissionEnum", "value": "back,termination"}, * {"code": "ButtonPermissionEnum", "value": "back,termination"},
* {"code": "CopySettingEnum", "value": "1,3,4,#{@spelRuleComponent.selectDeptLeaderById(#deptId", "#roleId)}"}, * {"code": "CopySettingEnum", "value": "1"},
* {"code": "VariablesEnum", "value": "key1=value1,key2=value2"} * {"code": "VariablesEnum", "value": "key1=value1,key2=value2"}
* ] * ]
* *
* @param ext 扩展属性 JSON 字符串 * @param ext 扩展属性 JSON 字符串
* @param variable 流程变量
* @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map * @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map
*/ */
@Override @Override
public NodeExtVo parseNodeExt(String ext, Map<String, Object> variable) { public NodeExtVo parseNodeExt(String ext) {
NodeExtVo nodeExtVo = new NodeExtVo(); NodeExtVo nodeExtVo = new NodeExtVo();
// 解析 JSON 为 Dict 列表 // 解析 JSON 为 Dict 列表
@@ -238,20 +234,8 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
nodeExtVo.setButtonPermissions(buttonList); nodeExtVo.setButtonPermissions(buttonList);
} else if (CopySettingEnum.class.getSimpleName().equals(code)) { } else if (CopySettingEnum.class.getSimpleName().equals(code)) {
List<String> permissions = spelSmartSplit(value).stream()
.map(s -> {
List<String> result = ExpressionUtil.evalVariable(s, variable);
if (CollUtil.isNotEmpty(result)) {
return result;
}
return Collections.singletonList(s);
}).filter(Objects::nonNull)
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
List<String> copySettings = FlowEngine.permissionHandler().convertPermissions(permissions);
// 解析抄送对象 ID 集合 // 解析抄送对象 ID 集合
nodeExtVo.setCopySettings(new HashSet<>(copySettings)); nodeExtVo.setCopySettings(StringUtils.str2Set(value, StringUtils.SEPARATOR));
} else if (VariablesEnum.class.getSimpleName().equals(code)) { } else if (VariablesEnum.class.getSimpleName().equals(code)) {
// 解析自定义参数 // 解析自定义参数
@@ -270,82 +254,4 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
return nodeExtVo; return nodeExtVo;
} }
/**
* 按逗号分割字符串,但保留 #{...} 表达式和字符串常量中的逗号
*/
private static List<String> spelSmartSplit(String str) {
List<String> result = new ArrayList<>();
if (str == null || str.trim().isEmpty()) {
return result;
}
StringBuilder token = new StringBuilder();
// #{...} 的嵌套深度
int depth = 0;
// 是否在字符串常量中(" 或 '
boolean inString = false;
// 当前字符串引号类型
char stringQuote = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
// 检测进入 SpEL 表达式 #{...}
if (!inString && c == '#' && depth == 0 && checkNext(str, i, '{')) {
depth++;
token.append("#{");
// 跳过 {
i++;
continue;
}
// 在表达式中遇到 { 或 } 改变嵌套深度
if (!inString && depth > 0) {
if (c == '{') {
depth++;
} else if (c == '}') {
depth--;
}
token.append(c);
continue;
}
// 检测字符串开始/结束
if (depth > 0 && (c == '"' || c == '\'')) {
if (!inString) {
inString = true;
stringQuote = c;
} else if (stringQuote == c) {
inString = false;
}
token.append(c);
continue;
}
// 外层逗号才分割
if (c == ',' && depth == 0 && !inString) {
String part = token.toString().trim();
if (!part.isEmpty()) {
result.add(part);
}
token.setLength(0);
continue;
}
token.append(c);
}
// 添加最后一个
String part = token.toString().trim();
if (!part.isEmpty()) {
result.add(part);
}
return result;
}
private static boolean checkNext(String str, int index, char expected) {
return index + 1 < str.length() && str.charAt(index + 1) == expected;
}
} }

View File

@@ -382,6 +382,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.approver", LoginHelper.getUserIdStr()); queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper); Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@@ -456,7 +457,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory())); List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr)); wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
} }
wrapper.orderByDesc("t.create_time").orderByDesc("t.update_time"); wrapper.orderByDesc("t.create_time");
return wrapper; return wrapper;
} }
@@ -484,9 +485,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Map<String, Object> variable = new HashMap<>(); Map<String, Object> variable = new HashMap<>();
// 消息类型 // 消息类型
variable.put(FlowConstant.MESSAGE_TYPE, messageType); variable.put("messageType", messageType);
// 消息通知 // 消息通知
variable.put(FlowConstant.MESSAGE_NOTICE, notice); variable.put("notice", notice);
FlowParams flowParams = FlowParams.build() FlowParams flowParams = FlowParams.build()
.nodeCode(bo.getNodeCode()) .nodeCode(bo.getNodeCode())
@@ -598,7 +599,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (ObjectUtil.isNull(flowNode)) { if (ObjectUtil.isNull(flowNode)) {
throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在"); throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在");
} }
NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt(), instance.getVariableMap()); NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt());
//设置按钮权限 //设置按钮权限
flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions()); flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions());
if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) { if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) {
@@ -730,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 (ADD_SIGNATURE.equals(taskOperation) || REDUCTION_SIGNATURE.equals(taskOperation)) { if ("addSignature".equals(taskOperation) || "reductionSignature".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,7 +23,6 @@ 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;
@@ -194,8 +193,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, FlowConstant.BUSINESS_CODE, StrUtil.EMPTY); String businessCode = MapUtil.getStr(params, "businessCode",StrUtil.EMPTY);
testLeave.setApplyCode(businessCode); testLeave.setApplyCode(businessCode);
} }
testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus()); testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());

View File

@@ -12,7 +12,6 @@ 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;
@@ -167,7 +166,6 @@ 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

@@ -4,30 +4,18 @@ error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; pid /var/run/nginx.pid;
events { events {
# 可以根据业务并发量适当调高
worker_connections 1024; worker_connections 1024;
} }
http { http {
include mime.types; include mime.types;
default_type application/octet-stream; default_type application/octet-stream;
# 高效传输文件
sendfile on; sendfile on;
# 长连接超时时间
keepalive_timeout 65; keepalive_timeout 65;
# 单连接最大请求数,提高长连接复用率
keepalive_requests 100000;
# 限制body大小 # 限制body大小
client_max_body_size 100m; client_max_body_size 100m;
client_header_buffer_size 32k;
client_body_buffer_size 512k;
# 开启静态资源压缩 # 开启静态资源压缩
gzip_static on; gzip_static on;
# 连接数限制 (防御类配置) 10m 一般够用了,能存储上万 IP 的计数
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 隐藏 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" '
@@ -62,7 +50,7 @@ http {
#ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改 #ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
#ssl_session_timeout 5m; #ssl_session_timeout 5m;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1; #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_prefer_server_ciphers on; #ssl_prefer_server_ciphers on;
# https配置参考 end # https配置参考 end
@@ -88,29 +76,17 @@ http {
} }
location /prod-api/ { location /prod-api/ {
# 设置客户端请求头中的 Host 信息(保持原始 Host
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
# 获取客户端真实 IP
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
# 自定义头 REMOTE-HOST记录客户端 IP
proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header REMOTE-HOST $remote_addr;
# 获取完整的客户端 IP 链(经过多级代理时)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 设置后端响应超时时间(这里是 24 小时,适合长连接/SSE
proxy_read_timeout 86400s; proxy_read_timeout 86400s;
# SSE (Server-Sent Events)WebSocket 支持参数 # ssewebsocket参数
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
# 禁用代理缓冲,数据直接传给客户端
proxy_buffering off; proxy_buffering off;
# 禁用代理缓存
proxy_cache off; proxy_cache off;
# 按 IP 限制连接数(防 CC 攻击) 小型站10~20 就够 中型站50~100
limit_conn perip 20;
# 按 Server 限制总并发连接数 根据服务器的最大并发处理能力来定 太小会限制合法用户访问,太大会占满服务器资源
limit_conn perserver 500;
proxy_pass http://server/; proxy_pass http://server/;
} }
@@ -118,37 +94,23 @@ http {
# 解决方案1 将 admin 服务 也配置成 https # 解决方案1 将 admin 服务 也配置成 https
# 解决方案2 将菜单配置为外链访问 走独立页面 http 访问 # 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
location /admin/ { location /admin/ {
# 设置客户端请求头中的 Host 信息(保持原始 Host
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
# 获取客户端真实 IP
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
# 自定义头 REMOTE-HOST记录客户端 IP
proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header REMOTE-HOST $remote_addr;
# 获取完整的客户端 IP 链(经过多级代理时)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 禁用代理缓冲,数据直接传给客户端
proxy_buffering off;
# 禁用代理缓存
proxy_cache off;
proxy_pass http://monitor-admin/admin/; proxy_pass http://monitor-admin/admin/;
} }
location /snail-job/ { location /snail-job/ {
# 设置客户端请求头中的 Host 信息(保持原始 Host
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
# 获取客户端真实 IP
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
# 自定义头 REMOTE-HOST记录客户端 IP
proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header REMOTE-HOST $remote_addr;
# 获取完整的客户端 IP 链(经过多级代理时)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# SSE (Server-Sent Events)WebSocket 支持参数 # ssewebsocket参数
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
# 禁用代理缓冲,直接传输给客户端
proxy_buffering off; proxy_buffering off;
# 禁用代理缓存
proxy_cache off; proxy_cache off;
proxy_pass http://snailjob-server/snail-job/; proxy_pass http://snailjob-server/snail-job/;
} }

View File

@@ -1,129 +1,75 @@
{ {
"nodeList": [ "flowCode" : "leave1",
{ "flowName" : "请假申请-普通",
"nodeType": "0", "category" : "100",
"nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "200,200|200,200",
"ext": "[]", "formCustom" : "N",
"coordinate": "200,200|200,200", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
{ "nextNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "220,200;310,200"
"skipName": null, } ]
"nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac", }, {
"nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", "nodeType" : 1,
"coordinate": "220,200;310,200" "nodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "360,200|360,200",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[]",
"nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "dd515cdd-59f6-446f-94ca-25ca062afb42",
"permissionFlag": "", "nextNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "410,200;490,200"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 1,
"formPath": null, "nodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,copy\"}]", "nodeName" : "组长",
"coordinate": "360,200|360,200", "permissionFlag" : "role:1",
"version": "1", "nodeRatio" : 0.000,
"skipList": [ "coordinate" : "540,200|540,200",
{ "formCustom" : "N",
"skipType": "PASS", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipCondition": null, "skipList" : [ {
"skipName": null, "nowNodeCode" : "78fa8e5b-e809-44ed-978a-41092409ebcf",
"nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42", "nextNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", "skipType" : "PASS",
"coordinate": "410,200;490,200" "coordinate" : "590,200;670,200"
} } ]
] }, {
}, "nodeType" : 1,
{ "nodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"nodeType": "1", "nodeName" : "部门主管",
"nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", "permissionFlag" : "role:3@@role:4",
"nodeName": "组长", "nodeRatio" : 0.000,
"permissionFlag": "role:1", "coordinate" : "720,200|720,200",
"nodeRatio": "0.000", "formCustom" : "N",
"anyNodeSkip": null, "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"listenerType": "", "skipList" : [ {
"listenerPath": "", "nowNodeCode" : "a8abf15f-b83e-428a-86cc-033555ea9bbe",
"formCustom": "N", "nextNodeCode" : "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
"formPath": null, "skipType" : "PASS",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]", "coordinate" : "770,200;880,200"
"coordinate": "540,200|540,200", } ]
"version": "1", }, {
"skipList": [ "nodeType" : 2,
{ "nodeCode" : "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
"skipType": "PASS", "nodeName" : "结束",
"skipCondition": null, "nodeRatio" : 0.000,
"skipName": null, "coordinate" : "900,200|900,200",
"nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf", "formCustom" : "N",
"nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe", "ext" : "[]"
"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,187 +1,111 @@
{ {
"nodeList": [ "flowCode" : "leave2",
{ "flowName" : "请假申请-排他网关",
"nodeType": "0", "category" : "100",
"nodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "300,240|300,240",
"ext": "[]", "formCustom" : "N",
"coordinate": "300,240|300,240", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
{ "nextNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "320,240;390,240"
"skipName": null, } ]
"nowNodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a", }, {
"nextNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd", "nodeType" : 1,
"coordinate": "320,240;390,240" "nodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "440,240|440,240",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[]",
"nodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "fdcae93b-b69c-498a-b231-09255e74bcbd",
"permissionFlag": "", "nextNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "490,240;535,240"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 3,
"formPath": null, "nodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]", "nodeRatio" : 0.000,
"coordinate": "440,240|440,240", "coordinate" : "560,240",
"version": "1", "formCustom" : "N",
"skipList": [ "ext" : "[]",
{ "skipList" : [ {
"skipType": "PASS", "nowNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
"skipCondition": null, "nextNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"skipName": null, "skipType" : "PASS",
"nowNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd", "skipCondition" : "le@@leaveDays|2",
"nextNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "coordinate" : "560,265;560,320;670,320"
"coordinate": "490,240;535,240" }, {
} "nowNodeCode" : "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
] "nextNodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605",
}, "skipName" : "大于两天",
{ "skipType" : "PASS",
"nodeType": "3", "skipCondition" : "gt@@leaveDays|2",
"nodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "coordinate" : "560,215;560,160;670,160|560,187"
"permissionFlag": null, } ]
"nodeRatio": "0.000", }, {
"anyNodeSkip": null, "nodeType" : 1,
"listenerType": null, "nodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"listenerPath": null, "nodeName" : "组长",
"formCustom": "N", "permissionFlag" : "3@@4",
"formPath": null, "nodeRatio" : 0.000,
"ext": "[]", "coordinate" : "720,320|720,320",
"coordinate": "560,240", "formCustom" : "N",
"version": "1", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList": [ "skipList" : [ {
{ "nowNodeCode" : "b3528155-dcb7-4445-bbdf-3d00e3499e86",
"skipType": "PASS", "nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
"skipCondition": "le@@leaveDays|2", "skipType" : "PASS",
"skipName": null, "coordinate" : "770,320;860,320;860,280"
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", } ]
"nextNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86", }, {
"coordinate": "560,265;560,320;670,320" "nodeType" : 1,
}, "nodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
{ "nodeName" : "总经理",
"skipType": "PASS", "permissionFlag" : "role:1",
"skipCondition": "gt@@leaveDays|2", "nodeRatio" : 0.000,
"skipName": "大于两天", "coordinate" : "860,240|860,240",
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e", "formCustom" : "N",
"nextNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605", "ext" : "[]",
"coordinate": "560,215;560,160;670,160|560,187" "skipList" : [ {
} "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", }, {
"nodeName": "组长", "nodeType" : 2,
"permissionFlag": "3@@4", "nodeCode" : "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
"nodeRatio": "0.000", "nodeName" : "结束",
"anyNodeSkip": null, "nodeRatio" : 0.000,
"listenerType": "", "coordinate" : "1000,240|1000,240",
"listenerPath": "", "formCustom" : "N",
"formCustom": "N", "ext" : "[]"
"formPath": null, }, {
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]", "nodeType" : 1,
"coordinate": "720,320|720,320", "nodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605",
"version": "1", "nodeName" : "部门领导",
"skipList": [ "permissionFlag" : "role:1",
{ "nodeRatio" : 0.000,
"skipType": "PASS", "coordinate" : "720,160|720,160",
"skipCondition": null, "formCustom" : "N",
"skipName": null, "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"nowNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86", "skipList" : [ {
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869", "nowNodeCode" : "5ed2362b-fc0c-4d52-831f-95208b830605",
"coordinate": "770,320;860,320;860,280" "nextNodeCode" : "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
} "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,211 +1,121 @@
{ {
"nodeList": [ "flowCode" : "leave3",
{ "flowName" : "请假申请-并行网关",
"nodeType": "0", "category" : "100",
"nodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "380,220|380,220",
"ext": "[]", "formCustom" : "N",
"coordinate": "380,220|380,220", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
{ "nextNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "400,220;470,220"
"skipName": null, } ]
"nowNodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957", }, {
"nextNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99", "nodeType" : 1,
"coordinate": "400,220;470,220" "nodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "520,220|520,220",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[]",
"nodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "b7bbb571-06de-455c-8083-f83c07bf0b99",
"permissionFlag": "", "nextNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "570,220;655,220"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 4,
"formPath": null, "nodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]", "nodeRatio" : 0.000,
"coordinate": "520,220|520,220", "coordinate" : "680,220",
"version": "1", "formCustom" : "N",
"skipList": [ "ext" : "[]",
{ "skipList" : [ {
"skipType": "PASS", "nowNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
"skipCondition": null, "nextNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"skipName": null, "skipType" : "PASS",
"nowNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99", "coordinate" : "680,195;680,140;750,140"
"nextNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", }, {
"coordinate": "570,220;655,220" "nowNodeCode" : "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
} "nextNodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394",
] "skipType" : "PASS",
}, "coordinate" : "680,245;680,300;750,300"
{ } ]
"nodeType": "4", }, {
"nodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "nodeType" : 1,
"permissionFlag": null, "nodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"nodeRatio": "0.000", "nodeName" : "市场部",
"anyNodeSkip": null, "permissionFlag" : "role:1",
"listenerType": null, "nodeRatio" : 0.000,
"listenerPath": null, "coordinate" : "800,140|800,140",
"formCustom": "N", "formCustom" : "N",
"formPath": null, "ext" : "[]",
"ext": "[]", "skipList" : [ {
"coordinate": "680,220", "nowNodeCode" : "4b7743cd-940c-431b-926f-e7b614fbf1fe",
"version": "1", "nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"skipList": [ "skipType" : "PASS",
{ "coordinate" : "850,140;920,140;920,195"
"skipType": "PASS", } ]
"skipCondition": null, }, {
"skipName": null, "nodeType" : 4,
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "nodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"nextNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe", "nodeRatio" : 0.000,
"coordinate": "680,195;680,140;750,140" "coordinate" : "920,220",
}, "formCustom" : "N",
{ "ext" : "[]",
"skipType": "PASS", "skipList" : [ {
"skipCondition": null, "nowNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"skipName": null, "nextNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6",
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a", "skipType" : "PASS",
"nextNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394", "coordinate" : "945,220;975,220;975,220;960,220;960,220;990,220"
"coordinate": "680,245;680,300;750,300" } ]
} }, {
] "nodeType" : 1,
}, "nodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6",
{ "nodeName" : "CEO",
"nodeType": "1", "permissionFlag" : "1",
"nodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe", "nodeRatio" : 0.000,
"nodeName": "市场部", "coordinate" : "1040,220|1040,220",
"permissionFlag": "role:1", "formCustom" : "N",
"nodeRatio": "0.000", "ext" : "[]",
"anyNodeSkip": null, "skipList" : [ {
"listenerType": "", "nowNodeCode" : "23e7429e-2b47-4431-b93e-40db7c431ce6",
"listenerPath": "", "nextNodeCode" : "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
"formCustom": "N", "skipType" : "PASS",
"formPath": null, "coordinate" : "1090,220;1140,220"
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]", } ]
"coordinate": "800,140|800,140", }, {
"version": "1", "nodeType" : 2,
"skipList": [ "nodeCode" : "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
{ "nodeName" : "结束",
"skipType": "PASS", "nodeRatio" : 0.000,
"skipCondition": null, "coordinate" : "1160,220|1160,220",
"skipName": null, "formCustom" : "N",
"nowNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe", "ext" : "[]"
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", }, {
"coordinate": "850,140;920,140;920,195" "nodeType" : 1,
} "nodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394",
] "nodeName" : "综合部",
}, "permissionFlag" : "role:3@@role:4",
{ "nodeRatio" : 0.000,
"nodeType": "4", "coordinate" : "800,300|800,300",
"nodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2", "formCustom" : "N",
"permissionFlag": null, "ext" : "[]",
"nodeRatio": "0.000", "skipList" : [ {
"anyNodeSkip": null, "nowNodeCode" : "762cb975-37d8-4276-b6db-79a4c3606394",
"listenerType": null, "nextNodeCode" : "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
"listenerPath": null, "skipType" : "PASS",
"formCustom": "N", "coordinate" : "850,300;920,300;920,245"
"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,154 +1,90 @@
{ {
"nodeList": [ "flowCode" : "leave4",
{ "flowName" : "请假申请-会签",
"nodeType": "0", "category" : "100",
"nodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "320,240|320,240",
"ext": "[]", "formCustom" : "N",
"coordinate": "320,240|320,240", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
{ "nextNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "340,240;410,240"
"skipName": null, } ]
"nowNodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876", }, {
"nextNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f", "nodeType" : 1,
"coordinate": "340,240;410,240" "nodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "460,240|460,240",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[]",
"nodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "e90b98ef-35b4-410c-a663-bae8b7624b9f",
"permissionFlag": "", "nextNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "510,240;590,240"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 1,
"formPath": null, "nodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]", "nodeName" : "百分之60通过",
"coordinate": "460,240|460,240", "permissionFlag" : "${userList}",
"version": "1", "nodeRatio" : 60.000,
"skipList": [ "coordinate" : "640,240|640,240",
{ "formCustom" : "N",
"skipType": "PASS", "ext" : "[]",
"skipCondition": null, "skipList" : [ {
"skipName": null, "nowNodeCode" : "768b5b1a-6726-4d67-8853-4cc70d5b1045",
"nowNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f", "nextNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"nextNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045", "skipType" : "PASS",
"coordinate": "510,240;590,240" "coordinate" : "690,240;770,240"
} } ]
] }, {
}, "nodeType" : 1,
{ "nodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"nodeType": "1", "nodeName" : "全部审批通过",
"nodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045", "permissionFlag" : "role:1@@role:3",
"nodeName": "百分之60通过", "nodeRatio" : 100.000,
"permissionFlag": "${userList}", "coordinate" : "820,240|820,240",
"nodeRatio": "60.000", "formCustom" : "N",
"anyNodeSkip": null, "ext" : "[]",
"listenerType": "", "skipList" : [ {
"listenerPath": "", "nowNodeCode" : "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
"formCustom": "N", "nextNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"formPath": null, "skipType" : "PASS",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]", "coordinate" : "870,240;950,240"
"coordinate": "640,240|640,240", } ]
"version": "1", }, {
"skipList": [ "nodeType" : 1,
{ "nodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
"skipType": "PASS", "nodeName" : "CEO",
"skipCondition": null, "permissionFlag" : "1",
"skipName": null, "nodeRatio" : 0.000,
"nowNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045", "coordinate" : "1000,240|1000,240",
"nextNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1", "formCustom" : "N",
"coordinate": "690,240;770,240" "ext" : "[]",
} "skipList" : [ {
] "nowNodeCode" : "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
}, "nextNodeCode" : "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
{ "skipType" : "PASS",
"nodeType": "1", "coordinate" : "1050,240;1080,240;1080,240;1070,240;1070,240;1100,240"
"nodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1", } ]
"nodeName": "全部审批通过", }, {
"permissionFlag": "role:1@@role:3", "nodeType" : 2,
"nodeRatio": "100.000", "nodeCode" : "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
"anyNodeSkip": null, "nodeName" : "结束",
"listenerType": "", "nodeRatio" : 0.000,
"listenerPath": "", "coordinate" : "1120,240|1120,240",
"formCustom": "N", "formCustom" : "N",
"formPath": null, "ext" : "[]"
"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,211 +1,121 @@
{ {
"nodeList": [ "flowCode" : "leave5",
{ "flowName" : "请假申请-并行会签网关",
"nodeType": "0", "category" : "100",
"nodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "300,220|300,220",
"ext": "[]", "formCustom" : "N",
"coordinate": "300,220|300,220", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
{ "nextNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "320,220;350,220;350,220;340,220;340,220;370,220"
"skipName": null, } ]
"nowNodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c", }, {
"nextNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374", "nodeType" : 1,
"coordinate": "320,220;350,220;350,220;340,220;340,220;370,220" "nodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "420,220|420,220",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[]",
"nodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "e1b04e96-dc81-4858-a309-2fe945d2f374",
"permissionFlag": "", "nextNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "470,220;535,220"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 4,
"formPath": null, "nodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]", "nodeRatio" : 0.000,
"coordinate": "420,220|420,220", "coordinate" : "560,220",
"version": "1", "formCustom" : "N",
"skipList": [ "ext" : "[]",
{ "skipList" : [ {
"skipType": "PASS", "nowNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
"skipCondition": null, "nextNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"skipName": null, "skipType" : "PASS",
"nowNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374", "coordinate" : "560,245;560,320;650,320"
"nextNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", }, {
"coordinate": "470,220;535,220" "nowNodeCode" : "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
} "nextNodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
] "skipType" : "PASS",
}, "coordinate" : "560,195;560,120;650,120"
{ } ]
"nodeType": "4", }, {
"nodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "nodeType" : 1,
"permissionFlag": null, "nodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"nodeRatio": "0.000", "nodeName" : "会签",
"anyNodeSkip": null, "permissionFlag" : "role:1@@role:3",
"listenerType": null, "nodeRatio" : 100.000,
"listenerPath": null, "coordinate" : "700,320|700,320",
"formCustom": "N", "formCustom" : "N",
"formPath": null, "ext" : "[]",
"ext": "[]", "skipList" : [ {
"coordinate": "560,220", "nowNodeCode" : "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
"version": "1", "nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"skipList": [ "skipType" : "PASS",
{ "coordinate" : "750,320;860,320;860,245"
"skipType": "PASS", } ]
"skipCondition": null, }, {
"skipName": null, "nodeType" : 4,
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "nodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"nextNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "nodeRatio" : 0.000,
"coordinate": "560,245;560,320;650,320" "coordinate" : "860,220",
}, "formCustom" : "N",
{ "ext" : "[]",
"skipType": "PASS", "skipList" : [ {
"skipCondition": null, "nowNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"skipName": null, "nextNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9",
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9", "skipType" : "PASS",
"nextNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4", "coordinate" : "885,220;950,220"
"coordinate": "560,195;560,120;650,120" } ]
} }, {
] "nodeType" : 1,
}, "nodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9",
{ "nodeName" : "CEO",
"nodeType": "1", "permissionFlag" : "1",
"nodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "nodeRatio" : 0.000,
"nodeName": "会签", "coordinate" : "1000,220|1000,220",
"permissionFlag": "role:1@@role:3", "formCustom" : "N",
"nodeRatio": "100.000", "ext" : "[]",
"anyNodeSkip": null, "skipList" : [ {
"listenerType": "", "nowNodeCode" : "7a8f0473-e409-442e-a843-5c2b813d00e9",
"listenerPath": "", "nextNodeCode" : "03c4d2bc-58b5-4408-a2e4-65afb046f169",
"formCustom": "N", "skipType" : "PASS",
"formPath": null, "coordinate" : "1050,220;1120,220"
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]", } ]
"coordinate": "700,320|700,320", }, {
"version": "1", "nodeType" : 2,
"skipList": [ "nodeCode" : "03c4d2bc-58b5-4408-a2e4-65afb046f169",
{ "nodeName" : "结束",
"skipType": "PASS", "nodeRatio" : 0.000,
"skipCondition": null, "coordinate" : "1140,220|1140,220",
"skipName": null, "formCustom" : "N",
"nowNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862", "ext" : "[]"
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b", }, {
"coordinate": "750,320;860,320;860,245" "nodeType" : 1,
} "nodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
] "nodeName" : "百分之60票签",
}, "permissionFlag" : "${userList}",
{ "nodeRatio" : 60.000,
"nodeType": "4", "coordinate" : "700,120|700,120",
"nodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b", "formCustom" : "N",
"permissionFlag": null, "ext" : "[]",
"nodeRatio": "0.000", "skipList" : [ {
"anyNodeSkip": null, "nowNodeCode" : "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
"listenerType": null, "nextNodeCode" : "1a20169e-3d82-4926-a151-e2daad28de1b",
"listenerPath": null, "skipType" : "PASS",
"formCustom": "N", "coordinate" : "750,120;860,120;860,195"
"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,368 +1,215 @@
{ {
"nodeList": [ "flowCode" : "leave6",
{ "flowName" : "请假申请-排他并行会签",
"nodeType": "0", "category" : "100",
"nodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054", "version" : "1",
"nodeName": "开始", "formCustom" : "N",
"permissionFlag": null, "formPath" : "/workflow/leaveEdit/index",
"nodeRatio": "0.000", "nodeList" : [ {
"anyNodeSkip": null, "nodeType" : 0,
"listenerType": null, "nodeCode" : "122b89a5-7c6f-40a3-aa09-7a263f902054",
"listenerPath": null, "nodeName" : "开始",
"formCustom": "N", "nodeRatio" : 0.000,
"formPath": null, "coordinate" : "240,300|240,300",
"ext": "[]", "formCustom" : "N",
"coordinate": "240,300|240,300", "ext" : "[]",
"version": "1", "skipList" : [ {
"skipList": [ "nowNodeCode" : "122b89a5-7c6f-40a3-aa09-7a263f902054",
{ "nextNodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"skipType": "PASS", "skipType" : "PASS",
"skipCondition": null, "coordinate" : "260,300;350,300"
"skipName": null, } ]
"nowNodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054", }, {
"nextNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd", "nodeType" : 1,
"coordinate": "260,300;350,300" "nodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
} "nodeName" : "申请人",
] "nodeRatio" : 0.000,
}, "coordinate" : "400,300|400,300",
{ "formCustom" : "N",
"nodeType": "1", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"nodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd", "skipList" : [ {
"nodeName": "申请人", "nowNodeCode" : "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
"permissionFlag": "", "nextNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"nodeRatio": "0.000", "skipType" : "PASS",
"anyNodeSkip": null, "coordinate" : "450,300;510,300"
"listenerType": "", } ]
"listenerPath": "", }, {
"formCustom": "N", "nodeType" : 1,
"formPath": null, "nodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]", "nodeName" : "副经理",
"coordinate": "400,300|400,300", "permissionFlag" : "role:1@@role:3@@role:4",
"version": "1", "nodeRatio" : 0.000,
"skipList": [ "coordinate" : "860,200|860,200",
{ "formCustom" : "N",
"skipType": "PASS", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipCondition": null, "skipList" : [ {
"skipName": null, "nowNodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"nowNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd", "nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"nextNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742", "skipType" : "PASS",
"coordinate": "450,300;510,300" "coordinate" : "910,200;1000,200;1000,275"
} } ]
] }, {
}, "nodeType" : 1,
{ "nodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"nodeType": "1", "nodeName" : "组长",
"nodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9", "permissionFlag" : "1",
"nodeName": "副经理", "nodeRatio" : 0.000,
"permissionFlag": "role:1@@role:3@@role:4", "coordinate" : "860,400|860,400",
"nodeRatio": "0.000", "formCustom" : "N",
"anyNodeSkip": null, "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"listenerType": "", "skipList" : [ {
"listenerPath": "", "nowNodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"formCustom": "N", "nextNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"formPath": null, "skipType" : "PASS",
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "coordinate" : "910,400;1000,400;1000,325"
"coordinate": "860,200|860,200", } ]
"version": "1", }, {
"skipList": [ "nodeType" : 1,
{ "nodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742",
"skipType": "PASS", "nodeName" : "副组长",
"skipCondition": null, "permissionFlag" : "1",
"skipName": null, "nodeRatio" : 0.000,
"nowNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9", "coordinate" : "560,300|560,300",
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32", "formCustom" : "N",
"coordinate": "910,200;1000,200;1000,275" "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]",
} "skipList" : [ {
] "nowNodeCode" : "07ecda1d-7a0a-47b5-8a91-6186c9473742",
}, "nextNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13",
{ "skipType" : "PASS",
"nodeType": "1", "coordinate" : "610,300;675,300"
"nodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", } ]
"nodeName": "组长", }, {
"permissionFlag": "1", "nodeType" : 3,
"nodeRatio": "0.000", "nodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13",
"anyNodeSkip": null, "nodeRatio" : 0.000,
"listenerType": "", "coordinate" : "700,300",
"listenerPath": "", "formCustom" : "N",
"formCustom": "N", "ext" : "[]",
"formPath": null, "skipList" : [ {
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]", "nowNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13",
"coordinate": "860,400|860,400", "nextNodeCode" : "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
"version": "1", "skipName" : "大于两天",
"skipList": [ "skipType" : "PASS",
{ "skipCondition" : "default@@${leaveDays > 2}",
"skipType": "PASS", "coordinate" : "700,275;700,200;810,200|700,237"
"skipCondition": null, }, {
"skipName": null, "nowNodeCode" : "48117e2c-6328-406b-b102-c4a9d115bb13",
"nowNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", "nextNodeCode" : "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32", "skipType" : "PASS",
"coordinate": "910,400;1000,400;1000,325" "skipCondition" : "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}",
} "coordinate" : "700,325;700,400;810,400"
] } ]
}, }, {
{ "nodeType" : 3,
"nodeType": "1", "nodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"nodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742", "nodeRatio" : 0.000,
"nodeName": "副组长", "coordinate" : "1000,300",
"permissionFlag": "1", "formCustom" : "N",
"nodeRatio": "0.000", "ext" : "[]",
"anyNodeSkip": null, "skipList" : [ {
"listenerType": "", "nowNodeCode" : "394e1cc8-b8b2-4189-9f81-44448e88ac32",
"listenerPath": "", "nextNodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496",
"formCustom": "N", "skipType" : "PASS",
"formPath": null, "coordinate" : "1025,300;1130,300"
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]", } ]
"coordinate": "560,300|560,300", }, {
"version": "1", "nodeType" : 1,
"skipList": [ "nodeCode" : "9c93a195-cff2-4e17-ab0a-a4f264191496",
{ "nodeName" : "经理会签",
"skipType": "PASS", "permissionFlag" : "1@@3",
"skipCondition": null, "nodeRatio" : 100.000,
"skipName": null, "coordinate" : "1180,300|1180,300",
"nowNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742", "formCustom" : "N",
"nextNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
"coordinate": "610,300;675,300" "skipList" : [ {
} "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", }, {
"permissionFlag": null, "nodeType" : 4,
"nodeRatio": "0.000", "nodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"anyNodeSkip": null, "nodeRatio" : 0.000,
"listenerType": null, "coordinate" : "1340,300",
"listenerPath": null, "formCustom" : "N",
"formCustom": "N", "ext" : "[]",
"formPath": null, "skipList" : [ {
"ext": "[]", "nowNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"coordinate": "700,300", "nextNodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"version": "1", "skipType" : "PASS",
"skipList": [ "coordinate" : "1340,325;1340,400;1430,400"
{ }, {
"skipType": "PASS", "nowNodeCode" : "a1a42056-afd1-4e90-88bc-36cbf5a66992",
"skipCondition": "default@@${leaveDays > 2}", "nextNodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4",
"skipName": "大于两天", "skipType" : "PASS",
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13", "coordinate" : "1340,275;1340,200;1430,200"
"nextNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9", } ]
"nextNodeType": "1", }, {
"coordinate": "700,275;700,200;810,200|700,237" "nodeType" : 1,
}, "nodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4",
{ "nodeName" : "总经理",
"skipType": "PASS", "permissionFlag" : "3@@1",
"skipCondition": "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}", "nodeRatio" : 0.000,
"skipName": null, "coordinate" : "1480,200|1480,200",
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13", "formCustom" : "N",
"nextNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"nextNodeType": "1", "skipList" : [ {
"coordinate": "700,325;700,400;810,400" "nowNodeCode" : "350dfa0c-a77c-4efa-8527-10efa02d8be4",
} "nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
] "skipType" : "PASS",
}, "coordinate" : "1530,200;1640,200;1640,275"
{ } ]
"nodeType": "3", }, {
"nodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32", "nodeType" : 1,
"permissionFlag": null, "nodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"nodeRatio": "0.000", "nodeName" : "副总经理",
"anyNodeSkip": null, "permissionFlag" : "1@@3",
"listenerType": null, "nodeRatio" : 0.000,
"listenerPath": null, "coordinate" : "1480,400|1480,400",
"formCustom": "N", "formCustom" : "N",
"formPath": null, "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"ext": "[]", "skipList" : [ {
"coordinate": "1000,300", "nowNodeCode" : "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
"version": "1", "nextNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
"skipList": [ "skipType" : "PASS",
{ "coordinate" : "1530,400;1640,400;1640,325"
"skipType": "PASS", } ]
"skipCondition": null, }, {
"skipName": null, "nodeType" : 4,
"nowNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32", "nodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
"nextNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496", "nodeRatio" : 0.000,
"coordinate": "1025,300;1130,300" "coordinate" : "1640,300",
} "formCustom" : "N",
] "ext" : "[]",
}, "skipList" : [ {
{ "nowNodeCode" : "c36a46ef-04f9-463f-bad7-4b395c818519",
"nodeType": "1", "nextNodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828",
"nodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496", "skipType" : "PASS",
"nodeName": "经理会签", "coordinate" : "1665,300;1770,300"
"permissionFlag": "1@@3", } ]
"nodeRatio": "100.000", }, {
"anyNodeSkip": null, "nodeType" : 1,
"listenerType": "", "nodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828",
"listenerPath": "", "nodeName" : "董事",
"formCustom": "N", "permissionFlag" : "1",
"formPath": null, "nodeRatio" : 0.000,
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]", "coordinate" : "1820,300|1820,300",
"coordinate": "1180,300|1180,300", "formCustom" : "N",
"version": "1", "ext" : "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
"skipList": [ "skipList" : [ {
{ "nowNodeCode" : "3fcea762-b53a-4ae1-8365-7bec90444828",
"skipType": "PASS", "nextNodeCode" : "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
"skipCondition": null, "skipType" : "PASS",
"skipName": null, "coordinate" : "1870,300;1960,300"
"nowNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496", } ]
"nextNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992", }, {
"coordinate": "1230,300;1315,300" "nodeType" : 2,
} "nodeCode" : "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
] "nodeName" : "结束",
}, "nodeRatio" : 0.000,
{ "coordinate" : "1980,300|1980,300",
"nodeType": "4", "formCustom" : "N",
"nodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992", "ext" : "[]"
"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
} }

View File

@@ -17,9 +17,7 @@ create table FLOW_DEFINITION
LISTENER_PATH VARCHAR2(500), LISTENER_PATH VARCHAR2(500),
EXT VARCHAR2(500), EXT VARCHAR2(500),
CREATE_TIME DATE, CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '',
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40) TENANT_ID VARCHAR2(40)
); );
@@ -42,9 +40,7 @@ comment on column FLOW_DEFINITION.LISTENER_TYPE is '监听器类型';
comment on column FLOW_DEFINITION.LISTENER_PATH is '监听器路径'; comment on column FLOW_DEFINITION.LISTENER_PATH is '监听器路径';
comment on column FLOW_DEFINITION.EXT is '扩展字段,预留给业务系统使用'; comment on column FLOW_DEFINITION.EXT is '扩展字段,预留给业务系统使用';
comment on column FLOW_DEFINITION.CREATE_TIME is '创建时间'; comment on column FLOW_DEFINITION.CREATE_TIME is '创建时间';
comment on column FLOW_DEFINITION.CREATE_BY is '创建人';
comment on column FLOW_DEFINITION.UPDATE_TIME is '更新时间'; comment on column FLOW_DEFINITION.UPDATE_TIME is '更新时间';
comment on column FLOW_DEFINITION.UPDATE_BY is '更新人';
comment on column FLOW_DEFINITION.DEL_FLAG is '删除标志'; comment on column FLOW_DEFINITION.DEL_FLAG is '删除标志';
comment on column FLOW_DEFINITION.TENANT_ID is '租户id'; comment on column FLOW_DEFINITION.TENANT_ID is '租户id';
@@ -66,9 +62,7 @@ create table FLOW_NODE
FORM_PATH VARCHAR2(100), FORM_PATH VARCHAR2(100),
VERSION VARCHAR2(20), VERSION VARCHAR2(20),
CREATE_TIME DATE, CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '',
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
EXT CLOB, EXT CLOB,
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40), TENANT_ID VARCHAR2(40),
@@ -95,9 +89,7 @@ comment on column FLOW_NODE.FORM_CUSTOM is '审批表单是否自定义 (Y是 N
comment on column FLOW_NODE.FORM_PATH is '审批表单路径'; comment on column FLOW_NODE.FORM_PATH is '审批表单路径';
comment on column FLOW_NODE.VERSION is '版本'; comment on column FLOW_NODE.VERSION is '版本';
comment on column FLOW_NODE.CREATE_TIME is '创建时间'; comment on column FLOW_NODE.CREATE_TIME is '创建时间';
comment on column FLOW_NODE.CREATE_BY is '创建人';
comment on column FLOW_NODE.UPDATE_TIME is '更新时间'; comment on column FLOW_NODE.UPDATE_TIME is '更新时间';
comment on column FLOW_NODE.UPDATE_BY is '更新人';
comment on column FLOW_NODE.EXT is '节点扩展属性'; comment on column FLOW_NODE.EXT is '节点扩展属性';
comment on column FLOW_NODE.DEL_FLAG is '删除标志'; comment on column FLOW_NODE.DEL_FLAG is '删除标志';
comment on column FLOW_NODE.TENANT_ID is '租户id'; comment on column FLOW_NODE.TENANT_ID is '租户id';
@@ -116,9 +108,7 @@ create table FLOW_SKIP
SKIP_CONDITION VARCHAR2(200), SKIP_CONDITION VARCHAR2(200),
COORDINATE VARCHAR2(100), COORDINATE VARCHAR2(100),
CREATE_TIME DATE, CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '',
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40) TENANT_ID VARCHAR2(40)
); );
@@ -138,9 +128,7 @@ comment on column FLOW_SKIP.SKIP_TYPE is '跳转类型 (PASS审批通过 REJECT
comment on column FLOW_SKIP.SKIP_CONDITION is '跳转条件'; comment on column FLOW_SKIP.SKIP_CONDITION is '跳转条件';
comment on column FLOW_SKIP.COORDINATE is '坐标'; comment on column FLOW_SKIP.COORDINATE is '坐标';
comment on column FLOW_SKIP.CREATE_TIME is '创建时间'; comment on column FLOW_SKIP.CREATE_TIME is '创建时间';
comment on column FLOW_SKIP.CREATE_BY is '创建人';
comment on column FLOW_SKIP.UPDATE_TIME is '更新时间'; comment on column FLOW_SKIP.UPDATE_TIME is '更新时间';
comment on column FLOW_SKIP.UPDATE_BY is '更新人';
comment on column FLOW_SKIP.DEL_FLAG is '删除标志'; comment on column FLOW_SKIP.DEL_FLAG is '删除标志';
comment on column FLOW_SKIP.TENANT_ID is '租户id'; comment on column FLOW_SKIP.TENANT_ID is '租户id';
@@ -156,10 +144,9 @@ create table FLOW_INSTANCE
FLOW_STATUS VARCHAR2(20), FLOW_STATUS VARCHAR2(20),
ACTIVITY_STATUS NUMBER(1) default 1, ACTIVITY_STATUS NUMBER(1) default 1,
DEF_JSON CLOB, DEF_JSON CLOB,
CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '', CREATE_BY VARCHAR2(64) default '',
CREATE_TIME DATE,
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
EXT VARCHAR2(500), EXT VARCHAR2(500),
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40) TENANT_ID VARCHAR2(40)
@@ -179,10 +166,9 @@ comment on column FLOW_INSTANCE.VARIABLE is '任务变量';
comment on column FLOW_INSTANCE.FLOW_STATUS is '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回'; comment on column FLOW_INSTANCE.FLOW_STATUS is '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回';
comment on column FLOW_INSTANCE.ACTIVITY_STATUS is '流程激活状态0挂起 1激活'; comment on column FLOW_INSTANCE.ACTIVITY_STATUS is '流程激活状态0挂起 1激活';
comment on column FLOW_INSTANCE.DEF_JSON is '流程定义json'; comment on column FLOW_INSTANCE.DEF_JSON is '流程定义json';
comment on column FLOW_INSTANCE.CREATE_BY is '创建者';
comment on column FLOW_INSTANCE.CREATE_TIME is '创建时间'; comment on column FLOW_INSTANCE.CREATE_TIME is '创建时间';
comment on column FLOW_INSTANCE.CREATE_BY is '创建人';
comment on column FLOW_INSTANCE.UPDATE_TIME is '更新时间'; comment on column FLOW_INSTANCE.UPDATE_TIME is '更新时间';
comment on column FLOW_INSTANCE.UPDATE_BY is '更新人';
comment on column FLOW_INSTANCE.EXT is '扩展字段,预留给业务系统使用'; comment on column FLOW_INSTANCE.EXT is '扩展字段,预留给业务系统使用';
comment on column FLOW_INSTANCE.DEL_FLAG is '删除标志'; comment on column FLOW_INSTANCE.DEL_FLAG is '删除标志';
comment on column FLOW_INSTANCE.TENANT_ID is '租户id'; comment on column FLOW_INSTANCE.TENANT_ID is '租户id';
@@ -199,9 +185,7 @@ create table FLOW_TASK
FORM_CUSTOM VARCHAR2(1) default 'N', FORM_CUSTOM VARCHAR2(1) default 'N',
FORM_PATH VARCHAR2(100), FORM_PATH VARCHAR2(100),
CREATE_TIME DATE, CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '',
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40) TENANT_ID VARCHAR2(40)
); );
@@ -220,9 +204,7 @@ comment on column FLOW_TASK.FLOW_STATUS is '流程状态0待提交 1审批中
comment on column FLOW_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)'; comment on column FLOW_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)';
comment on column FLOW_TASK.FORM_PATH is '审批表单路径'; comment on column FLOW_TASK.FORM_PATH is '审批表单路径';
comment on column FLOW_TASK.CREATE_TIME is '创建时间'; comment on column FLOW_TASK.CREATE_TIME is '创建时间';
comment on column FLOW_TASK.CREATE_BY is '创建人';
comment on column FLOW_TASK.UPDATE_TIME is '更新时间'; comment on column FLOW_TASK.UPDATE_TIME is '更新时间';
comment on column FLOW_TASK.UPDATE_BY is '更新人';
comment on column FLOW_TASK.DEL_FLAG is '删除标志'; comment on column FLOW_TASK.DEL_FLAG is '删除标志';
comment on column FLOW_TASK.TENANT_ID is '租户id'; comment on column FLOW_TASK.TENANT_ID is '租户id';
@@ -289,9 +271,8 @@ create table FLOW_USER
PROCESSED_BY VARCHAR2(80), PROCESSED_BY VARCHAR2(80),
ASSOCIATED NUMBER(20) not null, ASSOCIATED NUMBER(20) not null,
CREATE_TIME DATE, CREATE_TIME DATE,
CREATE_BY VARCHAR2(64) default '', CREATE_BY VARCHAR2(80),
UPDATE_TIME DATE, UPDATE_TIME DATE,
UPDATE_BY VARCHAR2(64) default '',
DEL_FLAG VARCHAR2(1) default '0', DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40) TENANT_ID VARCHAR2(40)
); );
@@ -305,9 +286,8 @@ comment on column FLOW_USER.TYPE is '人员类型1待办任务的审批人权
comment on column FLOW_USER.PROCESSED_BY is '权限人)'; comment on column FLOW_USER.PROCESSED_BY is '权限人)';
comment on column FLOW_USER.ASSOCIATED is '任务表id'; comment on column FLOW_USER.ASSOCIATED is '任务表id';
comment on column FLOW_USER.CREATE_TIME is '创建时间'; comment on column FLOW_USER.CREATE_TIME is '创建时间';
comment on column FLOW_USER.CREATE_BY is '创建人'; comment on column FLOW_USER.CREATE_BY is '节点名称';
comment on column FLOW_USER.UPDATE_TIME is '更新时间'; comment on column FLOW_USER.UPDATE_TIME is '更新时间';
comment on column FLOW_USER.UPDATE_BY is '更新人';
comment on column FLOW_USER.DEL_FLAG is '删除标志'; comment on column FLOW_USER.DEL_FLAG is '删除标志';
comment on column FLOW_USER.TENANT_ID is '租户id'; comment on column FLOW_USER.TENANT_ID is '租户id';
@@ -319,18 +299,18 @@ create index USER_ASSOCIATED_IDX on FLOW_USER (ASSOCIATED);
-- ---------------------------- -- ----------------------------
CREATE TABLE flow_category CREATE TABLE flow_category
( (
category_id NUMBER(20) NOT NULL, category_id NUMBER (20) NOT NULL,
tenant_id VARCHAR2(20) DEFAULT '000000', tenant_id VARCHAR2 (20) DEFAULT '000000',
parent_id NUMBER(20) DEFAULT 0, parent_id NUMBER (20) DEFAULT 0,
ancestors VARCHAR2(500) DEFAULT '', ancestors VARCHAR2 (500) DEFAULT '',
category_name VARCHAR2(30) NOT NULL, category_name VARCHAR2 (30) NOT NULL,
order_num NUMBER(4) DEFAULT 0, order_num NUMBER (4) DEFAULT 0,
del_flag CHAR(1) DEFAULT '0', del_flag CHAR(1) DEFAULT '0',
create_dept NUMBER(20), create_dept NUMBER (20),
create_by NUMBER(20), create_by NUMBER (20),
create_time DATE, create_time DATE,
update_by NUMBER(20), update_by NUMBER (20),
update_time DATE update_time DATE
); );
alter table flow_category add constraint pk_flow_category primary key (category_id); alter table flow_category add constraint pk_flow_category primary key (category_id);
@@ -364,19 +344,19 @@ INSERT INTO flow_category VALUES (109, '000000', 102, '0,100,102', '离职', 2,
-- 流程spel表达式定义表 -- 流程spel表达式定义表
-- ---------------------------- -- ----------------------------
CREATE TABLE flow_spel ( CREATE TABLE flow_spel (
id NUMBER(20) NOT NULL, id NUMBER(20) NOT NULL,
component_name VARCHAR2(255), component_name VARCHAR2(255),
method_name VARCHAR2(255), method_name VARCHAR2(255),
method_params VARCHAR2(255), method_params VARCHAR2(255),
view_spel VARCHAR2(255), view_spel VARCHAR2(255),
remark VARCHAR2(255), remark VARCHAR2(255),
status CHAR(1) DEFAULT '0', status CHAR(1) DEFAULT '0',
del_flag CHAR(1) DEFAULT '0', del_flag CHAR(1) DEFAULT '0',
create_dept NUMBER(20), create_dept NUMBER(20),
create_by NUMBER(20), create_by NUMBER(20),
create_time DATE, create_time DATE,
update_by NUMBER(20), update_by NUMBER(20),
update_time DATE update_time DATE
); );
alter table flow_spel add constraint pk_flow_spel primary key (id); alter table flow_spel add constraint pk_flow_spel primary key (id);
@@ -438,19 +418,19 @@ COMMENT ON COLUMN flow_instance_biz_ext.business_id IS '业务Id';
-- ---------------------------- -- ----------------------------
CREATE TABLE test_leave CREATE TABLE test_leave
( (
id NUMBER (20) NOT NULL, id NUMBER (20) NOT NULL,
tenant_id VARCHAR2 (20) DEFAULT '000000', tenant_id VARCHAR2 (20) DEFAULT '000000',
apply_code VARCHAR2 (50) NOT NULL, apply_code VARCHAR2 (50) NOT NULL,
leave_type VARCHAR2 (255) NOT NULL, leave_type VARCHAR2 (255) NOT NULL,
start_date DATE NOT NULL, start_date DATE NOT NULL,
end_date DATE NOT NULL, end_date DATE NOT NULL,
leave_days NUMBER (10) NOT NULL, leave_days NUMBER (10) NOT NULL,
remark VARCHAR2 (255), remark VARCHAR2 (255),
status VARCHAR2 (255), status VARCHAR2 (255),
create_dept NUMBER (20), create_dept NUMBER (20),
create_by NUMBER (20), create_by NUMBER (20),
create_time DATE, create_time DATE,
update_by NUMBER (20), update_by NUMBER (20),
update_time DATE update_time DATE
); );

View File

@@ -14,9 +14,7 @@ CREATE TABLE flow_definition
listener_path varchar(400) NULL, listener_path varchar(400) NULL,
ext varchar(500) NULL, ext varchar(500) NULL,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying,
update_time timestamp NULL, update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
CONSTRAINT flow_definition_pkey PRIMARY KEY (id) CONSTRAINT flow_definition_pkey PRIMARY KEY (id)
@@ -37,9 +35,7 @@ COMMENT ON COLUMN flow_definition.listener_type IS '监听器类型';
COMMENT ON COLUMN flow_definition.listener_path IS '监听器路径'; COMMENT ON COLUMN flow_definition.listener_path IS '监听器路径';
COMMENT ON COLUMN flow_definition.ext IS '扩展字段,预留给业务系统使用'; COMMENT ON COLUMN flow_definition.ext IS '扩展字段,预留给业务系统使用';
COMMENT ON COLUMN flow_definition.create_time IS '创建时间'; COMMENT ON COLUMN flow_definition.create_time IS '创建时间';
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
COMMENT ON COLUMN flow_definition.update_time IS '更新时间'; COMMENT ON COLUMN flow_definition.update_time IS '更新时间';
COMMENT ON COLUMN flow_definition.update_by IS '更新人';
COMMENT ON COLUMN flow_definition.del_flag IS '删除标志'; COMMENT ON COLUMN flow_definition.del_flag IS '删除标志';
COMMENT ON COLUMN flow_definition.tenant_id IS '租户id'; COMMENT ON COLUMN flow_definition.tenant_id IS '租户id';
@@ -61,10 +57,8 @@ CREATE TABLE flow_node
form_custom bpchar(1) NULL DEFAULT 'N':: character varying, form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
form_path varchar(100) NULL, form_path varchar(100) NULL,
"version" varchar(20) NOT NULL, "version" varchar(20) NOT NULL,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying, update_time timestamp NULL,
update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
ext text NULL, ext text NULL,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
@@ -89,9 +83,7 @@ COMMENT ON COLUMN flow_node.form_custom IS '审批表单是否自定义Y是 N
COMMENT ON COLUMN flow_node.form_path IS '审批表单路径'; COMMENT ON COLUMN flow_node.form_path IS '审批表单路径';
COMMENT ON COLUMN flow_node."version" IS '版本'; COMMENT ON COLUMN flow_node."version" IS '版本';
COMMENT ON COLUMN flow_node.create_time IS '创建时间'; COMMENT ON COLUMN flow_node.create_time IS '创建时间';
COMMENT ON COLUMN flow_node.create_by IS '创建人';
COMMENT ON COLUMN flow_node.update_time IS '更新时间'; COMMENT ON COLUMN flow_node.update_time IS '更新时间';
COMMENT ON COLUMN flow_node.update_by IS '更新人';
COMMENT ON COLUMN flow_node.ext IS '节点扩展属性'; COMMENT ON COLUMN flow_node.ext IS '节点扩展属性';
COMMENT ON COLUMN flow_node.del_flag IS '删除标志'; COMMENT ON COLUMN flow_node.del_flag IS '删除标志';
COMMENT ON COLUMN flow_node.tenant_id IS '租户id'; COMMENT ON COLUMN flow_node.tenant_id IS '租户id';
@@ -110,9 +102,7 @@ CREATE TABLE flow_skip
skip_condition varchar(200) NULL, skip_condition varchar(200) NULL,
coordinate varchar(100) NULL, coordinate varchar(100) NULL,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying,
update_time timestamp NULL, update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
CONSTRAINT flow_skip_pkey PRIMARY KEY (id) CONSTRAINT flow_skip_pkey PRIMARY KEY (id)
@@ -130,9 +120,7 @@ COMMENT ON COLUMN flow_skip.skip_type IS '跳转类型PASS审批通过 REJECT
COMMENT ON COLUMN flow_skip.skip_condition IS '跳转条件'; COMMENT ON COLUMN flow_skip.skip_condition IS '跳转条件';
COMMENT ON COLUMN flow_skip.coordinate IS '坐标'; COMMENT ON COLUMN flow_skip.coordinate IS '坐标';
COMMENT ON COLUMN flow_skip.create_time IS '创建时间'; COMMENT ON COLUMN flow_skip.create_time IS '创建时间';
COMMENT ON COLUMN flow_skip.create_by IS '创建人';
COMMENT ON COLUMN flow_skip.update_time IS '更新时间'; COMMENT ON COLUMN flow_skip.update_time IS '更新时间';
COMMENT ON COLUMN flow_skip.update_by IS '更新人';
COMMENT ON COLUMN flow_skip.del_flag IS '删除标志'; COMMENT ON COLUMN flow_skip.del_flag IS '删除标志';
COMMENT ON COLUMN flow_skip.tenant_id IS '租户id'; COMMENT ON COLUMN flow_skip.tenant_id IS '租户id';
@@ -148,10 +136,9 @@ CREATE TABLE flow_instance
flow_status varchar(20) NOT NULL, flow_status varchar(20) NOT NULL,
activity_status int2 NOT NULL DEFAULT 1, activity_status int2 NOT NULL DEFAULT 1,
def_json text NULL, def_json text NULL,
create_by varchar(64) NULL DEFAULT '':: character varying,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying,
update_time timestamp NULL, update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
ext varchar(500) NULL, ext varchar(500) NULL,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
@@ -169,10 +156,9 @@ COMMENT ON COLUMN flow_instance.variable IS '任务变量';
COMMENT ON COLUMN flow_instance.flow_status IS '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回'; COMMENT ON COLUMN flow_instance.flow_status IS '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回';
COMMENT ON COLUMN flow_instance.activity_status IS '流程激活状态0挂起 1激活'; COMMENT ON COLUMN flow_instance.activity_status IS '流程激活状态0挂起 1激活';
COMMENT ON COLUMN flow_instance.def_json IS '流程定义json'; COMMENT ON COLUMN flow_instance.def_json IS '流程定义json';
COMMENT ON COLUMN flow_instance.create_by IS '创建者';
COMMENT ON COLUMN flow_instance.create_time IS '创建时间'; COMMENT ON COLUMN flow_instance.create_time IS '创建时间';
COMMENT ON COLUMN flow_instance.create_by IS '创建人';
COMMENT ON COLUMN flow_instance.update_time IS '更新时间'; COMMENT ON COLUMN flow_instance.update_time IS '更新时间';
COMMENT ON COLUMN flow_instance.update_by IS '更新人';
COMMENT ON COLUMN flow_instance.ext IS '扩展字段,预留给业务系统使用'; COMMENT ON COLUMN flow_instance.ext IS '扩展字段,预留给业务系统使用';
COMMENT ON COLUMN flow_instance.del_flag IS '删除标志'; COMMENT ON COLUMN flow_instance.del_flag IS '删除标志';
COMMENT ON COLUMN flow_instance.tenant_id IS '租户id'; COMMENT ON COLUMN flow_instance.tenant_id IS '租户id';
@@ -185,13 +171,11 @@ CREATE TABLE flow_task
node_code varchar(100) NOT NULL, node_code varchar(100) NOT NULL,
node_name varchar(100) NULL, node_name varchar(100) NULL,
node_type int2 NOT NULL, node_type int2 NOT NULL,
flow_status varchar(20) NOT NULL, flow_status varchar(20) NOT NULL,
form_custom bpchar(1) NULL DEFAULT 'N':: character varying, form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
form_path varchar(100) NULL, form_path varchar(100) NULL,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying,
update_time timestamp NULL, update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
CONSTRAINT flow_task_pkey PRIMARY KEY (id) CONSTRAINT flow_task_pkey PRIMARY KEY (id)
@@ -208,9 +192,7 @@ COMMENT ON COLUMN flow_task.flow_status IS '流程状态0待提交 1审批中
COMMENT ON COLUMN flow_task.form_custom IS '审批表单是否自定义Y是 N否'; COMMENT ON COLUMN flow_task.form_custom IS '审批表单是否自定义Y是 N否';
COMMENT ON COLUMN flow_task.form_path IS '审批表单路径'; COMMENT ON COLUMN flow_task.form_path IS '审批表单路径';
COMMENT ON COLUMN flow_task.create_time IS '创建时间'; COMMENT ON COLUMN flow_task.create_time IS '创建时间';
COMMENT ON COLUMN flow_task.create_by IS '创建人';
COMMENT ON COLUMN flow_task.update_time IS '更新时间'; COMMENT ON COLUMN flow_task.update_time IS '更新时间';
COMMENT ON COLUMN flow_task.update_by IS '更新人';
COMMENT ON COLUMN flow_task.del_flag IS '删除标志'; COMMENT ON COLUMN flow_task.del_flag IS '删除标志';
COMMENT ON COLUMN flow_task.tenant_id IS '租户id'; COMMENT ON COLUMN flow_task.tenant_id IS '租户id';
@@ -274,9 +256,8 @@ CREATE TABLE flow_user
processed_by varchar(80) NULL, processed_by varchar(80) NULL,
associated int8 NOT NULL, associated int8 NOT NULL,
create_time timestamp NULL, create_time timestamp NULL,
create_by varchar(64) NULL DEFAULT '':: character varying, create_by varchar(80) NULL,
update_time timestamp NULL, update_time timestamp NULL,
update_by varchar(64) NULL DEFAULT '':: character varying,
del_flag bpchar(1) NULL DEFAULT '0':: character varying, del_flag bpchar(1) NULL DEFAULT '0':: character varying,
tenant_id varchar(40) NULL, tenant_id varchar(40) NULL,
CONSTRAINT flow_user_pk PRIMARY KEY (id) CONSTRAINT flow_user_pk PRIMARY KEY (id)
@@ -292,7 +273,6 @@ COMMENT ON COLUMN flow_user.associated IS '任务表id';
COMMENT ON COLUMN flow_user.create_time IS '创建时间'; COMMENT ON COLUMN flow_user.create_time IS '创建时间';
COMMENT ON COLUMN flow_user.create_by IS '创建人'; COMMENT ON COLUMN flow_user.create_by IS '创建人';
COMMENT ON COLUMN flow_user.update_time IS '更新时间'; COMMENT ON COLUMN flow_user.update_time IS '更新时间';
COMMENT ON COLUMN flow_user.update_by IS '更新人';
COMMENT ON COLUMN flow_user.del_flag IS '删除标志'; COMMENT ON COLUMN flow_user.del_flag IS '删除标志';
COMMENT ON COLUMN flow_user.tenant_id IS '租户id'; COMMENT ON COLUMN flow_user.tenant_id IS '租户id';

View File

@@ -17,9 +17,7 @@ CREATE TABLE `flow_definition`
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径', `listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串', `ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
@@ -44,9 +42,7 @@ CREATE TABLE `flow_node`
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径', `form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`version` varchar(20) NOT NULL COMMENT '版本', `version` varchar(20) NOT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
`ext` text COMMENT '节点扩展属性', `ext` text COMMENT '节点扩展属性',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
@@ -66,9 +62,7 @@ CREATE TABLE `flow_skip`
`skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件', `skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件',
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标', `coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
@@ -86,10 +80,9 @@ CREATE TABLE `flow_instance`
`flow_status` varchar(20) NOT NULL COMMENT '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回', `flow_status` varchar(20) NOT NULL COMMENT '流程状态0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回',
`activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态0挂起 1激活', `activity_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '流程激活状态0挂起 1激活',
`def_json` text COMMENT '流程定义json', `def_json` text COMMENT '流程定义json',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
`ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用', `ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
@@ -108,9 +101,7 @@ CREATE TABLE `flow_task`
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义Y是 N否', `form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义Y是 N否',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径', `form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
@@ -127,7 +118,7 @@ CREATE TABLE `flow_his_task`
`node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关', `node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关',
`target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码', `target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码',
`target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称', `target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称',
`approver` varchar(40) DEFAULT NULL COMMENT '审批', `approver` varchar(40) DEFAULT NULL COMMENT '审批',
`cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)', `cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
`collaborator` varchar(500) DEFAULT NULL COMMENT '协作人', `collaborator` varchar(500) DEFAULT NULL COMMENT '协作人',
`skip_type` varchar(10) NOT NULL COMMENT '流转类型PASS通过 REJECT退回 NONE无动作', `skip_type` varchar(10) NOT NULL COMMENT '流转类型PASS通过 REJECT退回 NONE无动作',
@@ -154,7 +145,6 @@ CREATE TABLE `flow_user`
`create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(80) DEFAULT NULL COMMENT '创建人', `create_by` varchar(80) DEFAULT NULL COMMENT '创建人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间',
`update_by` varchar(64) DEFAULT '' COMMENT '创建人',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id', `tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,

View File

@@ -16,9 +16,7 @@ CREATE TABLE flow_definition (
listener_path nvarchar(400) NULL, listener_path nvarchar(400) NULL,
ext nvarchar(500) NULL, ext nvarchar(500) NULL,
create_time datetime2(7) NULL, create_time datetime2(7) NULL,
create_by nvarchar(64) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
CONSTRAINT PK__flow_def__3213E83FEE39AE33 PRIMARY KEY CLUSTERED (id) CONSTRAINT PK__flow_def__3213E83FEE39AE33 PRIMARY KEY CLUSTERED (id)
@@ -126,13 +124,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'create_time' 'COLUMN', N'create_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_definition',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'更新时间', 'MS_Description', N'更新时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -140,13 +131,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_definition',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'删除标志', 'MS_Description', N'删除标志',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -185,9 +169,7 @@ CREATE TABLE flow_node (
form_path nvarchar(100) NULL, form_path nvarchar(100) NULL,
version nvarchar(20) NOT NULL, version nvarchar(20) NOT NULL,
create_time datetime2(7) NULL, create_time datetime2(7) NULL,
create_by nvarchar(64) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
ext nvarchar(max) NULL, ext nvarchar(max) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
@@ -317,13 +299,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'create_time' 'COLUMN', N'create_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'更新时间', 'MS_Description', N'更新时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -331,13 +306,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'节点扩展属性', 'MS_Description', N'节点扩展属性',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -378,9 +346,7 @@ CREATE TABLE flow_skip (
skip_condition nvarchar(200) NULL, skip_condition nvarchar(200) NULL,
coordinate nvarchar(100) NULL, coordinate nvarchar(100) NULL,
create_time datetime2(7) NULL, create_time datetime2(7) NULL,
create_by nvarchar(64) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
CONSTRAINT PK__flow_ski__3213E83F073FEE6E PRIMARY KEY CLUSTERED (id) CONSTRAINT PK__flow_ski__3213E83F073FEE6E PRIMARY KEY CLUSTERED (id)
@@ -467,13 +433,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'create_time' 'COLUMN', N'create_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_skip',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'更新时间', 'MS_Description', N'更新时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -481,13 +440,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_skip',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'删除标志', 'MS_Description', N'删除标志',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -519,10 +471,9 @@ CREATE TABLE flow_instance (
flow_status nvarchar(20) NOT NULL, flow_status nvarchar(20) NOT NULL,
activity_status tinyint DEFAULT('1') NULL, activity_status tinyint DEFAULT('1') NULL,
def_json nvarchar(max) NULL, def_json nvarchar(max) NULL,
create_time datetime2(7) NULL,
create_by nvarchar(64) NULL, create_by nvarchar(64) NULL,
create_time datetime2(7) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
ext nvarchar(500) NULL, ext nvarchar(500) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
@@ -604,6 +555,13 @@ EXEC sp_addextendedproperty
'COLUMN', N'def_json' 'COLUMN', N'def_json'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建者',
'SCHEMA', N'dbo',
'TABLE', N'flow_instance',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'创建时间', 'MS_Description', N'创建时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -611,13 +569,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'create_time' 'COLUMN', N'create_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_instance',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'更新时间', 'MS_Description', N'更新时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -625,13 +576,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_instance',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'扩展字段,预留给业务系统使用', 'MS_Description', N'扩展字段,预留给业务系统使用',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -670,9 +614,7 @@ CREATE TABLE flow_task (
form_custom nchar(1) DEFAULT('N') NULL, form_custom nchar(1) DEFAULT('N') NULL,
form_path nvarchar(100) NULL, form_path nvarchar(100) NULL,
create_time datetime2(7) NULL, create_time datetime2(7) NULL,
create_by nvarchar(64) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
CONSTRAINT PK__flow_tas__3213E83F5AE1F1BA PRIMARY KEY CLUSTERED (id) CONSTRAINT PK__flow_tas__3213E83F5AE1F1BA PRIMARY KEY CLUSTERED (id)
@@ -752,13 +694,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'create_time' 'COLUMN', N'create_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_task',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'更新时间', 'MS_Description', N'更新时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -766,13 +701,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_task',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'删除标志', 'MS_Description', N'删除标志',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
@@ -997,9 +925,8 @@ CREATE TABLE flow_user (
processed_by nvarchar(80) NULL, processed_by nvarchar(80) NULL,
associated bigint NOT NULL, associated bigint NOT NULL,
create_time datetime2(7) NULL, create_time datetime2(7) NULL,
create_by nvarchar(64) NULL, create_by nvarchar(80) NULL,
update_time datetime2(7) NULL, update_time datetime2(7) NULL,
update_by nvarchar(64) NULL,
del_flag nchar(1) DEFAULT('0') NULL, del_flag nchar(1) DEFAULT('0') NULL,
tenant_id nvarchar(40) NULL, tenant_id nvarchar(40) NULL,
CONSTRAINT PK__flow_use__3213E83FFA38CA8B PRIMARY KEY CLUSTERED (id) CONSTRAINT PK__flow_use__3213E83FFA38CA8B PRIMARY KEY CLUSTERED (id)
@@ -1063,13 +990,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'update_time' 'COLUMN', N'update_time'
GO GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_user',
'COLUMN', N'update_by'
GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'删除标志', 'MS_Description', N'删除标志',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',

View File

@@ -1,25 +0,0 @@
ALTER TABLE flow_definition ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_definition ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
COMMENT ON COLUMN flow_definition.update_by IS '更新人';
ALTER TABLE flow_node ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_node ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_node.create_by IS '创建人';
COMMENT ON COLUMN flow_node.update_by IS '更新人';
ALTER TABLE flow_skip ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_skip ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_skip.create_by IS '创建人';
COMMENT ON COLUMN flow_skip.update_by IS '更新人';
ALTER TABLE flow_instance ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_instance.update_by IS '更新人';
ALTER TABLE flow_task ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_task ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_task.create_by IS '创建人';
COMMENT ON COLUMN flow_task.update_by IS '更新人';
ALTER TABLE flow_user ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_user.update_by IS '更新人';

View File

@@ -1,25 +0,0 @@
ALTER TABLE flow_definition ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_definition ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
COMMENT ON COLUMN flow_definition.update_by IS '更新人';
ALTER TABLE flow_node ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_node ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_node.create_by IS '创建人';
COMMENT ON COLUMN flow_node.update_by IS '更新人';
ALTER TABLE flow_skip ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_skip ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_skip.create_by IS '创建人';
COMMENT ON COLUMN flow_skip.update_by IS '更新人';
ALTER TABLE flow_instance ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_instance.update_by IS '更新人';
ALTER TABLE flow_task ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
ALTER TABLE flow_task ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_task.create_by IS '创建人';
COMMENT ON COLUMN flow_task.update_by IS '更新人';
ALTER TABLE flow_user ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
COMMENT ON COLUMN flow_user.update_by IS '更新人';

View File

@@ -1,99 +0,0 @@
ALTER TABLE flow_definition ADD create_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_definition_create_by DEFAULT '';
GO
ALTER TABLE flow_definition ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_definition_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_definition',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_definition',
'COLUMN', N'update_by'
GO
ALTER TABLE flow_node ADD create_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_node_create_by DEFAULT '';
GO
ALTER TABLE flow_node ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_node_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'update_by'
GO
ALTER TABLE flow_skip ADD create_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_skip_create_by DEFAULT '';
GO
ALTER TABLE flow_skip ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_skip_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_skip',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_skip',
'COLUMN', N'update_by'
GO
ALTER TABLE flow_instance ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_instance_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_instance',
'COLUMN', N'update_by'
GO
ALTER TABLE flow_task ADD create_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_task_create_by DEFAULT '';
GO
ALTER TABLE flow_task ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_task_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'创建人',
'SCHEMA', N'dbo',
'TABLE', N'flow_task',
'COLUMN', N'create_by'
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_task',
'COLUMN', N'update_by'
GO
ALTER TABLE flow_user ADD update_by nvarchar(64) NOT NULL CONSTRAINT DF_flow_user_update_by DEFAULT '';
GO
EXEC sp_addextendedproperty
'MS_Description', N'更新人',
'SCHEMA', N'dbo',
'TABLE', N'flow_user',
'COLUMN', N'update_by'
GO

View File

@@ -1,21 +0,0 @@
ALTER TABLE `flow_definition`
ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`,
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;
ALTER TABLE `flow_node`
ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`,
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;
ALTER TABLE `flow_skip`
ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`,
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;
ALTER TABLE `flow_instance`
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;
ALTER TABLE `flow_task`
ADD COLUMN `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人' AFTER `create_time`,
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;
ALTER TABLE `flow_user`
ADD COLUMN `update_by` varchar(64) NULL DEFAULT NULL COMMENT '更新人' AFTER `update_time`;