From 8b98a7581d1051b98982fd6139f7ce9be69c141d Mon Sep 17 00:00:00 2001 From: chenchuchuan <13554600537@163.com> Date: Mon, 24 Aug 2026 17:18:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(online):=20=E6=9D=83=E9=99=90=E5=AD=97?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=94=B9=E4=B8=BA=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E5=BC=8F=E7=AE=A1=E7=90=86=E5=B9=B6=E8=A7=A3=E8=80=A6?= =?UTF-8?q?Mapper=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 OnlineAsyncConfig 配置专用线程池 permCodeTaskExecutor - 权限字生成与清理方法改用 @Async 和 @Transactional 注解替代手动线程池提交 - 将外部 OnlineSysPermCode* Mapper 引用替换为模块内部精简的 SysPermCode* Mapper - 新增 SysPermCodeMapper、SysPermCodePermMapper、SysPermMapper、SysPermModuleMapper 接口 - 在 OnlineAutoConfig 中通过 @Import 引入异步配置 --- .../common/online/config/OnlineAsyncConfig.java | 36 ++++++++++++++++++++++ .../common/online/config/OnlineAutoConfig.java | 2 ++ .../common/online/upms/dao/SysPermCodeMapper.java | 14 +++++++++ .../online/upms/dao/SysPermCodePermMapper.java | 14 +++++++++ .../common/online/upms/dao/SysPermMapper.java | 14 +++++++++ .../online/upms/dao/SysPermModuleMapper.java | 14 +++++++++ .../service/impl/OnlinePermCodeServiceImpl.java | 15 ++++++--- 7 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java create mode 100644 common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java create mode 100644 common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java create mode 100644 common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java create mode 100644 common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java diff --git a/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java b/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java new file mode 100644 index 0000000..c9cf094 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/config/OnlineAsyncConfig.java @@ -0,0 +1,36 @@ +package apelet.common.online.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * common-online异步任务线程池配置。 + *

供在线表单发布生成权限字等异步任务使用。

+ * + * @author guifc + * @date 2023-08-04 + */ +@Configuration +@EnableAsync +public class OnlineAsyncConfig { + + /** + * 权限字生成/清理专用线程池。 + */ + @Bean("permCodeTaskExecutor") + public ThreadPoolTaskExecutor permCodeTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(2); + executor.setMaxPoolSize(4); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("perm-code-"); + // 队列满时由调用线程执行,避免丢弃任务。 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } +} diff --git a/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java b/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java index 45338b2..ba86a99 100644 --- a/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java +++ b/common/common-online/src/main/java/apelet/common/online/config/OnlineAutoConfig.java @@ -1,6 +1,7 @@ package apelet.common.online.config; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Import; /** * common-online模块的自动配置引导类。 @@ -9,5 +10,6 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties * @date 2023-08-04 */ @EnableConfigurationProperties({OnlineProperties.class}) +@Import(OnlineAsyncConfig.class) public class OnlineAutoConfig { } diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java new file mode 100644 index 0000000..d3225e7 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodeMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermCode; + +/** + * 权限字数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermCodeMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java new file mode 100644 index 0000000..d4075b3 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermCodePermMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermCodePerm; + +/** + * 权限字与权限资源关系数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermCodePermMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java new file mode 100644 index 0000000..d290163 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPerm; + +/** + * 权限资源数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java new file mode 100644 index 0000000..2cb8969 --- /dev/null +++ b/common/common-online/src/main/java/apelet/common/online/upms/dao/SysPermModuleMapper.java @@ -0,0 +1,14 @@ +package apelet.common.online.upms.dao; + +import apelet.common.core.base.dao.BaseDaoMapper; +import apelet.common.online.upms.model.SysPermModule; + +/** + * 权限模块数据访问操作接口。 + *

在线表单发布自动生成权限字使用,精简自 tenant-admin 的同名 Mapper。

+ * + * @author guifc + * @date 2023-08-04 + */ +public interface SysPermModuleMapper extends BaseDaoMapper { +} diff --git a/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java index 2896e2f..aa01b0e 100644 --- a/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java +++ b/common/common-online/src/main/java/apelet/common/online/upms/service/impl/OnlinePermCodeServiceImpl.java @@ -11,10 +11,10 @@ import apelet.common.online.dao.OnlinePageMapper; import apelet.common.online.dao.OnlineTableMapper; import apelet.common.online.model.OnlinePage; import apelet.common.online.model.OnlineTable; -import apelet.common.online.upms.dao.OnlineSysPermCodeMapper; -import apelet.common.online.upms.dao.OnlineSysPermCodePermMapper; -import apelet.common.online.upms.dao.OnlineSysPermMapper; -import apelet.common.online.upms.dao.OnlineSysPermModuleMapper; +import apelet.common.online.upms.dao.SysPermCodeMapper; +import apelet.common.online.upms.dao.SysPermCodePermMapper; +import apelet.common.online.upms.dao.SysPermMapper; +import apelet.common.online.upms.dao.SysPermModuleMapper; import apelet.common.online.upms.model.SysPerm; import apelet.common.online.upms.model.SysPermCode; import apelet.common.online.upms.model.SysPermCodePerm; @@ -27,7 +27,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PreDestroy; import java.util.*; @@ -86,12 +88,15 @@ public class OnlinePermCodeServiceImpl implements OnlinePermCodeService { private OnlineSysPermCodeMapper onlineSysPermCodeMapper; @Autowired private OnlineSysPermCodePermMapper onlineSysPermCodePermMapper; + @Autowired private IdGeneratorWrapper idGenerator; /** * 发布后异步生成权限字,先生成前先清理旧数据保证幂等。 */ + @Async("permCodeTaskExecutor") + @Transactional(rollbackFor = Exception.class) @Override public void genPermCodeByPageId(Long pageId, Long userId) { permCodeExecutor.execute(() -> { @@ -110,6 +115,8 @@ public class OnlinePermCodeServiceImpl implements OnlinePermCodeService { /** * 删除表单后异步清理权限字相关数据。 */ + @Async("permCodeTaskExecutor") + @Transactional(rollbackFor = Exception.class) @Override public void removePermCodeByPageCode(String pageCode) { permCodeExecutor.execute(() -> {