mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-11-04 21:01:38 +08:00 
			
		
		
		
	优化:基于阿里巴巴 Java 开发手册(黄山版)优化方法排序及访问权限修饰符
1.编程规约>OOP规约>第20条: 【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读, 此条规则优先于下一条。 2.编程规约>OOP规约>第21条: 【推荐】类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter 方法。 说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方法虽然只是子类关心,也可能是“模板设 计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个黑盒实现;因为承载的信息价值较低,所有 Service 和 DAO 的 getter / setter 方法放在类体最后。 3.编程规约>OOP规约>第26条: 【推荐】类成员与方法访问控制从严: 1)如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。 2)工具类不允许有 public 或 default 构造方法。 3)类非 static 成员变量并且与子类共享,必须是 protected。 4)类非 static 成员变量并且仅在本类使用,必须是 private。 5)类 static 成员变量如果仅在本类使用,必须是 private。 6)若是 static 成员变量,考虑是否为 final。 7)类成员方法只供类内部调用,必须是 private。 8)类成员方法只对继承类公开,那么限制为 protected。 说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。思考:如果是一个 private 的方法,想删除就删除,可是一个 public 的 service 成员方法或成员变量,删除一下,不得手心冒点汗吗? 变量像自己的小孩,尽量在自己的视线内,变量作用域太大,无限制的到处跑,那么你会担心的。
This commit is contained in:
		@@ -87,9 +87,18 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
 | 
				
			|||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    protected M baseMapper;
 | 
					    protected M baseMapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected Class<T> entityClass = currentEntityClass();
 | 
					    private final Class<T> entityClass;
 | 
				
			||||||
    protected Class<V> voClass = currentVoClass();
 | 
					    private final Class<V> voClass;
 | 
				
			||||||
    protected Class<D> detailVoClass = currentDetailVoClass();
 | 
					    private final Class<D> detailVoClass;
 | 
				
			||||||
 | 
					    private final String entityIdName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public BaseServiceImpl() {
 | 
				
			||||||
 | 
					        this.entityClass = (Class<T>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1);
 | 
				
			||||||
 | 
					        this.voClass = (Class<V>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 2);
 | 
				
			||||||
 | 
					        this.detailVoClass =
 | 
				
			||||||
 | 
					            (Class<D>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 3);
 | 
				
			||||||
 | 
					        this.entityIdName = this.currentEntityIdName();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public PageDataVO<V> page(Q query, PageQuery pageQuery) {
 | 
					    public PageDataVO<V> page(Q query, PageQuery pageQuery) {
 | 
				
			||||||
@@ -141,51 +150,6 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
 | 
				
			|||||||
        return list;
 | 
					        return list;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public D get(Long id) {
 | 
					 | 
				
			||||||
        T entity = this.getById(id);
 | 
					 | 
				
			||||||
        D detailVO = BeanUtil.copyProperties(entity, detailVoClass);
 | 
					 | 
				
			||||||
        this.fillDetail(detailVO);
 | 
					 | 
				
			||||||
        return detailVO;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					 | 
				
			||||||
    public Long add(C request) {
 | 
					 | 
				
			||||||
        if (request == null) {
 | 
					 | 
				
			||||||
            return 0L;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        // 保存信息
 | 
					 | 
				
			||||||
        T entity = BeanUtil.copyProperties(request, entityClass);
 | 
					 | 
				
			||||||
        baseMapper.insert(entity);
 | 
					 | 
				
			||||||
        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
 | 
					 | 
				
			||||||
        Object idValue = tableInfo.getPropertyValue(entity, this.currentEntityIdName());
 | 
					 | 
				
			||||||
        return Convert.toLong(idValue);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					 | 
				
			||||||
    public void update(C request) {
 | 
					 | 
				
			||||||
        String idName = this.currentEntityIdName();
 | 
					 | 
				
			||||||
        Object idValue = ReflectUtil.getFieldValue(request, idName);
 | 
					 | 
				
			||||||
        T entity = this.getById(idValue);
 | 
					 | 
				
			||||||
        BeanUtil.copyProperties(request, entity, CopyOptions.create().ignoreNullValue());
 | 
					 | 
				
			||||||
        baseMapper.updateById(entity);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					 | 
				
			||||||
    public void delete(List<Long> ids) {
 | 
					 | 
				
			||||||
        baseMapper.deleteBatchIds(ids);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void export(Q query, SortQuery sortQuery, HttpServletResponse response) {
 | 
					 | 
				
			||||||
        List<D> list = this.list(query, sortQuery, detailVoClass);
 | 
					 | 
				
			||||||
        list.forEach(this::fillDetail);
 | 
					 | 
				
			||||||
        ExcelUtils.export(list, "导出数据", detailVoClass, response);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询列表
 | 
					     * 查询列表
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -208,6 +172,50 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
 | 
				
			|||||||
        return BeanUtil.copyToList(entityList, targetClass);
 | 
					        return BeanUtil.copyToList(entityList, targetClass);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public D get(Long id) {
 | 
				
			||||||
 | 
					        T entity = this.getById(id);
 | 
				
			||||||
 | 
					        D detailVO = BeanUtil.copyProperties(entity, detailVoClass);
 | 
				
			||||||
 | 
					        this.fillDetail(detailVO);
 | 
				
			||||||
 | 
					        return detailVO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
 | 
					    public Long add(C request) {
 | 
				
			||||||
 | 
					        if (request == null) {
 | 
				
			||||||
 | 
					            return 0L;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // 保存信息
 | 
				
			||||||
 | 
					        T entity = BeanUtil.copyProperties(request, entityClass);
 | 
				
			||||||
 | 
					        baseMapper.insert(entity);
 | 
				
			||||||
 | 
					        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
 | 
				
			||||||
 | 
					        Object idValue = tableInfo.getPropertyValue(entity, entityIdName);
 | 
				
			||||||
 | 
					        return Convert.toLong(idValue);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
 | 
					    public void update(C request) {
 | 
				
			||||||
 | 
					        Object idValue = ReflectUtil.getFieldValue(request, entityIdName);
 | 
				
			||||||
 | 
					        T entity = this.getById(idValue);
 | 
				
			||||||
 | 
					        BeanUtil.copyProperties(request, entity, CopyOptions.create().ignoreNullValue());
 | 
				
			||||||
 | 
					        baseMapper.updateById(entity);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
 | 
					    public void delete(List<Long> ids) {
 | 
				
			||||||
 | 
					        baseMapper.deleteBatchIds(ids);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void export(Q query, SortQuery sortQuery, HttpServletResponse response) {
 | 
				
			||||||
 | 
					        List<D> list = this.list(query, sortQuery, detailVoClass);
 | 
				
			||||||
 | 
					        list.forEach(this::fillDetail);
 | 
				
			||||||
 | 
					        ExcelUtils.export(list, "导出数据", detailVoClass, response);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据 ID 查询
 | 
					     * 根据 ID 查询
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -259,46 +267,6 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 获取实体类 ID 名称
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return 实体类 ID 名称
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected String currentEntityIdName() {
 | 
					 | 
				
			||||||
        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
 | 
					 | 
				
			||||||
        Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
 | 
					 | 
				
			||||||
        String keyProperty = tableInfo.getKeyProperty();
 | 
					 | 
				
			||||||
        Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
 | 
					 | 
				
			||||||
        return keyProperty;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 获取实体类 Class 对象
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return 实体类 Class 对象
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected Class<T> currentEntityClass() {
 | 
					 | 
				
			||||||
        return (Class<T>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 获取列表信息类 Class 对象
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return 列表信息类 Class 对象
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected Class<V> currentVoClass() {
 | 
					 | 
				
			||||||
        return (Class<V>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 2);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 获取详情信息类 Class 对象
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @return 详情信息类 Class 对象
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected Class<D> currentDetailVoClass() {
 | 
					 | 
				
			||||||
        return (Class<D>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 3);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 链式查询
 | 
					     * 链式查询
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -345,4 +313,17 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
 | 
				
			|||||||
    protected LambdaUpdateChainWrapper<T> lambdaUpdate() {
 | 
					    protected LambdaUpdateChainWrapper<T> lambdaUpdate() {
 | 
				
			||||||
        return ChainWrappers.lambdaUpdateChain(baseMapper);
 | 
					        return ChainWrappers.lambdaUpdateChain(baseMapper);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 获取实体类 ID 名称
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return 实体类 ID 名称
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private String currentEntityIdName() {
 | 
				
			||||||
 | 
					        TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
 | 
				
			||||||
 | 
					        Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!");
 | 
				
			||||||
 | 
					        String keyProperty = tableInfo.getKeyProperty();
 | 
				
			||||||
 | 
					        Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
 | 
				
			||||||
 | 
					        return keyProperty;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ public class WebMvcMappingConfiguration extends DelegatingWebMvcConfiguration {
 | 
				
			|||||||
     * CRUD 请求映射器处理器映射器(覆盖默认 RequestMappingHandlerMapping)
 | 
					     * CRUD 请求映射器处理器映射器(覆盖默认 RequestMappingHandlerMapping)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
 | 
					    public RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
 | 
				
			||||||
        return new CrudRequestMappingHandlerMapping();
 | 
					        return new CrudRequestMappingHandlerMapping();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ public class MybatisPlusConfiguration {
 | 
				
			|||||||
     * @return /
 | 
					     * @return /
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @Bean
 | 
					    @Bean
 | 
				
			||||||
    MybatisPlusInterceptor mybatisPlusInterceptor() {
 | 
					    public MybatisPlusInterceptor mybatisPlusInterceptor() {
 | 
				
			||||||
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 | 
					        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 | 
				
			||||||
        // 分页插件
 | 
					        // 分页插件
 | 
				
			||||||
        interceptor.addInnerInterceptor(paginationInnerInterceptor());
 | 
					        interceptor.addInnerInterceptor(paginationInnerInterceptor());
 | 
				
			||||||
@@ -55,6 +55,22 @@ public class MybatisPlusConfiguration {
 | 
				
			|||||||
        return interceptor;
 | 
					        return interceptor;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 元对象处理器配置(插入或修改时自动填充)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public MetaObjectHandler metaObjectHandler() {
 | 
				
			||||||
 | 
					        return new MyBatisPlusMetaObjectHandler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ID 生成器配置,仅在主键类型(idType)配置为 ASSIGN_ID 或 ASSIGN_UUID 时有效(使用网卡信息绑定雪花生成器,防止集群雪花 ID 重复)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public IdentifierGenerator idGenerator() {
 | 
				
			||||||
 | 
					        return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 分页插件配置(<a href="https://baomidou.com/pages/97710a/#paginationinnerinterceptor">...</a>)
 | 
					     * 分页插件配置(<a href="https://baomidou.com/pages/97710a/#paginationinnerinterceptor">...</a>)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@@ -68,20 +84,4 @@ public class MybatisPlusConfiguration {
 | 
				
			|||||||
        paginationInnerInterceptor.setMaxLimit(-1L);
 | 
					        paginationInnerInterceptor.setMaxLimit(-1L);
 | 
				
			||||||
        return paginationInnerInterceptor;
 | 
					        return paginationInnerInterceptor;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 元对象处理器配置(插入或修改时自动填充)
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @Bean
 | 
					 | 
				
			||||||
    MetaObjectHandler metaObjectHandler() {
 | 
					 | 
				
			||||||
        return new MyBatisPlusMetaObjectHandler();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * ID 生成器配置,仅在主键类型(idType)配置为 ASSIGN_ID 或 ASSIGN_UUID 时有效(使用网卡信息绑定雪花生成器,防止集群雪花 ID 重复)
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @Bean
 | 
					 | 
				
			||||||
    IdentifierGenerator idGenerator() {
 | 
					 | 
				
			||||||
        return new DefaultIdentifierGenerator(NetUtil.getLocalhost());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,5 +30,4 @@ public class BadRequestException extends RuntimeException {
 | 
				
			|||||||
    public BadRequestException(String message) {
 | 
					    public BadRequestException(String message) {
 | 
				
			||||||
        super(message);
 | 
					        super(message);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,5 +30,4 @@ public class ServiceException extends RuntimeException {
 | 
				
			|||||||
    public ServiceException(String message) {
 | 
					    public ServiceException(String message) {
 | 
				
			||||||
        super(message);
 | 
					        super(message);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,6 @@ import static top.charles7c.cnadmin.common.annotation.CrudRequestMapping.Api;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.lang.reflect.Method;
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import lombok.NoArgsConstructor;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.springframework.lang.NonNull;
 | 
					import org.springframework.lang.NonNull;
 | 
				
			||||||
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
 | 
					import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
 | 
				
			||||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
 | 
					import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
 | 
				
			||||||
@@ -38,7 +36,6 @@ import top.charles7c.cnadmin.common.util.ExceptionUtils;
 | 
				
			|||||||
 * @author Charles7c
 | 
					 * @author Charles7c
 | 
				
			||||||
 * @since 2023/1/27 10:30
 | 
					 * @since 2023/1/27 10:30
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@NoArgsConstructor
 | 
					 | 
				
			||||||
public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
 | 
					public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,20 +76,6 @@ public class PageQuery extends SortQuery {
 | 
				
			|||||||
        this.setSize(size);
 | 
					        this.setSize(size);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setPage(Integer page) {
 | 
					 | 
				
			||||||
        this.page = page == null ? DEFAULT_PAGE : page;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void setSize(Integer size) {
 | 
					 | 
				
			||||||
        if (size == null) {
 | 
					 | 
				
			||||||
            this.size = DEFAULT_SIZE;
 | 
					 | 
				
			||||||
        } else if (size > DEFAULT_MAX_SIZE) {
 | 
					 | 
				
			||||||
            this.size = DEFAULT_MAX_SIZE;
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            this.size = size;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 基于分页查询条件转换为 MyBatis Plus 分页条件
 | 
					     * 基于分页查询条件转换为 MyBatis Plus 分页条件
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -110,4 +96,18 @@ public class PageQuery extends SortQuery {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return mybatisPage;
 | 
					        return mybatisPage;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setPage(Integer page) {
 | 
				
			||||||
 | 
					        this.page = page == null ? DEFAULT_PAGE : page;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setSize(Integer size) {
 | 
				
			||||||
 | 
					        if (size == null) {
 | 
				
			||||||
 | 
					            this.size = DEFAULT_SIZE;
 | 
				
			||||||
 | 
					        } else if (size > DEFAULT_MAX_SIZE) {
 | 
				
			||||||
 | 
					            this.size = DEFAULT_MAX_SIZE;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            this.size = size;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,5 +79,4 @@ public class FileUtils {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,10 +57,6 @@ public class ServletUtils {
 | 
				
			|||||||
        return getServletRequestAttributes().getResponse();
 | 
					        return getServletRequestAttributes().getResponse();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static ServletRequestAttributes getServletRequestAttributes() {
 | 
					 | 
				
			||||||
        return (ServletRequestAttributes)Objects.requireNonNull(RequestContextHolder.getRequestAttributes());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 获取浏览器及其版本信息
 | 
					     * 获取浏览器及其版本信息
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -75,4 +71,8 @@ public class ServletUtils {
 | 
				
			|||||||
        UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
 | 
					        UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
 | 
				
			||||||
        return userAgent.getBrowser().getName() + " " + userAgent.getVersion();
 | 
					        return userAgent.getBrowser().getName() + " " + userAgent.getVersion();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static ServletRequestAttributes getServletRequestAttributes() {
 | 
				
			||||||
 | 
					        return (ServletRequestAttributes)Objects.requireNonNull(RequestContextHolder.getRequestAttributes());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,8 +25,8 @@ import top.charles7c.cnadmin.common.exception.ServiceException;
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * 业务参数校验工具类(抛出 500 ServiceException)
 | 
					 * 业务参数校验工具类(抛出 500 ServiceException)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Charles7c
 | 
					 | 
				
			||||||
 * @see ServiceException
 | 
					 * @see ServiceException
 | 
				
			||||||
 | 
					 * @author Charles7c
 | 
				
			||||||
 * @since 2023/1/2 22:12
 | 
					 * @since 2023/1/2 22:12
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Slf4j
 | 
					@Slf4j
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,9 +25,9 @@ import top.charles7c.cnadmin.common.exception.BadRequestException;
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * 基本参数校验工具类(抛出 400 BadRequestException)
 | 
					 * 基本参数校验工具类(抛出 400 BadRequestException)
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * @see BadRequestException
 | 
				
			||||||
 * @author Charles7c
 | 
					 * @author Charles7c
 | 
				
			||||||
 * @since 2022/12/21 20:56
 | 
					 * @since 2022/12/21 20:56
 | 
				
			||||||
 * @see BadRequestException
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Slf4j
 | 
					@Slf4j
 | 
				
			||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
 | 
					@NoArgsConstructor(access = AccessLevel.PRIVATE)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,5 +34,4 @@ public interface LoginService {
 | 
				
			|||||||
     * @return 令牌
 | 
					     * @return 令牌
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    String login(String username, String password);
 | 
					    String login(String username, String password);
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,15 +36,6 @@ import top.charles7c.cnadmin.system.model.vo.UserVO;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
public interface UserService extends BaseService<UserVO, UserDetailVO, UserQuery, UserRequest> {
 | 
					public interface UserService extends BaseService<UserVO, UserDetailVO, UserQuery, UserRequest> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 根据用户名查询
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param username
 | 
					 | 
				
			||||||
     *            用户名
 | 
					 | 
				
			||||||
     * @return 用户信息
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    UserDO getByUsername(String username);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 上传头像
 | 
					     * 上传头像
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -98,6 +89,15 @@ public interface UserService extends BaseService<UserVO, UserDetailVO, UserQuery
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    void updateUserRole(UpdateUserRoleRequest request, Long userId);
 | 
					    void updateUserRole(UpdateUserRoleRequest request, Long userId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 根据用户名查询
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param username
 | 
				
			||||||
 | 
					     *            用户名
 | 
				
			||||||
 | 
					     * @return 用户信息
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    UserDO getByUsername(String username);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 根据部门 ID 列表查询
 | 
					     * 根据部门 ID 列表查询
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,6 +82,15 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
 | 
				
			|||||||
        super.lambdaUpdate().in(DeptDO::getParentId, ids).remove();
 | 
					        super.lambdaUpdate().in(DeptDO::getParentId, ids).remove();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void fillDetail(Object detailObj) {
 | 
				
			||||||
 | 
					        super.fillDetail(detailObj);
 | 
				
			||||||
 | 
					        if (detailObj instanceof DeptDetailVO) {
 | 
				
			||||||
 | 
					            DeptDetailVO detailVO = (DeptDetailVO)detailObj;
 | 
				
			||||||
 | 
					            detailVO.setParentName(ExceptionUtils.exToNull(() -> this.get(detailVO.getParentId()).getDeptName()));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 检查名称是否存在
 | 
					     * 检查名称是否存在
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -97,13 +106,4 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
 | 
				
			|||||||
        return super.lambdaQuery().eq(DeptDO::getDeptName, name).eq(DeptDO::getParentId, parentId)
 | 
					        return super.lambdaQuery().eq(DeptDO::getDeptName, name).eq(DeptDO::getParentId, parentId)
 | 
				
			||||||
            .ne(id != null, DeptDO::getDeptId, id).exists();
 | 
					            .ne(id != null, DeptDO::getDeptId, id).exists();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void fillDetail(Object detailObj) {
 | 
					 | 
				
			||||||
        super.fillDetail(detailObj);
 | 
					 | 
				
			||||||
        if (detailObj instanceof DeptDetailVO) {
 | 
					 | 
				
			||||||
            DeptDetailVO detailVO = (DeptDetailVO)detailObj;
 | 
					 | 
				
			||||||
            detailVO.setParentName(ExceptionUtils.exToNull(() -> this.get(detailVO.getParentId()).getDeptName()));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,6 +74,11 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO,
 | 
				
			|||||||
        super.lambdaUpdate().in(MenuDO::getParentId, ids).remove();
 | 
					        super.lambdaUpdate().in(MenuDO::getParentId, ids).remove();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<String> listPermissionsByUserId(Long userId) {
 | 
				
			||||||
 | 
					        return baseMapper.selectPermissionsByUserId(userId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 检查名称是否存在
 | 
					     * 检查名称是否存在
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@@ -89,9 +94,4 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuVO,
 | 
				
			|||||||
        return super.lambdaQuery().eq(MenuDO::getMenuName, name).eq(MenuDO::getParentId, parentId)
 | 
					        return super.lambdaQuery().eq(MenuDO::getMenuName, name).eq(MenuDO::getParentId, parentId)
 | 
				
			||||||
            .ne(id != null, MenuDO::getMenuId, id).exists();
 | 
					            .ne(id != null, MenuDO::getMenuId, id).exists();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public Set<String> listPermissionsByUserId(Long userId) {
 | 
					 | 
				
			||||||
        return baseMapper.selectPermissionsByUserId(userId);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,32 +104,6 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
 | 
				
			|||||||
        super.delete(ids);
 | 
					        super.delete(ids);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 检查名称是否存在
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param name
 | 
					 | 
				
			||||||
     *            名称
 | 
					 | 
				
			||||||
     * @param id
 | 
					 | 
				
			||||||
     *            ID
 | 
					 | 
				
			||||||
     * @return 是否存在
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private boolean checkNameExists(String name, Long id) {
 | 
					 | 
				
			||||||
        return super.lambdaQuery().eq(RoleDO::getRoleName, name).ne(id != null, RoleDO::getRoleId, id).exists();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 检查编码是否存在
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param code
 | 
					 | 
				
			||||||
     *            编码
 | 
					 | 
				
			||||||
     * @param id
 | 
					 | 
				
			||||||
     *            ID
 | 
					 | 
				
			||||||
     * @return 是否存在
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private boolean checkCodeExists(String code, Long id) {
 | 
					 | 
				
			||||||
        return super.lambdaQuery().eq(RoleDO::getRoleCode, code).ne(id != null, RoleDO::getRoleId, id).exists();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void fillDetail(Object detailObj) {
 | 
					    public void fillDetail(Object detailObj) {
 | 
				
			||||||
        super.fillDetail(detailObj);
 | 
					        super.fillDetail(detailObj);
 | 
				
			||||||
@@ -167,4 +141,30 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
 | 
				
			|||||||
        List<RoleDO> roleList = super.lambdaQuery().select(RoleDO::getRoleCode).in(RoleDO::getRoleId, roleIds).list();
 | 
					        List<RoleDO> roleList = super.lambdaQuery().select(RoleDO::getRoleCode).in(RoleDO::getRoleId, roleIds).list();
 | 
				
			||||||
        return roleList.stream().map(RoleDO::getRoleCode).collect(Collectors.toSet());
 | 
					        return roleList.stream().map(RoleDO::getRoleCode).collect(Collectors.toSet());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 检查名称是否存在
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param name
 | 
				
			||||||
 | 
					     *            名称
 | 
				
			||||||
 | 
					     * @param id
 | 
				
			||||||
 | 
					     *            ID
 | 
				
			||||||
 | 
					     * @return 是否存在
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private boolean checkNameExists(String name, Long id) {
 | 
				
			||||||
 | 
					        return super.lambdaQuery().eq(RoleDO::getRoleName, name).ne(id != null, RoleDO::getRoleId, id).exists();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 检查编码是否存在
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param code
 | 
				
			||||||
 | 
					     *            编码
 | 
				
			||||||
 | 
					     * @param id
 | 
				
			||||||
 | 
					     *            ID
 | 
				
			||||||
 | 
					     * @return 是否存在
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private boolean checkCodeExists(String code, Long id) {
 | 
				
			||||||
 | 
					        return super.lambdaQuery().eq(RoleDO::getRoleCode, code).ne(id != null, RoleDO::getRoleId, id).exists();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -102,19 +102,6 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
 | 
				
			|||||||
        userRoleService.save(request.getRoleIds(), userId);
 | 
					        userRoleService.save(request.getRoleIds(), userId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 检查名称是否存在
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param name
 | 
					 | 
				
			||||||
     *            名称
 | 
					 | 
				
			||||||
     * @param id
 | 
					 | 
				
			||||||
     *            ID
 | 
					 | 
				
			||||||
     * @return 是否存在
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private boolean checkNameExists(String name, Long id) {
 | 
					 | 
				
			||||||
        return super.lambdaQuery().eq(UserDO::getUsername, name).ne(id != null, UserDO::getUserId, id).exists();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void fillDetail(Object detailObj) {
 | 
					    public void fillDetail(Object detailObj) {
 | 
				
			||||||
        super.fillDetail(detailObj);
 | 
					        super.fillDetail(detailObj);
 | 
				
			||||||
@@ -127,11 +114,6 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public UserDO getByUsername(String username) {
 | 
					 | 
				
			||||||
        return super.lambdaQuery().eq(UserDO::getUsername, username).one();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    @Transactional(rollbackFor = Exception.class)
 | 
					    @Transactional(rollbackFor = Exception.class)
 | 
				
			||||||
    public String uploadAvatar(MultipartFile avatarFile, Long userId) {
 | 
					    public String uploadAvatar(MultipartFile avatarFile, Long userId) {
 | 
				
			||||||
@@ -218,6 +200,11 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
 | 
				
			|||||||
        userRoleService.save(request.getRoleIds(), userId);
 | 
					        userRoleService.save(request.getRoleIds(), userId);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public UserDO getByUsername(String username) {
 | 
				
			||||||
 | 
					        return super.lambdaQuery().eq(UserDO::getUsername, username).one();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Long countByDeptIds(List<Long> deptIds) {
 | 
					    public Long countByDeptIds(List<Long> deptIds) {
 | 
				
			||||||
        return super.lambdaQuery().in(UserDO::getDeptId, deptIds).count();
 | 
					        return super.lambdaQuery().in(UserDO::getDeptId, deptIds).count();
 | 
				
			||||||
@@ -227,4 +214,17 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
 | 
				
			|||||||
    public String getNicknameById(Long userId) {
 | 
					    public String getNicknameById(Long userId) {
 | 
				
			||||||
        return super.getById(userId).getNickname();
 | 
					        return super.getById(userId).getNickname();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 检查名称是否存在
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param name
 | 
				
			||||||
 | 
					     *            名称
 | 
				
			||||||
 | 
					     * @param id
 | 
				
			||||||
 | 
					     *            ID
 | 
				
			||||||
 | 
					     * @return 是否存在
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private boolean checkNameExists(String name, Long id) {
 | 
				
			||||||
 | 
					        return super.lambdaQuery().eq(UserDO::getUsername, name).ne(id != null, UserDO::getUserId, id).exists();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,5 +24,4 @@ class ContinewAdminApplicationTests {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    void contextLoads() {}
 | 
					    void contextLoads() {}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user