优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量
1.编程规约>常量定义>第1条: 【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
This commit is contained in:
parent
c4d9bd3a75
commit
89a327920e
@ -35,6 +35,7 @@ import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
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.SortQuery;
|
||||
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) {
|
||||
CrudRequestMapping crudRequestMapping = this.getClass().getDeclaredAnnotation(CrudRequestMapping.class);
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseEnum;
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
|
||||
/**
|
||||
* Easy Excel 枚举基类转换器
|
||||
@ -63,7 +64,7 @@ public class ExcelBaseEnumConverter implements Converter<BaseEnum<Integer, Strin
|
||||
public WriteCellData<String> convertToExcelData(BaseEnum<Integer, String> value,
|
||||
ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
|
||||
if (ObjectUtil.isNull(value)) {
|
||||
return new WriteCellData<>("");
|
||||
return new WriteCellData<>(StringConsts.EMPTY);
|
||||
}
|
||||
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 top.charles7c.cnadmin.common.base.BaseEnum;
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
|
||||
/**
|
||||
* Jackson 配置
|
||||
@ -59,10 +60,6 @@ public class JacksonConfiguration {
|
||||
*/
|
||||
@Bean
|
||||
public Jackson2ObjectMapperBuilderCustomizer customizer() {
|
||||
String dateTimeFormatPattern = "yyyy-MM-dd HH:mm:ss";
|
||||
String dateFormatPattern = "yyyy-MM-dd";
|
||||
String timeFormatPattern = "HH:mm:ss";
|
||||
|
||||
return builder -> {
|
||||
// 针对数值类型:Long、BigInteger、BigDecimal 的序列化和反序列化
|
||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||
@ -72,15 +69,15 @@ public class JacksonConfiguration {
|
||||
javaTimeModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
|
||||
|
||||
// 针对时间类型: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.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.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.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));
|
||||
builder.modules(javaTimeModule);
|
||||
|
@ -19,16 +19,16 @@ package top.charles7c.cnadmin.common.constant;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import cn.hutool.core.text.CharPool;
|
||||
import cn.hutool.core.text.StrPool;
|
||||
|
||||
/**
|
||||
* 字符相关常量
|
||||
* 字符串相关常量
|
||||
*
|
||||
* @author Charles7c
|
||||
* @since 2023/2/10 20:14
|
||||
*/
|
||||
@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 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";
|
||||
|
||||
/**
|
||||
* 登录 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.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);
|
||||
if (StrUtil.contains(sort[0], CharConsts.COMMA)) {
|
||||
if (StrUtil.contains(sort[0], StringConsts.COMMA)) {
|
||||
// e.g "sort=published,desc&sort=title,asc"
|
||||
for (String s : sort) {
|
||||
List<String> sortList = StrUtil.splitTrim(s, CharConsts.COMMA);
|
||||
List<String> sortList = StrUtil.splitTrim(s, StringConsts.COMMA);
|
||||
Sort.Order order =
|
||||
new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0));
|
||||
orders.add(order);
|
||||
|
@ -33,6 +33,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.config.easyexcel.ExcelBigNumberConverter;
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
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,
|
||||
HttpServletResponse response) {
|
||||
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);
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
|
||||
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.util.IdUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
|
||||
/**
|
||||
* 文件工具类
|
||||
*
|
||||
@ -57,7 +59,7 @@ public class FileUtils {
|
||||
String filename;
|
||||
if (isKeepOriginalFilename) {
|
||||
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 {
|
||||
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.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;
|
||||
|
||||
/**
|
||||
@ -233,10 +233,10 @@ public class MailUtils {
|
||||
}
|
||||
|
||||
List<String> result;
|
||||
if (StrUtil.contains(addresses, CharConsts.COMMA)) {
|
||||
result = StrUtil.splitTrim(addresses, CharConsts.COMMA);
|
||||
} else if (StrUtil.contains(addresses, CharConsts.SEMICOLON)) {
|
||||
result = StrUtil.splitTrim(addresses, CharConsts.SEMICOLON);
|
||||
if (StrUtil.contains(addresses, StringConsts.COMMA)) {
|
||||
result = StrUtil.splitTrim(addresses, StringConsts.COMMA);
|
||||
} else if (StrUtil.contains(addresses, StringConsts.SEMICOLON)) {
|
||||
result = StrUtil.splitTrim(addresses, StringConsts.SEMICOLON);
|
||||
} else {
|
||||
result = CollUtil.newArrayList(addresses);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.constant.CharConsts;
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
|
||||
/**
|
||||
* Stream 工具类
|
||||
@ -52,7 +52,7 @@ public class StreamUtils {
|
||||
*/
|
||||
public static <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {
|
||||
if (CollUtil.isEmpty(collection)) {
|
||||
return CharConsts.EMPTY;
|
||||
return StringConsts.EMPTY;
|
||||
}
|
||||
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.util.StrUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||
import top.charles7c.cnadmin.common.model.query.PageQuery;
|
||||
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
|
||||
import top.charles7c.cnadmin.common.service.CommonUserService;
|
||||
@ -95,8 +96,8 @@ public class LogServiceImpl implements LogService {
|
||||
@Override
|
||||
public PageDataVO<LoginLogVO> page(LoginLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
|
||||
queryWrapper.lambda()
|
||||
.and(qw -> qw.like(LogDO::getRequestUrl, "/auth/login").or().like(LogDO::getRequestUrl, "/auth/logout"));
|
||||
queryWrapper.lambda().and(qw -> qw.like(LogDO::getRequestUrl, SysConsts.LOGIN_URI).or()
|
||||
.like(LogDO::getRequestUrl, SysConsts.LOGOUT_URI));
|
||||
|
||||
// 限定查询信息
|
||||
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(LoginLogVO.class);
|
||||
|
Loading…
Reference in New Issue
Block a user