From 7cbb3515136d703a5fb58aa75c6c575bb5c24033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E4=BA=9A=E5=B3=B0=20=7C=20battcn?= <1837307557@qq.com> Date: Thu, 27 Nov 2025 13:19:47 +0800 Subject: [PATCH 01/33] =?UTF-8?q?fix:=20=E5=A6=82=E6=9E=9C=E5=A4=96?= =?UTF-8?q?=E9=83=A8=E4=BC=A0=E9=80=92=20null=20,=20=E5=B0=B1=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=20,=20=E7=BB=B4=E6=8C=81=E8=8A=82=E7=82=B9=E6=9C=AC?= =?UTF-8?q?=E8=BA=AB=E5=AE=A1=E6=89=B9,=E9=98=B2=E6=AD=A2=20null=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8F=98=E6=88=90=20[null]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/warm/flow/core/dto/FlowParams.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java index 2b5f0a39..5b7bad1f 100644 --- a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java +++ b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java @@ -22,9 +22,7 @@ import org.dromara.warm.flow.core.utils.CollUtil; import org.dromara.warm.flow.core.utils.StringUtils; import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 工作流内置参数 @@ -253,7 +251,11 @@ public class FlowParams implements Serializable { } public FlowParams nextHandler(String... nextHandler) { - this.nextHandler = nextHandler; + // 如果外部传递 null , 就忽略 , 维持节点本身审批,防止 null 数据变成 [null] + if (nextHandler == null) { + return this; + } + this.nextHandler = Arrays.stream(nextHandler).filter(Objects::nonNull).toArray(String[]::new); return this; } -- Gitee From 2e3b1fa97901881e3ed210ec5de7f66d35124809 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Thu, 22 Jan 2026 12:55:22 +0800 Subject: [PATCH 02/33] =?UTF-8?q?[feat]=20=E6=96=B0=E5=A2=9Eeasy-query=20o?= =?UTF-8?q?rm=E6=8F=92=E4=BB=B6=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 51 +++- warm-flow-core/pom.xml | 2 +- .../warm/flow/core/dto/FlowParams.java | 2 +- warm-flow-orm/pom.xml | 3 +- warm-flow-orm/warm-flow-easy-query/.gitignore | 34 +++ warm-flow-orm/warm-flow-easy-query/pom.xml | 24 ++ .../warm-flow-easy-query-core/pom.xml | 39 +++ .../flow/orm/dao/FlowDefinitionDaoImpl.java | 85 +++++++ .../warm/flow/orm/dao/FlowFormDaoImpl.java | 62 +++++ .../warm/flow/orm/dao/FlowHisTaskDaoImpl.java | 119 +++++++++ .../flow/orm/dao/FlowInstanceDaoImpl.java | 75 ++++++ .../warm/flow/orm/dao/FlowNodeDaoImpl.java | 99 ++++++++ .../warm/flow/orm/dao/FlowSkipDaoImpl.java | 79 ++++++ .../warm/flow/orm/dao/FlowTaskDaoImpl.java | 91 +++++++ .../warm/flow/orm/dao/FlowUserDaoImpl.java | 103 ++++++++ .../warm/flow/orm/dao/WarmDaoImpl.java | 229 ++++++++++++++++++ .../warm/flow/orm/entity/FlowDefinition.java | 116 +++++++++ .../warm/flow/orm/entity/FlowForm.java | 115 +++++++++ .../warm/flow/orm/entity/FlowHisTask.java | 134 ++++++++++ .../warm/flow/orm/entity/FlowInstance.java | 110 +++++++++ .../warm/flow/orm/entity/FlowNode.java | 124 ++++++++++ .../warm/flow/orm/entity/FlowSkip.java | 99 ++++++++ .../warm/flow/orm/entity/FlowTask.java | 113 +++++++++ .../warm/flow/orm/entity/FlowUser.java | 77 ++++++ .../orm/interceptor/TenantInterceptor.java | 103 ++++++++ .../strategy/WarmFlowLogicDeleteStrategy.java | 57 +++++ .../dromara/warm/flow/orm/utils/UISort.java | 62 +++++ .../warm-flow-easy-query-sb-starter/pom.xml | 42 ++++ .../spring/boot/config/FlowAutoConfig.java | 48 ++++ .../main/resources/META-INF/spring.factories | 2 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../warm-flow-easy-query-solon-plugin/pom.xml | 43 ++++ .../dromara/warm/flow/solon/XPluginImpl.java | 33 +++ .../flow/solon/config/FlowAutoConfig.java | 51 ++++ .../org.dromara.warm.flow.solon.properties | 1 + warm-flow-orm/warm-flow-mybatis-plus/pom.xml | 2 +- .../warm-flow-mybatis-plus-core/pom.xml | 6 +- .../warm-flow-mybatis-plus-sb-starter/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- warm-flow-orm/warm-flow-mybatis/pom.xml | 2 +- .../warm-flow-mybatis-core/pom.xml | 2 +- .../warm-flow-mybatis-sb-starter/pom.xml | 2 +- .../warm-flow-mybatis-sb3-starter/pom.xml | 2 +- .../warm-flow-mybatis-solon-plugin/pom.xml | 2 +- warm-flow-plugin/pom.xml | 2 +- .../warm-flow-plugin-json/pom.xml | 2 +- .../warm/plugin/json/JsonConvertSnack4.java | 1 + .../warm-flow-plugin-modes/pom.xml | 2 +- .../warm-flow-plugin-modes-sb/pom.xml | 2 +- .../warm-flow-plugin-modes-solon/pom.xml | 2 +- warm-flow-plugin/warm-flow-plugin-ui/pom.xml | 2 +- .../warm-flow-plugin-ui-core/pom.xml | 2 +- .../warm-flow-plugin-ui-sb-web/pom.xml | 2 +- .../warm-flow-plugin-ui-solon-web/pom.xml | 2 +- .../warm-flow-plugin-vue3-ui/pom.xml | 2 +- 56 files changed, 2443 insertions(+), 30 deletions(-) create mode 100644 warm-flow-orm/warm-flow-easy-query/.gitignore create mode 100644 warm-flow-orm/warm-flow-easy-query/pom.xml create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowFormDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowInstanceDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowForm.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowHisTask.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowInstance.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowNode.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowSkip.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowTask.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowUser.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/interceptor/TenantInterceptor.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/utils/UISort.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring.factories create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/XPluginImpl.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java create mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/resources/META-INF/solon/org.dromara.warm.flow.solon.properties diff --git a/pom.xml b/pom.xml index a797664c..c5b963b3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow - 1.8.4 + 1.8.5-m1 pom warm-flow @@ -92,6 +92,7 @@ 2.3.2 3.5.15 3.5.12 + 3.1.78 4.13.2 @@ -180,7 +181,6 @@ ${mybatis-plus.version} - com.baomidou @@ -200,6 +200,33 @@ ${solon.version} + + + com.easy-query + sql-solon-plugin + ${easy-query.version} + + + + com.easy-query + sql-springboot-starter + ${easy-query.version} + + + + + com.easy-query + sql-api-proxy + ${easy-query.version} + + + + + com.easy-query + sql-processor + ${easy-query.version} + + org.noear @@ -299,6 +326,24 @@ ${warm-flow} + + org.dromara.warm + warm-flow-easy-query-core + ${warm-flow} + + + + org.dromara.warm + warm-flow-easy-query-sb-starter + ${warm-flow} + + + + org.dromara.warm + warm-flow-easy-query-solon-plugin + ${warm-flow} + + org.dromara.warm warm-flow-plugin-modes-sb @@ -428,7 +473,7 @@ org.apache.maven.plugins maven-deploy-plugin - 2.8.2 + 3.1.2 diff --git a/warm-flow-core/pom.xml b/warm-flow-core/pom.xml index 94019985..e4252961 100644 --- a/warm-flow-core/pom.xml +++ b/warm-flow-core/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow - 1.8.4 + 1.8.5-m1 warm-flow-core diff --git a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java index 2b5f0a39..a97e5901 100644 --- a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java +++ b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/dto/FlowParams.java @@ -73,7 +73,7 @@ public class FlowParams implements Serializable { * 流程变量 */ @Getter - private Map variable; + private Map variable = new HashMap<>(); /** * 流程实例状态 diff --git a/warm-flow-orm/pom.xml b/warm-flow-orm/pom.xml index 126ce8a2..f0602478 100644 --- a/warm-flow-orm/pom.xml +++ b/warm-flow-orm/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow - 1.8.4 + 1.8.5-m1 warm-flow-orm @@ -17,6 +17,7 @@ warm-flow-mybatis warm-flow-mybatis-plus + warm-flow-easy-query diff --git a/warm-flow-orm/warm-flow-easy-query/.gitignore b/warm-flow-orm/warm-flow-easy-query/.gitignore new file mode 100644 index 00000000..d2daa913 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/.gitignore @@ -0,0 +1,34 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/warm-flow-orm/warm-flow-easy-query/pom.xml b/warm-flow-orm/warm-flow-easy-query/pom.xml new file mode 100644 index 00000000..90578214 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + org.dromara.warm + warm-flow-orm + 1.8.5-m1 + + + warm-flow-easy-query + warm-flow-easy-query + Warm-Flow is a flow + pom + https://github.com/dromara/warm-flow + + + warm-flow-easy-query-core + warm-flow-easy-query-sb-starter + warm-flow-easy-query-solon-plugin + + + diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml new file mode 100644 index 00000000..33aefb01 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + org.dromara.warm + warm-flow-easy-query + 1.8.5-m1 + + + warm-flow-easy-query-core + warm-flow-easy-query-core + https://github.com/dromara/warm-flow + + + + org.dromara.warm + warm-flow-core + + + + org.projectlombok + lombok + provided + + + + + com.easy-query + sql-api-proxy + + + + com.easy-query + sql-processor + + + diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java new file mode 100644 index 00000000..60b1df55 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java @@ -0,0 +1,85 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import org.dromara.warm.flow.core.orm.dao.FlowDefinitionDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowDefinition; +import org.dromara.warm.flow.orm.entity.proxy.FlowDefinitionProxy; + +import java.util.List; +import java.util.Objects; + +/** + * 流程定义Mapper接口 + * + * @author link2fun + */ +public class FlowDefinitionDaoImpl extends WarmDaoImpl implements FlowDefinitionDao { + + @Override + public FlowDefinition newEntity() { + return new FlowDefinition(); + } + + @Override + public List queryByCodeList(List flowCodeList) { + return queryable() + .useLogicDelete(isLogicDelete()) + .useInterceptor() + .where(proxy -> proxy.flowCode().in(flowCodeList)).toList(); + } + + @Override + public void updatePublishStatus(List ids, Integer publishStatus) { + updatable() + .useLogicDelete(isLogicDelete()) + .where(flowDefinition-> flowDefinition.id().in(ids)) + .setColumns(proxy -> proxy.isPublish().set(publishStatus)) + .executeRows(); + } + + @Override + public int delete(FlowDefinition entity) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + } + + + /** 参考 mybatis orm 实现, 构建删除语句条件, 使用 = 拼接 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowDefinition entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.flowCode().eq(StringUtils.isNotEmpty(entity.getFlowCode()), entity.getFlowCode()); + o.flowName().eq(StringUtils.isNotEmpty(entity.getFlowName()), entity.getFlowName()); + o.version().eq(StringUtils.isNotEmpty(entity.getVersion()), entity.getVersion()); + o.isPublish().eq(Objects.nonNull(entity.getIsPublish()), entity.getIsPublish()); + o.formCustom().eq(StringUtils.isNotEmpty(entity.getFormCustom()), entity.getFormCustom()); + o.formPath().eq(StringUtils.isNotEmpty(entity.getFormPath()), entity.getFormPath()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + o.modelValue().eq(StringUtils.isNotEmpty(entity.getModelValue()), entity.getModelValue()); + }; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowFormDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowFormDaoImpl.java new file mode 100644 index 00000000..15d51412 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowFormDaoImpl.java @@ -0,0 +1,62 @@ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import org.dromara.warm.flow.core.orm.dao.FlowFormDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowForm; +import org.dromara.warm.flow.orm.entity.proxy.FlowFormProxy; + +import java.util.List; +import java.util.Objects; + +/** + * @author vanlin + * @className FlowFormDaoImpl + * @description + * @since 2024/12/9 14:29 + */ +public class FlowFormDaoImpl extends WarmDaoImpl implements FlowFormDao { + + @Override + public FlowForm newEntity() { + return new FlowForm(); + } + + @Override + public List queryByCodeList(List formCodeList) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> proxy.formCode().in(formCodeList)).toList(); + } + + @Override + public int delete(FlowForm entity) { + // 没有启用逻辑删除, 执行物理删除 + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + } + + /** 参考 mybatis 实现 构建删除语句条件, 使用 = 拼接 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowForm entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.formCode().eq(StringUtils.isNotEmpty(entity.getFormCode()), entity.getFormCode()); + o.formName().eq(StringUtils.isNotEmpty(entity.getFormName()), entity.getFormName()); + o.formType().eq(Objects.nonNull(entity.getFormType()), entity.getFormType()); + o.formPath().eq(StringUtils.isNotEmpty(entity.getFormPath()), entity.getFormPath()); + o.formContent().eq(StringUtils.isNotEmpty(entity.getFormContent()), entity.getFormContent()); + o.ext().eq(StringUtils.isNotEmpty(entity.getExt()), entity.getExt()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + }; + + } + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java new file mode 100644 index 00000000..e78cf8e8 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java @@ -0,0 +1,119 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import com.easy.query.core.util.EasyArrayUtil; +import org.dromara.warm.flow.core.enums.SkipType; +import org.dromara.warm.flow.core.orm.dao.FlowHisTaskDao; +import org.dromara.warm.flow.core.utils.CollUtil; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowHisTask; +import org.dromara.warm.flow.orm.entity.proxy.FlowHisTaskProxy; + +import java.util.List; +import java.util.Objects; + +/** + * 历史任务记录Mapper接口 + * @author link2fun + */ +public class FlowHisTaskDaoImpl extends WarmDaoImpl implements FlowHisTaskDao { + + /** 根据instanceId获取未退回的历史记录 */ + @Override + public List getNoReject(Long instanceId) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.instanceId().eq(instanceId); + proxy.skipType().eq(SkipType.PASS.getKey()); + }) + .orderBy(hisTask -> hisTask.createTime().desc()).toList(); + } + + @Override + public List getByInsAndNodeCodes(Long instanceId, List nodeCodes) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.instanceId().eq(instanceId); + proxy.nodeCode().in(CollUtil.isNotEmpty(nodeCodes), nodeCodes); + }) + .orderBy(hisTask -> hisTask.createTime().desc()).toList(); + } + + @Override + public int deleteByInsIds(List instanceIds) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(proxy -> proxy.instanceId().in(instanceIds)) + .executeRows(); + } + + @Override + public List listByTaskIdAndCooperateTypes(Long taskId, Integer[] cooperateTypes) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.taskId().eq(Objects.nonNull(proxy.taskId()), taskId); + proxy.cooperateType().in(EasyArrayUtil.isNotEmpty(cooperateTypes), cooperateTypes); + }) + .toList(); + } + + @Override + public FlowHisTask newEntity() { + return new FlowHisTask(); + } + + @Override + public int delete(FlowHisTask entity) { + // 没有启用逻辑删除, 执行物理删除 + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + + } + + /** 参考 mybatis 实现 构建删除语句条件, 使用 = 拼接 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowHisTask entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.nodeCode().eq(StringUtils.isNotEmpty(entity.getNodeCode()), entity.getNodeCode()); + o.nodeName().eq(StringUtils.isNotEmpty(entity.getNodeName()), entity.getNodeName()); + o.nodeType().eq(Objects.nonNull(entity.getNodeType()), entity.getNodeType()); + o.targetNodeCode().eq(StringUtils.isNotEmpty(entity.getTargetNodeCode()), entity.getTargetNodeCode()); + o.targetNodeName().eq(StringUtils.isNotEmpty(entity.getTargetNodeName()), entity.getTargetNodeName()); + o.collaborator().eq(StringUtils.isNotEmpty(entity.getCollaborator()), entity.getCollaborator()); + o.definitionId().eq(Objects.nonNull(entity.getDefinitionId()), entity.getDefinitionId()); + o.instanceId().eq(Objects.nonNull(entity.getInstanceId()), entity.getInstanceId()); + o.taskId().eq(Objects.nonNull(entity.getTaskId()), entity.getTaskId()); + o.cooperateType().eq(Objects.nonNull(entity.getCooperateType()), entity.getCooperateType()); + o.flowStatus().eq(Objects.nonNull(entity.getFlowStatus()), entity.getFlowStatus()); + o.skipType().eq(StringUtils.isNotEmpty(entity.getSkipType()), entity.getSkipType()); + o.message().eq(StringUtils.isNotEmpty(entity.getMessage()), entity.getMessage()); + o.ext().eq(StringUtils.isNotEmpty(entity.getExt()), entity.getExt()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + }; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowInstanceDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowInstanceDaoImpl.java new file mode 100644 index 00000000..2c9f08a8 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowInstanceDaoImpl.java @@ -0,0 +1,75 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import org.dromara.warm.flow.core.orm.dao.FlowInstanceDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowInstance; +import org.dromara.warm.flow.orm.entity.proxy.FlowInstanceProxy; + +import java.util.List; +import java.util.Objects; + +/** + * 流程实例Mapper接口 + * + * @author link2fun + */ +public class FlowInstanceDaoImpl extends WarmDaoImpl implements FlowInstanceDao { + + @Override + public FlowInstance newEntity() { + return new FlowInstance(); + } + + @Override + public int delete(FlowInstance entity) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + } + + @Override + public List getByDefIds(List defIds) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> proxy.definitionId().in(defIds)).toList(); + } + + /** 构建删除的过滤条件 使用 = 拼接, 参考 mybatis 实现 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowInstance entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.businessId().eq(StringUtils.isNotEmpty(entity.getBusinessId()), entity.getBusinessId()); + o.definitionId().eq(Objects.nonNull(entity.getDefinitionId()), entity.getDefinitionId()); + o.nodeCode().eq(StringUtils.isNotEmpty(entity.getNodeCode()), entity.getNodeCode()); + o.nodeName().eq(StringUtils.isNotEmpty(entity.getNodeName()), entity.getNodeName()); + o.nodeType().eq(Objects.nonNull(entity.getNodeType()), entity.getNodeType()); + o.flowStatus().eq(Objects.nonNull(entity.getFlowStatus()), entity.getFlowStatus()); + o.variable().eq(StringUtils.isNotEmpty(entity.getVariable()), entity.getVariable()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.ext().eq(StringUtils.isNotEmpty(entity.getExt()), entity.getExt()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + }; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java new file mode 100644 index 00000000..8ec95b63 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java @@ -0,0 +1,99 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import com.easy.query.core.util.EasyCollectionUtil; +import org.dromara.warm.flow.core.orm.dao.FlowNodeDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowNode; +import org.dromara.warm.flow.orm.entity.proxy.FlowNodeProxy; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * 流程节点Mapper接口 + * @author link2fun + */ +public class FlowNodeDaoImpl extends WarmDaoImpl implements FlowNodeDao { + + @Override + public FlowNode newEntity() { + return new FlowNode(); + } + + @Override + public List getByNodeCodes(List nodeCodes, Long definitionId) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.definitionId().eq(definitionId); + proxy.nodeCode().in(EasyCollectionUtil.isNotEmpty(nodeCodes), nodeCodes); + }) + .toList(); + } + + @Override + public int deleteNodeByDefIds(Collection defIds) { + // 没有使用逻辑删除, 直接物理删除 + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(proxy -> { + //noinspection unchecked + proxy.definitionId().in((Collection) defIds); + }) + .executeRows(); + } + + @Override + public int delete(FlowNode entity) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + } + + /** 参考 mybatis 的实现 构建删除时的条件 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowNode entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.nodeType().eq(Objects.nonNull(entity.getNodeType()), entity.getNodeType()); + o.definitionId().eq(Objects.nonNull(entity.getDefinitionId()), entity.getDefinitionId()); + o.nodeCode().eq(StringUtils.isNotEmpty(entity.getNodeCode()), entity.getNodeCode()); + o.nodeName().eq(StringUtils.isNotEmpty(entity.getNodeName()), entity.getNodeName()); + o.permissionFlag().eq(StringUtils.isNotEmpty(entity.getPermissionFlag()), entity.getPermissionFlag()); + o.nodeRatio().eq(StringUtils.isNotEmpty(entity.getNodeRatio()), entity.getNodeRatio()); + o.coordinate().eq(StringUtils.isNotEmpty(entity.getCoordinate()), entity.getCoordinate()); + o.listenerType().eq(StringUtils.isNotEmpty(entity.getListenerType()), entity.getListenerType()); + o.listenerPath().eq(StringUtils.isNotEmpty(entity.getListenerPath()), entity.getListenerPath()); + o.formCustom().eq(StringUtils.isNotEmpty(entity.getFormCustom()), entity.getFormCustom()); + o.formPath().eq(StringUtils.isNotEmpty(entity.getFormPath()), entity.getFormPath()); + o.version().eq(StringUtils.isNotEmpty(entity.getVersion()), entity.getVersion()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + o.ext().eq(StringUtils.isNotEmpty(entity.getExt()), entity.getExt()); + }; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java new file mode 100644 index 00000000..f26c2cca --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java @@ -0,0 +1,79 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import org.dromara.warm.flow.core.orm.dao.FlowSkipDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowSkip; +import org.dromara.warm.flow.orm.entity.proxy.FlowSkipProxy; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Objects; + +/** + * 节点跳转关联Mapper接口 + * @author link2fun + */ +public class FlowSkipDaoImpl extends WarmDaoImpl implements FlowSkipDao { + + @Override + public FlowSkip newEntity() { + return new FlowSkip(); + } + + @Override + public int deleteSkipByDefIds(Collection defIds) { + + return (int) deletable() + .where(proxy -> proxy.definitionId().in((Collection) defIds)) + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .executeRows(); + } + + @Override + public int delete(FlowSkip entity) { + return (int) deletable() + .where(buildWhereCondition(entity)) + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .executeRows(); + } + + + /** 参照 mybatis 实现 构建删除时的条件 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowSkip entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.definitionId().eq(Objects.nonNull(entity.getDefinitionId()), entity.getDefinitionId()); + o.nowNodeCode().eq(StringUtils.isNotEmpty(entity.getNowNodeCode()), entity.getNowNodeCode()); + o.nowNodeType().eq(Objects.nonNull(entity.getNowNodeType()), entity.getNowNodeType()); + o.nextNodeCode().eq(StringUtils.isNotEmpty(entity.getNextNodeCode()), entity.getNextNodeCode()); + o.nextNodeType().eq(Objects.nonNull(entity.getNextNodeType()), entity.getNextNodeType()); + o.skipName().eq(StringUtils.isNotEmpty(entity.getSkipName()), entity.getSkipName()); + o.skipType().eq(StringUtils.isNotEmpty(entity.getSkipType()), entity.getSkipType()); + o.coordinate().eq(StringUtils.isNotEmpty(entity.getCoordinate()), entity.getCoordinate()); + o.skipCondition().eq(StringUtils.isNotEmpty(entity.getSkipCondition()), entity.getSkipCondition()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + }; + + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java new file mode 100644 index 00000000..fc2a595a --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java @@ -0,0 +1,91 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import org.dromara.warm.flow.core.orm.dao.FlowTaskDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowTask; +import org.dromara.warm.flow.orm.entity.proxy.FlowTaskProxy; + +import java.util.List; +import java.util.Objects; + +/** + * 待办任务Mapper接口 + * @author link2fun + */ +public class FlowTaskDaoImpl extends WarmDaoImpl implements FlowTaskDao { + + @Override + public FlowTask newEntity() { + return new FlowTask(); + } + + @Override + public int deleteByInsIds(List instanceIds) { + return (int) deletable() + .where(proxy -> { + proxy.instanceId().in(instanceIds); + }) + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .executeRows(); + + } + + @Override + public int delete(FlowTask entity) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + + } + + @Override + public List getByInsIdAndNodeCodes(Long instanceId, List nodeCodes) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.instanceId().eq(instanceId); + proxy.nodeCode().in(nodeCodes); + }).toList(); + } + + /** 参照 mybatis 实现, 构建删除条件 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowTask entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.nodeCode().eq(StringUtils.isNotEmpty(entity.getNodeCode()), entity.getNodeCode()); + o.nodeName().eq(StringUtils.isNotEmpty(entity.getNodeName()), entity.getNodeName()); + o.nodeType().eq(Objects.nonNull(entity.getNodeType()), entity.getNodeType()); + o.definitionId().eq(Objects.nonNull(entity.getDefinitionId()), entity.getDefinitionId()); + o.instanceId().eq(Objects.nonNull(entity.getInstanceId()), entity.getInstanceId()); + o.formCustom().eq(StringUtils.isNotEmpty(entity.getFormCustom()), entity.getFormCustom()); + o.formPath().eq(StringUtils.isNotEmpty(entity.getFormPath()), entity.getFormPath()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + o.flowStatus().eq(StringUtils.isNotEmpty(entity.getFlowStatus()), entity.getFlowStatus()); + }; + + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java new file mode 100644 index 00000000..2792e90a --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java @@ -0,0 +1,103 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import com.easy.query.core.util.EasyArrayUtil; +import com.easy.query.core.util.EasyCollectionUtil; +import org.dromara.warm.flow.core.orm.dao.FlowUserDao; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.orm.entity.FlowUser; +import org.dromara.warm.flow.orm.entity.proxy.FlowUserProxy; + +import java.util.List; +import java.util.Objects; + +/** + * 流程用户Mapper接口 + * @author link2fun + */ +public class FlowUserDaoImpl extends WarmDaoImpl implements FlowUserDao { + + @Override + public FlowUser newEntity() { + return new FlowUser(); + } + + @Override + public int deleteByTaskIds(List taskIdList) { + return (int) deletable() + .where(proxy -> { + proxy.associated().in(taskIdList); + }) + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .executeRows(); + + } + + @Override + public List listByAssociatedAndTypes(List associatedList, String[] types) { + + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.associated().in(EasyCollectionUtil.isNotEmpty(associatedList), associatedList); + proxy.type().in(EasyArrayUtil.isNotEmpty(types), types); + }) + .toList(); + } + + @Override + public List listByProcessedBys(Long associated, List processedBys, String[] types) { + return queryable() + .useLogicDelete(isLogicDelete()) + .where(proxy -> { + proxy.associated().eq(Objects.nonNull(associated), associated); + proxy.processedBy().in(EasyCollectionUtil.isNotEmpty(processedBys), processedBys); + proxy.type().in(EasyArrayUtil.isNotEmpty(types),types); + }) + .toList(); + } + + @Override + public int delete(FlowUser entity) { + // 没有使用逻辑删除, 直接物理删除 + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .where(buildWhereCondition(entity)) + .executeRows(); + } + + /** 参照 mybatis 实现, 构建删除条件 */ + @Override + public SQLActionExpression1 buildWhereCondition(FlowUser entity) { + return o -> { + o.id().eq(Objects.nonNull(entity.getId()), entity.getId()); + o.type().eq(StringUtils.isNotEmpty(entity.getType()), entity.getType()); + o.processedBy().eq(StringUtils.isNotEmpty(entity.getProcessedBy()), entity.getProcessedBy()); + o.associated().eq(Objects.nonNull(entity.getAssociated()), entity.getAssociated()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.createTime().eq(Objects.nonNull(entity.getCreateTime()), entity.getCreateTime()); + o.updateTime().eq(Objects.nonNull(entity.getUpdateTime()), entity.getUpdateTime()); + o.tenantId().eq(StringUtils.isNotEmpty(entity.getTenantId()), entity.getTenantId()); + o.createBy().eq(StringUtils.isNotEmpty(entity.getCreateBy()), entity.getCreateBy()); + o.updateBy().eq(StringUtils.isNotEmpty(entity.getUpdateBy()), entity.getUpdateBy()); + }; + + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java new file mode 100644 index 00000000..08d90be0 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java @@ -0,0 +1,229 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.dao; + +import com.easy.query.api.proxy.client.EasyEntityQuery; +import com.easy.query.api.proxy.entity.delete.ExpressionDeletable; +import com.easy.query.api.proxy.entity.insert.EntityInsertable; +import com.easy.query.api.proxy.entity.select.EntityQueryable; +import com.easy.query.api.proxy.entity.update.EntityUpdatable; +import com.easy.query.api.proxy.entity.update.ExpressionUpdatable; +import com.easy.query.core.api.pagination.EasyPageResult; +import com.easy.query.core.enums.SQLExecuteStrategyEnum; +import com.easy.query.core.expression.builder.core.NotNullOrEmptyValueFilter; +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import com.easy.query.core.proxy.ProxyEntity; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.entity.RootEntity; +import org.dromara.warm.flow.core.invoker.FrameInvoker; +import org.dromara.warm.flow.core.orm.agent.WarmQuery; +import org.dromara.warm.flow.core.orm.dao.WarmDao; +import org.dromara.warm.flow.core.utils.page.Page; +import org.dromara.warm.flow.orm.utils.UISort; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +/** + * BaseMapper接口 + * + * @author link2fun + */ +public abstract class WarmDaoImpl, P extends ProxyEntity> + implements WarmDao { + + private EasyEntityQuery entityQuery; + + private final Class entityClass; + + public EasyEntityQuery entityQuery(){ + if (entityQuery == null) { + entityQuery = FrameInvoker.getBean(EasyEntityQuery.class); + } + return entityQuery; + } + + { + entityClass = getGenericClass(); + } + + @SuppressWarnings("unchecked") + private Class getGenericClass() { + return (Class) ((java.lang.reflect.ParameterizedType) getClass() + .getGenericSuperclass()) + .getActualTypeArguments()[0]; + } + + /** + * 获取查询对象,然后可以自行编写easy-query查询语句 + * + * @return 查询对象 + */ + public EntityQueryable queryable() { + return entityQuery().queryable(entityClass); + } + + /** + * 获取删除对象,然后可以自行编写easy-query删除语句 + * + * @return 删除对象 + */ + public ExpressionDeletable deletable() { + return entityQuery().deletable(entityClass); + } + + /** + * 获取更新对象,然后可以自行编写easy-query更新语句 + * + * @return 更新对象 + */ + public EntityUpdatable updatable(T entity) { + return entityQuery().updatable(entity); + } + + /** + * 获取更新对象,然后可以自行编写easy-query更新语句 + * + * @return 更新对象 + */ + public ExpressionUpdatable updatable() { + return entityQuery().updatable(entityClass); + } + + /** + * 获取更新对象,然后可以自行编写easy-query更新语句 + * + * @return 更新对象 + */ + public EntityInsertable insertable(T entity) { + return entityQuery().insertable(entity); + } + + @Override + public T selectById(Serializable id) { + return queryable() + .useLogicDelete(isLogicDelete()) + .whereById(id) + .singleOrNull(); + } + + @Override + public List selectByIds(Collection ids) { + return queryable() + .useLogicDelete(isLogicDelete()) + .whereByIds(ids) + .toList(); + } + + @Override + public Page selectPage(T entity, Page page) { + UISort objectSort = UISort.of(page); + EasyPageResult pageResult = queryable() + .filterConfigure(NotNullOrEmptyValueFilter.DEFAULT) + .useLogicDelete(isLogicDelete()) + .where(buildWhereCondition(entity)) + .orderByObject(Objects.nonNull(objectSort), objectSort) + .toPageResult(page.getPageNum(), page.getPageSize()); + + Page rPage = new Page<>(pageResult.getData(), pageResult.getTotal()); + rPage.setPageNum(page.getPageNum()); + rPage.setPageSize(page.getPageSize()); + return rPage; + } + + @Override + public List selectList(T entity, WarmQuery query) { + UISort uiSort = UISort.of(query); + return queryable() + .filterConfigure(NotNullOrEmptyValueFilter.DEFAULT) + .useLogicDelete(isLogicDelete()) + .where(buildWhereCondition(entity)) + .orderByObject(Objects.nonNull(uiSort),uiSort) + .toList(); + } + + @Override + public long selectCount(T entity) { + return queryable() + .filterConfigure(NotNullOrEmptyValueFilter.DEFAULT) + .useLogicDelete(isLogicDelete()) + .where(buildWhereCondition(entity)) + .count(); + } + + @Override + public int save(T entity) { + return (int) insertable(entity) + .setSQLStrategy(SQLExecuteStrategyEnum.ONLY_NOT_NULL_COLUMNS) + .executeRows(); + } + + @Override + public int updateById(T entity) { + return (int) updatable(entity) + .useLogicDelete(isLogicDelete()) + .setSQLStrategy(SQLExecuteStrategyEnum.ONLY_NOT_NULL_COLUMNS) + .executeRows(); + } + + + @Override + public int deleteById(Serializable id) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .whereById(id) + .executeRows(); + } + + @Override + public int deleteByIds(Collection ids) { + return (int) deletable() + .useLogicDelete(isLogicDelete()) + .allowDeleteStatement(!isLogicDelete()) + .whereByIds(ids) + .executeRows(); + } + + @Override + public void saveBatch(List list) { + entityQuery().insertable(list) + .setSQLStrategy(SQLExecuteStrategyEnum.ONLY_NOT_NULL_COLUMNS) + .batch() + .executeRows(); + + } + + @Override + public void updateBatch(List list) { + entityQuery().updatable(list) + .setSQLStrategy(SQLExecuteStrategyEnum.ONLY_NOT_NULL_COLUMNS) + .useLogicDelete(isLogicDelete()) + .batch() + .executeRows(); + + } + + public abstract SQLActionExpression1

buildWhereCondition(T entity); + + public boolean isLogicDelete() { + return FlowEngine.getFlowConfig().isLogicDelete(); + } + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java new file mode 100644 index 00000000..93a9bfe1 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java @@ -0,0 +1,116 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.warm.flow.core.entity.Definition; +import org.dromara.warm.flow.core.entity.Node; +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.orm.entity.proxy.FlowDefinitionProxy; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 流程定义对象 flow_definition + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_definition") +public class FlowDefinition implements Definition,ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 流程编码 */ + private String flowCode; + + /** 流程名称 */ + private String flowName; + + /** + * 设计器模型(CLASSICS经典模型 MIMIC仿钉钉模型) + */ + private String modelValue; + + /** 流程类别 */ + private String category; + + /** 流程版本 */ + private String version; + + /** 是否发布(0未发布 1已发布 9失效) */ + private Integer isPublish; + + /** 审批表单是否自定义(Y是 N否) */ + private String formCustom; + + /** 审批表单路径 */ + private String formPath; + + /** 监听器类型 */ + private String listenerType; + + /** 监听器路径 */ + private String listenerPath; + + /** 流程激活状态(0挂起 1激活)*/ + private Integer activityStatus; + + /** 扩展字段 */ + private String ext; + + @ColumnIgnore + private List nodeList = new ArrayList<>(); + + @ColumnIgnore + private List userList = new ArrayList<>(); + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowForm.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowForm.java new file mode 100644 index 00000000..f5568eea --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowForm.java @@ -0,0 +1,115 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.warm.flow.core.entity.Form; +import org.dromara.warm.flow.orm.entity.proxy.FlowFormProxy; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; + +import java.util.Date; + +/** + * @author vanlin + * @since 2024/8/19 10:30 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_form") +public class FlowForm implements Form, ProxyEntityAvailable { + + /** + * 主键 + */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** + * 表单编码 + */ + private String formCode; + + /** + * 表单名称 + */ + private String formName; + + /** + * 表单版本 + */ + private String version; + + /** + * 是否发布(0未发布 1已发布 9失效) + */ + private Integer isPublish; + + /** + * 表单类型(0内置表单 存 form_content 1外挂表单 存form_path) + */ + private Integer formType; + + /** + * 表单路径 + */ + private String formPath; + + /** + * 表单内容 + */ + private String formContent; + + /** + * 表单扩展,用户自行使用 + */ + private String ext; + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 租户ID + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 删除标记 + */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowHisTask.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowHisTask.java new file mode 100644 index 00000000..64605b0e --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowHisTask.java @@ -0,0 +1,134 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import org.dromara.warm.flow.core.entity.HisTask; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.flow.orm.entity.proxy.FlowHisTaskProxy; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +/** + * 历史任务记录对象 flow_his_task + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_his_task") +public class FlowHisTask implements HisTask, ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 任务开始时间 */ + private Date createTime; + + /** 审批完成时间 */ + private Date updateTime; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 对应flow_definition表的id */ + private Long definitionId; + + /** 流程名称 */ + @ColumnIgnore + private String flowName; + + /** 流程实例表id */ + private Long instanceId; + + /** 任务表id */ + private Long taskId; + + /** 协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签) */ + private Integer cooperateType; + + /** 业务id */ + @ColumnIgnore + private String businessId; + + /** 开始节点编码 */ + private String nodeCode; + + /** 开始节点名称 */ + private String nodeName; + + /** 开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nodeType; + + /** 目标节点编码 */ + private String targetNodeCode; + + /** 结束节点名称 */ + private String targetNodeName; + + /** 审批者 */ + private String approver; + + /** 协作人(只有转办、会签、票签、委派) */ + private String collaborator; + + /** 权限标识 permissionFlag的list形式 */ + @ColumnIgnore + private List permissionList; + + /** + * 跳转类型(PASS通过 REJECT退回 NONE无动作) + */ + private String skipType; + + /** + * 流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回) + **/ + private String flowStatus; + + /** 审批意见 */ + private String message; + + /** 流程变量 */ + private String variable; + + /** 业务详情 存业务类的json */ + private String ext; + + /** 创建者 */ + @ColumnIgnore + private String createBy; + + + /** 审批表单是否自定义(Y=是 N=否) */ + private String formCustom; + + /** 审批表单是否自定义(Y是 2否) */ + private String formPath; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowInstance.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowInstance.java new file mode 100644 index 00000000..1e5f1177 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowInstance.java @@ -0,0 +1,110 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.warm.flow.core.entity.Instance; +import org.dromara.warm.flow.orm.entity.proxy.FlowInstanceProxy; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; + +import java.util.Date; + +/** + * 流程实例对象 flow_instance + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_instance") +public class FlowInstance implements Instance, ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 对应flow_definition表的id */ + private Long definitionId; + + /** 流程名称 */ + @ColumnIgnore + private String flowName; + + /** 业务id */ + private String businessId; + + /** 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nodeType; + + /** 流程节点编码 每个流程的nodeCode是唯一的,即definitionId+nodeCode唯一,在数据库层面做了控制 */ + private String nodeCode; + + /** 流程节点名称 */ + private String nodeName; + + /** 流程变量 */ + private String variable; + + /** 流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回) */ + private String flowStatus; + + /** 流程激活状态(0挂起 1激活)*/ + private Integer activityStatus; + + /** 审批表单是否自定义(Y是 N否) */ + @ColumnIgnore + private String formCustom; + + /** 审批表单是否自定义(Y=是 N=否) */ + @ColumnIgnore + private String formPath; + + /** 流程定义json */ + private String defJson; + + /** 扩展字段 */ + private String ext; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowNode.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowNode.java new file mode 100644 index 00000000..c3860cd2 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowNode.java @@ -0,0 +1,124 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.warm.flow.core.entity.Node; +import org.dromara.warm.flow.core.entity.Skip; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.flow.orm.entity.proxy.FlowNodeProxy; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 流程节点对象 flow_node + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_node") +public class FlowNode implements Node, ProxyEntityAvailable { + + /** 跳转条件 */ + @ColumnIgnore + List skipList = new ArrayList<>(); + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM, strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nodeType; + + /** 流程id */ + private Long definitionId; + + /** 流程节点编码 每个流程的nodeCode是唯一的,即definitionId+nodeCode唯一,在数据库层面做了控制 */ + private String nodeCode; + + /** 流程节点名称 */ + private String nodeName; + + /** 权限标识(权限类型:权限标识,可以多个,用@@隔开) */ + private String permissionFlag; + + /** 流程签署比例值 */ + private String nodeRatio; + + /** 流程节点坐标 */ + private String coordinate; + + /** + * 版本 + * @deprecated 下个版本废弃 + **/ + private String version; + + /** 任意结点跳转 */ + private String anyNodeSkip; + + /** 监听器类型 */ + private String listenerType; + + /** 监听器路径 */ + private String listenerPath; + + /** + * 审批表单是否自定义(Y=是 N=否) + */ + private String formCustom; + + /** + * 审批表单路径 + */ + private String formPath; + + /** + * 节点扩展属性 + */ + private String ext; +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowSkip.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowSkip.java new file mode 100644 index 00000000..3a9fda11 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowSkip.java @@ -0,0 +1,99 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import org.dromara.warm.flow.core.entity.Skip; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.flow.orm.entity.proxy.FlowSkipProxy; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + * 节点跳转关联对象 flow_skip + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_skip") +public class FlowSkip implements Skip, ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 流程id */ + private Long definitionId; + + /** 节点id */ + @ColumnIgnore + private Long nodeId; + + /** 当前流程节点的编码 */ + private String nowNodeCode; + + /** 当前节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nowNodeType; + + /** 下一个流程节点的编码 */ + private String nextNodeCode; + + /** 下一个节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nextNodeType; + + /** 跳转名称 */ + private String skipName; + + /** 跳转类型(PASS审批通过 REJECT退回) */ + private String skipType; + + /** 跳转条件 */ + private String skipCondition; + + /** 流程跳转坐标 */ + private String coordinate; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowTask.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowTask.java new file mode 100644 index 00000000..36039127 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowTask.java @@ -0,0 +1,113 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import org.dromara.warm.flow.core.entity.Task; +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.flow.orm.entity.proxy.FlowTaskProxy; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +/** + * 待办任务记录对象 flow_task + * + * @author warm + * @since 2023-03-29 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_task") +public class FlowTask implements Task, ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 对应flow_definition表的id */ + private Long definitionId; + + /** 流程实例表id */ + private Long instanceId; + + /** 流程名称 */ + @ColumnIgnore + private String flowName; + + /** 业务id */ + @ColumnIgnore + private String businessId; + + /** 节点编码 */ + private String nodeCode; + + /** 节点名称 */ + private String nodeName; + + /** 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关) */ + private Integer nodeType; + + /** + * 流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回) + */ + private String flowStatus; + + /** 权限标识 permissionFlag的list形式 */ + @ColumnIgnore + private List permissionList; + + /** 流程用户列表 */ + @ColumnIgnore + private List userList; + + /** 审批表单是否自定义(Y=是 N=否) */ + private String formCustom; + + /** 审批表单 */ + private String formPath; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowUser.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowUser.java new file mode 100644 index 00000000..0763c50f --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowUser.java @@ -0,0 +1,77 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.orm.entity; + +import com.easy.query.core.annotation.*; +import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.proxy.ProxyEntityAvailable; +import lombok.Data; +import lombok.experimental.Accessors; +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.flow.orm.entity.proxy.FlowUserProxy; + +import java.util.Date; + +/** + * 流程用户对象 flow_user + * + * @author xiarg + * @since 2024/5/10 10:58 + */ +@Data +@Accessors(chain = true) +@EntityProxy +@Table("flow_user") +public class FlowUser implements User, ProxyEntityAvailable { + + /** 主键 */ + @Column(value = "id", primaryKey = true) + private Long id; + + /** 创建时间 */ + private Date createTime; + + /** 更新时间 */ + private Date updateTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** 租户ID */ + private String tenantId; + + /** 删除标记 */ + @LogicDelete(strategy = LogicDeleteStrategyEnum.CUSTOM,strategyName = WarmFlowLogicDeleteStrategy.NAME) + private String delFlag; + + /** 人员类型(1代办任务的审批人权限 2代办任务的转办人权限 3待办任务的委托人权限) */ + private String type; + + /** 权限人 */ + private String processedBy; + + /** 任务表id */ + private Long associated; + +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/interceptor/TenantInterceptor.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/interceptor/TenantInterceptor.java new file mode 100644 index 00000000..499064c5 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/interceptor/TenantInterceptor.java @@ -0,0 +1,103 @@ +package org.dromara.warm.flow.orm.interceptor; + +import com.easy.query.core.basic.extension.interceptor.EntityInterceptor; +import com.easy.query.core.basic.extension.interceptor.PredicateFilterInterceptor; +import com.easy.query.core.expression.parser.core.base.WherePredicate; +import com.easy.query.core.expression.segment.condition.PredicateSegment; +import com.easy.query.core.expression.segment.index.EntitySegmentComparer; +import com.easy.query.core.expression.sql.builder.EntityInsertExpressionBuilder; +import com.easy.query.core.expression.sql.builder.EntityUpdateExpressionBuilder; +import com.easy.query.core.expression.sql.builder.LambdaEntityExpressionBuilder; +import com.easy.query.core.expression.sql.builder.impl.DeleteExpressionBuilder; +import com.easy.query.core.expression.sql.builder.impl.QueryExpressionBuilder; +import com.easy.query.core.expression.sql.builder.impl.UpdateExpressionBuilder; +import lombok.extern.slf4j.Slf4j; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.entity.RootEntity; +import org.dromara.warm.flow.core.handler.TenantHandler; +import org.dromara.warm.flow.core.utils.ObjectUtil; +import org.dromara.warm.flow.core.utils.StringUtils; + +/** + * 租户拦截器 + * + * @author warm + * @since 2025/12/20 + */ +@Slf4j +public class TenantInterceptor implements EntityInterceptor, PredicateFilterInterceptor { + + public static final String NAME = "TenantInterceptor"; + + @Override + public String name() { + return NAME; + } + + @Override + public boolean apply(Class entityClass) { + return true; + } + + @Override + public void configure(Class entityClass, LambdaEntityExpressionBuilder lambdaEntityExpressionBuilder, WherePredicate wherePredicate) { + // 如果已经设置了租户id查询,就不需要在获取当前租户 + EntitySegmentComparer tenantIdComparer = new EntitySegmentComparer(entityClass, "tenantId"); + PredicateSegment where = getPredicateSegment(lambdaEntityExpressionBuilder); + if (where == null) { + return; + } + + where.forEach(s -> { + tenantIdComparer.visit(s); + return tenantIdComparer.isInSegment(); + }); + + if (tenantIdComparer.isInSegment()) { + return; + } + + TenantHandler tenantHandler = FlowEngine.tenantHandler(); + if (ObjectUtil.isNotNull(tenantHandler)) { + wherePredicate.eq("tenantId", tenantHandler.getTenantId()); + } + } + + @Override + public void configureInsert(Class entityClass, EntityInsertExpressionBuilder entityInsertExpressionBuilder, Object entity) { + if (ObjectUtil.isNotNull(entity)) { + RootEntity rootEntity = (RootEntity) entity; + if (StringUtils.isNotEmpty(rootEntity.getTenantId())) { + TenantHandler tenantHandler = FlowEngine.tenantHandler(); + if (ObjectUtil.isNotNull(tenantHandler)) { + rootEntity.setTenantId(tenantHandler.getTenantId()); + } + } + } + } + + @Override + public void configureUpdate(Class entityClass, EntityUpdateExpressionBuilder entityUpdateExpressionBuilder, Object entity) { + if (ObjectUtil.isNotNull(entity)) { + RootEntity rootEntity = (RootEntity) entity; + if (StringUtils.isNotEmpty(rootEntity.getTenantId())) { + TenantHandler tenantHandler = FlowEngine.tenantHandler(); + if (ObjectUtil.isNotNull(tenantHandler)) { + rootEntity.setTenantId(tenantHandler.getTenantId()); + } + } + } + } + + private PredicateSegment getPredicateSegment(LambdaEntityExpressionBuilder lambdaEntityExpressionBuilder) { + PredicateSegment where = null; + if (lambdaEntityExpressionBuilder instanceof QueryExpressionBuilder) { + where = ((QueryExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); + } else if (lambdaEntityExpressionBuilder instanceof UpdateExpressionBuilder) { + where = ((UpdateExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); + } else if (lambdaEntityExpressionBuilder instanceof DeleteExpressionBuilder) { + where = ((DeleteExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); + } + return where; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java new file mode 100644 index 00000000..0a7ccb1b --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java @@ -0,0 +1,57 @@ +package org.dromara.warm.flow.orm.strategy; + +import com.easy.query.core.basic.extension.logicdel.LogicDeleteBuilder; +import com.easy.query.core.basic.extension.logicdel.abstraction.AbstractLogicDeleteStrategy; +import com.easy.query.core.expression.lambda.SQLActionExpression1; +import com.easy.query.core.expression.parser.core.base.ColumnSetter; +import com.easy.query.core.expression.parser.core.base.WherePredicate; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.config.WarmFlow; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +/** + * WarmFlow 逻辑删除策略 + * + * @author warm + * @since 2026/1/21 + */ +public class WarmFlowLogicDeleteStrategy extends AbstractLogicDeleteStrategy { + + public static final String NAME = "WarmFlowLogicDelete"; + + private static final Set> ALLOW_TYPES = new HashSet<>(Collections.singletonList(String.class)); + + @Override + protected SQLActionExpression1> getPredicateFilterExpression(LogicDeleteBuilder logicDeleteBuilder, String propertyName) { + return o ->{ + WarmFlow flowConfig = FlowEngine.getFlowConfig(); + if (flowConfig.isLogicDelete()) { + o.eq(propertyName, flowConfig.getLogicNotDeleteValue()); + } + }; + } + + @Override + protected SQLActionExpression1> getDeletedSQLExpression(LogicDeleteBuilder logicDeleteBuilder, String propertyName) { + // 设置逻辑删除字段值为 warmFlow 配置的 删除值 + return o -> { + WarmFlow flowConfig = FlowEngine.getFlowConfig(); + if (flowConfig.isLogicDelete()) { + o.set(propertyName, FlowEngine.getFlowConfig().getLogicDeleteValue()); + } + }; + } + + @Override + public String getStrategy() { + return NAME; + } + + @Override + public Set> allowedPropertyTypes() { + return ALLOW_TYPES; + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/utils/UISort.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/utils/UISort.java new file mode 100644 index 00000000..8c9d2a2f --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/utils/UISort.java @@ -0,0 +1,62 @@ +package org.dromara.warm.flow.orm.utils; + +import com.easy.query.core.api.dynamic.sort.ObjectSort; +import com.easy.query.core.api.dynamic.sort.ObjectSortBuilder; +import org.dromara.warm.flow.core.orm.agent.WarmQuery; +import org.dromara.warm.flow.core.utils.StringUtils; +import org.dromara.warm.flow.core.utils.page.Page; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * UI排序 + * 动态排序 + * @author link2fun + */ +public class UISort implements ObjectSort { + + private final Map sort; + + public UISort(Map sort){ + + this.sort = sort; + } + + public static UISort of(Page page) { + + if (Objects.isNull(page) || StringUtils.isEmpty(page.getOrderBy())) { + return null; + } + + String orderBy = page.getOrderBy(); + // orderBy 要转为驼峰模式, 不然无法适配eq属性 + orderBy = StringUtils.toCamelCase(orderBy); + String isAsc = page.getIsAsc(); + Map queryMap = new HashMap<>(); + queryMap.put(orderBy, "asc".equals(isAsc)); + return new UISort(queryMap); + } + + public static UISort of(WarmQuery query) { + if (Objects.isNull(query) || StringUtils.isEmpty(query.getOrderBy())) { + return null; + } + Map queryMap = new HashMap<>(); + String orderBy = query.getOrderBy(); + // orderBy 要转为驼峰模式, 不然无法适配eq属性 + orderBy = StringUtils.toCamelCase(orderBy); + queryMap.put(orderBy, "asc".equals(query.getIsAsc())); + return new UISort(queryMap); + } + + @Override + public void configure(ObjectSortBuilder builder) { + for (Map.Entry s : sort.entrySet()) { + //自行判断key和value是否为null 因为是包装类型可能会出现npe + // key为需要排序的属性,value表示需要排序是不是asc + builder.orderBy(s.getKey(),s.getValue()); + } + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml new file mode 100644 index 00000000..e59b7095 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + org.dromara.warm + warm-flow-easy-query + 1.8.5-m1 + + + warm-flow-easy-query-sb-starter + warm-flow-easy-query-sb-starter + https://github.com/dromara/warm-flow + + + + org.dromara.warm + warm-flow-easy-query-core + + + + com.easy-query + sql-springboot-starter + + + + org.springframework + spring-tx + + + + org.springframework + spring-context + + + + org.dromara.warm + warm-flow-plugin-modes-sb + + + diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java new file mode 100644 index 00000000..6597bac7 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java @@ -0,0 +1,48 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.spring.boot.config; + +import com.easy.query.api.proxy.client.EasyEntityQuery; +import org.dromara.warm.flow.core.config.WarmFlow; +import org.dromara.warm.flow.core.invoker.FrameInvoker; +import org.dromara.warm.flow.orm.interceptor.TenantInterceptor; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.plugin.modes.sb.config.BeanConfig; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; + +/** + * 工作流bean注册配置 + * + * @author warm + * @since 2023/6/5 23:01 + */ +@Configuration +@ConditionalOnProperty(value = "warm-flow.enabled", havingValue = "true", matchIfMissing = true) +public class FlowAutoConfig extends BeanConfig { + + @Override + public void after(WarmFlow flowConfig) { + + EasyEntityQuery entityQuery = FrameInvoker.getBean(EasyEntityQuery.class); + if (entityQuery == null) { + throw new BeanCreationException("EasyEntityQuery is not found, please check the configuration"); + } + entityQuery.getRuntimeContext().getQueryConfiguration().applyLogicDeleteStrategy(new WarmFlowLogicDeleteStrategy()); + entityQuery.getRuntimeContext().getQueryConfiguration().applyInterceptor(new TenantInterceptor()); + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring.factories b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..6543e11d --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + org.dromara.warm.flow.spring.boot.config.FlowAutoConfig diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..264198f5 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.warm.flow.spring.boot.config.FlowAutoConfig diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml new file mode 100644 index 00000000..6b55e9da --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + org.dromara.warm + warm-flow-easy-query + 1.8.5-m1 + + + warm-flow-easy-query-solon-plugin + warm-flow-easy-query-solon-plugin + https://github.com/dromara/warm-flow + + + + org.noear + solon + + + + org.slf4j + slf4j-api + + + + org.dromara.warm + warm-flow-easy-query-core + + + + com.easy-query + sql-solon-plugin + + + + org.dromara.warm + warm-flow-plugin-modes-solon + + + + diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/XPluginImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/XPluginImpl.java new file mode 100644 index 00000000..9da5a33e --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/XPluginImpl.java @@ -0,0 +1,33 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.solon; + +import org.dromara.warm.flow.solon.config.FlowAutoConfig; +import org.noear.solon.core.AppContext; +import org.noear.solon.core.Plugin; + +/** + * Warm-Flow工作流插件 + * + * @author warm + */ +public class XPluginImpl implements Plugin { + + @Override + public void start(AppContext context) { + context.beanMake(FlowAutoConfig.class); + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java new file mode 100644 index 00000000..1fbf5b69 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java @@ -0,0 +1,51 @@ +/* + * Copyright 2024-2025, Warm-Flow (290631660@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.warm.flow.solon.config; + + +import com.easy.query.api.proxy.client.EasyEntityQuery; +import com.easy.query.solon.annotation.Db; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.config.WarmFlow; +import org.dromara.warm.flow.core.invoker.FrameInvoker; +import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; +import org.dromara.warm.plugin.modes.solon.config.BeanConfig; +import org.noear.solon.Solon; +import org.noear.solon.annotation.Bean; +import org.noear.solon.annotation.Configuration; + +/** + * 工作流bean注册配置 + * + * @author warm + * @since 2023/6/5 23:01 + */ +@Configuration +public class FlowAutoConfig extends BeanConfig { + + @Bean + public WarmFlow after(@Db EasyEntityQuery entityQuery, WarmFlow flowConfig) { + FrameInvoker.setBeanFunction((clazz)->{ + if (clazz.isAssignableFrom(EasyEntityQuery.class)) { + return entityQuery; + } + return Solon.context().getBean(clazz); + }); + + entityQuery.getRuntimeContext().getQueryConfiguration().applyLogicDeleteStrategy(new WarmFlowLogicDeleteStrategy()); + return FlowEngine.getFlowConfig(); + } +} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/resources/META-INF/solon/org.dromara.warm.flow.solon.properties b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/resources/META-INF/solon/org.dromara.warm.flow.solon.properties new file mode 100644 index 00000000..054a29d8 --- /dev/null +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/resources/META-INF/solon/org.dromara.warm.flow.solon.properties @@ -0,0 +1 @@ +solon.plugin=org.dromara.warm.flow.solon.XPluginImpl diff --git a/warm-flow-orm/warm-flow-mybatis-plus/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/pom.xml index 723d2421..25179c27 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-orm - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-plus diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml index 42515af7..ef26dd93 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-core/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis-plus - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-plus-core @@ -27,9 +27,5 @@ lombok provided - - - - diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml index 6870d30d..5dd9e27d 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb-starter/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis-plus - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-plus-sb-starter diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml index 03164cba..37bb96df 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb3-starter/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis-plus - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-plus-sb3-starter diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml index 2e7b4144..e17a1572 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis-plus - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-plus-solon-plugin diff --git a/warm-flow-orm/warm-flow-mybatis/pom.xml b/warm-flow-orm/warm-flow-mybatis/pom.xml index 5c1128a2..16597313 100644 --- a/warm-flow-orm/warm-flow-mybatis/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-orm - 1.8.4 + 1.8.5-m1 warm-flow-mybatis diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml index fa1e7f9a..74249f98 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-core diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml index 9389c9e7..5753c100 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb-starter/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-sb-starter diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml index 1cf1efe7..29e8589e 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-sb3-starter/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-sb3-starter diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml index af676118..59af912d 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-mybatis - 1.8.4 + 1.8.5-m1 warm-flow-mybatis-solon-plugin diff --git a/warm-flow-plugin/pom.xml b/warm-flow-plugin/pom.xml index 6c00e664..4d9ebdd8 100644 --- a/warm-flow-plugin/pom.xml +++ b/warm-flow-plugin/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow - 1.8.4 + 1.8.5-m1 warm-flow-plugin diff --git a/warm-flow-plugin/warm-flow-plugin-json/pom.xml b/warm-flow-plugin/warm-flow-plugin-json/pom.xml index 8648d80f..be2c3558 100644 --- a/warm-flow-plugin/warm-flow-plugin-json/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-json/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin - 1.8.4 + 1.8.5-m1 warm-flow-plugin-json diff --git a/warm-flow-plugin/warm-flow-plugin-json/src/main/java/org/dromara/warm/plugin/json/JsonConvertSnack4.java b/warm-flow-plugin/warm-flow-plugin-json/src/main/java/org/dromara/warm/plugin/json/JsonConvertSnack4.java index ae5e0a84..1f859179 100644 --- a/warm-flow-plugin/warm-flow-plugin-json/src/main/java/org/dromara/warm/plugin/json/JsonConvertSnack4.java +++ b/warm-flow-plugin/warm-flow-plugin-json/src/main/java/org/dromara/warm/plugin/json/JsonConvertSnack4.java @@ -85,4 +85,5 @@ public class JsonConvertSnack4 implements JsonConvert { } return null; } + } diff --git a/warm-flow-plugin/warm-flow-plugin-modes/pom.xml b/warm-flow-plugin/warm-flow-plugin-modes/pom.xml index 4713d6fc..255bfabf 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-modes/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin - 1.8.4 + 1.8.5-m1 warm-flow-plugin-modes diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml index fa63e1d5..835ae0c4 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-modes - 1.8.4 + 1.8.5-m1 warm-flow-plugin-modes-sb diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml index 433aaf75..35f483ff 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-modes - 1.8.4 + 1.8.5-m1 warm-flow-plugin-modes-solon diff --git a/warm-flow-plugin/warm-flow-plugin-ui/pom.xml b/warm-flow-plugin/warm-flow-plugin-ui/pom.xml index 1f627322..a1d05695 100644 --- a/warm-flow-plugin/warm-flow-plugin-ui/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-ui/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin - 1.8.4 + 1.8.5-m1 warm-flow-plugin-ui diff --git a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml index 7de1b5e9..06063dae 100644 --- a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-core/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-ui - 1.8.4 + 1.8.5-m1 warm-flow-plugin-ui-core diff --git a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml index cf19106e..c7766275 100644 --- a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-sb-web/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-ui - 1.8.4 + 1.8.5-m1 warm-flow-plugin-ui-sb-web diff --git a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml index eda258d4..54488c20 100644 --- a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-ui-solon-web/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-ui - 1.8.4 + 1.8.5-m1 warm-flow-plugin-ui-solon-web diff --git a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml index b0b14575..8a32baea 100644 --- a/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml +++ b/warm-flow-plugin/warm-flow-plugin-ui/warm-flow-plugin-vue3-ui/pom.xml @@ -6,7 +6,7 @@ org.dromara.warm warm-flow-plugin-ui - 1.8.4 + 1.8.5-m1 warm-flow-plugin-vue3-ui -- Gitee From 40dc2bae712d3777f1e4cd3c4ef9c499956c75d0 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Thu, 22 Jan 2026 14:49:31 +0800 Subject: [PATCH 03/33] =?UTF-8?q?[fix]=20=E4=BF=AE=E5=A4=8Dsolon=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8B=EF=BC=8CBeanConfig=E8=A2=AB=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=89=A7=E8=A1=8C=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/warm/flow/solon/config/FlowAutoConfig.java | 2 ++ .../org/dromara/warm/flow/solon/config/FlowAutoConfig.java | 5 ++++- .../org/dromara/warm/flow/solon/config/FlowAutoConfig.java | 3 ++- .../dromara/warm/plugin/modes/solon/config/BeanConfig.java | 2 -- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java index 1fbf5b69..0575a2a0 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java @@ -25,6 +25,7 @@ import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; import org.dromara.warm.plugin.modes.solon.config.BeanConfig; import org.noear.solon.Solon; import org.noear.solon.annotation.Bean; +import org.noear.solon.annotation.Condition; import org.noear.solon.annotation.Configuration; /** @@ -34,6 +35,7 @@ import org.noear.solon.annotation.Configuration; * @since 2023/6/5 23:01 */ @Configuration +@Condition(onProperty = "${warm-flow.enabled:true} = true") public class FlowAutoConfig extends BeanConfig { @Bean diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java index 7832524a..68242eb3 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java @@ -19,7 +19,9 @@ import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.config.WarmFlow; import org.dromara.warm.flow.core.utils.IdUtils; import org.dromara.warm.flow.orm.keygen.MybatisPlusIdGen; +import org.dromara.warm.plugin.modes.solon.config.BeanConfig; import org.noear.solon.annotation.Bean; +import org.noear.solon.annotation.Condition; import org.noear.solon.annotation.Configuration; /** @@ -29,7 +31,8 @@ import org.noear.solon.annotation.Configuration; * @since 2023/6/5 23:01 */ @Configuration -public class FlowAutoConfig { +@Condition(onProperty = "${warm-flow.enabled:true} = true") +public class FlowAutoConfig extends BeanConfig { @Bean public WarmFlow after() { // 设置Mybatis-Plus默认主键生成器 diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java index e4b78a7b..ad41ccca 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java @@ -18,6 +18,7 @@ package org.dromara.warm.flow.solon.config; import org.apache.ibatis.solon.annotation.Db; import org.dromara.warm.flow.core.config.WarmFlow; import org.dromara.warm.flow.orm.utils.CommonUtil; +import org.dromara.warm.plugin.modes.solon.config.BeanConfig; import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Condition; import org.noear.solon.annotation.Configuration; @@ -30,7 +31,7 @@ import org.noear.solon.annotation.Configuration; */ @Configuration @Condition(onProperty = "${warm-flow.enabled:true} = true") -public class FlowAutoConfig { +public class FlowAutoConfig extends BeanConfig { @Bean public WarmFlow initFlow(@Db org.apache.ibatis.session.Configuration db1Cfg, WarmFlow flowConfig) { diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java index 1739c45c..2e3350c6 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java @@ -26,7 +26,6 @@ import org.dromara.warm.flow.orm.entity.*; import org.noear.solon.Solon; import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Condition; -import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +37,6 @@ import org.slf4j.LoggerFactory; * @since 2023/6/5 23:01 */ @SuppressWarnings("rawtypes unchecked") -@Configuration @Condition(onProperty = "${warm-flow.enabled:true} = true") public class BeanConfig { -- Gitee From 53c1db0bdc4e9598202e0343c8f99d12ed043c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E4=BA=9A=E5=B3=B0=20=7C=20battcn?= <1837307557@qq.com> Date: Mon, 9 Feb 2026 11:29:06 +0800 Subject: [PATCH 04/33] =?UTF-8?q?[feat]=20SpringBoot4=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=20-=20IDN609?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pom.xml | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml diff --git a/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml new file mode 100644 index 00000000..28aa0c70 --- /dev/null +++ b/warm-flow-orm/warm-flow-mybatis-plus/warm-flow-mybatis-plus-sb4-starter/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.dromara.warm + warm-flow-mybatis-plus + 1.8.5-m1 + + + warm-flow-mybatis-plus-sb4-starter + warm-flow-mybatis-plus-sb4-starter + warm-flow orm为mybatis-plus的springboot4 starter + https://github.com/dromara/warm-flow + + + 3.5.15 + + + + + org.dromara.warm + warm-flow-mybatis-plus-sb-starter + + + mybatis-plus-extension + com.baomidou + + + com.baomidou + mybatis-plus-boot-starter + + + + + + com.baomidou + mybatis-plus-spring-boot4-starter + ${mybatis-plus.version} + + + + com.baomidou + mybatis-plus-jsqlparser + ${mybatis-plus.version} + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${springboot4.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java17.version} + ${java17.version} + true + ${java17.path}\javac + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + ${java17.version} + + + + + + + -- Gitee From ff052d31a3f226ec5c788da470a6bad02f89386c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E4=BA=9A=E5=B3=B0=20=7C=20battcn?= <1837307557@qq.com> Date: Mon, 9 Feb 2026 11:29:16 +0800 Subject: [PATCH 05/33] =?UTF-8?q?[feat]=20SpringBoot4=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=20-=20IDN609?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- warm-flow-orm/warm-flow-mybatis-plus/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/warm-flow-orm/warm-flow-mybatis-plus/pom.xml b/warm-flow-orm/warm-flow-mybatis-plus/pom.xml index 25179c27..1fdee676 100644 --- a/warm-flow-orm/warm-flow-mybatis-plus/pom.xml +++ b/warm-flow-orm/warm-flow-mybatis-plus/pom.xml @@ -18,6 +18,7 @@ warm-flow-mybatis-plus-core warm-flow-mybatis-plus-sb-starter warm-flow-mybatis-plus-sb3-starter + warm-flow-mybatis-plus-sb4-starter warm-flow-mybatis-plus-solon-plugin -- Gitee From 48284f1a82418a67e2190a4138bda044b32a7399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E4=BA=9A=E5=B3=B0=20=7C=20battcn?= <1837307557@qq.com> Date: Mon, 9 Feb 2026 11:29:22 +0800 Subject: [PATCH 06/33] =?UTF-8?q?[feat]=20SpringBoot4=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=20-=20IDN609?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index c5b963b3..191e8fd4 100644 --- a/pom.xml +++ b/pom.xml @@ -75,6 +75,7 @@ 2.7.18 3.0.1 + 4.0.2 3.0.2 8.0.33 -- Gitee From bc7ab21f1eb56608a5e7c9093539bce9817586a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E4=BA=9A=E5=B3=B0=20=7C=20battcn?= <1837307557@qq.com> Date: Mon, 9 Feb 2026 11:29:35 +0800 Subject: [PATCH 07/33] =?UTF-8?q?[feat]=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=B3=A8=E9=87=8A=E5=92=8C=E9=9D=99=E6=80=81=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../warm/flow/orm/utils/CommonUtil.java | 19 +++++++++---------- .../plugin/modes/sb/helper/SpelHelper.java | 17 +++++++++-------- .../plugin/modes/sb/utils/SpringUtil.java | 7 ++++--- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/utils/CommonUtil.java b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/utils/CommonUtil.java index 0191d5cb..fe0c2c82 100644 --- a/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/utils/CommonUtil.java +++ b/warm-flow-orm/warm-flow-mybatis/warm-flow-mybatis-core/src/main/java/org/dromara/warm/flow/orm/utils/CommonUtil.java @@ -23,6 +23,9 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; +/** + * @author 笨小孩 + */ public class CommonUtil { private CommonUtil() { @@ -34,21 +37,17 @@ public class CommonUtil { if (StringUtils.isEmpty(dataSourceType)) { DataSource dataSource = configuration.getEnvironment().getDataSource(); DatabaseMetaData metaData; - Connection connection = null; - try { - connection = dataSource.getConnection(); - metaData = connection.getMetaData(); - dataSourceType = metaData.getDatabaseProductName().toLowerCase(); - } catch (Exception e) { - // 不能因为一个字段的取值, 影响到框架自身运行环境 - // throw new RuntimeException(e); - } finally { + try (Connection connection = dataSource.getConnection()) { try { - connection.close(); + metaData = connection.getMetaData(); + dataSourceType = metaData.getDatabaseProductName().toLowerCase(); } catch (Exception e) { // 不能因为一个字段的取值, 影响到框架自身运行环境 // throw new RuntimeException(e); } + } catch (Exception e) { + // 不能因为一个字段的取值, 影响到框架自身运行环境 + // throw new RuntimeException(e); } } diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/helper/SpelHelper.java b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/helper/SpelHelper.java index f2ce011e..31c57de6 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/helper/SpelHelper.java +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/helper/SpelHelper.java @@ -28,19 +28,20 @@ import org.springframework.expression.ParserContext; import org.springframework.expression.common.TemplateParserContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.lang.NonNull; import java.util.Map; /** - * 条件表达式spel + * 条件表达式 spel * - * @author warm + * @author warm,battcn */ @Configuration public class SpelHelper implements ApplicationContextAware { - private static final ExpressionParser parser = new SpelExpressionParser(); - private final static ParserContext parserContext = new TemplateParserContext(); + private static final ExpressionParser PARSER = new SpelExpressionParser(); + private final static ParserContext PARSER_CONTEXT = new TemplateParserContext(); private static ApplicationContext applicationContext; @@ -57,18 +58,18 @@ public class SpelHelper implements ApplicationContextAware { } /** - * @param expression - * @return + * @param expression expression + * @return Object */ public static Object parseExpression(String expression, Map variable) { StandardEvaluationContext context = new StandardEvaluationContext(); context.setBeanResolver(beanResolver()); context.setVariables(variable); - return parser.parseExpression(expression, parserContext).getValue(context, Object.class); + return PARSER.parseExpression(expression, PARSER_CONTEXT).getValue(context, Object.class); } @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { if (SpelHelper.applicationContext == null) { SpelHelper.applicationContext = applicationContext; } diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/utils/SpringUtil.java b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/utils/SpringUtil.java index 8450c912..5073d61d 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/utils/SpringUtil.java +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-sb/src/main/java/org/dromara/warm/plugin/modes/sb/utils/SpringUtil.java @@ -18,6 +18,7 @@ package org.dromara.warm.plugin.modes.sb.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; /** @@ -31,21 +32,21 @@ public class SpringUtil implements ApplicationContextAware { /** * 获取applicationContext,应用上下文 * - * @return + * @return ApplicationContext */ public static ApplicationContext getApplicationContext() { return applicationContext; } @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } /** - * 通过class获取Bean + * 通过 class 获取 Bean */ public static M getBean(Class clazz) { return getApplicationContext().getBean(clazz); -- Gitee From 6d9b54d92d5d74c39a10adbdc0532298e6451328 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Mon, 9 Mar 2026 10:56:33 +0800 Subject: [PATCH 08/33] =?UTF-8?q?[update]=20=E5=AE=8C=E5=96=84easy-query?= =?UTF-8?q?=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/orm/dao/FlowDefinitionDaoImpl.java | 4 - .../warm/flow/orm/dao/FlowFormDaoImpl.java | 3 - .../warm/flow/orm/dao/FlowHisTaskDaoImpl.java | 7 -- .../flow/orm/dao/FlowInstanceDaoImpl.java | 3 - .../warm/flow/orm/dao/FlowNodeDaoImpl.java | 5 - .../warm/flow/orm/dao/FlowSkipDaoImpl.java | 4 - .../warm/flow/orm/dao/FlowTaskDaoImpl.java | 5 - .../warm/flow/orm/dao/FlowUserDaoImpl.java | 6 - .../warm/flow/orm/dao/WarmDaoImpl.java | 17 --- .../warm/flow/orm/entity/FlowDefinition.java | 8 +- .../warm/flow/orm/entity/FlowForm.java | 7 +- .../warm/flow/orm/entity/FlowHisTask.java | 10 +- .../warm/flow/orm/entity/FlowInstance.java | 8 +- .../warm/flow/orm/entity/FlowNode.java | 8 +- .../warm/flow/orm/entity/FlowSkip.java | 10 +- .../warm/flow/orm/entity/FlowTask.java | 10 +- .../warm/flow/orm/entity/FlowUser.java | 7 +- .../orm/interceptor/TenantInterceptor.java | 103 ------------------ .../strategy/WarmFlowLogicDeleteStrategy.java | 57 ---------- .../spring/boot/config/FlowAutoConfig.java | 4 - .../flow/solon/config/FlowAutoConfig.java | 2 - .../plugin/modes/solon/config/BeanConfig.java | 5 +- 22 files changed, 37 insertions(+), 256 deletions(-) delete mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/interceptor/TenantInterceptor.java delete mode 100644 warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java index 60b1df55..701805c6 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowDefinitionDaoImpl.java @@ -39,7 +39,6 @@ public class FlowDefinitionDaoImpl extends WarmDaoImpl queryByCodeList(List flowCodeList) { return queryable() - .useLogicDelete(isLogicDelete()) .useInterceptor() .where(proxy -> proxy.flowCode().in(flowCodeList)).toList(); } @@ -47,7 +46,6 @@ public class FlowDefinitionDaoImpl extends WarmDaoImpl ids, Integer publishStatus) { updatable() - .useLogicDelete(isLogicDelete()) .where(flowDefinition-> flowDefinition.id().in(ids)) .setColumns(proxy -> proxy.isPublish().set(publishStatus)) .executeRows(); @@ -56,8 +54,6 @@ public class FlowDefinitionDaoImpl extends WarmDaoImpl implem @Override public List queryByCodeList(List formCodeList) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> proxy.formCode().in(formCodeList)).toList(); } @@ -33,8 +32,6 @@ public class FlowFormDaoImpl extends WarmDaoImpl implem public int delete(FlowForm entity) { // 没有启用逻辑删除, 执行物理删除 return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(buildWhereCondition(entity)) .executeRows(); } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java index e78cf8e8..28ce7189 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowHisTaskDaoImpl.java @@ -37,7 +37,6 @@ public class FlowHisTaskDaoImpl extends WarmDaoImpl getNoReject(Long instanceId) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.instanceId().eq(instanceId); proxy.skipType().eq(SkipType.PASS.getKey()); @@ -48,7 +47,6 @@ public class FlowHisTaskDaoImpl extends WarmDaoImpl getByInsAndNodeCodes(Long instanceId, List nodeCodes) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.instanceId().eq(instanceId); proxy.nodeCode().in(CollUtil.isNotEmpty(nodeCodes), nodeCodes); @@ -59,8 +57,6 @@ public class FlowHisTaskDaoImpl extends WarmDaoImpl instanceIds) { return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(proxy -> proxy.instanceId().in(instanceIds)) .executeRows(); } @@ -68,7 +64,6 @@ public class FlowHisTaskDaoImpl extends WarmDaoImpl listByTaskIdAndCooperateTypes(Long taskId, Integer[] cooperateTypes) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.taskId().eq(Objects.nonNull(proxy.taskId()), taskId); proxy.cooperateType().in(EasyArrayUtil.isNotEmpty(cooperateTypes), cooperateTypes); @@ -85,8 +80,6 @@ public class FlowHisTaskDaoImpl extends WarmDaoImpl getByDefIds(List defIds) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> proxy.definitionId().in(defIds)).toList(); } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java index 8ec95b63..d1f402a7 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowNodeDaoImpl.java @@ -41,7 +41,6 @@ public class FlowNodeDaoImpl extends WarmDaoImpl implem @Override public List getByNodeCodes(List nodeCodes, Long definitionId) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.definitionId().eq(definitionId); proxy.nodeCode().in(EasyCollectionUtil.isNotEmpty(nodeCodes), nodeCodes); @@ -53,8 +52,6 @@ public class FlowNodeDaoImpl extends WarmDaoImpl implem public int deleteNodeByDefIds(Collection defIds) { // 没有使用逻辑删除, 直接物理删除 return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(proxy -> { //noinspection unchecked proxy.definitionId().in((Collection) defIds); @@ -65,8 +62,6 @@ public class FlowNodeDaoImpl extends WarmDaoImpl implem @Override public int delete(FlowNode entity) { return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(buildWhereCondition(entity)) .executeRows(); } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java index f26c2cca..8f1d4c9f 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowSkipDaoImpl.java @@ -41,8 +41,6 @@ public class FlowSkipDaoImpl extends WarmDaoImpl implem return (int) deletable() .where(proxy -> proxy.definitionId().in((Collection) defIds)) - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .executeRows(); } @@ -50,8 +48,6 @@ public class FlowSkipDaoImpl extends WarmDaoImpl implem public int delete(FlowSkip entity) { return (int) deletable() .where(buildWhereCondition(entity)) - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .executeRows(); } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java index fc2a595a..2b094620 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowTaskDaoImpl.java @@ -41,8 +41,6 @@ public class FlowTaskDaoImpl extends WarmDaoImpl implem .where(proxy -> { proxy.instanceId().in(instanceIds); }) - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .executeRows(); } @@ -50,8 +48,6 @@ public class FlowTaskDaoImpl extends WarmDaoImpl implem @Override public int delete(FlowTask entity) { return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(buildWhereCondition(entity)) .executeRows(); @@ -60,7 +56,6 @@ public class FlowTaskDaoImpl extends WarmDaoImpl implem @Override public List getByInsIdAndNodeCodes(Long instanceId, List nodeCodes) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.instanceId().eq(instanceId); proxy.nodeCode().in(nodeCodes); diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java index 2792e90a..0f4074a6 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/FlowUserDaoImpl.java @@ -43,8 +43,6 @@ public class FlowUserDaoImpl extends WarmDaoImpl implem .where(proxy -> { proxy.associated().in(taskIdList); }) - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .executeRows(); } @@ -53,7 +51,6 @@ public class FlowUserDaoImpl extends WarmDaoImpl implem public List listByAssociatedAndTypes(List associatedList, String[] types) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.associated().in(EasyCollectionUtil.isNotEmpty(associatedList), associatedList); proxy.type().in(EasyArrayUtil.isNotEmpty(types), types); @@ -64,7 +61,6 @@ public class FlowUserDaoImpl extends WarmDaoImpl implem @Override public List listByProcessedBys(Long associated, List processedBys, String[] types) { return queryable() - .useLogicDelete(isLogicDelete()) .where(proxy -> { proxy.associated().eq(Objects.nonNull(associated), associated); proxy.processedBy().in(EasyCollectionUtil.isNotEmpty(processedBys), processedBys); @@ -77,8 +73,6 @@ public class FlowUserDaoImpl extends WarmDaoImpl implem public int delete(FlowUser entity) { // 没有使用逻辑删除, 直接物理删除 return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .where(buildWhereCondition(entity)) .executeRows(); } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java index 08d90be0..a851c720 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/dao/WarmDaoImpl.java @@ -27,7 +27,6 @@ import com.easy.query.core.expression.builder.core.NotNullOrEmptyValueFilter; import com.easy.query.core.expression.lambda.SQLActionExpression1; import com.easy.query.core.proxy.ProxyEntity; import com.easy.query.core.proxy.ProxyEntityAvailable; -import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.entity.RootEntity; import org.dromara.warm.flow.core.invoker.FrameInvoker; import org.dromara.warm.flow.core.orm.agent.WarmQuery; @@ -118,7 +117,6 @@ public abstract class WarmDaoImpl selectByIds(Collection ids) { return queryable() - .useLogicDelete(isLogicDelete()) .whereByIds(ids) .toList(); } @@ -136,7 +133,6 @@ public abstract class WarmDaoImpl pageResult = queryable() .filterConfigure(NotNullOrEmptyValueFilter.DEFAULT) - .useLogicDelete(isLogicDelete()) .where(buildWhereCondition(entity)) .orderByObject(Objects.nonNull(objectSort), objectSort) .toPageResult(page.getPageNum(), page.getPageSize()); @@ -152,7 +148,6 @@ public abstract class WarmDaoImpl ids) { return (int) deletable() - .useLogicDelete(isLogicDelete()) - .allowDeleteStatement(!isLogicDelete()) .whereByIds(ids) .executeRows(); } @@ -214,16 +203,10 @@ public abstract class WarmDaoImpl list) { entityQuery().updatable(list) .setSQLStrategy(SQLExecuteStrategyEnum.ONLY_NOT_NULL_COLUMNS) - .useLogicDelete(isLogicDelete()) .batch() .executeRows(); } public abstract SQLActionExpression1

buildWhereCondition(T entity); - - public boolean isLogicDelete() { - return FlowEngine.getFlowConfig().isLogicDelete(); - } - } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java index 93a9bfe1..d25af1ed 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/entity/FlowDefinition.java @@ -15,8 +15,10 @@ */ package org.dromara.warm.flow.orm.entity; -import com.easy.query.core.annotation.*; -import com.easy.query.core.basic.extension.logicdel.LogicDeleteStrategyEnum; +import com.easy.query.core.annotation.Column; +import com.easy.query.core.annotation.ColumnIgnore; +import com.easy.query.core.annotation.EntityProxy; +import com.easy.query.core.annotation.Table; import com.easy.query.core.proxy.ProxyEntityAvailable; import lombok.Data; import lombok.experimental.Accessors; @@ -24,7 +26,6 @@ import org.dromara.warm.flow.core.entity.Definition; import org.dromara.warm.flow.core.entity.Node; import org.dromara.warm.flow.core.entity.User; import org.dromara.warm.flow.orm.entity.proxy.FlowDefinitionProxy; -import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; import java.util.ArrayList; import java.util.Date; @@ -66,7 +67,6 @@ public class FlowDefinition implements Definition,ProxyEntityAvailable entityClass) { - return true; - } - - @Override - public void configure(Class entityClass, LambdaEntityExpressionBuilder lambdaEntityExpressionBuilder, WherePredicate wherePredicate) { - // 如果已经设置了租户id查询,就不需要在获取当前租户 - EntitySegmentComparer tenantIdComparer = new EntitySegmentComparer(entityClass, "tenantId"); - PredicateSegment where = getPredicateSegment(lambdaEntityExpressionBuilder); - if (where == null) { - return; - } - - where.forEach(s -> { - tenantIdComparer.visit(s); - return tenantIdComparer.isInSegment(); - }); - - if (tenantIdComparer.isInSegment()) { - return; - } - - TenantHandler tenantHandler = FlowEngine.tenantHandler(); - if (ObjectUtil.isNotNull(tenantHandler)) { - wherePredicate.eq("tenantId", tenantHandler.getTenantId()); - } - } - - @Override - public void configureInsert(Class entityClass, EntityInsertExpressionBuilder entityInsertExpressionBuilder, Object entity) { - if (ObjectUtil.isNotNull(entity)) { - RootEntity rootEntity = (RootEntity) entity; - if (StringUtils.isNotEmpty(rootEntity.getTenantId())) { - TenantHandler tenantHandler = FlowEngine.tenantHandler(); - if (ObjectUtil.isNotNull(tenantHandler)) { - rootEntity.setTenantId(tenantHandler.getTenantId()); - } - } - } - } - - @Override - public void configureUpdate(Class entityClass, EntityUpdateExpressionBuilder entityUpdateExpressionBuilder, Object entity) { - if (ObjectUtil.isNotNull(entity)) { - RootEntity rootEntity = (RootEntity) entity; - if (StringUtils.isNotEmpty(rootEntity.getTenantId())) { - TenantHandler tenantHandler = FlowEngine.tenantHandler(); - if (ObjectUtil.isNotNull(tenantHandler)) { - rootEntity.setTenantId(tenantHandler.getTenantId()); - } - } - } - } - - private PredicateSegment getPredicateSegment(LambdaEntityExpressionBuilder lambdaEntityExpressionBuilder) { - PredicateSegment where = null; - if (lambdaEntityExpressionBuilder instanceof QueryExpressionBuilder) { - where = ((QueryExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); - } else if (lambdaEntityExpressionBuilder instanceof UpdateExpressionBuilder) { - where = ((UpdateExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); - } else if (lambdaEntityExpressionBuilder instanceof DeleteExpressionBuilder) { - where = ((DeleteExpressionBuilder) lambdaEntityExpressionBuilder).getWhere(); - } - return where; - } -} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java deleted file mode 100644 index 0a7ccb1b..00000000 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-core/src/main/java/org/dromara/warm/flow/orm/strategy/WarmFlowLogicDeleteStrategy.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.dromara.warm.flow.orm.strategy; - -import com.easy.query.core.basic.extension.logicdel.LogicDeleteBuilder; -import com.easy.query.core.basic.extension.logicdel.abstraction.AbstractLogicDeleteStrategy; -import com.easy.query.core.expression.lambda.SQLActionExpression1; -import com.easy.query.core.expression.parser.core.base.ColumnSetter; -import com.easy.query.core.expression.parser.core.base.WherePredicate; -import org.dromara.warm.flow.core.FlowEngine; -import org.dromara.warm.flow.core.config.WarmFlow; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -/** - * WarmFlow 逻辑删除策略 - * - * @author warm - * @since 2026/1/21 - */ -public class WarmFlowLogicDeleteStrategy extends AbstractLogicDeleteStrategy { - - public static final String NAME = "WarmFlowLogicDelete"; - - private static final Set> ALLOW_TYPES = new HashSet<>(Collections.singletonList(String.class)); - - @Override - protected SQLActionExpression1> getPredicateFilterExpression(LogicDeleteBuilder logicDeleteBuilder, String propertyName) { - return o ->{ - WarmFlow flowConfig = FlowEngine.getFlowConfig(); - if (flowConfig.isLogicDelete()) { - o.eq(propertyName, flowConfig.getLogicNotDeleteValue()); - } - }; - } - - @Override - protected SQLActionExpression1> getDeletedSQLExpression(LogicDeleteBuilder logicDeleteBuilder, String propertyName) { - // 设置逻辑删除字段值为 warmFlow 配置的 删除值 - return o -> { - WarmFlow flowConfig = FlowEngine.getFlowConfig(); - if (flowConfig.isLogicDelete()) { - o.set(propertyName, FlowEngine.getFlowConfig().getLogicDeleteValue()); - } - }; - } - - @Override - public String getStrategy() { - return NAME; - } - - @Override - public Set> allowedPropertyTypes() { - return ALLOW_TYPES; - } -} diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java index 6597bac7..7b8d3a45 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-sb-starter/src/main/java/org/dromara/warm/flow/spring/boot/config/FlowAutoConfig.java @@ -18,8 +18,6 @@ package org.dromara.warm.flow.spring.boot.config; import com.easy.query.api.proxy.client.EasyEntityQuery; import org.dromara.warm.flow.core.config.WarmFlow; import org.dromara.warm.flow.core.invoker.FrameInvoker; -import org.dromara.warm.flow.orm.interceptor.TenantInterceptor; -import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; import org.dromara.warm.plugin.modes.sb.config.BeanConfig; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -42,7 +40,5 @@ public class FlowAutoConfig extends BeanConfig { if (entityQuery == null) { throw new BeanCreationException("EasyEntityQuery is not found, please check the configuration"); } - entityQuery.getRuntimeContext().getQueryConfiguration().applyLogicDeleteStrategy(new WarmFlowLogicDeleteStrategy()); - entityQuery.getRuntimeContext().getQueryConfiguration().applyInterceptor(new TenantInterceptor()); } } diff --git a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java index 0575a2a0..84fef3cb 100644 --- a/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java +++ b/warm-flow-orm/warm-flow-easy-query/warm-flow-easy-query-solon-plugin/src/main/java/org/dromara/warm/flow/solon/config/FlowAutoConfig.java @@ -21,7 +21,6 @@ import com.easy.query.solon.annotation.Db; import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.config.WarmFlow; import org.dromara.warm.flow.core.invoker.FrameInvoker; -import org.dromara.warm.flow.orm.strategy.WarmFlowLogicDeleteStrategy; import org.dromara.warm.plugin.modes.solon.config.BeanConfig; import org.noear.solon.Solon; import org.noear.solon.annotation.Bean; @@ -47,7 +46,6 @@ public class FlowAutoConfig extends BeanConfig { return Solon.context().getBean(clazz); }); - entityQuery.getRuntimeContext().getQueryConfiguration().applyLogicDeleteStrategy(new WarmFlowLogicDeleteStrategy()); return FlowEngine.getFlowConfig(); } } diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java index 2e3350c6..dac23a64 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java @@ -128,10 +128,13 @@ public class BeanConfig { } @Bean - public WarmFlow initFlow(@Inject("${warm-flow}") WarmFlow warmFlow) { + public WarmFlow initFlow(@Inject(value = "${warm-flow}", required = false) WarmFlow warmFlow) { setNewEntity(); FrameInvoker.setCfgFunction((key) -> Solon.cfg().get(key)); FrameInvoker.setBeanFunction(Solon.context()::getBean); + if (warmFlow == null) { + warmFlow = new WarmFlow(); + } warmFlow.init(); FlowEngine.setFlowConfig(warmFlow); log.info("【warm-flow】,加载完成"); -- Gitee From a5d8b1821a9e874507d29f74a5d56faec8f848d8 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Thu, 12 Mar 2026 17:23:39 +0800 Subject: [PATCH 09/33] =?UTF-8?q?[fix]=20=E8=A7=A3=E5=86=B3=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E9=AB=98=E5=BA=A6=E8=A2=AB=E9=94=81=E6=AD=BB?= =?UTF-8?q?800px=E9=97=AE=E9=A2=98=20[upgrade]=20logic-flow=E5=8D=87?= =?UTF-8?q?=E7=BA=A72.2.0-alpha.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- warm-flow-ui/package.json | 4 ++-- warm-flow-ui/src/views/flow-design/index.vue | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/warm-flow-ui/package.json b/warm-flow-ui/package.json index 61419cd2..aa247f7a 100644 --- a/warm-flow-ui/package.json +++ b/warm-flow-ui/package.json @@ -18,8 +18,8 @@ "@element-plus/icons-vue": "2.3.1", "@form-create/designer": "^3.2.6", "@form-create/element-ui": "^3.2.10", - "@logicflow/core": "^2.0.12", - "@logicflow/extension": "^2.0.16", + "@logicflow/core": "2.2.0-alpha.4", + "@logicflow/extension": "2.2.0-alpha.4", "axios": "0.27.2", "element-plus": "2.4.3", "file-saver": "2.0.5", diff --git a/warm-flow-ui/src/views/flow-design/index.vue b/warm-flow-ui/src/views/flow-design/index.vue index c8f4caac..bc9590a1 100644 --- a/warm-flow-ui/src/views/flow-design/index.vue +++ b/warm-flow-ui/src/views/flow-design/index.vue @@ -686,7 +686,8 @@ async function downJson() { .container { flex: 1; width: 100%; - height: 800px; /* 根据实际需求调整高度 */ + height: calc(100vh - 100px); /* 占满视口高度减去顶部区域的高度 */ + min-height: 400px; /* 设置最小高度 */ } .logo-text { -- Gitee From d8b0e0985ebd48f50397ab3a5421199fec58473f Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Fri, 13 Mar 2026 09:03:15 +0800 Subject: [PATCH 10/33] =?UTF-8?q?[fix]=20solon=E7=89=88=E6=9C=AC=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=80=9A=E8=BF=87@Bean=E6=88=96=E8=80=85@Compone?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E6=B3=A8=E5=85=A5=E5=A4=84=E7=90=86=E5=99=A8?= =?UTF-8?q?=E5=92=8C=E7=9B=91=E5=90=AC=E5=99=A8=20[feat]=20GlobalListener?= =?UTF-8?q?=E5=92=8CPermissionHandler=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87y?= =?UTF-8?q?ml=E4=B8=AD=E9=85=8D=E7=BD=AE=E8=B7=AF=E5=BE=84=E6=B3=A8?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/warm/flow/core/FlowEngine.java | 8 ++++---- .../dromara/warm/flow/core/config/WarmFlow.java | 14 ++++++++++++-- .../warm/plugin/modes/solon/config/BeanConfig.java | 8 +++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/FlowEngine.java b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/FlowEngine.java index e5ea2982..a0cb913e 100644 --- a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/FlowEngine.java +++ b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/FlowEngine.java @@ -185,12 +185,12 @@ public class FlowEngine { tenantHandler = initBean(TenantHandler.class, handlerPath, null); } - public static void initPermissionHandler() { - permissionHandler = initBean(PermissionHandler.class, null, null); + public static void initPermissionHandler(String handlerPath) { + permissionHandler = initBean(PermissionHandler.class, handlerPath, null); } - public static void initGlobalListener() { - globalListener = initBean(GlobalListener.class, null, null); + public static void initGlobalListener(String handlerPath) { + globalListener = initBean(GlobalListener.class, handlerPath, null); } /** diff --git a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/config/WarmFlow.java b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/config/WarmFlow.java index ce7096c8..a2fad864 100644 --- a/warm-flow-core/src/main/java/org/dromara/warm/flow/core/config/WarmFlow.java +++ b/warm-flow-core/src/main/java/org/dromara/warm/flow/core/config/WarmFlow.java @@ -74,6 +74,16 @@ public class WarmFlow implements Serializable { */ private String tenantHandlerPath; + /** + * 办理人权限处理器类路径 + */ + private String permissionHandlerPath; + + /** + * 全局监听器类路径 + */ + private String globalListenerPath; + /** * 数据源类型, mybatis模块对orm进一步的封装, 由于各数据库分页语句存在差异, * 当配置此参数时, 以此参数结果为基准, 未配置时, 取DataSource中数据源类型, @@ -119,10 +129,10 @@ public class WarmFlow implements Serializable { FlowEngine.initDataFillHandler(this.getDataFillHandlerPath()); // 设置办理人权限处理类 - FlowEngine.initPermissionHandler(); + FlowEngine.initPermissionHandler(this.getPermissionHandlerPath()); // 设置全局监听器 - FlowEngine.initGlobalListener(); + FlowEngine.initGlobalListener(this.getGlobalListenerPath()); // 打印banner图 printBanner(); diff --git a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java index dac23a64..b177a603 100644 --- a/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java +++ b/warm-flow-plugin/warm-flow-plugin-modes/warm-flow-plugin-modes-solon/src/main/java/org/dromara/warm/plugin/modes/solon/config/BeanConfig.java @@ -17,7 +17,11 @@ package org.dromara.warm.plugin.modes.solon.config; import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.config.WarmFlow; +import org.dromara.warm.flow.core.handler.DataFillHandler; +import org.dromara.warm.flow.core.handler.PermissionHandler; +import org.dromara.warm.flow.core.handler.TenantHandler; import org.dromara.warm.flow.core.invoker.FrameInvoker; +import org.dromara.warm.flow.core.listener.GlobalListener; import org.dromara.warm.flow.core.orm.dao.*; import org.dromara.warm.flow.core.service.*; import org.dromara.warm.flow.core.service.impl.*; @@ -128,7 +132,9 @@ public class BeanConfig { } @Bean - public WarmFlow initFlow(@Inject(value = "${warm-flow}", required = false) WarmFlow warmFlow) { + public WarmFlow initFlow(@Inject(value = "${warm-flow}", required = false) WarmFlow warmFlow + , @Inject(required = false) DataFillHandler dataFillHandler, @Inject(required = false) TenantHandler tenantHandler + , @Inject(required = false) PermissionHandler permissionHandler, @Inject(required = false) GlobalListener globalListener) { setNewEntity(); FrameInvoker.setCfgFunction((key) -> Solon.cfg().get(key)); FrameInvoker.setBeanFunction(Solon.context()::getBean); -- Gitee From 4a348fa33481dbfeb92fbd99424b7834da3a5d23 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Fri, 13 Mar 2026 11:40:29 +0800 Subject: [PATCH 11/33] =?UTF-8?q?[update]=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- warm-flow-ui/package.json | 4 ++-- warm-flow-ui/src/components/design/mimic/vue/baseNode.vue | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/warm-flow-ui/package.json b/warm-flow-ui/package.json index aa247f7a..5e98922d 100644 --- a/warm-flow-ui/package.json +++ b/warm-flow-ui/package.json @@ -18,8 +18,8 @@ "@element-plus/icons-vue": "2.3.1", "@form-create/designer": "^3.2.6", "@form-create/element-ui": "^3.2.10", - "@logicflow/core": "2.2.0-alpha.4", - "@logicflow/extension": "2.2.0-alpha.4", + "@logicflow/core": "^2.1.11", + "@logicflow/extension": "^2.1.15", "axios": "0.27.2", "element-plus": "2.4.3", "file-saver": "2.0.5", diff --git a/warm-flow-ui/src/components/design/mimic/vue/baseNode.vue b/warm-flow-ui/src/components/design/mimic/vue/baseNode.vue index 97a4cc20..c9185369 100644 --- a/warm-flow-ui/src/components/design/mimic/vue/baseNode.vue +++ b/warm-flow-ui/src/components/design/mimic/vue/baseNode.vue @@ -152,7 +152,7 @@ function handleLeave() { width: 100%; height: 80px; box-sizing: border-box; - border-radius: 5px; /* 添加圆角 */ + border-radius: 10px; /* 添加圆角 */ } .top-section { -- Gitee From 2fee7141d092dcd308d06cf7ffedfd7efbea3712 Mon Sep 17 00:00:00 2001 From: warm <290631660@qq.com> Date: Fri, 13 Mar 2026 12:11:15 +0800 Subject: [PATCH 12/33] =?UTF-8?q?[update]=20=E6=9A=97=E9=BB=91=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- warm-flow-ui/src/views/flow-design/index.vue | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/warm-flow-ui/src/views/flow-design/index.vue b/warm-flow-ui/src/views/flow-design/index.vue index bc9590a1..53419bdf 100644 --- a/warm-flow-ui/src/views/flow-design/index.vue +++ b/warm-flow-ui/src/views/flow-design/index.vue @@ -1,5 +1,5 @@