mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-11-20 16:13:49 +08:00
Compare commits
41 Commits
5f2c4205a5
...
5.X
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b58085fde1 | ||
|
|
5ea8d8c950 | ||
|
|
3318109044 | ||
|
|
aa1f89e253 | ||
|
|
35c77403d6 | ||
|
|
603fb7b92d | ||
|
|
6cf0c79433 | ||
|
|
3934e119d6 | ||
|
|
33a6a21fdf | ||
|
|
7800b1259f | ||
|
|
3623fc33d9 | ||
|
|
f8612eb52e | ||
|
|
8d32b0311a | ||
|
|
60bcd2d6e9 | ||
|
|
5ccb511064 | ||
|
|
78baf6497a | ||
|
|
0719e53f01 | ||
|
|
b30ffa952f | ||
|
|
fd5d028e95 | ||
|
|
64100cf1ff | ||
|
|
7e7d857ba5 | ||
|
|
d22b2a10df | ||
|
|
957a4d1fcd | ||
|
|
49ef8378fe | ||
|
|
57dd6831d3 | ||
|
|
8aa60abb1f | ||
|
|
7a9f51fc7a | ||
|
|
159e30c982 | ||
|
|
7334d91d6b | ||
|
|
95c01301f6 | ||
|
|
296466fa13 | ||
|
|
3c8d864b5f | ||
|
|
ea50a57602 | ||
|
|
7e14b98676 | ||
|
|
015b406001 | ||
|
|
098d3347a0 | ||
|
|
08d4493994 | ||
|
|
367d739e2d | ||
|
|
d6688a367d | ||
|
|
0b331796e2 | ||
|
|
456620b638 |
@@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="ruoyi-monitor-admin" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.5.0" />
|
||||
<option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.5.1" />
|
||||
<option name="buildOnly" value="true" />
|
||||
<option name="sourceFilePath" value="ruoyi-extend/ruoyi-monitor-admin/Dockerfile" />
|
||||
</settings>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="ruoyi-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="ruoyi/ruoyi-server:5.5.0" />
|
||||
<option name="imageTag" value="ruoyi/ruoyi-server:5.5.1" />
|
||||
<option name="buildOnly" value="true" />
|
||||
<option name="sourceFilePath" value="ruoyi-admin/Dockerfile" />
|
||||
</settings>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.5.0" />
|
||||
<option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.5.1" />
|
||||
<option name="buildOnly" value="true" />
|
||||
<option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" />
|
||||
</settings>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/5.X/LICENSE)
|
||||
[](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
|
||||
<br>
|
||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus)
|
||||
[](https://gitee.com/dromara/RuoYi-Vue-Plus)
|
||||
[]()
|
||||
[]()
|
||||
[]()
|
||||
|
||||
8
pom.xml
8
pom.xml
@@ -13,8 +13,8 @@
|
||||
<description>Dromara RuoYi-Vue-Plus多租户管理系统</description>
|
||||
|
||||
<properties>
|
||||
<revision>5.5.0</revision>
|
||||
<spring-boot.version>3.5.6</spring-boot.version>
|
||||
<revision>5.5.1</revision>
|
||||
<spring-boot.version>3.5.7</spring-boot.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>17</java.version>
|
||||
@@ -27,7 +27,7 @@
|
||||
<mybatis-plus.version>3.5.14</mybatis-plus.version>
|
||||
<p6spy.version>3.9.1</p6spy.version>
|
||||
<hutool.version>5.8.40</hutool.version>
|
||||
<spring-boot-admin.version>3.5.3</spring-boot-admin.version>
|
||||
<spring-boot-admin.version>3.5.5</spring-boot-admin.version>
|
||||
<redisson.version>3.51.0</redisson.version>
|
||||
<lock4j.version>2.2.7</lock4j.version>
|
||||
<dynamic-ds.version>4.3.1</dynamic-ds.version>
|
||||
@@ -48,7 +48,7 @@
|
||||
<!-- 面向运行时的D-ORM依赖 -->
|
||||
<anyline.version>8.7.2-20250603</anyline.version>
|
||||
<!-- 工作流配置 -->
|
||||
<warm-flow.version>1.8.1</warm-flow.version>
|
||||
<warm-flow.version>1.8.2</warm-flow.version>
|
||||
|
||||
<!-- 插件版本 -->
|
||||
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</description>
|
||||
|
||||
<properties>
|
||||
<revision>5.5.0</revision>
|
||||
<revision>5.5.1</revision>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
|
||||
@@ -28,7 +28,7 @@ public class ExcelBigNumberConvert implements Converter<Long> {
|
||||
|
||||
@Override
|
||||
public CellDataTypeEnum supportExcelTypeKey() {
|
||||
return CellDataTypeEnum.STRING;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
package org.dromara.common.sse.core;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.common.sse.dto.SseMessageDto;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
@@ -26,6 +33,12 @@ public class SseEmitterManager {
|
||||
|
||||
private final static Map<Long, Map<String, SseEmitter>> USER_TOKEN_EMITTERS = new ConcurrentHashMap<>();
|
||||
|
||||
public SseEmitterManager() {
|
||||
// 定时执行 SSE 心跳检测
|
||||
SpringUtils.getBean(ScheduledExecutorService.class)
|
||||
.scheduleWithFixedDelay(this::sseMonitor, 60L, 60L, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 建立与指定用户的 SSE 连接
|
||||
*
|
||||
@@ -38,6 +51,12 @@ public class SseEmitterManager {
|
||||
// 每个用户可以有多个 SSE 连接,通过 token 进行区分
|
||||
Map<String, SseEmitter> emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userId, k -> new ConcurrentHashMap<>());
|
||||
|
||||
// 关闭已存在的SseEmitter,防止超过最大连接数
|
||||
SseEmitter oldEmitter = emitters.remove(token);
|
||||
if (oldEmitter != null) {
|
||||
oldEmitter.complete();
|
||||
}
|
||||
|
||||
// 创建一个新的 SseEmitter 实例,超时时间设置为一天 避免连接之后直接关闭浏览器导致连接停滞
|
||||
SseEmitter emitter = new SseEmitter(86400000L);
|
||||
|
||||
@@ -97,6 +116,44 @@ public class SseEmitterManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* SSE 心跳检测,关闭无效连接
|
||||
*/
|
||||
public void sseMonitor() {
|
||||
final SseEmitter.SseEventBuilder heartbeat = SseEmitter.event().comment("heartbeat");
|
||||
// 记录需要移除的用户ID
|
||||
List<Long> toRemoveUsers = new ArrayList<>();
|
||||
|
||||
USER_TOKEN_EMITTERS.forEach((userId, emitterMap) -> {
|
||||
if (CollUtil.isEmpty(emitterMap)) {
|
||||
toRemoveUsers.add(userId);
|
||||
return;
|
||||
}
|
||||
|
||||
emitterMap.entrySet().removeIf(entry -> {
|
||||
try {
|
||||
entry.getValue().send(heartbeat);
|
||||
return false;
|
||||
} catch (Exception ex) {
|
||||
try {
|
||||
entry.getValue().complete();
|
||||
} catch (Exception ignore) {
|
||||
// 忽略重复关闭异常
|
||||
}
|
||||
return true; // 发送失败 → 移除该连接
|
||||
}
|
||||
});
|
||||
|
||||
// 移除空连接用户
|
||||
if (emitterMap.isEmpty()) {
|
||||
toRemoveUsers.add(userId);
|
||||
}
|
||||
});
|
||||
|
||||
// 循环结束后统一清理空用户,避免并发修改异常
|
||||
toRemoveUsers.forEach(USER_TOKEN_EMITTERS::remove);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅SSE消息主题,并提供一个消费者函数来处理接收到的消息
|
||||
*
|
||||
|
||||
@@ -46,8 +46,14 @@ public class TranslationHandler extends JsonSerializer<Object> implements Contex
|
||||
gen.writeNull();
|
||||
return;
|
||||
}
|
||||
Object result = trans.translation(value, translation.other());
|
||||
gen.writeObject(result);
|
||||
try {
|
||||
Object result = trans.translation(value, translation.other());
|
||||
gen.writeObject(result);
|
||||
} catch (Exception e) {
|
||||
log.error("翻译处理异常,type: {}, value: {}", translation.type(), value, e);
|
||||
// 出现异常时输出原始值而不是中断序列化
|
||||
gen.writeObject(value);
|
||||
}
|
||||
} else {
|
||||
gen.writeObject(value);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.springframework.web.bind.MissingPathVariableException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
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.servlet.NoHandlerFoundException;
|
||||
|
||||
@@ -123,7 +124,7 @@ public class GlobalExceptionHandler {
|
||||
*/
|
||||
@ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
@ExceptionHandler(IOException.class)
|
||||
public void handleRuntimeException(IOException e, HttpServletRequest request) {
|
||||
public void handleIoException(IOException e, HttpServletRequest request) {
|
||||
String requestURI = request.getRequestURI();
|
||||
if (requestURI.contains("sse")) {
|
||||
// sse 经常性连接中断 例如关闭浏览器 直接屏蔽
|
||||
@@ -132,6 +133,13 @@ public class GlobalExceptionHandler {
|
||||
log.error("请求地址'{}',连接中断", requestURI, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* sse 连接超时异常 不需要处理
|
||||
*/
|
||||
@ExceptionHandler(AsyncRequestTimeoutException.class)
|
||||
public void handleRuntimeException(AsyncRequestTimeoutException e) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截未知的运行时异常
|
||||
*/
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
package org.dromara.system.controller.system;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
import org.dromara.system.domain.bo.SysClientBo;
|
||||
import org.dromara.system.service.ISysClientService;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.bo.SysClientBo;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
import org.dromara.system.service.ISysClientService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 客户端管理
|
||||
@@ -76,6 +77,9 @@ public class SysClientController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysClientBo bo) {
|
||||
if (!sysClientService.checkClickKeyUnique(bo)) {
|
||||
return R.fail("新增客户端'" + bo.getClientKey() + "'失败,客户端key已存在");
|
||||
}
|
||||
return toAjax(sysClientService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@@ -87,6 +91,9 @@ public class SysClientController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysClientBo bo) {
|
||||
if (!sysClientService.checkClickKeyUnique(bo)) {
|
||||
return R.fail("修改客户端'" + bo.getClientKey() + "'失败,客户端key已存在");
|
||||
}
|
||||
return toAjax(sysClientService.updateByBo(bo));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package org.dromara.system.service;
|
||||
|
||||
import org.dromara.system.domain.SysClient;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
import org.dromara.system.domain.bo.SysClientBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.bo.SysClientBo;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -57,4 +56,11 @@ public interface ISysClientService {
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 校验客户端key是否唯一
|
||||
*
|
||||
* @param client 客户端信息
|
||||
* @return 结果
|
||||
*/
|
||||
boolean checkClickKeyUnique(SysClientBo client);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.dromara.system.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@@ -136,4 +137,19 @@ public class SysClientServiceImpl implements ISysClientService {
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验客户端key是否唯一
|
||||
*
|
||||
* @param client 客户端信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public boolean checkClickKeyUnique(SysClientBo client) {
|
||||
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysClient>()
|
||||
.eq(SysClient::getClientKey, client.getClientKey())
|
||||
.ne(ObjectUtil.isNotNull(client.getId()), SysClient::getId, client.getId()));
|
||||
return !exist;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -241,6 +241,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||
.setWeight(menu.getOrderNum());
|
||||
menuTree.put("menuType", menu.getMenuType());
|
||||
menuTree.put("icon", menu.getIcon());
|
||||
menuTree.put("visible", menu.getVisible());
|
||||
menuTree.put("status", menu.getStatus());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
w.in(SysUser::getDeptId, ids);
|
||||
}).orderByAsc(SysUser::getUserId);
|
||||
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
|
||||
wrapper.notIn(SysUser::getUserId, StringUtils.splitList(user.getExcludeUserIds()));
|
||||
wrapper.notIn(SysUser::getUserId, StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong));
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@@ -72,8 +72,8 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
public void start(ListenerVariable listenerVariable) {
|
||||
String ext = listenerVariable.getNode().getExt();
|
||||
if (StringUtils.isNotBlank(ext)) {
|
||||
NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext);
|
||||
Map<String, Object> variable = listenerVariable.getVariable();
|
||||
NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext, variable);
|
||||
Set<String> copyList = nodeExt.getCopySettings();
|
||||
if (CollUtil.isNotEmpty(copyList)) {
|
||||
List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
|
||||
@@ -180,12 +180,14 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.dromara.workflow.service;
|
||||
|
||||
import org.dromara.workflow.domain.vo.NodeExtVo;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 流程节点扩展属性 服务层
|
||||
*
|
||||
@@ -24,9 +26,10 @@ public interface IFlwNodeExtService {
|
||||
* {"code": "VariablesEnum", "value": "key1=value1,key2=value2"}
|
||||
* ]
|
||||
*
|
||||
* @param ext 扩展属性 JSON 字符串
|
||||
* @param ext 扩展属性 JSON 字符串
|
||||
* @param variable 流程变量
|
||||
* @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map
|
||||
*/
|
||||
NodeExtVo parseNodeExt(String ext);
|
||||
NodeExtVo parseNodeExt(String ext, Map<String, Object> variable);
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,9 @@ import org.dromara.common.core.domain.dto.DictTypeDTO;
|
||||
import org.dromara.common.core.service.DictService;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.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.vo.NodeExt;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
@@ -45,7 +48,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
CopySettingEnum.class.getSimpleName(),
|
||||
Map.of(
|
||||
"label", "抄送对象",
|
||||
"type", 2,
|
||||
"type", 5,
|
||||
"must", false,
|
||||
"multiple", false,
|
||||
"desc", "设置该节点的抄送办理人"
|
||||
@@ -56,7 +59,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
"type", 2,
|
||||
"must", false,
|
||||
"multiple", false,
|
||||
"desc", "节点执行时可以使用的自定义参数"
|
||||
"desc", "节点执行时可设置自定义参数,多个参数以逗号分隔,如:key1=value1,key2=value2"
|
||||
),
|
||||
ButtonPermissionEnum.class.getSimpleName(),
|
||||
Map.of(
|
||||
@@ -137,7 +140,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
childNode.setCode(simpleName);
|
||||
// label名称
|
||||
childNode.setLabel(Convert.toStr(map.get("label")));
|
||||
// 1:输入框 2:文本域 3:下拉框 4:选择框
|
||||
// 1:输入框 2:文本域 3:下拉框 4:选择框 5:用户选择器
|
||||
childNode.setType(Convert.toInt(map.get("type"), 1));
|
||||
// 是否必填
|
||||
childNode.setMust(Convert.toBool(map.get("must"), false));
|
||||
@@ -170,7 +173,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
childNode.setCode(dictType);
|
||||
// label名称
|
||||
childNode.setLabel(dictTypeDTO.getDictName());
|
||||
// 1:输入框 2:文本域 3:下拉框 4:选择框
|
||||
// 1:输入框 2:文本域 3:下拉框 4:选择框 5:用户选择器
|
||||
childNode.setType(3);
|
||||
// 是否必填
|
||||
childNode.setMust(false);
|
||||
@@ -197,19 +200,23 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
* <p>示例 JSON:
|
||||
* [
|
||||
* {"code": "ButtonPermissionEnum", "value": "back,termination"},
|
||||
* {"code": "CopySettingEnum", "value": "1"},
|
||||
* {"code": "CopySettingEnum", "value": "1,3,4,#{@spelRuleComponent.selectDeptLeaderById(#deptId", "#roleId)}"},
|
||||
* {"code": "VariablesEnum", "value": "key1=value1,key2=value2"}
|
||||
* ]
|
||||
*
|
||||
* @param ext 扩展属性 JSON 字符串
|
||||
* @param ext 扩展属性 JSON 字符串
|
||||
* @param variable 流程变量
|
||||
* @return NodeExtVo 对象,封装按钮权限列表、抄送对象集合和自定义参数 Map
|
||||
*/
|
||||
@Override
|
||||
public NodeExtVo parseNodeExt(String ext) {
|
||||
public NodeExtVo parseNodeExt(String ext, Map<String, Object> variable) {
|
||||
NodeExtVo nodeExtVo = new NodeExtVo();
|
||||
|
||||
// 解析 JSON 为 Dict 列表
|
||||
List<Dict> nodeExtMap = JsonUtils.parseArrayMap(ext);
|
||||
if (ObjectUtil.isEmpty(nodeExtMap)) {
|
||||
return nodeExtVo;
|
||||
}
|
||||
|
||||
for (Dict nodeExt : nodeExtMap) {
|
||||
String code = nodeExt.getStr("code");
|
||||
@@ -234,8 +241,20 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
nodeExtVo.setButtonPermissions(buttonList);
|
||||
|
||||
} 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 集合
|
||||
nodeExtVo.setCopySettings(StringUtils.str2Set(value, StringUtils.SEPARATOR));
|
||||
nodeExtVo.setCopySettings(new HashSet<>(copySettings));
|
||||
|
||||
} else if (VariablesEnum.class.getSimpleName().equals(code)) {
|
||||
// 解析自定义参数
|
||||
@@ -254,4 +273,82 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -382,7 +382,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
|
||||
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
|
||||
queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
|
||||
queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
|
||||
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
@@ -457,7 +456,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
|
||||
wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
|
||||
}
|
||||
wrapper.orderByDesc("t.create_time");
|
||||
wrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@@ -599,16 +598,24 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
if (ObjectUtil.isNull(flowNode)) {
|
||||
throw new NullPointerException("当前【" + flowTaskVo.getNodeCode() + "】节点编码不存在");
|
||||
}
|
||||
NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt());
|
||||
NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt(), instance.getVariableMap());
|
||||
//设置按钮权限
|
||||
flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions());
|
||||
if (CollUtil.isNotEmpty(nodeExtVo.getButtonPermissions())) {
|
||||
flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions());
|
||||
} else {
|
||||
flowTaskVo.setButtonList(new ArrayList<>());
|
||||
}
|
||||
if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) {
|
||||
List<FlowCopyVo> list = StreamUtils.toList(nodeExtVo.getCopySettings(), x -> new FlowCopyVo(Convert.toLong(x)));
|
||||
flowTaskVo.setCopyList(list);
|
||||
} else {
|
||||
flowTaskVo.setCopyList(new ArrayList<>());
|
||||
}
|
||||
flowTaskVo.setVarList(nodeExtVo.getVariables());
|
||||
if (CollUtil.isNotEmpty(nodeExtVo.getVariables())) {
|
||||
flowTaskVo.setVarList(nodeExtVo.getVariables());
|
||||
} else {
|
||||
flowTaskVo.setVarList(new HashMap<>());
|
||||
}
|
||||
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
||||
flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(flwCommonService.applyNodeCode(task.getDefinitionId())));
|
||||
return flowTaskVo;
|
||||
|
||||
@@ -99,7 +99,7 @@ services:
|
||||
network_mode: "host"
|
||||
|
||||
ruoyi-server1:
|
||||
image: ruoyi/ruoyi-server:5.5.0
|
||||
image: ruoyi/ruoyi-server:5.5.1
|
||||
container_name: ruoyi-server1
|
||||
environment:
|
||||
# 时区上海
|
||||
@@ -115,7 +115,7 @@ services:
|
||||
network_mode: "host"
|
||||
|
||||
ruoyi-server2:
|
||||
image: ruoyi/ruoyi-server:5.5.0
|
||||
image: ruoyi/ruoyi-server:5.5.1
|
||||
container_name: ruoyi-server2
|
||||
environment:
|
||||
# 时区上海
|
||||
@@ -131,7 +131,7 @@ services:
|
||||
network_mode: "host"
|
||||
|
||||
ruoyi-monitor-admin:
|
||||
image: ruoyi/ruoyi-monitor-admin:5.5.0
|
||||
image: ruoyi/ruoyi-monitor-admin:5.5.1
|
||||
container_name: ruoyi-monitor-admin
|
||||
environment:
|
||||
# 时区上海
|
||||
@@ -143,7 +143,7 @@ services:
|
||||
network_mode: "host"
|
||||
|
||||
ruoyi-snailjob-server:
|
||||
image: ruoyi/ruoyi-snailjob-server:5.5.0
|
||||
image: ruoyi/ruoyi-snailjob-server:5.5.1
|
||||
container_name: ruoyi-snailjob-server
|
||||
environment:
|
||||
# 时区上海
|
||||
|
||||
@@ -4,18 +4,28 @@ error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
# 可以根据业务并发量适当调高
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types;
|
||||
default_type application/octet-stream;
|
||||
# 高效传输文件
|
||||
sendfile on;
|
||||
# 长连接超时时间
|
||||
keepalive_timeout 65;
|
||||
# 单连接最大请求数,提高长连接复用率
|
||||
keepalive_requests 100000;
|
||||
# 限制body大小
|
||||
client_max_body_size 100m;
|
||||
client_header_buffer_size 32k;
|
||||
client_body_buffer_size 512k;
|
||||
# 开启静态资源压缩
|
||||
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;
|
||||
|
||||
@@ -52,7 +62,7 @@ http {
|
||||
#ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
|
||||
#ssl_session_timeout 5m;
|
||||
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
|
||||
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
#ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
|
||||
#ssl_prefer_server_ciphers on;
|
||||
# https配置参考 end
|
||||
|
||||
@@ -78,17 +88,29 @@ http {
|
||||
}
|
||||
|
||||
location /prod-api/ {
|
||||
# 设置客户端请求头中的 Host 信息(保持原始 Host)
|
||||
proxy_set_header Host $http_host;
|
||||
# 获取客户端真实 IP
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
# 自定义头 REMOTE-HOST,记录客户端 IP
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
# 获取完整的客户端 IP 链(经过多级代理时)
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# 设置后端响应超时时间(这里是 24 小时,适合长连接/SSE)
|
||||
proxy_read_timeout 86400s;
|
||||
# sse 与 websocket参数
|
||||
# SSE (Server-Sent Events) 与 WebSocket 支持参数
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
# 禁用代理缓冲,数据直接传给客户端
|
||||
proxy_buffering off;
|
||||
# 禁用代理缓存
|
||||
proxy_cache off;
|
||||
# 按 IP 限制连接数(防 CC 攻击) 小型站:10~20 就够 中型站:50~100
|
||||
limit_conn perip 20;
|
||||
|
||||
# 按 Server 限制总并发连接数 根据服务器的最大并发处理能力来定 太小会限制合法用户访问,太大会占满服务器资源
|
||||
limit_conn perserver 500;
|
||||
proxy_pass http://server/;
|
||||
}
|
||||
|
||||
@@ -96,23 +118,37 @@ http {
|
||||
# 解决方案1 将 admin 服务 也配置成 https
|
||||
# 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
|
||||
location /admin/ {
|
||||
# 设置客户端请求头中的 Host 信息(保持原始 Host)
|
||||
proxy_set_header Host $http_host;
|
||||
# 获取客户端真实 IP
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
# 自定义头 REMOTE-HOST,记录客户端 IP
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
# 获取完整的客户端 IP 链(经过多级代理时)
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# 禁用代理缓冲,数据直接传给客户端
|
||||
proxy_buffering off;
|
||||
# 禁用代理缓存
|
||||
proxy_cache off;
|
||||
proxy_pass http://monitor-admin/admin/;
|
||||
}
|
||||
|
||||
location /snail-job/ {
|
||||
# 设置客户端请求头中的 Host 信息(保持原始 Host)
|
||||
proxy_set_header Host $http_host;
|
||||
# 获取客户端真实 IP
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
# 自定义头 REMOTE-HOST,记录客户端 IP
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
# 获取完整的客户端 IP 链(经过多级代理时)
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# sse 与 websocket参数
|
||||
# SSE (Server-Sent Events) 与 WebSocket 支持参数
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
# 禁用代理缓冲,直接传输给客户端
|
||||
proxy_buffering off;
|
||||
# 禁用代理缓存
|
||||
proxy_cache off;
|
||||
proxy_pass http://snailjob-server/snail-job/;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,9 @@ create table FLOW_DEFINITION
|
||||
LISTENER_PATH VARCHAR2(500),
|
||||
EXT VARCHAR2(500),
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
);
|
||||
@@ -40,7 +42,9 @@ comment on column FLOW_DEFINITION.LISTENER_TYPE is '监听器类型';
|
||||
comment on column FLOW_DEFINITION.LISTENER_PATH is '监听器路径';
|
||||
comment on column FLOW_DEFINITION.EXT 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_BY is '更新人';
|
||||
comment on column FLOW_DEFINITION.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_DEFINITION.TENANT_ID is '租户id';
|
||||
|
||||
@@ -62,7 +66,9 @@ create table FLOW_NODE
|
||||
FORM_PATH VARCHAR2(100),
|
||||
VERSION VARCHAR2(20),
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
EXT CLOB,
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40),
|
||||
@@ -89,7 +95,9 @@ comment on column FLOW_NODE.FORM_CUSTOM is '审批表单是否自定义 (Y是 N
|
||||
comment on column FLOW_NODE.FORM_PATH is '审批表单路径';
|
||||
comment on column FLOW_NODE.VERSION 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_BY is '更新人';
|
||||
comment on column FLOW_NODE.EXT is '节点扩展属性';
|
||||
comment on column FLOW_NODE.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_NODE.TENANT_ID is '租户id';
|
||||
@@ -108,7 +116,9 @@ create table FLOW_SKIP
|
||||
SKIP_CONDITION VARCHAR2(200),
|
||||
COORDINATE VARCHAR2(100),
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
);
|
||||
@@ -128,7 +138,9 @@ comment on column FLOW_SKIP.SKIP_TYPE is '跳转类型 (PASS审批通过 REJECT
|
||||
comment on column FLOW_SKIP.SKIP_CONDITION is '跳转条件';
|
||||
comment on column FLOW_SKIP.COORDINATE 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_BY is '更新人';
|
||||
comment on column FLOW_SKIP.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_SKIP.TENANT_ID is '租户id';
|
||||
|
||||
@@ -144,9 +156,10 @@ create table FLOW_INSTANCE
|
||||
FLOW_STATUS VARCHAR2(20),
|
||||
ACTIVITY_STATUS NUMBER(1) default 1,
|
||||
DEF_JSON CLOB,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
EXT VARCHAR2(500),
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
@@ -166,9 +179,10 @@ 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.ACTIVITY_STATUS is '流程激活状态(0挂起 1激活)';
|
||||
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_BY 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.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_INSTANCE.TENANT_ID is '租户id';
|
||||
@@ -185,7 +199,9 @@ create table FLOW_TASK
|
||||
FORM_CUSTOM VARCHAR2(1) default 'N',
|
||||
FORM_PATH VARCHAR2(100),
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
);
|
||||
@@ -204,7 +220,9 @@ 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_PATH 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_BY is '更新人';
|
||||
comment on column FLOW_TASK.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_TASK.TENANT_ID is '租户id';
|
||||
|
||||
@@ -271,8 +289,9 @@ create table FLOW_USER
|
||||
PROCESSED_BY VARCHAR2(80),
|
||||
ASSOCIATED NUMBER(20) not null,
|
||||
CREATE_TIME DATE,
|
||||
CREATE_BY VARCHAR2(80),
|
||||
CREATE_BY VARCHAR2(64) default '',
|
||||
UPDATE_TIME DATE,
|
||||
UPDATE_BY VARCHAR2(64) default '',
|
||||
DEL_FLAG VARCHAR2(1) default '0',
|
||||
TENANT_ID VARCHAR2(40)
|
||||
);
|
||||
@@ -286,8 +305,9 @@ comment on column FLOW_USER.TYPE is '人员类型(1待办任务的审批人权
|
||||
comment on column FLOW_USER.PROCESSED_BY is '权限人)';
|
||||
comment on column FLOW_USER.ASSOCIATED is '任务表id';
|
||||
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_BY is '更新人';
|
||||
comment on column FLOW_USER.DEL_FLAG is '删除标志';
|
||||
comment on column FLOW_USER.TENANT_ID is '租户id';
|
||||
|
||||
@@ -299,18 +319,18 @@ create index USER_ASSOCIATED_IDX on FLOW_USER (ASSOCIATED);
|
||||
-- ----------------------------
|
||||
CREATE TABLE flow_category
|
||||
(
|
||||
category_id NUMBER (20) NOT NULL,
|
||||
tenant_id VARCHAR2 (20) DEFAULT '000000',
|
||||
parent_id NUMBER (20) DEFAULT 0,
|
||||
ancestors VARCHAR2 (500) DEFAULT '',
|
||||
category_name VARCHAR2 (30) NOT NULL,
|
||||
order_num NUMBER (4) DEFAULT 0,
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_dept NUMBER (20),
|
||||
create_by NUMBER (20),
|
||||
create_time DATE,
|
||||
update_by NUMBER (20),
|
||||
update_time DATE
|
||||
category_id NUMBER(20) NOT NULL,
|
||||
tenant_id VARCHAR2(20) DEFAULT '000000',
|
||||
parent_id NUMBER(20) DEFAULT 0,
|
||||
ancestors VARCHAR2(500) DEFAULT '',
|
||||
category_name VARCHAR2(30) NOT NULL,
|
||||
order_num NUMBER(4) DEFAULT 0,
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_dept NUMBER(20),
|
||||
create_by NUMBER(20),
|
||||
create_time DATE,
|
||||
update_by NUMBER(20),
|
||||
update_time DATE
|
||||
);
|
||||
|
||||
alter table flow_category add constraint pk_flow_category primary key (category_id);
|
||||
@@ -344,19 +364,19 @@ INSERT INTO flow_category VALUES (109, '000000', 102, '0,100,102', '离职', 2,
|
||||
-- 流程spel表达式定义表
|
||||
-- ----------------------------
|
||||
CREATE TABLE flow_spel (
|
||||
id NUMBER(20) NOT NULL,
|
||||
component_name VARCHAR2(255),
|
||||
method_name VARCHAR2(255),
|
||||
method_params VARCHAR2(255),
|
||||
view_spel VARCHAR2(255),
|
||||
remark VARCHAR2(255),
|
||||
status CHAR(1) DEFAULT '0',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_dept NUMBER(20),
|
||||
create_by NUMBER(20),
|
||||
create_time DATE,
|
||||
update_by NUMBER(20),
|
||||
update_time DATE
|
||||
id NUMBER(20) NOT NULL,
|
||||
component_name VARCHAR2(255),
|
||||
method_name VARCHAR2(255),
|
||||
method_params VARCHAR2(255),
|
||||
view_spel VARCHAR2(255),
|
||||
remark VARCHAR2(255),
|
||||
status CHAR(1) DEFAULT '0',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_dept NUMBER(20),
|
||||
create_by NUMBER(20),
|
||||
create_time DATE,
|
||||
update_by NUMBER(20),
|
||||
update_time DATE
|
||||
);
|
||||
|
||||
alter table flow_spel add constraint pk_flow_spel primary key (id);
|
||||
@@ -418,19 +438,19 @@ COMMENT ON COLUMN flow_instance_biz_ext.business_id IS '业务Id';
|
||||
-- ----------------------------
|
||||
CREATE TABLE test_leave
|
||||
(
|
||||
id NUMBER (20) NOT NULL,
|
||||
tenant_id VARCHAR2 (20) DEFAULT '000000',
|
||||
apply_code VARCHAR2 (50) NOT NULL,
|
||||
leave_type VARCHAR2 (255) NOT NULL,
|
||||
id NUMBER (20) NOT NULL,
|
||||
tenant_id VARCHAR2 (20) DEFAULT '000000',
|
||||
apply_code VARCHAR2 (50) NOT NULL,
|
||||
leave_type VARCHAR2 (255) NOT NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NOT NULL,
|
||||
leave_days NUMBER (10) NOT NULL,
|
||||
remark VARCHAR2 (255),
|
||||
status VARCHAR2 (255),
|
||||
leave_days NUMBER (10) NOT NULL,
|
||||
remark VARCHAR2 (255),
|
||||
status VARCHAR2 (255),
|
||||
create_dept NUMBER (20),
|
||||
create_by NUMBER (20),
|
||||
create_by NUMBER (20),
|
||||
create_time DATE,
|
||||
update_by NUMBER (20),
|
||||
update_by NUMBER (20),
|
||||
update_time DATE
|
||||
);
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ CREATE TABLE flow_definition
|
||||
listener_path varchar(400) NULL,
|
||||
ext varchar(500) NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
CONSTRAINT flow_definition_pkey PRIMARY KEY (id)
|
||||
@@ -35,7 +37,9 @@ COMMENT ON COLUMN flow_definition.listener_type IS '监听器类型';
|
||||
COMMENT ON COLUMN flow_definition.listener_path IS '监听器路径';
|
||||
COMMENT ON COLUMN flow_definition.ext 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_by IS '更新人';
|
||||
COMMENT ON COLUMN flow_definition.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_definition.tenant_id IS '租户id';
|
||||
|
||||
@@ -57,8 +61,10 @@ CREATE TABLE flow_node
|
||||
form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
|
||||
form_path varchar(100) NULL,
|
||||
"version" varchar(20) NOT NULL,
|
||||
create_time timestamp NULL,
|
||||
update_time timestamp NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
ext text NULL,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
@@ -83,7 +89,9 @@ COMMENT ON COLUMN flow_node.form_custom IS '审批表单是否自定义(Y是 N
|
||||
COMMENT ON COLUMN flow_node.form_path IS '审批表单路径';
|
||||
COMMENT ON COLUMN flow_node."version" 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_by IS '更新人';
|
||||
COMMENT ON COLUMN flow_node.ext IS '节点扩展属性';
|
||||
COMMENT ON COLUMN flow_node.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_node.tenant_id IS '租户id';
|
||||
@@ -102,7 +110,9 @@ CREATE TABLE flow_skip
|
||||
skip_condition varchar(200) NULL,
|
||||
coordinate varchar(100) NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
CONSTRAINT flow_skip_pkey PRIMARY KEY (id)
|
||||
@@ -120,7 +130,9 @@ COMMENT ON COLUMN flow_skip.skip_type IS '跳转类型(PASS审批通过 REJECT
|
||||
COMMENT ON COLUMN flow_skip.skip_condition IS '跳转条件';
|
||||
COMMENT ON COLUMN flow_skip.coordinate 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_by IS '更新人';
|
||||
COMMENT ON COLUMN flow_skip.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_skip.tenant_id IS '租户id';
|
||||
|
||||
@@ -136,9 +148,10 @@ CREATE TABLE flow_instance
|
||||
flow_status varchar(20) NOT NULL,
|
||||
activity_status int2 NOT NULL DEFAULT 1,
|
||||
def_json text NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
ext varchar(500) NULL,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
@@ -156,9 +169,10 @@ 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.activity_status IS '流程激活状态(0挂起 1激活)';
|
||||
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_by 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.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_instance.tenant_id IS '租户id';
|
||||
@@ -171,11 +185,13 @@ CREATE TABLE flow_task
|
||||
node_code varchar(100) NOT NULL,
|
||||
node_name varchar(100) 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_path varchar(100) NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
CONSTRAINT flow_task_pkey PRIMARY KEY (id)
|
||||
@@ -192,7 +208,9 @@ 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_path 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_by IS '更新人';
|
||||
COMMENT ON COLUMN flow_task.del_flag IS '删除标志';
|
||||
COMMENT ON COLUMN flow_task.tenant_id IS '租户id';
|
||||
|
||||
@@ -256,8 +274,9 @@ CREATE TABLE flow_user
|
||||
processed_by varchar(80) NULL,
|
||||
associated int8 NOT NULL,
|
||||
create_time timestamp NULL,
|
||||
create_by varchar(80) NULL,
|
||||
create_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
update_time timestamp NULL,
|
||||
update_by varchar(64) NULL DEFAULT '':: character varying,
|
||||
del_flag bpchar(1) NULL DEFAULT '0':: character varying,
|
||||
tenant_id varchar(40) NULL,
|
||||
CONSTRAINT flow_user_pk PRIMARY KEY (id)
|
||||
@@ -273,6 +292,7 @@ COMMENT ON COLUMN flow_user.associated IS '任务表id';
|
||||
COMMENT ON COLUMN flow_user.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN flow_user.create_by 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.tenant_id IS '租户id';
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@ CREATE TABLE `flow_definition`
|
||||
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@@ -42,7 +44,9 @@ CREATE TABLE `flow_node`
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`version` varchar(20) NOT NULL COMMENT '版本',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
|
||||
`ext` text COMMENT '节点扩展属性',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
@@ -62,7 +66,9 @@ CREATE TABLE `flow_skip`
|
||||
`skip_condition` varchar(200) DEFAULT NULL COMMENT '跳转条件',
|
||||
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@@ -80,9 +86,10 @@ CREATE TABLE `flow_instance`
|
||||
`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激活)',
|
||||
`def_json` text COMMENT '流程定义json',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
|
||||
`ext` varchar(500) DEFAULT NULL COMMENT '扩展字段,预留给业务系统使用',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
@@ -101,7 +108,9 @@ CREATE TABLE `flow_task`
|
||||
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
|
||||
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '更新人',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@@ -118,7 +127,7 @@ CREATE TABLE `flow_his_task`
|
||||
`node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
|
||||
`target_node_code` 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减签)',
|
||||
`collaborator` varchar(500) DEFAULT NULL COMMENT '协作人',
|
||||
`skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
|
||||
@@ -145,6 +154,7 @@ CREATE TABLE `flow_user`
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`create_by` varchar(80) DEFAULT NULL COMMENT '创建人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`update_by` varchar(64) DEFAULT '' COMMENT '创建人',
|
||||
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
|
||||
@@ -16,7 +16,9 @@ CREATE TABLE flow_definition (
|
||||
listener_path nvarchar(400) NULL,
|
||||
ext nvarchar(500) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_def__3213E83FEE39AE33 PRIMARY KEY CLUSTERED (id)
|
||||
@@ -124,6 +126,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'create_time'
|
||||
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',
|
||||
@@ -131,6 +140,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_definition',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -169,7 +185,9 @@ CREATE TABLE flow_node (
|
||||
form_path nvarchar(100) NULL,
|
||||
version nvarchar(20) NOT NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
ext nvarchar(max) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
@@ -299,6 +317,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'create_time'
|
||||
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',
|
||||
@@ -306,6 +331,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_node',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'节点扩展属性',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -346,7 +378,9 @@ CREATE TABLE flow_skip (
|
||||
skip_condition nvarchar(200) NULL,
|
||||
coordinate nvarchar(100) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_ski__3213E83F073FEE6E PRIMARY KEY CLUSTERED (id)
|
||||
@@ -433,6 +467,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'create_time'
|
||||
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',
|
||||
@@ -440,6 +481,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_skip',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -471,9 +519,10 @@ CREATE TABLE flow_instance (
|
||||
flow_status nvarchar(20) NOT NULL,
|
||||
activity_status tinyint DEFAULT('1') NULL,
|
||||
def_json nvarchar(max) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
ext nvarchar(500) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
@@ -555,13 +604,6 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'def_json'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建者',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_instance',
|
||||
'COLUMN', N'create_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建时间',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -569,6 +611,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'create_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'创建人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_instance',
|
||||
'COLUMN', N'create_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新时间',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -576,6 +625,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_instance',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'扩展字段,预留给业务系统使用',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -614,7 +670,9 @@ CREATE TABLE flow_task (
|
||||
form_custom nchar(1) DEFAULT('N') NULL,
|
||||
form_path nvarchar(100) NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_tas__3213E83F5AE1F1BA PRIMARY KEY CLUSTERED (id)
|
||||
@@ -694,6 +752,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'create_time'
|
||||
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',
|
||||
@@ -701,6 +766,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_task',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
'SCHEMA', N'dbo',
|
||||
@@ -925,8 +997,9 @@ CREATE TABLE flow_user (
|
||||
processed_by nvarchar(80) NULL,
|
||||
associated bigint NOT NULL,
|
||||
create_time datetime2(7) NULL,
|
||||
create_by nvarchar(80) NULL,
|
||||
create_by nvarchar(64) NULL,
|
||||
update_time datetime2(7) NULL,
|
||||
update_by nvarchar(64) NULL,
|
||||
del_flag nchar(1) DEFAULT('0') NULL,
|
||||
tenant_id nvarchar(40) NULL,
|
||||
CONSTRAINT PK__flow_use__3213E83FFA38CA8B PRIMARY KEY CLUSTERED (id)
|
||||
@@ -990,6 +1063,13 @@ EXEC sp_addextendedproperty
|
||||
'COLUMN', N'update_time'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'更新人',
|
||||
'SCHEMA', N'dbo',
|
||||
'TABLE', N'flow_user',
|
||||
'COLUMN', N'update_by'
|
||||
GO
|
||||
|
||||
EXEC sp_addextendedproperty
|
||||
'MS_Description', N'删除标志',
|
||||
'SCHEMA', N'dbo',
|
||||
|
||||
25
script/sql/update/oracle/update_5.5.0-5.5.1.sql
Normal file
25
script/sql/update/oracle/update_5.5.0-5.5.1.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
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 '更新人';
|
||||
25
script/sql/update/postgres/update_5.5.0-5.5.1.sql
Normal file
25
script/sql/update/postgres/update_5.5.0-5.5.1.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
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 '更新人';
|
||||
99
script/sql/update/sqlserver/update_5.5.0-5.5.1.sql
Normal file
99
script/sql/update/sqlserver/update_5.5.0-5.5.1.sql
Normal file
@@ -0,0 +1,99 @@
|
||||
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
|
||||
21
script/sql/update/update_5.5.0-5.5.1.sql
Normal file
21
script/sql/update/update_5.5.0-5.5.1.sql
Normal file
@@ -0,0 +1,21 @@
|
||||
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`;
|
||||
Reference in New Issue
Block a user