mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-18 17:38:48 +08:00
Pre Merge pull request !791 from 宿醉魅影/dev
This commit is contained in:
commit
b26b00a691
8
pom.xml
8
pom.xml
@ -14,12 +14,12 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>5.5.1</revision>
|
<revision>5.5.1</revision>
|
||||||
<spring-boot.version>3.5.7</spring-boot.version>
|
<spring-boot.version>3.5.8</spring-boot.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
<mybatis.version>3.5.16</mybatis.version>
|
<mybatis.version>3.5.16</mybatis.version>
|
||||||
<springdoc.version>2.8.13</springdoc.version>
|
<springdoc.version>2.8.14</springdoc.version>
|
||||||
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
||||||
<fastexcel.version>1.3.0</fastexcel.version>
|
<fastexcel.version>1.3.0</fastexcel.version>
|
||||||
<velocity.version>2.3</velocity.version>
|
<velocity.version>2.3</velocity.version>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
<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.5</spring-boot-admin.version>
|
||||||
<redisson.version>3.51.0</redisson.version>
|
<redisson.version>3.52.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>
|
||||||
<snailjob.version>1.8.0</snailjob.version>
|
<snailjob.version>1.8.0</snailjob.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.3</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>
|
||||||
|
|||||||
@ -67,7 +67,8 @@ public class CompleteTaskDTO implements Serializable {
|
|||||||
|
|
||||||
public Map<String, Object> getVariables() {
|
public Map<String, Object> getVariables() {
|
||||||
if (variables == null) {
|
if (variables == null) {
|
||||||
return new HashMap<>(16);
|
variables = new HashMap<>(16);
|
||||||
|
return variables;
|
||||||
}
|
}
|
||||||
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
|
||||||
return variables;
|
return variables;
|
||||||
|
|||||||
@ -1,5 +1,11 @@
|
|||||||
package org.dromara.common.core.service;
|
package org.dromara.common.core.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用 参数配置服务
|
* 通用 参数配置服务
|
||||||
*
|
*
|
||||||
@ -15,4 +21,80 @@ public interface ConfigService {
|
|||||||
*/
|
*/
|
||||||
String getConfigValue(String configKey);
|
String getConfigValue(String configKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取布尔值
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Boolean 值
|
||||||
|
*/
|
||||||
|
default Boolean getConfigBool(String configKey) {
|
||||||
|
return Convert.toBool(getConfigValue(configKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取整数值
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Integer 值
|
||||||
|
*/
|
||||||
|
default Integer getConfigInt(String configKey) {
|
||||||
|
return Convert.toInt(getConfigValue(configKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取长整型值
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Long 值
|
||||||
|
*/
|
||||||
|
default Long getConfigLong(String configKey) {
|
||||||
|
return Convert.toLong(getConfigValue(configKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取 BigDecimal 值
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return BigDecimal 值
|
||||||
|
*/
|
||||||
|
default BigDecimal getConfigDecimal(String configKey) {
|
||||||
|
return Convert.toBigDecimal(getConfigValue(configKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取 Map 类型的配置
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Dict 对象,如果配置为空或无法解析,返回空 Dict
|
||||||
|
*/
|
||||||
|
Dict getConfigMap(String configKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取 Map 类型的配置列表
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Dict 列表,如果配置为空或无法解析,返回空列表
|
||||||
|
*/
|
||||||
|
List<Dict> getConfigArrayMap(String configKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取指定类型的配置对象
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @param clazz 目标对象类型
|
||||||
|
* @param <T> 目标对象泛型
|
||||||
|
* @return 对象实例,如果配置为空或无法解析,返回 null
|
||||||
|
*/
|
||||||
|
<T> T getConfigObject(String configKey, Class<T> clazz);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取指定类型的配置列表
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @param clazz 目标元素类型
|
||||||
|
* @param <T> 元素类型泛型
|
||||||
|
* @return 指定类型列表,如果配置为空或无法解析,返回空列表
|
||||||
|
*/
|
||||||
|
<T> List<T> getConfigArray(String configKey, Class<T> clazz);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@ public interface WorkflowService {
|
|||||||
* @param businessIds 业务id
|
* @param businessIds 业务id
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean deleteInstance(List<Long> businessIds);
|
boolean deleteInstance(List<String> businessIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前流程状态
|
* 获取当前流程状态
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
package org.dromara.common.excel.annotation;
|
||||||
|
|
||||||
|
import org.dromara.common.excel.core.ExcelOptionsProvider;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excel动态下拉选项注解
|
||||||
|
*
|
||||||
|
* @author Angus
|
||||||
|
*/
|
||||||
|
@Target({ElementType.FIELD})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Inherited
|
||||||
|
public @interface ExcelDynamicOptions {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提供者类全限定名
|
||||||
|
* <p>
|
||||||
|
* {@link org.dromara.common.excel.core.ExcelOptionsProvider} 接口实现类 class
|
||||||
|
*/
|
||||||
|
Class<? extends ExcelOptionsProvider> providerClass();
|
||||||
|
}
|
||||||
@ -23,6 +23,7 @@ import org.dromara.common.core.utils.SpringUtils;
|
|||||||
import org.dromara.common.core.utils.StreamUtils;
|
import org.dromara.common.core.utils.StreamUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||||
|
import org.dromara.common.excel.annotation.ExcelDynamicOptions;
|
||||||
import org.dromara.common.excel.annotation.ExcelEnumFormat;
|
import org.dromara.common.excel.annotation.ExcelEnumFormat;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@ -117,6 +118,15 @@ public class ExcelDownHandler implements SheetWriteHandler {
|
|||||||
ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class);
|
ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class);
|
||||||
List<Object> values = EnumUtil.getFieldValues(format.enumClass(), format.textField());
|
List<Object> values = EnumUtil.getFieldValues(format.enumClass(), format.textField());
|
||||||
options = StreamUtils.toList(values, Convert::toStr);
|
options = StreamUtils.toList(values, Convert::toStr);
|
||||||
|
} else if (field.isAnnotationPresent(ExcelDynamicOptions.class)) {
|
||||||
|
// 处理动态下拉选项
|
||||||
|
ExcelDynamicOptions dynamicOptions = field.getDeclaredAnnotation(ExcelDynamicOptions.class);
|
||||||
|
// 获取提供者实例
|
||||||
|
ExcelOptionsProvider provider = SpringUtils.getBean(dynamicOptions.providerClass());
|
||||||
|
Set<String> providerOptions = provider.getOptions();
|
||||||
|
if (CollUtil.isNotEmpty(providerOptions)) {
|
||||||
|
options = new ArrayList<>(providerOptions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ObjectUtil.isNotEmpty(options)) {
|
if (ObjectUtil.isNotEmpty(options)) {
|
||||||
// 仅当下拉可选项不为空时执行
|
// 仅当下拉可选项不为空时执行
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
package org.dromara.common.excel.core;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excel下拉选项数据提供接口
|
||||||
|
*
|
||||||
|
* @author Angus
|
||||||
|
*/
|
||||||
|
public interface ExcelOptionsProvider {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取下拉选项数据
|
||||||
|
*
|
||||||
|
* @return 下拉选项列表
|
||||||
|
*/
|
||||||
|
Set<String> getOptions();
|
||||||
|
|
||||||
|
}
|
||||||
@ -112,7 +112,7 @@ public class DataPermissionHelper {
|
|||||||
/**
|
/**
|
||||||
* 开启忽略数据权限(开启后需手动调用 {@link #disableIgnore()} 关闭)
|
* 开启忽略数据权限(开启后需手动调用 {@link #disableIgnore()} 关闭)
|
||||||
*/
|
*/
|
||||||
public static void enableIgnore() {
|
private static void enableIgnore() {
|
||||||
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
||||||
if (ObjectUtil.isNull(ignoreStrategy)) {
|
if (ObjectUtil.isNull(ignoreStrategy)) {
|
||||||
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().dataPermission(true).build());
|
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().dataPermission(true).build());
|
||||||
@ -126,7 +126,7 @@ public class DataPermissionHelper {
|
|||||||
/**
|
/**
|
||||||
* 关闭忽略数据权限
|
* 关闭忽略数据权限
|
||||||
*/
|
*/
|
||||||
public static void disableIgnore() {
|
private static void disableIgnore() {
|
||||||
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
||||||
if (ObjectUtil.isNotNull(ignoreStrategy)) {
|
if (ObjectUtil.isNotNull(ignoreStrategy)) {
|
||||||
boolean noOtherIgnoreStrategy = !Boolean.TRUE.equals(ignoreStrategy.getDynamicTableName())
|
boolean noOtherIgnoreStrategy = !Boolean.TRUE.equals(ignoreStrategy.getDynamicTableName())
|
||||||
|
|||||||
@ -33,6 +33,7 @@ import java.nio.channels.WritableByteChannel;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@ -317,13 +318,13 @@ public class OssClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取私有URL链接
|
* 创建下载请求的预签名URL
|
||||||
*
|
*
|
||||||
* @param objectKey 对象KEY
|
* @param objectKey 对象KEY
|
||||||
* @param expiredTime 链接授权到期时间
|
* @param expiredTime 链接授权到期时间
|
||||||
*/
|
*/
|
||||||
public String getPrivateUrl(String objectKey, Duration expiredTime) {
|
public String createPresignedGetUrl(String objectKey, Duration expiredTime) {
|
||||||
// 使用 AWS S3 预签名 URL 的生成器 获取对象的预签名 URL
|
// 使用 AWS S3 预签名 URL 的生成器 获取下载对象的预签名 URL
|
||||||
URL url = presigner.presignGetObject(
|
URL url = presigner.presignGetObject(
|
||||||
x -> x.signatureDuration(expiredTime)
|
x -> x.signatureDuration(expiredTime)
|
||||||
.getObjectRequest(
|
.getObjectRequest(
|
||||||
@ -332,7 +333,28 @@ public class OssClient {
|
|||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.url();
|
.url();
|
||||||
return url.toString();
|
return url.toExternalForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建上传请求的预签名URL
|
||||||
|
*
|
||||||
|
* @param objectKey 对象KEY
|
||||||
|
* @param expiredTime 链接授权到期时间
|
||||||
|
* @param metadata 元数据
|
||||||
|
*/
|
||||||
|
public String createPresignedPutUrl(String objectKey, Duration expiredTime, Map<String, String> metadata) {
|
||||||
|
// 使用 AWS S3 预签名 URL 的生成器 获取上传文件对象的预签名 URL
|
||||||
|
URL url = presigner.presignPutObject(
|
||||||
|
x -> x.signatureDuration(expiredTime)
|
||||||
|
.putObjectRequest(
|
||||||
|
y -> y.bucket(properties.getBucketName())
|
||||||
|
.key(objectKey)
|
||||||
|
.metadata(metadata)
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.url();
|
||||||
|
return url.toExternalForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -43,16 +43,12 @@
|
|||||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- <!– redis序列化替代方案 比json快无数的跨语言二进制序列化 –>-->
|
<!-- redis序列化替代方案 比json快无数的跨语言二进制序列化 -->
|
||||||
<!-- <dependency>-->
|
<dependency>
|
||||||
<!-- <groupId>org.apache.fury</groupId>-->
|
<groupId>org.apache.fory</groupId>
|
||||||
<!-- <artifactId>fury-core</artifactId>-->
|
<artifactId>fory-core</artifactId>
|
||||||
<!-- <version>0.9.0</version>-->
|
<version>0.13.1</version>
|
||||||
<!-- </dependency>-->
|
</dependency>
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>org.slf4j</groupId>-->
|
|
||||||
<!-- <artifactId>slf4j-api</artifactId>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@ -53,9 +53,10 @@ public class RedisConfig {
|
|||||||
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
||||||
// 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来
|
// 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来
|
||||||
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
|
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
|
||||||
// LoggerFactory.useSlf4jLogging(true);
|
// org.apache.fory.logging.LoggerFactory 包别引入错了
|
||||||
// FuryCodec furyCodec = new FuryCodec();
|
// LoggerFactory.useSlf4jLogging(true);
|
||||||
// CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, furyCodec, furyCodec);
|
// ForyCodec foryCodec = new ForyCodec();
|
||||||
|
// CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, foryCodec, foryCodec);
|
||||||
TypedJsonJacksonCodec jsonCodec = new TypedJsonJacksonCodec(Object.class, om);
|
TypedJsonJacksonCodec jsonCodec = new TypedJsonJacksonCodec(Object.class, om);
|
||||||
// 组合序列化 key 使用 String 内容使用通用 json 格式
|
// 组合序列化 key 使用 String 内容使用通用 json 格式
|
||||||
CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, jsonCodec, jsonCodec);
|
CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, jsonCodec, jsonCodec);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package org.dromara.common.sensitive.core;
|
|||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.DesensitizedUtil;
|
import cn.hutool.core.util.DesensitizedUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.dromara.common.sensitive.utils.DesensitizedUtils;
|
||||||
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@ -80,6 +81,13 @@ public enum SensitiveStrategy {
|
|||||||
*/
|
*/
|
||||||
FIRST_MASK(DesensitizedUtil::firstMask),
|
FIRST_MASK(DesensitizedUtil::firstMask),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通用字符串脱敏
|
||||||
|
* 可配置前后可见长度和中间掩码长度
|
||||||
|
* 默认示例:前4位可见,后4位可见,中间固定4个*
|
||||||
|
*/
|
||||||
|
STRING_MASK(s -> DesensitizedUtils.mask(s, 4, 4, 4)),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清空为""
|
* 清空为""
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,54 @@
|
|||||||
|
package org.dromara.common.sensitive.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.DesensitizedUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 脱敏工具类
|
||||||
|
*
|
||||||
|
* @author AprilWind
|
||||||
|
*/
|
||||||
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class DesensitizedUtils extends DesensitizedUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灵活脱敏方法
|
||||||
|
*
|
||||||
|
* @param value 原始字符串
|
||||||
|
* @param prefixVisible 前面可见长度
|
||||||
|
* @param suffixVisible 后面可见长度
|
||||||
|
* @param maskLength 中间掩码长度(固定显示多少 *,如果总长度不足则自动缩减)
|
||||||
|
* @return 脱敏后字符串
|
||||||
|
*/
|
||||||
|
public static String mask(String value, int prefixVisible, int suffixVisible, int maskLength) {
|
||||||
|
if (StrUtil.isBlank(value)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int len = value.length();
|
||||||
|
|
||||||
|
// 总长度小于等于前后可见长度 → 全部掩码
|
||||||
|
if (len <= prefixVisible + suffixVisible) {
|
||||||
|
return StrUtil.repeat('*', len);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 可用长度 = 总长度 - 前后可见长度
|
||||||
|
int available = len - prefixVisible - suffixVisible;
|
||||||
|
|
||||||
|
// 中间掩码长度不能超过可用长度
|
||||||
|
int actualMaskLength = Math.min(maskLength, available);
|
||||||
|
|
||||||
|
// 剩余字符尽量显示在中间掩码旁
|
||||||
|
int remaining = available - actualMaskLength;
|
||||||
|
String middleChars = remaining > 0 ? value.substring(prefixVisible, prefixVisible + remaining) : "";
|
||||||
|
String middleMask = StrUtil.repeat('*', actualMaskLength);
|
||||||
|
|
||||||
|
String prefix = value.substring(0, prefixVisible);
|
||||||
|
String suffix = value.substring(len - suffixVisible);
|
||||||
|
|
||||||
|
return prefix + middleChars + middleMask + suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -55,7 +55,7 @@ public class TenantHelper {
|
|||||||
/**
|
/**
|
||||||
* 开启忽略租户(开启后需手动调用 {@link #disableIgnore()} 关闭)
|
* 开启忽略租户(开启后需手动调用 {@link #disableIgnore()} 关闭)
|
||||||
*/
|
*/
|
||||||
public static void enableIgnore() {
|
private static void enableIgnore() {
|
||||||
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
||||||
if (ObjectUtil.isNull(ignoreStrategy)) {
|
if (ObjectUtil.isNull(ignoreStrategy)) {
|
||||||
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
|
InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
|
||||||
@ -69,7 +69,7 @@ public class TenantHelper {
|
|||||||
/**
|
/**
|
||||||
* 关闭忽略租户
|
* 关闭忽略租户
|
||||||
*/
|
*/
|
||||||
public static void disableIgnore() {
|
private static void disableIgnore() {
|
||||||
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
IgnoreStrategy ignoreStrategy = getIgnoreStrategy();
|
||||||
if (ObjectUtil.isNotNull(ignoreStrategy)) {
|
if (ObjectUtil.isNotNull(ignoreStrategy)) {
|
||||||
boolean noOtherIgnoreStrategy = !Boolean.TRUE.equals(ignoreStrategy.getDynamicTableName())
|
boolean noOtherIgnoreStrategy = !Boolean.TRUE.equals(ignoreStrategy.getDynamicTableName())
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package org.dromara.system.service.impl;
|
package org.dromara.system.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
@ -14,6 +15,7 @@ import org.dromara.common.core.utils.MapstructUtils;
|
|||||||
import org.dromara.common.core.utils.ObjectUtils;
|
import org.dromara.common.core.utils.ObjectUtils;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
import org.dromara.common.core.utils.SpringUtils;
|
||||||
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.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.common.redis.utils.CacheUtils;
|
import org.dromara.common.redis.utils.CacheUtils;
|
||||||
@ -82,6 +84,7 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取注册开关
|
* 获取注册开关
|
||||||
|
*
|
||||||
* @param tenantId 租户id
|
* @param tenantId 租户id
|
||||||
* @return true开启,false关闭
|
* @return true开启,false关闭
|
||||||
*/
|
*/
|
||||||
@ -212,4 +215,54 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
|
|||||||
return SpringUtils.getAopProxy(this).selectConfigByKey(configKey);
|
return SpringUtils.getAopProxy(this).selectConfigByKey(configKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取 Map 类型的配置
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Dict 对象,如果配置为空或无法解析,返回空 Dict
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Dict getConfigMap(String configKey) {
|
||||||
|
String configValue = getConfigValue(configKey);
|
||||||
|
return JsonUtils.parseMap(configValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取 Map 类型的配置列表
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @return Dict 列表,如果配置为空或无法解析,返回空列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<Dict> getConfigArrayMap(String configKey) {
|
||||||
|
String configValue = getConfigValue(configKey);
|
||||||
|
return JsonUtils.parseArrayMap(configValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取指定类型的配置对象
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @param clazz 目标对象类型
|
||||||
|
* @return 对象实例,如果配置为空或无法解析,返回 null
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public <T> T getConfigObject(String configKey, Class<T> clazz) {
|
||||||
|
String configValue = getConfigValue(configKey);
|
||||||
|
return JsonUtils.parseObject(configValue, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据参数 key 获取指定类型的配置列表=
|
||||||
|
*
|
||||||
|
* @param configKey 参数 key
|
||||||
|
* @param clazz 目标元素类型
|
||||||
|
* @return 指定类型列表,如果配置为空或无法解析,返回空列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public <T> List<T> getConfigArray(String configKey, Class<T> clazz) {
|
||||||
|
String configValue = getConfigValue(configKey);
|
||||||
|
return JsonUtils.parseArray(configValue, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -270,7 +270,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|||||||
OssClient storage = OssFactory.instance(oss.getService());
|
OssClient storage = OssFactory.instance(oss.getService());
|
||||||
// 仅修改桶类型为 private 的URL,临时URL时长为120s
|
// 仅修改桶类型为 private 的URL,临时URL时长为120s
|
||||||
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
|
if (AccessPolicyType.PRIVATE == storage.getAccessPolicy()) {
|
||||||
oss.setUrl(storage.getPrivateUrl(oss.getFileName(), Duration.ofSeconds(120)));
|
oss.setUrl(storage.createPresignedGetUrl(oss.getFileName(), Duration.ofSeconds(120)));
|
||||||
}
|
}
|
||||||
return oss;
|
return oss;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -187,6 +187,7 @@ public class FlwDefinitionController extends BaseController {
|
|||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping("/active/{id}")
|
@PutMapping("/active/{id}")
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Log(title = "流程定义", businessType = BusinessType.UPDATE)
|
||||||
public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) {
|
public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) {
|
||||||
return R.ok(active ? defService.active(id) : defService.unActive(id));
|
return R.ok(active ? defService.active(id) : defService.unActive(id));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package org.dromara.workflow.controller;
|
package org.dromara.workflow.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
|
import org.dromara.common.core.utils.StreamUtils;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
@ -75,8 +77,9 @@ public class FlwInstanceController extends BaseController {
|
|||||||
* @param businessIds 业务id
|
* @param businessIds 业务id
|
||||||
*/
|
*/
|
||||||
@DeleteMapping("/deleteByBusinessIds/{businessIds}")
|
@DeleteMapping("/deleteByBusinessIds/{businessIds}")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||||
public R<Void> deleteByBusinessIds(@PathVariable List<Long> businessIds) {
|
public R<Void> deleteByBusinessIds(@PathVariable List<Long> businessIds) {
|
||||||
return toAjax(flwInstanceService.deleteByBusinessIds(businessIds));
|
return toAjax(flwInstanceService.deleteByBusinessIds(StreamUtils.toList(businessIds, Convert::toStr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,6 +88,7 @@ public class FlwInstanceController extends BaseController {
|
|||||||
* @param instanceIds 实例id
|
* @param instanceIds 实例id
|
||||||
*/
|
*/
|
||||||
@DeleteMapping("/deleteByInstanceIds/{instanceIds}")
|
@DeleteMapping("/deleteByInstanceIds/{instanceIds}")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||||
public R<Void> deleteByInstanceIds(@PathVariable List<Long> instanceIds) {
|
public R<Void> deleteByInstanceIds(@PathVariable List<Long> instanceIds) {
|
||||||
return toAjax(flwInstanceService.deleteByInstanceIds(instanceIds));
|
return toAjax(flwInstanceService.deleteByInstanceIds(instanceIds));
|
||||||
}
|
}
|
||||||
@ -95,6 +99,7 @@ public class FlwInstanceController extends BaseController {
|
|||||||
* @param instanceIds 实例id
|
* @param instanceIds 实例id
|
||||||
*/
|
*/
|
||||||
@DeleteMapping("/deleteHisByInstanceIds/{instanceIds}")
|
@DeleteMapping("/deleteHisByInstanceIds/{instanceIds}")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||||
public R<Void> deleteHisByInstanceIds(@PathVariable List<Long> instanceIds) {
|
public R<Void> deleteHisByInstanceIds(@PathVariable List<Long> instanceIds) {
|
||||||
return toAjax(flwInstanceService.deleteHisByInstanceIds(instanceIds));
|
return toAjax(flwInstanceService.deleteHisByInstanceIds(instanceIds));
|
||||||
}
|
}
|
||||||
@ -106,6 +111,7 @@ public class FlwInstanceController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping("/cancelProcessApply")
|
@PutMapping("/cancelProcessApply")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.UPDATE)
|
||||||
public R<Void> cancelProcessApply(@RequestBody FlowCancelBo bo) {
|
public R<Void> cancelProcessApply(@RequestBody FlowCancelBo bo) {
|
||||||
return toAjax(flwInstanceService.cancelProcessApply(bo));
|
return toAjax(flwInstanceService.cancelProcessApply(bo));
|
||||||
}
|
}
|
||||||
@ -118,6 +124,7 @@ public class FlwInstanceController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping("/active/{id}")
|
@PutMapping("/active/{id}")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.UPDATE)
|
||||||
public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) {
|
public R<Boolean> active(@PathVariable Long id, @RequestParam boolean active) {
|
||||||
return R.ok(active ? insService.active(id) : insService.unActive(id));
|
return R.ok(active ? insService.active(id) : insService.unActive(id));
|
||||||
}
|
}
|
||||||
@ -160,6 +167,7 @@ public class FlwInstanceController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping("/updateVariable")
|
@PutMapping("/updateVariable")
|
||||||
|
@Log(title = "流程实例管理", businessType = BusinessType.UPDATE)
|
||||||
public R<Void> updateVariable(@Validated @RequestBody FlowVariableBo bo) {
|
public R<Void> updateVariable(@Validated @RequestBody FlowVariableBo bo) {
|
||||||
return toAjax(flwInstanceService.updateVariable(bo));
|
return toAjax(flwInstanceService.updateVariable(bo));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义
|
* 流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
@ -38,7 +38,7 @@ public class FlwSpelController extends BaseController {
|
|||||||
private final IFlwSpelService flwSpelService;
|
private final IFlwSpelService flwSpelService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流程spel达式定义列表
|
* 查询流程spel表达式定义列表
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("workflow:spel:list")
|
@SaCheckPermission("workflow:spel:list")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@ -47,7 +47,7 @@ public class FlwSpelController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取流程spel达式定义详细信息
|
* 获取流程spel表达式定义详细信息
|
||||||
*
|
*
|
||||||
* @param id 主键
|
* @param id 主键
|
||||||
*/
|
*/
|
||||||
@ -58,10 +58,10 @@ public class FlwSpelController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增流程spel达式定义
|
* 新增流程spel表达式定义
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("workflow:spel:add")
|
@SaCheckPermission("workflow:spel:add")
|
||||||
@Log(title = "流程spel达式定义", businessType = BusinessType.INSERT)
|
@Log(title = "流程spel表达式定义", businessType = BusinessType.INSERT)
|
||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PostMapping()
|
@PostMapping()
|
||||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody FlowSpelBo bo) {
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody FlowSpelBo bo) {
|
||||||
@ -69,10 +69,10 @@ public class FlwSpelController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改流程spel达式定义
|
* 修改流程spel表达式定义
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("workflow:spel:edit")
|
@SaCheckPermission("workflow:spel:edit")
|
||||||
@Log(title = "流程spel达式定义", businessType = BusinessType.UPDATE)
|
@Log(title = "流程spel表达式定义", businessType = BusinessType.UPDATE)
|
||||||
@RepeatSubmit()
|
@RepeatSubmit()
|
||||||
@PutMapping()
|
@PutMapping()
|
||||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody FlowSpelBo bo) {
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody FlowSpelBo bo) {
|
||||||
@ -80,12 +80,12 @@ public class FlwSpelController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除流程spel达式定义
|
* 删除流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param ids 主键串
|
* @param ids 主键串
|
||||||
*/
|
*/
|
||||||
@SaCheckPermission("workflow:spel:remove")
|
@SaCheckPermission("workflow:spel:remove")
|
||||||
@Log(title = "流程spel达式定义", businessType = BusinessType.DELETE)
|
@Log(title = "流程spel表达式定义", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{ids}")
|
@DeleteMapping("/{ids}")
|
||||||
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
|
public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
|
||||||
return toAjax(flwSpelService.deleteWithValidByIds(List.of(ids), true));
|
return toAjax(flwSpelService.deleteWithValidByIds(List.of(ids), true));
|
||||||
|
|||||||
@ -216,6 +216,7 @@ public class FlwTaskController extends BaseController {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@PostMapping("/urgeTask")
|
@PostMapping("/urgeTask")
|
||||||
|
@Log(title = "任务管理", businessType = BusinessType.INSERT)
|
||||||
public R<Void> urgeTask(@RequestBody FlowUrgeTaskBo bo) {
|
public R<Void> urgeTask(@RequestBody FlowUrgeTaskBo bo) {
|
||||||
return toAjax(flwTaskService.urgeTask(bo));
|
return toAjax(flwTaskService.urgeTask(bo));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
|
|||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义对象 flow_spel
|
* 流程spel表达式定义对象 flow_spel
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
|
|||||||
@ -50,6 +50,6 @@ public class FlowInstanceBo implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 申请人Ids
|
* 申请人Ids
|
||||||
*/
|
*/
|
||||||
private List<Long> createByIds;
|
private List<String> createByIds;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import jakarta.validation.constraints.*;
|
|||||||
import org.dromara.workflow.domain.FlowSpel;
|
import org.dromara.workflow.domain.FlowSpel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义业务对象 flow_spel
|
* 流程spel表达式定义业务对象 flow_spel
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import java.util.Date;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义视图对象 flow_spel
|
* 流程spel表达式定义视图对象 flow_spel
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
|
|||||||
import cn.hutool.core.lang.TypeReference;
|
import cn.hutool.core.lang.TypeReference;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||||
@ -104,20 +105,61 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
Definition definition = listenerVariable.getDefinition();
|
Definition definition = listenerVariable.getDefinition();
|
||||||
Instance instance = listenerVariable.getInstance();
|
Instance instance = listenerVariable.getInstance();
|
||||||
String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
|
String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
|
||||||
|
String hisStatus = flowParams != null ? flowParams.getHisStatus() : null;
|
||||||
|
|
||||||
for (Task flowTask : nextTasks) {
|
for (Task flowTask : nextTasks) {
|
||||||
// 如果办理或者退回并行存在需要指定办理人,则直接覆盖办理人
|
String nodeCode = flowTask.getNodeCode();
|
||||||
if (variable.containsKey(flowTask.getNodeCode()) && TaskStatusEnum.isPassOrBack(flowParams.getHisStatus())) {
|
|
||||||
String userIds = variable.get(flowTask.getNodeCode()).toString();
|
// 处理办理或退回时指定办理人的情况
|
||||||
flowTask.setPermissionList(List.of(userIds.split(StringUtils.SEPARATOR)));
|
if (TaskStatusEnum.PASS.getStatus().equals(hisStatus)) {
|
||||||
variable.remove(flowTask.getNodeCode());
|
processTaskPermission(variable, flowTask, hisStatus);
|
||||||
|
} else if (TaskStatusEnum.BACK.getStatus().equals(hisStatus)) {
|
||||||
|
processTaskPermission(variable, flowTask, hisStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果是申请节点,则把启动人添加到办理人
|
// 如果是申请节点,则把启动人添加到办理人
|
||||||
if (flowTask.getNodeCode().equals(applyNodeCode)) {
|
if (nodeCode.equals(applyNodeCode) && StringUtils.isNotBlank(instance.getCreateBy())) {
|
||||||
flowTask.setPermissionList(List.of(instance.getCreateBy()));
|
flowTask.setPermissionList(List.of(instance.getCreateBy()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理任务权限设置
|
||||||
|
*
|
||||||
|
* @param variable 变量集合
|
||||||
|
* @param flowTask 流程任务
|
||||||
|
* @param taskStatus 任务状态
|
||||||
|
*/
|
||||||
|
private void processTaskPermission(Map<String, Object> variable, Task flowTask, String taskStatus) {
|
||||||
|
String nodeKey = taskStatus + StrUtil.COLON + flowTask.getNodeCode();
|
||||||
|
|
||||||
|
// 检查是否存在状态相关的变量
|
||||||
|
if (!variable.containsKey(nodeKey)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户ID字符串
|
||||||
|
Object userIdsObj = variable.get(nodeKey);
|
||||||
|
if (userIdsObj == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String userIds = userIdsObj.toString();
|
||||||
|
if (StringUtils.isBlank(userIds)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分割用户ID并设置权限列表
|
||||||
|
String[] userIdArray = userIds.split(StringUtils.SEPARATOR);
|
||||||
|
if (userIdArray.length > 0) {
|
||||||
|
flowTask.setPermissionList(List.of(userIdArray));
|
||||||
|
// 移除已处理的状态变量
|
||||||
|
variable.remove(nodeKey);
|
||||||
|
FlowEngine.insService().removeVariables(flowTask.getInstanceId(),nodeKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 完成监听器,当前任务完成后执行
|
* 完成监听器,当前任务完成后执行
|
||||||
*
|
*
|
||||||
@ -144,7 +186,8 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
//申请人提交事件
|
//申请人提交事件
|
||||||
Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
|
Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
|
||||||
if (submit != null && submit) {
|
if (submit != null && submit) {
|
||||||
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
|
String status = determineFlowStatus(instance);
|
||||||
|
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, variable, true);
|
||||||
} else {
|
} else {
|
||||||
// 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
|
// 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
|
||||||
String status = determineFlowStatus(instance);
|
String status = determineFlowStatus(instance);
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import org.dromara.workflow.domain.vo.FlowSpelVo;
|
|||||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义Mapper接口
|
* 流程spel表达式定义Mapper接口
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
|
|||||||
@ -75,7 +75,7 @@ public interface IFlwInstanceService {
|
|||||||
* @param businessIds 业务id
|
* @param businessIds 业务id
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean deleteByBusinessIds(List<Long> businessIds);
|
boolean deleteByBusinessIds(List<String> businessIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按照实例id删除流程实例
|
* 按照实例id删除流程实例
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义Service接口
|
* 流程spel表达式定义Service接口
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
@ -20,48 +20,48 @@ import java.util.Map;
|
|||||||
public interface IFlwSpelService {
|
public interface IFlwSpelService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流程spel达式定义
|
* 查询流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param id 主键
|
* @param id 主键
|
||||||
* @return 流程spel达式定义
|
* @return 流程spel表达式定义
|
||||||
*/
|
*/
|
||||||
FlowSpelVo queryById(Long id);
|
FlowSpelVo queryById(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询流程spel达式定义列表
|
* 分页查询流程spel表达式定义列表
|
||||||
*
|
*
|
||||||
* @param bo 查询条件
|
* @param bo 查询条件
|
||||||
* @param pageQuery 分页参数
|
* @param pageQuery 分页参数
|
||||||
* @return 流程spel达式定义分页列表
|
* @return 流程spel表达式定义分页列表
|
||||||
*/
|
*/
|
||||||
TableDataInfo<FlowSpelVo> queryPageList(FlowSpelBo bo, PageQuery pageQuery);
|
TableDataInfo<FlowSpelVo> queryPageList(FlowSpelBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询符合条件的流程spel达式定义列表
|
* 查询符合条件的流程spel表达式定义列表
|
||||||
*
|
*
|
||||||
* @param bo 查询条件
|
* @param bo 查询条件
|
||||||
* @return 流程spel达式定义列表
|
* @return 流程spel表达式定义列表
|
||||||
*/
|
*/
|
||||||
List<FlowSpelVo> queryList(FlowSpelBo bo);
|
List<FlowSpelVo> queryList(FlowSpelBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增流程spel达式定义
|
* 新增流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param bo 流程spel达式定义
|
* @param bo 流程spel表达式定义
|
||||||
* @return 是否新增成功
|
* @return 是否新增成功
|
||||||
*/
|
*/
|
||||||
Boolean insertByBo(FlowSpelBo bo);
|
Boolean insertByBo(FlowSpelBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改流程spel达式定义
|
* 修改流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param bo 流程spel达式定义
|
* @param bo 流程spel表达式定义
|
||||||
* @return 是否修改成功
|
* @return 是否修改成功
|
||||||
*/
|
*/
|
||||||
Boolean updateByBo(FlowSpelBo bo);
|
Boolean updateByBo(FlowSpelBo bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验并批量删除流程spel达式定义信息
|
* 校验并批量删除流程spel表达式定义信息
|
||||||
*
|
*
|
||||||
* @param ids 待删除的主键集合
|
* @param ids 待删除的主键集合
|
||||||
* @param isValid 是否进行有效性校验
|
* @param isValid 是否进行有效性校验
|
||||||
|
|||||||
@ -88,23 +88,28 @@ public class FlwCommonServiceImpl implements IFlwCommonService {
|
|||||||
if (ObjectUtil.isEmpty(messageTypeEnum)) {
|
if (ObjectUtil.isEmpty(messageTypeEnum)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (messageTypeEnum) {
|
try {
|
||||||
case SYSTEM_MESSAGE -> {
|
switch (messageTypeEnum) {
|
||||||
SseMessageDto dto = new SseMessageDto();
|
case SYSTEM_MESSAGE -> {
|
||||||
dto.setUserIds(userIds);
|
SseMessageDto dto = new SseMessageDto();
|
||||||
dto.setMessage(message);
|
dto.setUserIds(userIds);
|
||||||
SseMessageUtils.publishMessage(dto);
|
dto.setMessage(message);
|
||||||
|
SseMessageUtils.publishMessage(dto);
|
||||||
|
}
|
||||||
|
case EMAIL_MESSAGE -> MailUtils.sendText(emails, subject, message);
|
||||||
|
case SMS_MESSAGE -> {
|
||||||
|
// TODO: 补充短信发送逻辑
|
||||||
|
log.info("【短信发送 - TODO】用户数量={} 内容={}", userList.size(), message);
|
||||||
|
}
|
||||||
|
default -> log.warn("【消息发送】未处理的消息类型:{}", messageTypeEnum);
|
||||||
}
|
}
|
||||||
case EMAIL_MESSAGE -> MailUtils.sendText(emails, subject, message);
|
} catch (Exception ex) {
|
||||||
case SMS_MESSAGE -> {
|
// 记录错误但不抛出,确保主逻辑不受影响
|
||||||
//todo 短信发送
|
log.error("【消息发送失败】类型={},原因={}", messageTypeEnum, ex.getMessage(), ex);
|
||||||
}
|
|
||||||
default -> throw new IllegalStateException("Unexpected value: " + messageTypeEnum);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 申请人节点编码
|
* 申请人节点编码
|
||||||
*
|
*
|
||||||
|
|||||||
@ -181,8 +181,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean deleteByBusinessIds(List<Long> businessIds) {
|
public boolean deleteByBusinessIds(List<String> businessIds) {
|
||||||
List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().in(FlowInstance::getBusinessId, StreamUtils.toList(businessIds, Convert::toStr)));
|
List<FlowInstance> flowInstances = flowInstanceMapper.selectList(new LambdaQueryWrapper<FlowInstance>().in(FlowInstance::getBusinessId, businessIds));
|
||||||
if (CollUtil.isEmpty(flowInstances)) {
|
if (CollUtil.isEmpty(flowInstances)) {
|
||||||
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
|
log.warn("未找到对应的流程实例信息,无法执行删除操作。");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -28,7 +28,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程spel达式定义Service业务层处理
|
* 流程spel表达式定义Service业务层处理
|
||||||
*
|
*
|
||||||
* @author Michelle.Chung
|
* @author Michelle.Chung
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
@ -42,10 +42,10 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
private final FlwSpelMapper baseMapper;
|
private final FlwSpelMapper baseMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流程spel达式定义
|
* 查询流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param id 主键
|
* @param id 主键
|
||||||
* @return 流程spel达式定义
|
* @return 流程spel表达式定义
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public FlowSpelVo queryById(Long id){
|
public FlowSpelVo queryById(Long id){
|
||||||
@ -53,11 +53,11 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询流程spel达式定义列表
|
* 分页查询流程spel表达式定义列表
|
||||||
*
|
*
|
||||||
* @param bo 查询条件
|
* @param bo 查询条件
|
||||||
* @param pageQuery 分页参数
|
* @param pageQuery 分页参数
|
||||||
* @return 流程spel达式定义分页列表
|
* @return 流程spel表达式定义分页列表
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public TableDataInfo<FlowSpelVo> queryPageList(FlowSpelBo bo, PageQuery pageQuery) {
|
public TableDataInfo<FlowSpelVo> queryPageList(FlowSpelBo bo, PageQuery pageQuery) {
|
||||||
@ -67,10 +67,10 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询符合条件的流程spel达式定义列表
|
* 查询符合条件的流程spel表达式定义列表
|
||||||
*
|
*
|
||||||
* @param bo 查询条件
|
* @param bo 查询条件
|
||||||
* @return 流程spel达式定义列表
|
* @return 流程spel表达式定义列表
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<FlowSpelVo> queryList(FlowSpelBo bo) {
|
public List<FlowSpelVo> queryList(FlowSpelBo bo) {
|
||||||
@ -92,9 +92,9 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增流程spel达式定义
|
* 新增流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param bo 流程spel达式定义
|
* @param bo 流程spel表达式定义
|
||||||
* @return 是否新增成功
|
* @return 是否新增成功
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -109,9 +109,9 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改流程spel达式定义
|
* 修改流程spel表达式定义
|
||||||
*
|
*
|
||||||
* @param bo 流程spel达式定义
|
* @param bo 流程spel表达式定义
|
||||||
* @return 是否修改成功
|
* @return 是否修改成功
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -129,7 +129,7 @@ public class FlwSpelServiceImpl implements IFlwSpelService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验并批量删除流程spel达式定义信息
|
* 校验并批量删除流程spel表达式定义信息
|
||||||
*
|
*
|
||||||
* @param ids 待删除的主键集合
|
* @param ids 待删除的主键集合
|
||||||
* @param isValid 是否进行有效性校验
|
* @param isValid 是否进行有效性校验
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
|
||||||
@ -137,6 +138,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
|
|
||||||
// 将流程定义内的扩展参数设置到变量中
|
// 将流程定义内的扩展参数设置到变量中
|
||||||
Definition definition = FlowEngine.defService().getPublishByFlowCode(startProcessBo.getFlowCode());
|
Definition definition = FlowEngine.defService().getPublishByFlowCode(startProcessBo.getFlowCode());
|
||||||
|
if (ObjectUtil.isNull(definition)) {
|
||||||
|
throw new ServiceException("流程【" + startProcessBo.getFlowCode() + "】未发布,请先在流程设计器中发布流程定义");
|
||||||
|
}
|
||||||
Dict dict = JsonUtils.parseMap(definition.getExt());
|
Dict dict = JsonUtils.parseMap(definition.getExt());
|
||||||
boolean autoPass = !ObjectUtil.isNull(dict) && dict.getBool(FlowConstant.AUTO_PASS);
|
boolean autoPass = !ObjectUtil.isNull(dict) && dict.getBool(FlowConstant.AUTO_PASS);
|
||||||
variables.put(FlowConstant.AUTO_PASS, autoPass);
|
variables.put(FlowConstant.AUTO_PASS, autoPass);
|
||||||
@ -305,10 +309,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
List<String> variableUserIds = Arrays.asList(userIds.split(StringUtils.SEPARATOR));
|
List<String> variableUserIds = Arrays.asList(userIds.split(StringUtils.SEPARATOR));
|
||||||
hashSet.addAll(popUserIds);
|
hashSet.addAll(popUserIds);
|
||||||
hashSet.addAll(variableUserIds);
|
hashSet.addAll(variableUserIds);
|
||||||
map.put(entry.getKey(), StringUtils.joinComma(hashSet));
|
map.put(TaskStatusEnum.PASS.getStatus() + StrUtil.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||||
|
map.put(TaskStatusEnum.BACK.getStatus() + StrUtil.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
map.put(entry.getKey(), entry.getValue());
|
map.put(TaskStatusEnum.PASS.getStatus() + StrUtil.COLON + entry.getKey(), entry.getValue());
|
||||||
|
map.put(TaskStatusEnum.BACK.getStatus() + StrUtil.COLON + entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
@ -529,8 +535,20 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
//获取可驳回的前置节点
|
//获取可驳回的前置节点
|
||||||
List<Node> nodes = nodeService.previousNodeList(task.getDefinitionId(), nowNodeCode);
|
List<Node> nodes = nodeService.previousNodeList(task.getDefinitionId(), nowNodeCode);
|
||||||
if (CollUtil.isNotEmpty(nodes)) {
|
List<HisTask> taskList = hisTaskService.getByInsId(task.getInstanceId());
|
||||||
return StreamUtils.filter(nodes, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType()));
|
|
||||||
|
Map<String, Node> nodeMap = StreamUtils.toIdentityMap(nodes, Node::getNodeCode);
|
||||||
|
List<Node> backNodeList = new ArrayList<>();
|
||||||
|
for (HisTask hisTask : taskList) {
|
||||||
|
Node nodeValue = nodeMap.get(hisTask.getNodeCode());
|
||||||
|
if (nodeValue != null) {
|
||||||
|
backNodeList.add(nodeValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(backNodeList)) {
|
||||||
|
List<Node> prefixOrSuffixNodes = StreamUtils.filter(backNodeList, e -> NodeType.BETWEEN.getKey().equals(e.getNodeType()));
|
||||||
|
Collections.reverse(prefixOrSuffixNodes);
|
||||||
|
return prefixOrSuffixNodes;
|
||||||
}
|
}
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import org.dromara.common.core.enums.BusinessStatusEnum;
|
|||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.service.WorkflowService;
|
import org.dromara.common.core.service.WorkflowService;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
|
import org.dromara.common.core.utils.StreamUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
@ -167,7 +168,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean deleteWithValidByIds(List<Long> ids) {
|
public Boolean deleteWithValidByIds(List<Long> ids) {
|
||||||
workflowService.deleteInstance(ids);
|
workflowService.deleteInstance(StreamUtils.toList(ids, Convert::toStr));
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +200,10 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
|||||||
testLeave.setApplyCode(businessCode);
|
testLeave.setApplyCode(businessCode);
|
||||||
}
|
}
|
||||||
testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());
|
testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||||
|
log.info("申请人提交");
|
||||||
}
|
}
|
||||||
|
String status = BusinessStatusEnum.findByStatus(processEvent.getStatus());
|
||||||
|
log.info("当前流程状态为{}", status);
|
||||||
baseMapper.updateById(testLeave);
|
baseMapper.updateById(testLeave);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -46,7 +46,7 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteInstance(List<Long> businessIds) {
|
public boolean deleteInstance(List<String> businessIds) {
|
||||||
return flwInstanceService.deleteByBusinessIds(businessIds);
|
return flwInstanceService.deleteByBusinessIds(businessIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -493,11 +493,11 @@ INSERT INTO sys_menu VALUES ('11626', '流程分类删除', '11622', '4', '#', '
|
|||||||
INSERT INTO sys_menu VALUES ('11627', '流程分类导出', '11622', '5', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:category:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11627', '流程分类导出', '11622', '5', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:category:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, SYSDATE, 1, SYSDATE, '流程达式定义菜单');
|
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, SYSDATE, 1, SYSDATE, '流程达式定义菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11802', '流程spel达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11802', '流程spel表达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11803', '流程spel达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11803', '流程spel表达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11804', '流程spel达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11804', '流程spel表达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11805', '流程spel达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11805', '流程spel表达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11806', '流程spel达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11806', '流程spel表达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11638', '请假申请', '5', '1', 'leave', 'workflow/leave/index', '', '1', '0', 'C', '0', '0', 'workflow:leave:list', '#', 103, 1, SYSDATE, NULL, NULL, '请假申请菜单');
|
INSERT INTO sys_menu VALUES ('11638', '请假申请', '5', '1', 'leave', 'workflow/leave/index', '', '1', '0', 'C', '0', '0', 'workflow:leave:list', '#', 103, 1, SYSDATE, NULL, NULL, '请假申请菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11639', '请假申请查询', '11638', '1', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:leave:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11639', '请假申请查询', '11638', '1', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:leave:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
|
|||||||
@ -471,11 +471,11 @@ INSERT INTO sys_menu VALUES ('11626', '流程分类删除', '11622', '4', '#', '
|
|||||||
INSERT INTO sys_menu VALUES ('11627', '流程分类导出', '11622', '5', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:category:export', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11627', '流程分类导出', '11622', '5', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:category:export', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, now(), 1, now(), '流程达式定义菜单');
|
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, now(), 1, now(), '流程达式定义菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11802', '流程spel达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11802', '流程spel表达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11803', '流程spel达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11803', '流程spel表达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11804', '流程spel达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11804', '流程spel表达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11805', '流程spel达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11805', '流程spel表达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11806', '流程spel达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11806', '流程spel表达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11638', '请假申请', '5', '1', 'leave', 'workflow/leave/index', '', '1', '0', 'C', '0', '0', 'workflow:leave:list', '#', 103, 1, now(), NULL, NULL, '请假申请菜单');
|
INSERT INTO sys_menu VALUES ('11638', '请假申请', '5', '1', 'leave', 'workflow/leave/index', '', '1', '0', 'C', '0', '0', 'workflow:leave:list', '#', 103, 1, now(), NULL, NULL, '请假申请菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11639', '请假申请查询', '11638', '1', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:leave:query', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11639', '请假申请查询', '11638', '1', '#', '', '', '1', '0', 'F', '0', '0', 'workflow:leave:query', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
|
|||||||
@ -1261,7 +1261,7 @@ EXEC sp_addextendedproperty
|
|||||||
'COLUMN', N'component_name'
|
'COLUMN', N'component_name'
|
||||||
GO
|
GO
|
||||||
|
|
||||||
-- method_name 字段注释
|
EXEC sp_addextendedproperty
|
||||||
'MS_Description', N'方法名',
|
'MS_Description', N'方法名',
|
||||||
'SCHEMA', N'dbo',
|
'SCHEMA', N'dbo',
|
||||||
'TABLE', N'flow_spel',
|
'TABLE', N'flow_spel',
|
||||||
@ -1618,15 +1618,15 @@ GO
|
|||||||
|
|
||||||
INSERT sys_menu VALUES (11801, N'流程表达式', N'11616', 2, N'spel', N'workflow/spel/index', N'', 1, 0, N'C', N'0', N'0', N'workflow:spel:list', N'input', 103, 1, GETDATE(), 1, GETDATE(), N'流程达式定义菜单');
|
INSERT sys_menu VALUES (11801, N'流程表达式', N'11616', 2, N'spel', N'workflow/spel/index', N'', 1, 0, N'C', N'0', N'0', N'workflow:spel:list', N'input', 103, 1, GETDATE(), 1, GETDATE(), N'流程达式定义菜单');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11802, N'流程spel达式定义查询', N'11801', 1, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:query', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11802, N'流程spel表达式定义查询', N'11801', 1, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:query', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11803, N'流程spel达式定义新增', N'11801', 2, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:add', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11803, N'流程spel表达式定义新增', N'11801', 2, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:add', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11804, N'流程spel达式定义修改', N'11801', 3, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:edit', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11804, N'流程spel表达式定义修改', N'11801', 3, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:edit', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11805, N'流程spel达式定义删除', N'11801', 4, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:remove', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11805, N'流程spel表达式定义删除', N'11801', 4, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:remove', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11806, N'流程spel达式定义导出', N'11801', 5, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:export', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11806, N'流程spel表达式定义导出', N'11801', 5, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:export', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
|
|
||||||
-- 请假测试相关按钮
|
-- 请假测试相关按钮
|
||||||
|
|||||||
@ -38,11 +38,11 @@ INSERT INTO flow_spel VALUES (1, 'spelRuleComponent', 'selectDeptLeaderById', 'i
|
|||||||
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, SYSDATE, 1, SYSDATE);
|
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, SYSDATE, 1, SYSDATE);
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, SYSDATE, 1, SYSDATE, '流程达式定义菜单');
|
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, SYSDATE, 1, SYSDATE, '流程达式定义菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11802', '流程spel达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11802', '流程spel表达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11803', '流程spel达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11803', '流程spel表达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11804', '流程spel达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11804', '流程spel表达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11805', '流程spel达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11805', '流程spel表达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11806', '流程spel达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11806', '流程spel表达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, SYSDATE, NULL, NULL, '');
|
||||||
|
|
||||||
ALTER TABLE flow_definition ADD model_value VARCHAR2(40) DEFAULT 'CLASSICS' NOT NULL;
|
ALTER TABLE flow_definition ADD model_value VARCHAR2(40) DEFAULT 'CLASSICS' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_definition.model_value IS '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)';
|
COMMENT ON COLUMN flow_definition.model_value IS '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)';
|
||||||
|
|||||||
@ -37,11 +37,11 @@ INSERT INTO flow_spel VALUES (1, 'spelRuleComponent', 'selectDeptLeaderById', 'i
|
|||||||
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, now(), 1, now());
|
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, now(), 1, now());
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, now(), 1, now(), '流程达式定义菜单');
|
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', 2, 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, now(), 1, now(), '流程达式定义菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11802', '流程spel达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11802', '流程spel表达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11803', '流程spel达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11803', '流程spel表达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11804', '流程spel达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11804', '流程spel表达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11805', '流程spel达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11805', '流程spel表达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11806', '流程spel达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, now(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11806', '流程spel表达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, now(), NULL, NULL, '');
|
||||||
|
|
||||||
ALTER TABLE flow_definition ADD COLUMN model_value VARCHAR(40) NOT NULL DEFAULT 'CLASSICS';
|
ALTER TABLE flow_definition ADD COLUMN model_value VARCHAR(40) NOT NULL DEFAULT 'CLASSICS';
|
||||||
COMMENT ON COLUMN flow_definition.model_value IS '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)';
|
COMMENT ON COLUMN flow_definition.model_value IS '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)';
|
||||||
|
|||||||
@ -1,25 +1,25 @@
|
|||||||
ALTER TABLE flow_definition ADD create_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_definition ADD create_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
ALTER TABLE flow_definition ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_definition ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
|
COMMENT ON COLUMN flow_definition.create_by IS '创建人';
|
||||||
COMMENT ON COLUMN flow_definition.update_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 create_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
ALTER TABLE flow_node ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_node ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_node.create_by IS '创建人';
|
COMMENT ON COLUMN flow_node.create_by IS '创建人';
|
||||||
COMMENT ON COLUMN flow_node.update_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 create_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
ALTER TABLE flow_skip ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_skip ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_skip.create_by IS '创建人';
|
COMMENT ON COLUMN flow_skip.create_by IS '创建人';
|
||||||
COMMENT ON COLUMN flow_skip.update_by IS '更新人';
|
COMMENT ON COLUMN flow_skip.update_by IS '更新人';
|
||||||
|
|
||||||
ALTER TABLE flow_instance ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_instance ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_instance.update_by IS '更新人';
|
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 create_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
ALTER TABLE flow_task ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_task ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_task.create_by IS '创建人';
|
COMMENT ON COLUMN flow_task.create_by IS '创建人';
|
||||||
COMMENT ON COLUMN flow_task.update_by IS '更新人';
|
COMMENT ON COLUMN flow_task.update_by IS '更新人';
|
||||||
|
|
||||||
ALTER TABLE flow_user ADD update_by VARCHAR2(64) DEFAULT '' NOT NULL;
|
ALTER TABLE flow_user ADD update_by VARCHAR(64) DEFAULT '' NOT NULL;
|
||||||
COMMENT ON COLUMN flow_user.update_by IS '更新人';
|
COMMENT ON COLUMN flow_user.update_by IS '更新人';
|
||||||
|
|||||||
@ -123,15 +123,15 @@ GO
|
|||||||
|
|
||||||
INSERT sys_menu VALUES (11801, N'流程表达式', N'11616', 2, N'spel', N'workflow/spel/index', N'', 1, 0, N'C', N'0', N'0', N'workflow:spel:list', N'input', 103, 1, GETDATE(), 1, GETDATE(), N'流程达式定义菜单');
|
INSERT sys_menu VALUES (11801, N'流程表达式', N'11616', 2, N'spel', N'workflow/spel/index', N'', 1, 0, N'C', N'0', N'0', N'workflow:spel:list', N'input', 103, 1, GETDATE(), 1, GETDATE(), N'流程达式定义菜单');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11802, N'流程spel达式定义查询', N'11801', 1, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:query', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11802, N'流程spel表达式定义查询', N'11801', 1, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:query', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11803, N'流程spel达式定义新增', N'11801', 2, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:add', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11803, N'流程spel表达式定义新增', N'11801', 2, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:add', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11804, N'流程spel达式定义修改', N'11801', 3, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:edit', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11804, N'流程spel表达式定义修改', N'11801', 3, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:edit', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11805, N'流程spel达式定义删除', N'11801', 4, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:remove', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11805, N'流程spel表达式定义删除', N'11801', 4, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:remove', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
INSERT sys_menu VALUES (11806, N'流程spel达式定义导出', N'11801', 5, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:export', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
INSERT sys_menu VALUES (11806, N'流程spel表达式定义导出', N'11801', 5, N'#', N'', NULL, 1, 0, N'F', N'0', N'0', N'workflow:spel:export', N'#', 103, 1, GETDATE(), NULL, NULL, N'');
|
||||||
GO
|
GO
|
||||||
|
|
||||||
ALTER TABLE flow_definition ADD model_value VARCHAR(40) NOT NULL CONSTRAINT DF_flow_definition_model_value DEFAULT 'CLASSICS';
|
ALTER TABLE flow_definition ADD model_value VARCHAR(40) NOT NULL CONSTRAINT DF_flow_definition_model_value DEFAULT 'CLASSICS';
|
||||||
|
|||||||
@ -22,11 +22,11 @@ INSERT INTO flow_spel VALUES (1, 'spelRuleComponent', 'selectDeptLeaderById', 'i
|
|||||||
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, sysdate(), 1, sysdate());
|
INSERT INTO flow_spel VALUES (2, NULL, NULL, 'initiator', '${initiator}', '流程发起人', '0', '0', 103, 1, sysdate(), 1, sysdate());
|
||||||
|
|
||||||
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', '2', 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, sysdate(), 1, sysdate(), '流程达式定义菜单');
|
INSERT INTO sys_menu VALUES ('11801', '流程表达式', '11616', '2', 'spel', 'workflow/spel/index', '', 1, 0, 'C', '0', '0', 'workflow:spel:list', 'input', 103, 1, sysdate(), 1, sysdate(), '流程达式定义菜单');
|
||||||
INSERT INTO sys_menu VALUES ('11802', '流程spel达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, sysdate(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11802', '流程spel表达式定义查询', '11801', 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:query', '#', 103, 1, sysdate(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11803', '流程spel达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, sysdate(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11803', '流程spel表达式定义新增', '11801', 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:add', '#', 103, 1, sysdate(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11804', '流程spel达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, sysdate(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11804', '流程spel表达式定义修改', '11801', 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:edit', '#', 103, 1, sysdate(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11805', '流程spel达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, sysdate(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11805', '流程spel表达式定义删除', '11801', 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:remove', '#', 103, 1, sysdate(), NULL, NULL, '');
|
||||||
INSERT INTO sys_menu VALUES ('11806', '流程spel达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, sysdate(), NULL, NULL, '');
|
INSERT INTO sys_menu VALUES ('11806', '流程spel表达式定义导出', '11801', 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'workflow:spel:export', '#', 103, 1, sysdate(), NULL, NULL, '');
|
||||||
|
|
||||||
ALTER TABLE `flow_definition`
|
ALTER TABLE `flow_definition`
|
||||||
ADD COLUMN `model_value` varchar(40) NOT NULL DEFAULT 'CLASSICS' COMMENT '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)' AFTER `flow_name`;
|
ADD COLUMN `model_value` varchar(40) NOT NULL DEFAULT 'CLASSICS' COMMENT '设计器模式(CLASSICS经典模式 MIMIC仿钉钉模式)' AFTER `flow_name`;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user