mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 22:57:17 +08:00 
			
		
		
		
	优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量
1.编程规约>常量定义>第1条: 【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
This commit is contained in:
		| @@ -35,6 +35,7 @@ import cn.hutool.core.lang.tree.Tree; | |||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.annotation.CrudRequestMapping; | import top.charles7c.cnadmin.common.annotation.CrudRequestMapping; | ||||||
|  | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
| import top.charles7c.cnadmin.common.model.query.PageQuery; | import top.charles7c.cnadmin.common.model.query.PageQuery; | ||||||
| import top.charles7c.cnadmin.common.model.query.SortQuery; | import top.charles7c.cnadmin.common.model.query.SortQuery; | ||||||
| import top.charles7c.cnadmin.common.model.vo.PageDataVO; | import top.charles7c.cnadmin.common.model.vo.PageDataVO; | ||||||
| @@ -208,7 +209,7 @@ public abstract class BaseController<S extends BaseService<V, D, Q, C>, V, D, Q, | |||||||
|     private void checkPermission(String subPermission) { |     private void checkPermission(String subPermission) { | ||||||
|         CrudRequestMapping crudRequestMapping = this.getClass().getDeclaredAnnotation(CrudRequestMapping.class); |         CrudRequestMapping crudRequestMapping = this.getClass().getDeclaredAnnotation(CrudRequestMapping.class); | ||||||
|         String path = crudRequestMapping.value(); |         String path = crudRequestMapping.value(); | ||||||
|         String permissionPrefix = String.join(":", StrUtil.splitTrim(path, "/")); |         String permissionPrefix = String.join(StringConsts.COLON, StrUtil.splitTrim(path, StringConsts.SLASH)); | ||||||
|         StpUtil.checkPermission(String.format("%s:%s", permissionPrefix, subPermission)); |         StpUtil.checkPermission(String.format("%s:%s", permissionPrefix, subPermission)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ import cn.hutool.core.util.ClassUtil; | |||||||
| import cn.hutool.core.util.ObjectUtil; | import cn.hutool.core.util.ObjectUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseEnum; | import top.charles7c.cnadmin.common.base.BaseEnum; | ||||||
|  | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Easy Excel 枚举基类转换器 |  * Easy Excel 枚举基类转换器 | ||||||
| @@ -63,7 +64,7 @@ public class ExcelBaseEnumConverter implements Converter<BaseEnum<Integer, Strin | |||||||
|     public WriteCellData<String> convertToExcelData(BaseEnum<Integer, String> value, |     public WriteCellData<String> convertToExcelData(BaseEnum<Integer, String> value, | ||||||
|         ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { |         ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { | ||||||
|         if (ObjectUtil.isNull(value)) { |         if (ObjectUtil.isNull(value)) { | ||||||
|             return new WriteCellData<>(""); |             return new WriteCellData<>(StringConsts.EMPTY); | ||||||
|         } |         } | ||||||
|         return new WriteCellData<>(value.getDescription()); |         return new WriteCellData<>(value.getDescription()); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; | |||||||
| import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; | import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.base.BaseEnum; | import top.charles7c.cnadmin.common.base.BaseEnum; | ||||||
|  | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Jackson 配置 |  * Jackson 配置 | ||||||
| @@ -59,10 +60,6 @@ public class JacksonConfiguration { | |||||||
|      */ |      */ | ||||||
|     @Bean |     @Bean | ||||||
|     public Jackson2ObjectMapperBuilderCustomizer customizer() { |     public Jackson2ObjectMapperBuilderCustomizer customizer() { | ||||||
|         String dateTimeFormatPattern = "yyyy-MM-dd HH:mm:ss"; |  | ||||||
|         String dateFormatPattern = "yyyy-MM-dd"; |  | ||||||
|         String timeFormatPattern = "HH:mm:ss"; |  | ||||||
|  |  | ||||||
|         return builder -> { |         return builder -> { | ||||||
|             // 针对数值类型:Long、BigInteger、BigDecimal 的序列化和反序列化 |             // 针对数值类型:Long、BigInteger、BigDecimal 的序列化和反序列化 | ||||||
|             JavaTimeModule javaTimeModule = new JavaTimeModule(); |             JavaTimeModule javaTimeModule = new JavaTimeModule(); | ||||||
| @@ -72,15 +69,15 @@ public class JacksonConfiguration { | |||||||
|             javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); |             javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); | ||||||
|  |  | ||||||
|             // 针对时间类型:LocalDateTime、LocalDate、LocalTime 的序列化和反序列化 |             // 针对时间类型:LocalDateTime、LocalDate、LocalTime 的序列化和反序列化 | ||||||
|             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(dateTimeFormatPattern); |             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(StringConsts.NORM_DATE_TIME_PATTERN); | ||||||
|             javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter)); |             javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter)); | ||||||
|             javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); |             javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); | ||||||
|  |  | ||||||
|             DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(dateFormatPattern); |             DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(StringConsts.NORM_DATE_PATTERN); | ||||||
|             javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter)); |             javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter)); | ||||||
|             javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter)); |             javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter)); | ||||||
|  |  | ||||||
|             DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(timeFormatPattern); |             DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(StringConsts.NORM_TIME_PATTERN); | ||||||
|             javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); |             javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); | ||||||
|             javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); |             javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); | ||||||
|             builder.modules(javaTimeModule); |             builder.modules(javaTimeModule); | ||||||
|   | |||||||
| @@ -19,16 +19,16 @@ package top.charles7c.cnadmin.common.constant; | |||||||
| import lombok.AccessLevel; | import lombok.AccessLevel; | ||||||
| import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||||
| 
 | 
 | ||||||
| import cn.hutool.core.text.CharPool; | import cn.hutool.core.text.StrPool; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * 字符相关常量 |  * 字符串相关常量 | ||||||
|  * |  * | ||||||
|  * @author Charles7c |  * @author Charles7c | ||||||
|  * @since 2023/2/10 20:14 |  * @since 2023/2/10 20:14 | ||||||
|  */ |  */ | ||||||
| @NoArgsConstructor(access = AccessLevel.PRIVATE) | @NoArgsConstructor(access = AccessLevel.PRIVATE) | ||||||
| public class CharConsts implements CharPool { | public class StringConsts implements StrPool { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 分号 |      * 分号 | ||||||
| @@ -39,4 +39,29 @@ public class CharConsts implements CharPool { | |||||||
|      * 空字符串 |      * 空字符串 | ||||||
|      */ |      */ | ||||||
|     public static final String EMPTY = ""; |     public static final String EMPTY = ""; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 标准日期时间格式 | ||||||
|  |      */ | ||||||
|  |     public static final String NORM_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 标准日期时间格式(紧凑) | ||||||
|  |      */ | ||||||
|  |     public static final String PURE_DATE_TIME_PATTERN = "yyyyMMddHHmmss"; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 标准日期时间格式(紧凑,带毫秒) | ||||||
|  |      */ | ||||||
|  |     public static final String PURE_DATE_TIME_MS_PATTERN = "yyyyMMddHHmmssSSS"; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 标准日期格式 | ||||||
|  |      */ | ||||||
|  |     public static final String NORM_DATE_PATTERN = "yyyy-MM-dd"; | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * 标准时间格式 | ||||||
|  |      */ | ||||||
|  |     public static final String NORM_TIME_PATTERN = "HH:mm:ss"; | ||||||
| } | } | ||||||
| @@ -42,4 +42,14 @@ public class SysConsts { | |||||||
|      * 默认密码 |      * 默认密码 | ||||||
|      */ |      */ | ||||||
|     public static final String DEFAULT_PASSWORD = "123456"; |     public static final String DEFAULT_PASSWORD = "123456"; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 登录 URI | ||||||
|  |      */ | ||||||
|  |     public static final String LOGIN_URI = "/auth/login"; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 退出登录 URI | ||||||
|  |      */ | ||||||
|  |     public static final String LOGOUT_URI = "/auth/logout"; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ import org.springframework.data.domain.Sort; | |||||||
| import cn.hutool.core.util.ArrayUtil; | import cn.hutool.core.util.ArrayUtil; | ||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.constant.CharConsts; | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 排序查询条件 |  * 排序查询条件 | ||||||
| @@ -62,10 +62,10 @@ public class SortQuery implements Serializable { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         List<Sort.Order> orders = new ArrayList<>(sort.length); |         List<Sort.Order> orders = new ArrayList<>(sort.length); | ||||||
|         if (StrUtil.contains(sort[0], CharConsts.COMMA)) { |         if (StrUtil.contains(sort[0], StringConsts.COMMA)) { | ||||||
|             // e.g "sort=published,desc&sort=title,asc" |             // e.g "sort=published,desc&sort=title,asc" | ||||||
|             for (String s : sort) { |             for (String s : sort) { | ||||||
|                 List<String> sortList = StrUtil.splitTrim(s, CharConsts.COMMA); |                 List<String> sortList = StrUtil.splitTrim(s, StringConsts.COMMA); | ||||||
|                 Sort.Order order = |                 Sort.Order order = | ||||||
|                     new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0)); |                     new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0)); | ||||||
|                 orders.add(order); |                 orders.add(order); | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ import cn.hutool.core.date.DateUtil; | |||||||
| import cn.hutool.core.util.URLUtil; | import cn.hutool.core.util.URLUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.config.easyexcel.ExcelBigNumberConverter; | import top.charles7c.cnadmin.common.config.easyexcel.ExcelBigNumberConverter; | ||||||
|  | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
| import top.charles7c.cnadmin.common.exception.ServiceException; | import top.charles7c.cnadmin.common.exception.ServiceException; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -78,7 +79,8 @@ public class ExcelUtils { | |||||||
|     public static <V> void export(List<V> list, String fileName, String sheetName, Class<V> clazz, |     public static <V> void export(List<V> list, String fileName, String sheetName, Class<V> clazz, | ||||||
|         HttpServletResponse response) { |         HttpServletResponse response) { | ||||||
|         try { |         try { | ||||||
|             fileName = String.format("%s_%s.xlsx", fileName, DateUtil.format(new Date(), "yyyyMMddHHmmss")); |             fileName = | ||||||
|  |                 String.format("%s_%s.xlsx", fileName, DateUtil.format(new Date(), StringConsts.PURE_DATE_TIME_PATTERN)); | ||||||
|             fileName = URLUtil.encode(fileName); |             fileName = URLUtil.encode(fileName); | ||||||
|             response.setHeader("Content-disposition", "attachment;filename=" + fileName); |             response.setHeader("Content-disposition", "attachment;filename=" + fileName); | ||||||
|             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); |             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); | ||||||
|   | |||||||
| @@ -29,6 +29,8 @@ import cn.hutool.core.date.DateUtil; | |||||||
| import cn.hutool.core.io.file.FileNameUtil; | import cn.hutool.core.io.file.FileNameUtil; | ||||||
| import cn.hutool.core.util.IdUtil; | import cn.hutool.core.util.IdUtil; | ||||||
|  |  | ||||||
|  | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 文件工具类 |  * 文件工具类 | ||||||
|  * |  * | ||||||
| @@ -57,7 +59,7 @@ public class FileUtils { | |||||||
|         String filename; |         String filename; | ||||||
|         if (isKeepOriginalFilename) { |         if (isKeepOriginalFilename) { | ||||||
|             filename = String.format("%s-%s.%s", FileNameUtil.getPrefix(originalFilename), |             filename = String.format("%s-%s.%s", FileNameUtil.getPrefix(originalFilename), | ||||||
|                 DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmssS"), extensionName); |                 DateUtil.format(LocalDateTime.now(), StringConsts.PURE_DATE_TIME_MS_PATTERN), extensionName); | ||||||
|         } else { |         } else { | ||||||
|             filename = String.format("%s.%s", IdUtil.fastSimpleUUID(), extensionName); |             filename = String.format("%s.%s", IdUtil.fastSimpleUUID(), extensionName); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -37,7 +37,7 @@ import cn.hutool.core.util.ArrayUtil; | |||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
| import cn.hutool.extra.spring.SpringUtil; | import cn.hutool.extra.spring.SpringUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.constant.CharConsts; | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
| import top.charles7c.cnadmin.common.util.validate.CheckUtils; | import top.charles7c.cnadmin.common.util.validate.CheckUtils; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -233,10 +233,10 @@ public class MailUtils { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         List<String> result; |         List<String> result; | ||||||
|         if (StrUtil.contains(addresses, CharConsts.COMMA)) { |         if (StrUtil.contains(addresses, StringConsts.COMMA)) { | ||||||
|             result = StrUtil.splitTrim(addresses, CharConsts.COMMA); |             result = StrUtil.splitTrim(addresses, StringConsts.COMMA); | ||||||
|         } else if (StrUtil.contains(addresses, CharConsts.SEMICOLON)) { |         } else if (StrUtil.contains(addresses, StringConsts.SEMICOLON)) { | ||||||
|             result = StrUtil.splitTrim(addresses, CharConsts.SEMICOLON); |             result = StrUtil.splitTrim(addresses, StringConsts.SEMICOLON); | ||||||
|         } else { |         } else { | ||||||
|             result = CollUtil.newArrayList(addresses); |             result = CollUtil.newArrayList(addresses); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ import lombok.NoArgsConstructor; | |||||||
|  |  | ||||||
| import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||||
|  |  | ||||||
| import top.charles7c.cnadmin.common.constant.CharConsts; | import top.charles7c.cnadmin.common.constant.StringConsts; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Stream 工具类 |  * Stream 工具类 | ||||||
| @@ -52,7 +52,7 @@ public class StreamUtils { | |||||||
|      */ |      */ | ||||||
|     public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) { |     public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) { | ||||||
|         if (CollUtil.isEmpty(collection)) { |         if (CollUtil.isEmpty(collection)) { | ||||||
|             return CharConsts.EMPTY; |             return StringConsts.EMPTY; | ||||||
|         } |         } | ||||||
|         return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter)); |         return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter)); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; | |||||||
| import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||||
| import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||||
|  |  | ||||||
|  | import top.charles7c.cnadmin.common.constant.SysConsts; | ||||||
| import top.charles7c.cnadmin.common.model.query.PageQuery; | import top.charles7c.cnadmin.common.model.query.PageQuery; | ||||||
| import top.charles7c.cnadmin.common.model.vo.PageDataVO; | import top.charles7c.cnadmin.common.model.vo.PageDataVO; | ||||||
| import top.charles7c.cnadmin.common.service.CommonUserService; | import top.charles7c.cnadmin.common.service.CommonUserService; | ||||||
| @@ -95,8 +96,8 @@ public class LogServiceImpl implements LogService { | |||||||
|     @Override |     @Override | ||||||
|     public PageDataVO<LoginLogVO> page(LoginLogQuery query, PageQuery pageQuery) { |     public PageDataVO<LoginLogVO> page(LoginLogQuery query, PageQuery pageQuery) { | ||||||
|         QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query); |         QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query); | ||||||
|         queryWrapper.lambda() |         queryWrapper.lambda().and(qw -> qw.like(LogDO::getRequestUrl, SysConsts.LOGIN_URI).or() | ||||||
|             .and(qw -> qw.like(LogDO::getRequestUrl, "/auth/login").or().like(LogDO::getRequestUrl, "/auth/logout")); |             .like(LogDO::getRequestUrl, SysConsts.LOGOUT_URI)); | ||||||
|  |  | ||||||
|         // 限定查询信息 |         // 限定查询信息 | ||||||
|         String[] fieldsName = ReflectUtils.getNonStaticFieldsName(LoginLogVO.class); |         String[] fieldsName = ReflectUtils.getNonStaticFieldsName(LoginLogVO.class); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user