diff --git a/pom.xml b/pom.xml index 9c1cc7b..ac8e629 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,8 @@ qiaoba-auth + qiaoba-boot 多租户管理系统 + org.springframework.boot spring-boot-starter-parent @@ -39,7 +41,7 @@ 1.2.17 5.8.18 - + 2.2.5 8.0.33 @@ -75,9 +77,10 @@ hutool-all ${hutool.version} + com.baomidou - lock4j-redis-template-spring-boot-starter + lock4j-redisson-spring-boot-starter ${lock4j.version} diff --git a/qiaoba-apis/pom.xml b/qiaoba-apis/pom.xml index 2d0043c..f538dab 100644 --- a/qiaoba-apis/pom.xml +++ b/qiaoba-apis/pom.xml @@ -11,6 +11,9 @@ qiaoba-apis pom + + api模块, 用于抽取共用部分, 供其他模块调用 + qiaoba-api-system qiaoba-api-job diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysMenuApiService.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysMenuApiService.java index 896f95f..5dd5fc5 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysMenuApiService.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysMenuApiService.java @@ -37,7 +37,7 @@ public interface SysMenuApiService { * @param param 条件 * @return 菜单列表 */ - List selectVoList(SysMenuParam param); + List selectList(SysMenuParam param); /** * 查询详细 diff --git a/qiaoba-application/pom.xml b/qiaoba-application/pom.xml index 68f1453..ff4af62 100644 --- a/qiaoba-application/pom.xml +++ b/qiaoba-application/pom.xml @@ -11,6 +11,8 @@ qiaoba-application + 总打包模块, 需要打包的模块, 引入到该模块中即可 + com.qiaoba diff --git a/qiaoba-application/src/main/resources/application-dev.yml b/qiaoba-application/src/main/resources/application-dev.yml index 780f4ce..a87b902 100644 --- a/qiaoba-application/src/main/resources/application-dev.yml +++ b/qiaoba-application/src/main/resources/application-dev.yml @@ -37,4 +37,4 @@ mybatis-plus: logging: level: - com.qiaoba: debug #开发环境输出sql日志 + com.qiaoba: trace #开发环境输出sql日志 diff --git a/qiaoba-application/src/main/resources/application.yml b/qiaoba-application/src/main/resources/application.yml index a1ccdb3..d8bfca3 100644 --- a/qiaoba-application/src/main/resources/application.yml +++ b/qiaoba-application/src/main/resources/application.yml @@ -28,7 +28,7 @@ spring: # 数据库索引 database: 0 # 密码 - password: + #password: # 连接超时时间 timeout: 10s lettuce: diff --git a/qiaoba-auth/pom.xml b/qiaoba-auth/pom.xml index 40bda60..f3f2392 100644 --- a/qiaoba-auth/pom.xml +++ b/qiaoba-auth/pom.xml @@ -11,6 +11,8 @@ qiaoba-auth + 鉴权模块 + com.qiaoba diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java index f61f98e..a5d866d 100644 --- a/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/annotation/DataScope.java @@ -10,8 +10,7 @@ import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface DataScope -{ +public @interface DataScope { /** * 部门表的别名 */ diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/handler/LogoutHandler.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/handler/LogoutHandler.java index 2794f48..9a8717a 100644 --- a/qiaoba-auth/src/main/java/com/qiaoba/auth/handler/LogoutHandler.java +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/handler/LogoutHandler.java @@ -11,7 +11,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Objects; /** * 退出处理器 diff --git a/qiaoba-auth/src/main/java/com/qiaoba/auth/service/OnlineUserService.java b/qiaoba-auth/src/main/java/com/qiaoba/auth/service/OnlineUserService.java index 6b8c8b0..27410ab 100644 --- a/qiaoba-auth/src/main/java/com/qiaoba/auth/service/OnlineUserService.java +++ b/qiaoba-auth/src/main/java/com/qiaoba/auth/service/OnlineUserService.java @@ -24,8 +24,8 @@ public interface OnlineUserService { /** * 删除(强退) * - * @param username 登录账号 - * @param deviceSn 设备号 + * @param username 登录账号 + * @param deviceSn 设备号 * @param deleteOwn 是否是删除自己 */ void deleteOne(String username, String deviceSn, Boolean deleteOwn); @@ -66,7 +66,7 @@ public interface OnlineUserService { /** * 分页查询列表 * - * @param pageNum pageNum + * @param pageNum pageNum * @param pageSize pageSize * @param username username * @return list diff --git a/qiaoba-commons/pom.xml b/qiaoba-commons/pom.xml index fe55844..3aa1bc5 100644 --- a/qiaoba-commons/pom.xml +++ b/qiaoba-commons/pom.xml @@ -20,5 +20,6 @@ qiaoba-common-poi + qiaoba-common: 新建的common统一放在此模块下面 diff --git a/qiaoba-commons/qiaoba-common-base/pom.xml b/qiaoba-commons/qiaoba-common-base/pom.xml index dba8560..cd22293 100644 --- a/qiaoba-commons/qiaoba-common-base/pom.xml +++ b/qiaoba-commons/qiaoba-common-base/pom.xml @@ -11,6 +11,8 @@ qiaoba-common-base + 通用-基础模块 + cn.hutool diff --git a/qiaoba-commons/qiaoba-common-datasource/pom.xml b/qiaoba-commons/qiaoba-common-datasource/pom.xml index 8fe2b0d..dd76f22 100644 --- a/qiaoba-commons/qiaoba-common-datasource/pom.xml +++ b/qiaoba-commons/qiaoba-common-datasource/pom.xml @@ -11,6 +11,8 @@ qiaoba-common-datasource + 通用-数据源模块 + @@ -38,7 +40,7 @@ com.qiaoba - qiaoba-common-web + qiaoba-common-redis diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/interceptors/SchemaInterceptor.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/interceptors/SchemaInterceptor.java index d46ed5f..d33ba56 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/interceptors/SchemaInterceptor.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/interceptors/SchemaInterceptor.java @@ -1,16 +1,11 @@ package com.qiaoba.common.database.interceptors; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.qiaoba.common.base.context.BaseContext; import com.qiaoba.common.database.handlers.schema.SchemaHandlerFactory; import org.apache.ibatis.executor.statement.StatementHandler; -import org.springframework.beans.factory.annotation.Value; import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; import java.util.Objects; /** @@ -23,7 +18,6 @@ import java.util.Objects; public class SchemaInterceptor implements InnerInterceptor { - @Override public void beforePrepare(StatementHandler sh, Connection conn, Integer transactionTimeout) { diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/mapper/BaseMapperPlus.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/mapper/BaseMapperPlus.java deleted file mode 100644 index 44f4d7f..0000000 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/mapper/BaseMapperPlus.java +++ /dev/null @@ -1,308 +0,0 @@ -package com.qiaoba.common.database.mapper; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.toolkit.Db; -import com.qiaoba.common.web.utils.BeanCopyUtil; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 自定义 Mapper 接口, 实现 自定义扩展 - * - * @param mapper 泛型 - * @param table 泛型 - * @param vo 泛型 - * @author ailanyin - * @since 2023-04-23 17:20:32 - */ -@SuppressWarnings("unchecked") -public interface BaseMapperPlus extends BaseMapper { - - - /** - * currentVoClass - * - * @return Vo - */ - default Class currentVoClass() { - return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 2); - } - - /** - * currentModelClass - * - * @return model - */ - default Class currentModelClass() { - return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1); - } - - /** - * currentMapperClass - * - * @return mapper - */ - default Class currentMapperClass() { - return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0); - } - - /** - * 查询所有 - * - * @return all lst - */ - default List selectList() { - return this.selectList(new QueryWrapper<>()); - } - - /** - * 批量新增 - * - * @param entityList list - * @return 结果 - */ - default boolean insertBatch(Collection entityList) { - return Db.saveBatch(entityList); - } - - /** - * 批量更新 - * - * @param entityList list - * @return 结果 - */ - default boolean updateBatchById(Collection entityList) { - return Db.updateBatchById(entityList); - } - - - /** - * 批量插入或更新 - * - * @param entityList list - * @return 结果 - */ - default boolean insertOrUpdateBatch(Collection entityList) { - return Db.saveOrUpdateBatch(entityList); - } - - - /** - * 批量插入(包含限制条数) - * - * @param entityList list - * @param batchSize 最大调数 - * @return 结果 - */ - default boolean insertBatch(Collection entityList, int batchSize) { - return Db.saveBatch(entityList, batchSize); - } - - - /** - * 批量更新(包含限制条数) - * - * @param entityList list - * @param batchSize 最大调数 - * @return 结果 - */ - default boolean updateBatchById(Collection entityList, int batchSize) { - return Db.updateBatchById(entityList, batchSize); - } - - - /** - * 批量插入或更新(包含限制条数) - * - * @param entityList list - * @param batchSize 最大调数 - * @return 结果 - */ - default boolean insertOrUpdateBatch(Collection entityList, int batchSize) { - return Db.saveOrUpdateBatch(entityList, batchSize); - } - - - /** - * 插入或更新 - * - * @param entity entity - * @return 结果 - */ - default boolean insertOrUpdate(T entity) { - return Db.saveOrUpdate(entity); - } - - /** - * 查询Vo by id - * - * @param id 主键 - * @return Vo - */ - default V selectVoById(Serializable id) { - return selectVoById(id, this.currentVoClass()); - } - - /** - * 根据 ID 查询 - * - * @param id 主键 - * @param voClass Vo - * @param 泛型 - * @return Vo - */ - default C selectVoById(Serializable id, Class voClass) { - T obj = this.selectById(id); - if (ObjectUtil.isNull(obj)) { - return null; - } - return BeanCopyUtil.copy(obj, voClass); - } - - /** - * 通过Ids 查询 list - * - * @param idList ids - * @return list - */ - default List selectVoBatchIds(Collection idList) { - return selectVoBatchIds(idList, this.currentVoClass()); - } - - /** - * 通过Ids 查询 list - * - * @param idList ids - * @param voClass Vo - * @param 泛型 - * @return list - */ - default List selectVoBatchIds(Collection idList, Class voClass) { - List list = this.selectBatchIds(idList); - if (CollUtil.isEmpty(list)) { - return CollUtil.newArrayList(); - } - return BeanCopyUtil.copyList(list, voClass); - } - - /** - * selectVoByMap - * - * @param map map - * @return Vo - */ - default List selectVoByMap(Map map) { - return selectVoByMap(map, this.currentVoClass()); - } - - /** - * selectVoByMap - * - * @param map map - * @param voClass Vo - * @param 泛型 - * @return Vo - */ - default List selectVoByMap(Map map, Class voClass) { - List list = this.selectByMap(map); - if (CollUtil.isEmpty(list)) { - return CollUtil.newArrayList(); - } - return BeanCopyUtil.copyList(list, voClass); - } - - /** - * 根据条件查询一条记录 - * - * @param wrapper 条件 - * @return Vo - */ - default V selectVoOne(Wrapper wrapper) { - return selectVoOne(wrapper, this.currentVoClass()); - } - - /** - * 根据条件查询一条记录 - * - * @param wrapper 条件 - * @param voClass Vo - * @param 泛型 - * @return Vo - */ - default C selectVoOne(Wrapper wrapper, Class voClass) { - T obj = this.selectOne(wrapper); - if (ObjectUtil.isNull(obj)) { - return null; - } - return BeanCopyUtil.copy(obj, voClass); - } - - /** - * 根据条件查询所有 - * - * @param wrapper 条件 - * @return list - */ - default List selectVoList(Wrapper wrapper) { - return selectVoList(wrapper, this.currentVoClass()); - } - - /** - * 根据条件查询所有 - * - * @param wrapper 条件 - * @param voClass Vo - * @param 泛型 - * @return list vo - */ - default List selectVoList(Wrapper wrapper, Class voClass) { - List list = this.selectList(wrapper); - if (CollUtil.isEmpty(list)) { - return CollUtil.newArrayList(); - } - return BeanCopyUtil.copyList(list, voClass); - } - - /** - * 分页查询Vo - * - * @param page 分页对象 - * @param wrapper 条件 - * @param

泛型 - * @return IPage - */ - default

> P selectVoPage(IPage page, Wrapper wrapper) { - return selectVoPage(page, wrapper, this.currentVoClass()); - } - - /** - * 分页查询Vo - * - * @param page 分页对象 - * @param wrapper 条件 - * @param voClass Vo - * @param 泛型 - * @param

泛型 - * @return IPage - */ - default > P selectVoPage(IPage page, Wrapper wrapper, Class voClass) { - IPage pageData = this.selectPage(page, wrapper); - IPage voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); - if (CollUtil.isEmpty(pageData.getRecords())) { - return (P) voPage; - } - voPage.setRecords(BeanCopyUtil.copyList(pageData.getRecords(), voClass)); - return (P) voPage; - } - -} diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/monitor/DatasourceConnectionMonitor.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/monitor/DatasourceConnectionMonitor.java index e22156e..945cc11 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/monitor/DatasourceConnectionMonitor.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/monitor/DatasourceConnectionMonitor.java @@ -2,6 +2,8 @@ package com.qiaoba.common.database.monitor; import cn.hutool.core.io.IoUtil; import com.alibaba.druid.pool.DruidDataSource; +import com.baomidou.lock.LockInfo; +import com.baomidou.lock.LockTemplate; import com.qiaoba.common.base.constants.TenantConstant; import com.qiaoba.common.base.enums.DataBaseEnum; import com.qiaoba.common.database.config.DynamicDataSourceConfig; @@ -34,12 +36,16 @@ public class DatasourceConnectionMonitor { private DynamicDataSourceConfig dynamicDataSourceConfig; @Resource private DynamicDatasourceService dynamicDatasourceService; + @Resource + private LockTemplate lockTemplate; private static Map WAIT_UPDATE_DATASOURCE_STATUS = new ConcurrentHashMap<>(); + private static final String LOCK_KEY = "lock4j:datasourceConnectionMonitor"; + @PostConstruct public void init() { - // 1s钟运行一次 + // 1s 运行一次 new Timer().schedule(new TimerTask() { @Override public void run() { @@ -47,47 +53,77 @@ public class DatasourceConnectionMonitor { if (!DynamicDataSourceConfig.COMPLETE_LOAD_DATASOURCE) { return; } - log.trace("开始运行数据源监控线程, 时间: {}", new Date()); - for (String tenantId : DynamicDataSourceConfig.TENANT_IDS) { - Object primary = DynamicDataSourceConfig.PRIMARY_DATASOURCE_MAP.get(tenantId); - if (Objects.isNull(primary)) { - // 说明初始化主要数据源的时候出错 - log.error("租户[{}]-目前主数据源异常, 开始切换备用数据源", tenantId); - // 切换备用数据源 - changePrimary(tenantId); - } else { - DruidDataSource dataSource = (DruidDataSource) primary; - try { - Connection connection = dataSource.getConnection(); - if (check(connection, tenantId)) { - // 说明数据源正常 - log.trace("租户[{}]-目前主数据源正常, 无需切换数据源", tenantId); - // 主数据 处理任务 - if (TenantConstant.DEFAULT_TENANT_ID.equals(tenantId)) { - handleJob(); - } - IoUtil.close(connection); - continue; - } - log.error("租户[{}]-目前主数据源异常, 开始切换备用数据源", tenantId); - IoUtil.close(connection); - // 主数据源异常 切换备用数据源 - if (changePrimary(tenantId)) { - // 备用切换成功, 关闭原有异常数据源 - IoUtil.close(dataSource); - } - } catch (SQLException e) { - //e.printStackTrace(); - } - } + // expire = -1 锁自动续期, 防止数据源过多或异常等待, 超过默认锁 30s + final LockInfo lockInfo = lockTemplate.lock(LOCK_KEY, -1, 1000); + //申请锁失败 说明集群中其他设备正在执行监控 + if (null == lockInfo) { + return; + } + //申请锁成功 + try { + // 执行监控 + datasourceConnectionMonitor(); + } finally { + // 释放锁 + lockTemplate.releaseLock(lockInfo); } - log.trace("结束运行数据源监控线程, 时间: {}", new Date()); } }, 0, 1000); } + /** + * 核心监控内容 + */ + private void datasourceConnectionMonitor() { + log.trace("开始运行数据源监控线程, 时间: {}", new Date()); + for (String tenantId : DynamicDataSourceConfig.TENANT_IDS) { + Object primary = DynamicDataSourceConfig.PRIMARY_DATASOURCE_MAP.get(tenantId); + if (Objects.isNull(primary)) { + // 说明初始化主要数据源的时候出错 + log.error("租户[{}]-目前主数据源异常, 开始切换备用数据源", tenantId); + // 切换备用数据源 + changePrimary(tenantId); + } else { + DruidDataSource dataSource = (DruidDataSource) primary; + Connection connection = null; + try { + connection = dataSource.getConnection(); + if (check(connection, tenantId)) { + // 说明数据源正常 + log.trace("租户[{}]-目前主数据源正常, 无需切换数据源", tenantId); + // 主数据 处理任务 + if (TenantConstant.DEFAULT_TENANT_ID.equals(tenantId)) { + handleJob(); + } + continue; + } + + log.error("租户[{}]-目前主数据源异常, 开始切换备用数据源", tenantId); + // 主数据源异常 切换备用数据源 + if (changePrimary(tenantId)) { + // 备用切换成功, 关闭原有异常数据源 + IoUtil.close(dataSource); + } + } catch (SQLException e) { + + } finally { + IoUtil.close(connection); + } + } + } + + log.trace("结束运行数据源监控线程, 时间: {}", new Date()); + } + + /** + * 检查数据源连接可用性 + * + * @param conn 数据源 + * @param tenantId 租户ID + * @return 结果 + */ private Boolean check(Connection conn, String tenantId) { Statement stmt = null; ResultSet rs = null; diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DataSourceProperties.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DataSourceProperties.java index 2a0e2b7..3b0025a 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DataSourceProperties.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/properties/DataSourceProperties.java @@ -8,7 +8,13 @@ import org.springframework.stereotype.Component; import java.util.List; - +/** + * DataSourceProperties + * + * @author ailanyin + * @version 1.0 + * @since 2022-09-22 04:20:28 + */ @Component @ConfigurationProperties(prefix = "qiaoba") @Data diff --git a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java index 5096e69..b9d5ad4 100644 --- a/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java +++ b/qiaoba-commons/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/utils/JdbcUtil.java @@ -5,7 +5,8 @@ import cn.hutool.core.util.StrUtil; import com.qiaoba.common.base.exceptions.ServiceException; import lombok.extern.slf4j.Slf4j; -import java.sql.*; +import java.sql.Connection; +import java.sql.DriverManager; /** * JdbcUtil diff --git a/qiaoba-commons/qiaoba-common-doc/pom.xml b/qiaoba-commons/qiaoba-common-doc/pom.xml index 6f50280..b91c5f6 100644 --- a/qiaoba-commons/qiaoba-common-doc/pom.xml +++ b/qiaoba-commons/qiaoba-common-doc/pom.xml @@ -11,6 +11,8 @@ qiaoba-common-doc + 通用-文档(Knife4j)模块 + com.github.xiaoymin @@ -21,4 +23,4 @@ springdoc-openapi-ui - \ No newline at end of file + diff --git a/qiaoba-commons/qiaoba-common-poi/pom.xml b/qiaoba-commons/qiaoba-common-poi/pom.xml index 4569924..6e0c751 100644 --- a/qiaoba-commons/qiaoba-common-poi/pom.xml +++ b/qiaoba-commons/qiaoba-common-poi/pom.xml @@ -11,6 +11,8 @@ qiaoba-common-poi + 通用-poi(Excel, Word, Pdf等)模块 + diff --git a/qiaoba-commons/qiaoba-common-redis/pom.xml b/qiaoba-commons/qiaoba-common-redis/pom.xml index 1baa64b..e5f4432 100644 --- a/qiaoba-commons/qiaoba-common-redis/pom.xml +++ b/qiaoba-commons/qiaoba-common-redis/pom.xml @@ -11,11 +11,13 @@ qiaoba-common-redis + 通用-Redis模块 + com.baomidou - lock4j-redis-template-spring-boot-starter + lock4j-redisson-spring-boot-starter com.qiaoba diff --git a/qiaoba-commons/qiaoba-common-web/pom.xml b/qiaoba-commons/qiaoba-common-web/pom.xml index b8b0f39..2261c7a 100644 --- a/qiaoba-commons/qiaoba-common-web/pom.xml +++ b/qiaoba-commons/qiaoba-common-web/pom.xml @@ -11,6 +11,8 @@ qiaoba-common-web + 通用-Web模块(有controller的模块必须引入此模块) + com.qiaoba diff --git a/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/BeanCopyUtil.java b/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/BeanCopyUtil.java deleted file mode 100644 index cea92b5..0000000 --- a/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/BeanCopyUtil.java +++ /dev/null @@ -1,227 +0,0 @@ -package com.qiaoba.common.web.utils; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.SimpleCache; -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.springframework.cglib.beans.BeanCopier; -import org.springframework.cglib.beans.BeanMap; -import org.springframework.cglib.core.Converter; - -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * bean深拷贝工具(基于 cglib 性能优异) - *

- * 重点 cglib 不支持 拷贝到链式对象 - * 例如: 源对象 拷贝到 目标(链式对象) - * 请区分好`浅拷贝`和`深拷贝`再做使用 - * - * @author ailanyin - * @version 1.0 - * @since 2023-04-23 15:34:59 - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class BeanCopyUtil { - - /** - * 单对象基于class创建拷贝 - * - * @param source 数据来源实体 - * @param desc 描述对象 转换后的对象 - * @return desc - */ - public static V copy(T source, Class desc) { - if (ObjectUtil.isNull(source)) { - return null; - } - if (ObjectUtil.isNull(desc)) { - return null; - } - final V target = ReflectUtil.newInstanceIfPossible(desc); - return copy(source, target); - } - - /** - * 单对象基于对象创建拷贝 - * - * @param source 数据来源实体 - * @param desc 转换后的对象 - * @return desc - */ - public static V copy(T source, V desc) { - if (ObjectUtil.isNull(source)) { - return null; - } - if (ObjectUtil.isNull(desc)) { - return null; - } - BeanCopier beanCopier = BeanCopierCache.INSTANCE.get(source.getClass(), desc.getClass(), null); - beanCopier.copy(source, desc, null); - return desc; - } - - /** - * 列表对象基于class创建拷贝 - * - * @param sourceList 数据来源实体列表 - * @param desc 描述对象 转换后的对象 - * @return desc - */ - public static List copyList(List sourceList, Class desc) { - if (ObjectUtil.isNull(sourceList)) { - return null; - } - if (CollUtil.isEmpty(sourceList)) { - return CollUtil.newArrayList(); - } - return toList(sourceList, source -> { - V target = ReflectUtil.newInstanceIfPossible(desc); - copy(source, target); - return target; - }); - } - - /** - * bean拷贝到map - * - * @param bean 数据来源实体 - * @return map对象 - */ - @SuppressWarnings("unchecked") - public static Map copyToMap(T bean) { - if (ObjectUtil.isNull(bean)) { - return null; - } - return BeanMap.create(bean); - } - - /** - * map拷贝到bean - * - * @param map 数据来源 - * @param beanClass bean类 - * @return bean对象 - */ - public static T mapToBean(Map map, Class beanClass) { - if (MapUtil.isEmpty(map)) { - return null; - } - if (ObjectUtil.isNull(beanClass)) { - return null; - } - T bean = ReflectUtil.newInstanceIfPossible(beanClass); - return mapToBean(map, bean); - } - - /** - * map拷贝到bean - * - * @param map 数据来源 - * @param bean bean对象 - * @return bean对象 - */ - public static T mapToBean(Map map, T bean) { - if (MapUtil.isEmpty(map)) { - return null; - } - if (ObjectUtil.isNull(bean)) { - return null; - } - BeanMap.create(bean).putAll(map); - return bean; - } - - /** - * map拷贝到map - * - * @param map 数据来源 - * @param clazz 返回的对象类型 - * @return map对象 - */ - public static Map mapToMap(Map map, Class clazz) { - if (MapUtil.isEmpty(map)) { - return null; - } - if (ObjectUtil.isNull(clazz)) { - return null; - } - Map copyMap = new LinkedHashMap<>(map.size()); - map.forEach((k, v) -> copyMap.put(k, copy(v, clazz))); - return copyMap; - } - - /** - * BeanCopier属性缓存
- * 缓存用于防止多次反射造成的性能问题 - * - * @author Looly - * @since 5.4.1 - */ - public enum BeanCopierCache { - /** - * BeanCopier属性缓存单例 - */ - INSTANCE; - - private final SimpleCache cache = new SimpleCache<>(); - - /** - * 获得类与转换器生成的key在{@link BeanCopier}的Map中对应的元素 - * - * @param srcClass 源Bean的类 - * @param targetClass 目标Bean的类 - * @param converter 转换器 - * @return Map中对应的BeanCopier - */ - public BeanCopier get(Class srcClass, Class targetClass, Converter converter) { - final String key = genKey(srcClass, targetClass, converter); - return cache.get(key, () -> BeanCopier.create(srcClass, targetClass, converter != null)); - } - - /** - * 获得类与转换器生成的key - * - * @param srcClass 源Bean的类 - * @param targetClass 目标Bean的类 - * @param converter 转换器 - * @return 属性名和Map映射的key - */ - private String genKey(Class srcClass, Class targetClass, Converter converter) { - final StringBuilder key = StrUtil.builder() - .append(srcClass.getName()).append('#').append(targetClass.getName()); - if (null != converter) { - key.append('#').append(converter.getClass().getName()); - } - return key.toString(); - } - } - - /** - * 将collection转化为List集合,但是两者的泛型不同
- * {@code Collection ------> List } - * - * @param collection 需要转化的集合 - * @param function collection中的泛型转化为list泛型的lambda表达式 - * @param collection中的泛型 - * @param List中的泛型 - * @return 转化后的list - */ - private static List toList(Collection collection, Function function) { - if (CollUtil.isEmpty(collection)) { - return CollUtil.newArrayList(); - } - return collection - .stream() - .map(function) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - -} diff --git a/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java b/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java index e3c9989..a811b1c 100644 --- a/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java +++ b/qiaoba-commons/qiaoba-common-web/src/main/java/com/qiaoba/common/web/utils/ResponseUtil.java @@ -1,7 +1,6 @@ package com.qiaoba.common.web.utils; import cn.hutool.http.ContentType; -import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.qiaoba.common.base.result.AjaxResult; diff --git a/qiaoba-modules/pom.xml b/qiaoba-modules/pom.xml index bc11a97..ff7861b 100644 --- a/qiaoba-modules/pom.xml +++ b/qiaoba-modules/pom.xml @@ -20,4 +20,6 @@ qiaoba-module-demo + qiaoba-modules: 新建的模块, 统一放在这个模块下面 + diff --git a/qiaoba-modules/qiaoba-module-demo/pom.xml b/qiaoba-modules/qiaoba-module-demo/pom.xml index e3b71e2..a336de2 100644 --- a/qiaoba-modules/qiaoba-module-demo/pom.xml +++ b/qiaoba-modules/qiaoba-module-demo/pom.xml @@ -11,6 +11,10 @@ qiaoba-module-demo + + 示例模块 + 此模块主要用于典型案例的demo, 切勿引入到 qiaoba-application 模块中 + com.qiaoba @@ -24,5 +28,9 @@ com.qiaoba qiaoba-common-web + + com.qiaoba + qiaoba-common-doc + - \ No newline at end of file + diff --git a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/DemoApplication.java b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/DemoApplication.java new file mode 100644 index 0000000..b7643a1 --- /dev/null +++ b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/DemoApplication.java @@ -0,0 +1,18 @@ +package com.qiaoba.module.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * DemoApplication + * + * @author ailanyin + * @version 1.0 + * @since 2023/6/25 8:52 + */ +@SpringBootApplication +public class DemoApplication { + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/Lock4jController.java b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/DemoLock4jController.java similarity index 56% rename from qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/Lock4jController.java rename to qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/DemoLock4jController.java index 7ac818f..911369f 100644 --- a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/Lock4jController.java +++ b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/controller/DemoLock4jController.java @@ -2,22 +2,34 @@ package com.qiaoba.module.demo.controller; import com.baomidou.lock.annotation.Lock4j; import com.qiaoba.common.base.result.AjaxResult; -import com.qiaoba.module.demo.service.Lock4jService; +import com.qiaoba.module.demo.service.DemoLock4jService; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +/** + * Demo-Lock4j web层 + * + * @author ailanyin + * @version 1.0 + * @since 2022-09-22 04:20:28 + */ @RestController @RequestMapping("/demo/lock4j") @RequiredArgsConstructor -public class Lock4jController { +@Tag(name = "Demo-Lock4j") +@Slf4j +public class DemoLock4jController { - private final Lock4jService lock4jService; + private final DemoLock4jService demoLock4JService; @GetMapping("/api-lock") public AjaxResult apiLock() { - lock4jService.apiLock(); + log.info("开始执行 apiLock, 当前线程{}", Thread.currentThread().getName()); + demoLock4JService.apiLock(); return AjaxResult.success(); } @@ -29,9 +41,10 @@ public class Lock4jController { * @return AjaxResult */ @GetMapping("/annotation-lock") - @Lock4j(keys = {"#accountId"}, expire = 20000, acquireTimeout = 10000) + @Lock4j(name = "annotationLock", acquireTimeout = 1000) public AjaxResult annotationLock() { - lock4jService.annotationLock(); + log.info("开始执行 annotationLock, 当前线程{}", Thread.currentThread().getName()); + demoLock4JService.annotationLock(); return AjaxResult.success(); } } diff --git a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/Lock4jService.java b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/DemoLock4jService.java similarity index 58% rename from qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/Lock4jService.java rename to qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/DemoLock4jService.java index 91e1904..ada38d1 100644 --- a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/Lock4jService.java +++ b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/DemoLock4jService.java @@ -1,6 +1,13 @@ package com.qiaoba.module.demo.service; -public interface Lock4jService { +/** + * Demo-Lock4j 业务层 + * + * @author ailanyin + * @version 1.0 + * @since 2022-09-22 04:20:28 + */ +public interface DemoLock4jService { /** * 分布式锁-编程式加锁 diff --git a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/Lock4jServiceImpl.java b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/DemoLock4jServiceImpl.java similarity index 62% rename from qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/Lock4jServiceImpl.java rename to qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/DemoLock4jServiceImpl.java index 6581658..5df16f6 100644 --- a/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/Lock4jServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-demo/src/main/java/com/qiaoba/module/demo/service/impl/DemoLock4jServiceImpl.java @@ -4,15 +4,22 @@ import cn.hutool.core.thread.ThreadUtil; import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; import com.qiaoba.common.base.exceptions.ServiceException; -import com.qiaoba.module.demo.service.Lock4jService; +import com.qiaoba.module.demo.service.DemoLock4jService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +/** + * Demo-Lock4j 业务层实现 + * + * @author ailanyin + * @version 1.0 + * @since 2022-09-22 04:20:28 + */ @Service @RequiredArgsConstructor @Slf4j -public class Lock4jServiceImpl implements Lock4jService { +public class DemoLock4jServiceImpl implements DemoLock4jService { private final LockTemplate lockTemplate; @@ -20,15 +27,16 @@ public class Lock4jServiceImpl implements Lock4jService { public void apiLock() { //... 各种不需要上锁的操作 String lockKey = "lock4j:apiLock"; - final LockInfo lockInfo = lockTemplate.lock(lockKey); + // expire = -1 锁自动续期 + final LockInfo lockInfo = lockTemplate.lock(lockKey, -1, 1000); //申请锁失败 if (null == lockInfo) { throw new ServiceException("业务处理中,请稍后再试..."); } //申请锁成功 try { - ThreadUtil.sleep(10 * 1000); - log.info("执行 apiLock, 当前线程{}", Thread.currentThread().getName()); + ThreadUtil.sleep(30 * 1000); + log.info("执行完毕 apiLock, 当前线程{}", Thread.currentThread().getName()); } finally { lockTemplate.releaseLock(lockInfo); } @@ -38,6 +46,6 @@ public class Lock4jServiceImpl implements Lock4jService { public void annotationLock() { // 休眠 10s ThreadUtil.sleep(10 * 1000); - log.info("执行 apiLock, 当前线程{}", Thread.currentThread().getName()); + log.info("执行完毕 annotationLock, 当前线程{}", Thread.currentThread().getName()); } } diff --git a/qiaoba-modules/qiaoba-module-demo/src/main/resources/application.yml b/qiaoba-modules/qiaoba-module-demo/src/main/resources/application.yml new file mode 100644 index 0000000..569bc21 --- /dev/null +++ b/qiaoba-modules/qiaoba-module-demo/src/main/resources/application.yml @@ -0,0 +1,15 @@ +server: + port: 8080 + +springdoc: + swagger-ui: + path: /swagger-ui.html + tags-sorter: alpha + operations-sorter: alpha + api-docs: + path: /v3/api-docs + group-configs: + - group: 'Demo' + paths-to-match: '/**' + packages-to-scan: com.qiaoba.module.demo.controller + diff --git a/qiaoba-modules/qiaoba-module-file/pom.xml b/qiaoba-modules/qiaoba-module-file/pom.xml index 635c010..f87c924 100644 --- a/qiaoba-modules/qiaoba-module-file/pom.xml +++ b/qiaoba-modules/qiaoba-module-file/pom.xml @@ -11,6 +11,8 @@ qiaoba-module-file + 文件模块 + com.qiaoba diff --git a/qiaoba-modules/qiaoba-module-job/pom.xml b/qiaoba-modules/qiaoba-module-job/pom.xml index a0f3eb0..3ed04b3 100644 --- a/qiaoba-modules/qiaoba-module-job/pom.xml +++ b/qiaoba-modules/qiaoba-module-job/pom.xml @@ -11,5 +11,6 @@ qiaoba-module-job + 定时任务模块 - \ No newline at end of file + diff --git a/qiaoba-modules/qiaoba-module-monitor/pom.xml b/qiaoba-modules/qiaoba-module-monitor/pom.xml index a2e4d21..4ec7735 100644 --- a/qiaoba-modules/qiaoba-module-monitor/pom.xml +++ b/qiaoba-modules/qiaoba-module-monitor/pom.xml @@ -11,6 +11,8 @@ qiaoba-module-monitor + 监控模块 + com.qiaoba diff --git a/qiaoba-modules/qiaoba-module-system/pom.xml b/qiaoba-modules/qiaoba-module-system/pom.xml index e5270cf..656cca1 100644 --- a/qiaoba-modules/qiaoba-module-system/pom.xml +++ b/qiaoba-modules/qiaoba-module-system/pom.xml @@ -11,6 +11,8 @@ qiaoba-module-system + 系统模块 + com.qiaoba diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDictTypeController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDictTypeController.java index fe0fa85..500e723 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDictTypeController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDictTypeController.java @@ -41,7 +41,7 @@ public class SysDictTypeController { @PostMapping("/export") public void export(HttpServletResponse response, SysDictTypeParam param) throws Exception { List list = sysDictTypeService.selectList(param); - ExcelUtil.exportExcel(list, SysDictType.class, "字典类型" , response); + ExcelUtil.exportExcel(list, SysDictType.class, "字典类型", response); } @PreAuthorize("hasAuthority('system:dict:query')") diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java index 2c2ee06..625def7 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java @@ -2,7 +2,6 @@ package com.qiaoba.module.system.controller; import com.qiaoba.api.system.entity.SysMenu; import com.qiaoba.api.system.entity.param.SysMenuParam; -import com.qiaoba.api.system.entity.vo.SysMenuVo; import com.qiaoba.common.base.result.AjaxResult; import com.qiaoba.module.system.service.SysMenuService; import io.swagger.v3.oas.annotations.Operation; @@ -32,7 +31,7 @@ public class SysMenuController { @GetMapping("/list") @Operation(summary = "获取列表") public AjaxResult list(SysMenuParam param) { - List menus = sysMenuService.selectVoList(param); + List menus = sysMenuService.selectList(param); return AjaxResult.success(menus); } @@ -67,7 +66,7 @@ public class SysMenuController { @GetMapping("/tree-select") @Operation(summary = "构建菜单树") public AjaxResult treeSelect(SysMenuParam param) { - List menus = sysMenuService.selectVoList(param); + List menus = sysMenuService.selectList(param); return AjaxResult.success(sysMenuService.buildMenuTree(menus)); } @@ -76,7 +75,7 @@ public class SysMenuController { public AjaxResult roleMenuTreeSelect(@PathVariable("roleId") String roleId) { AjaxResult ajax = AjaxResult.success(); ajax.put("checkedKeys", sysMenuService.selectMenuIdsByRoleId(roleId)); - ajax.put("menus", sysMenuService.buildMenuTree(sysMenuService.selectVoList(new SysMenuParam()))); + ajax.put("menus", sysMenuService.buildMenuTree(sysMenuService.selectList(new SysMenuParam()))); return ajax; } } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java index e6cdc0f..c62cf79 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java @@ -1,9 +1,9 @@ package com.qiaoba.module.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qiaoba.api.system.entity.SysMenu; import com.qiaoba.api.system.entity.vo.SysMenuVo; import com.qiaoba.common.database.annotations.SelectOneRow; -import com.qiaoba.common.database.mapper.BaseMapperPlus; import java.util.List; import java.util.Set; @@ -15,7 +15,7 @@ import java.util.Set; * @version 1.0 * @since 2023/5/5 11:36 */ -public interface SysMenuMapper extends BaseMapperPlus { +public interface SysMenuMapper extends BaseMapper { /** * 校验菜单名称是否唯一 diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysLoginService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysLoginService.java index d459514..8856849 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysLoginService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysLoginService.java @@ -1,8 +1,6 @@ package com.qiaoba.module.system.service; -import com.qiaoba.api.system.entity.SysUser; import com.qiaoba.api.system.entity.dto.LoginDto; -import com.qiaoba.common.base.result.AjaxResult; import java.util.Map; diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysMenuService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysMenuService.java index 3d329b8..7e3b4ab 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysMenuService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysMenuService.java @@ -1,6 +1,7 @@ package com.qiaoba.module.system.service; import cn.hutool.core.lang.tree.Tree; +import com.qiaoba.api.system.entity.SysMenu; import com.qiaoba.api.system.entity.vo.RouterVo; import com.qiaoba.api.system.entity.vo.SysMenuVo; import com.qiaoba.api.system.service.SysMenuApiService; @@ -24,7 +25,7 @@ public interface SysMenuService extends SysMenuApiService { * @param menus 菜单列表 * @return 下拉树结构列表 */ - List> buildMenuTree(List menus); + List> buildMenuTree(List menus); /** * 根据角色ID查询菜单树信息 diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java index 61f97e7..4091f61 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java @@ -56,8 +56,8 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public List selectVoList(SysMenuParam param) { - return sysMenuMapper.selectVoList(param2Wrapper((param))); + public List selectList(SysMenuParam param) { + return sysMenuMapper.selectList(param2Wrapper((param))); } @Override @@ -81,7 +81,7 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public List> buildMenuTree(List menus) { + public List> buildMenuTree(List menus) { TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG.setNameKey(BaseConstant.TREE_KEY_NAME); return TreeUtil.build(menus, BaseConstant.DEFAULT_PARENT_ID_VALUE, config, (menu, tree) -> tree.setId(menu.getMenuId()) diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java index 94fe5a8..4f6c774 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java @@ -11,7 +11,6 @@ import com.qiaoba.api.system.entity.dto.DataScopeDto; import com.qiaoba.api.system.entity.dto.SysRoleDto; import com.qiaoba.api.system.entity.param.SysRoleParam; import com.qiaoba.auth.utils.SecurityUtil; -import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.common.base.exceptions.ServiceException; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java index 266d923..0882871 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java @@ -1,8 +1,8 @@ package com.qiaoba.module.system.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.qiaoba.api.system.entity.SysUser; import com.qiaoba.api.auth.service.SysUserDetailsApiService; +import com.qiaoba.api.system.entity.SysUser; import com.qiaoba.auth.constants.SecurityConstant; import com.qiaoba.auth.entity.LoginUser; import com.qiaoba.auth.entity.SecurityUser; diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java index 84009bc..ea10b98 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserRoleServiceImpl.java @@ -14,7 +14,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java index 7caa2fd..fc913d5 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java @@ -103,7 +103,7 @@ public class SysUserServiceImpl implements SysUserService { } @Override - @DataScope(userAlias = "u",deptAlias = "t2") + @DataScope(userAlias = "u", deptAlias = "t2") public TableDataInfo selectVoPageList(SysUserParam param, PageQuery pageQuery) { Page page = sysUserMapper.selectVoPageList(pageQuery.build(), param); return TableDataInfo.build(page); diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysConfigMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysConfigMapper.xml index 603bd34..68134f6 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysConfigMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysConfigMapper.xml @@ -12,8 +12,9 @@