1.移除JsonUtils中日期格式化 2.添加Excel工具类 3.升级部分库!

This commit is contained in:
Wang Chen Chen
2023-11-23 14:29:39 +08:00
parent b8ee29c16e
commit d4dfe3a484
15 changed files with 328 additions and 79 deletions

8
.gitignore vendored
View File

@@ -1,6 +1,13 @@
HELP.md
target/
server/molly-service/src/main/resources/application-dev.yml
/server/molly-service/src/main/resources/application-dev.yml
./server/molly-service/src/main/resources/application-dev.yml
server/molly-service/src/main/resources/application-*.yml
/server/molly-service/src/main/resources/application-*.yml
./server/molly-service/src/main/resources/application-*.yml
### STS ###
.apt_generated
.classpath
@@ -28,4 +35,3 @@ build/
### VS Code ###
.vscode/
server/molly-service/src/main/resources/application-dev.yml

View File

@@ -26,6 +26,12 @@
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${apache-poi.version}</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>

View File

@@ -0,0 +1,228 @@
package com.xaaef.molly.common.util;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
* <p>
* Excel 工具类
* </p>
*
* @author WangChenChen
* @version 1.2
* @date 2023/11/23 14:50
*/
@Slf4j
public class ExcelUtils {
/**
* 设备导出的 Excel
*
* @author WangChenChen
* @date 2023/9/21 14:51
*/
public static <T> ResponseEntity<ByteArrayResource> deviceExport(String fileName, List<T> dataList) {
//创建一个Excel文件
return getWorkbook(fileName, (workbook) -> {
if (!dataList.isEmpty()) {
// 获取设备的总数量
int total = dataList.size();
int pageSize = 10000;
if (total > pageSize) {
int pages = (total / pageSize) + 1;
var startIndex = new AtomicInteger(0);
for (int i = 0; i < pages; i++) {
int fromIndex = startIndex.get();
var toIndex = (fromIndex + pageSize);
startIndex.set(toIndex);
if (toIndex >= total) {
toIndex = total;
}
var rangeData = dataList.subList(fromIndex, toIndex);
var pageNum = i + 1;
pageExport(workbook, String.format("第 %d 页", pageNum), rangeData);
}
} else {
pageExport(workbook, String.format("第 %d 页", 1), dataList);
}
}
});
}
/**
* 分页导出
*
* @author WangChenChen
* @version 2.0
* @date 2023/11/23 12:32
*/
private static <T> void pageExport(HSSFWorkbook workbook, String sheetName, List<T> rangeData) {
// 反射获取对象属性,和描述名称
var fieldNames = Arrays.stream(ReflectUtil.getFields(rangeData.getFirst().getClass()))
.map(field -> {
var ann = field.getAnnotation(Schema.class);
return ann == null ? StrUtil.EMPTY : ann.description();
})
.collect(Collectors.toCollection(LinkedList::new));
//创建工作表,指定工作表名称
var sheet1 = workbook.createSheet(sheetName);
sheet1.setDefaultColumnWidth(20);
var titleRow = sheet1.createRow(0);
// 设置标题
setTitle(titleRow, createTitleStyle(workbook), fieldNames);
var cellNum = fieldNames.size();
for (int ind = 0; ind < rangeData.size(); ind++) {
var a1 = rangeData.get(ind);
var row1 = sheet1.createRow((ind + 1));
var fieldsValue = ReflectUtil.getFieldsValue(a1);
for (int v = 0; v < cellNum; v++) {
var cell0 = row1.createCell(v);
cell0.setCellType(CellType.STRING);
var obj = fieldsValue[v];
if (obj == null) {
cell0.setCellValue(StrUtil.EMPTY);
break;
}
if (obj instanceof Long o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Integer o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Short o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Float o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Double o1) {
cell0.setCellValue(o1);
} else if (obj instanceof String o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Byte o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Boolean o1) {
cell0.setCellValue(o1);
} else if (obj instanceof Date o1) {
cell0.setCellValue(DateUtil.formatDateTime(o1));
} else if (obj instanceof LocalDate o1) {
cell0.setCellValue(o1.format(DatePattern.NORM_DATE_FORMATTER));
} else if (obj instanceof LocalTime o1) {
cell0.setCellValue(o1.format(DatePattern.NORM_TIME_FORMATTER));
} else if (obj instanceof LocalDateTime o1) {
cell0.setCellValue(o1.format(DatePattern.NORM_DATETIME_FORMATTER));
} else if (obj instanceof ZonedDateTime o1) {
cell0.setCellValue(o1.format(DatePattern.NORM_DATETIME_FORMATTER));
} else if (obj instanceof Iterable<?> || obj instanceof Map<?, ?> || obj instanceof Enum<?> || obj.getClass().isArray()) {
cell0.setCellValue(JsonUtils.toFormatJson(obj));
} else {
cell0.setCellValue(obj.toString());
}
}
}
}
/**
* 获取一个 Workbook
*
* @date 2023/11/23 11:20
*/
public static ResponseEntity<ByteArrayResource> getWorkbook(String fileName, Consumer<HSSFWorkbook> workbookConsumer) {
//在内存中创建一个Excel文件
var workbook = new HSSFWorkbook();
// 创建一个 消费者
workbookConsumer.accept(workbook);
var os = new ByteArrayOutputStream();
try {
workbook.write(os);
workbook.close();
} catch (IOException e) {
log.error(e.getMessage());
try {
os.write(e.getMessage().getBytes(StandardCharsets.UTF_8));
} catch (IOException ex) {
log.error(e.getMessage());
}
}
if (fileName.endsWith(".xlsx")) {
fileName = fileName.replaceFirst(".xlsx", "");
}
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", String.format("attachment;filename=%s.xlsx", fileNameEncode(fileName)))
.body(new ByteArrayResource(os.toByteArray()));
}
/**
* 文件名编码
*
* @date 2023/11/23 11:20
*/
private static String fileNameEncode(String fileName) {
return URLEncoder.encode(fileName, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
}
/**
* 创建标题样式
*
* @date 2023/11/23 11:20
*/
private static HSSFCellStyle createTitleStyle(HSSFWorkbook workbook) {
// 标题,颜色
var titleStyle = workbook.createCellStyle();
titleStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
titleStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
var font1 = workbook.createFont();
font1.setBold(true); //加粗
font1.setColor(Font.COLOR_NORMAL); //字体颜色
titleStyle.setFont(font1);
return titleStyle;
}
/**
* 设置 标题
*
* @date 2023/11/23 11:20
*/
private static void setTitle(HSSFRow titleRow, HSSFCellStyle titleStyle, List<String> titleName) {
for (int index = 0; index < titleName.size(); index++) {
var cell = titleRow.createCell(index);
cell.setCellStyle(titleStyle);
cell.setCellValue(titleName.get(index));
cell.setCellType(CellType.STRING);
}
}
}

View File

@@ -1,5 +1,6 @@
package com.xaaef.molly.common.util;
import cn.hutool.core.date.DatePattern;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
@@ -18,7 +19,6 @@ import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -38,23 +38,17 @@ import java.util.Map;
@Slf4j
public class JsonUtils {
public static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
public static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
private static final ObjectMapper MAPPER;
static {
MAPPER = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMATTER));
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMATTER));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DatePattern.NORM_DATE_FORMATTER));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DatePattern.NORM_DATE_FORMATTER));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DatePattern.NORM_TIME_FORMATTER));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DatePattern.NORM_TIME_FORMATTER));
MAPPER.registerModule(javaTimeModule);
/*

View File

@@ -147,8 +147,8 @@ public class CmsProjectServiceImpl extends BaseServiceImpl<CmsProjectMapper, Cms
CmsProject::getLinkman, CmsProject::getAreaCode, CmsProject::getAddress
)
)
.eq(CmsProject::getStatus, 1)
.orderByAsc(CmsProject::getCreateTime);
.eq(CmsProject::getStatus, StatusEnum.NORMAL.getCode())
.orderByAsc(CmsProject::getSort, CmsProject::getCreateTime);
// 非系统用户和管理员用户。根据所在部门,查询项目列表
if (!isMasterUser() && !isAdminUser()) {
var childDeptIds = apiPmsDeptService.listChildIdByDeptId(getLoginUser().getDeptId());

View File

@@ -1,8 +1,8 @@
package com.xaaef.molly.monitor.entity;
import cn.hutool.core.date.DatePattern;
import com.xaaef.molly.common.util.ArithUtils;
import com.xaaef.molly.common.util.IpUtils;
import com.xaaef.molly.common.util.JsonUtils;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.experimental.Accessors;
@@ -19,8 +19,6 @@ import oshi.util.Util;
import java.lang.management.ManagementFactory;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
@@ -100,18 +98,18 @@ public class ServerInfo implements java.io.Serializable {
long[] ticks = processor.getSystemCpuLoadTicks();
long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
long softline = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
long ioWait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
long totalCpu = user + nice + cSys + idle + ioWait + irq + softline + steal;
cpu.setCpuNum(processor.getLogicalProcessorCount());
cpu.setTotal(totalCpu);
cpu.setSys(cSys);
cpu.setUsed(user);
cpu.setWait(iowait);
cpu.setWait(ioWait);
cpu.setFree(idle);
}
@@ -316,6 +314,7 @@ public class ServerInfo implements java.io.Serializable {
/**
* JDK版本
*/
@Getter
@Schema(description = "JDK版本")
private String version;
@@ -364,10 +363,6 @@ public class ServerInfo implements java.io.Serializable {
return ManagementFactory.getRuntimeMXBean().getVmName();
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
@@ -380,14 +375,12 @@ public class ServerInfo implements java.io.Serializable {
this.home = home;
}
final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_TIME_PATTERN).withZone(ZoneId.systemDefault());
/**
* JDK启动时间
*/
public String getStartTime() {
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return formatter.format(Instant.ofEpochMilli(time));
return DatePattern.NORM_DATETIME_FORMATTER.format(Instant.ofEpochMilli(time));
}
/**

Binary file not shown.

View File

@@ -8,11 +8,16 @@ import cn.hutool.core.util.IdUtil;
import com.mysql.cj.jdbc.MysqlDataSource;
import com.xaaef.molly.auth.jwt.JwtSecurityUtils;
import com.xaaef.molly.common.consts.JwtConst;
import com.xaaef.molly.common.util.ExcelUtils;
import com.xaaef.molly.common.util.JsonUtils;
import com.xaaef.molly.perms.entity.PmsRole;
import liquibase.integration.spring.MultiTenantSpringLiquibase;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.FileSystemResourceLoader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -20,7 +25,6 @@ import java.time.LocalTime;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.xaaef.molly.common.util.IpUtils.getLocalIPS;
@@ -116,7 +120,7 @@ public class NoSpringTests {
.flatMap(Stream::of)
.filter(s -> !JwtConst.LOGIN_URL.equals(s))
.distinct()
.collect(Collectors.toList());
.toList();
String formatJson = JsonUtils.toFormatJson(Map.of(
"data", whiteList,
"time", LocalTime.now()
@@ -125,4 +129,19 @@ public class NoSpringTests {
}
@Test
public void test12() throws IOException {
var treeNodes = List.of(
new PmsRole(1001L, "角色1", 1L, "角色1问问去"),
new PmsRole(1002L, "角色2", 2L, "角色2QBGRBR"),
new PmsRole(1003L, "角色3", 3L, "角色3GRNRY"),
new PmsRole(1004L, "角色4", 4L, "角色4fwef"),
new PmsRole(1005L, "角色5", 5L, "角色5这个人")
);
var entity = ExcelUtils.deviceExport("aa.xlsx", treeNodes);
var file = Files.createFile(Path.of("aa.xlsx")).toFile();
FileUtil.writeFromStream(entity.getBody().getInputStream(), file, true);
}
}

View File

@@ -63,7 +63,7 @@
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu.version}</version>
<version>${qiniu-storage.version}</version>
</dependency>
</dependencies>

View File

@@ -1,5 +1,6 @@
package com.xaaef.molly.system.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xaaef.molly.auth.jwt.JwtSecurityUtils;
@@ -24,7 +25,6 @@ import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -173,21 +173,21 @@ public class SysConfigServiceImpl extends BaseServiceImpl<SysConfigMapper, SysCo
@Override
public LocalDateTime getValueDateTimeByKey(String configKey) {
String str = getValueByKey(configKey);
return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_TIME_PATTERN));
return LocalDateTime.parse(str, DatePattern.NORM_DATETIME_FORMATTER);
}
@Override
public LocalTime getValueTimeByKey(String configKey) {
String str = getValueByKey(configKey);
return LocalTime.parse(str, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_TIME_PATTERN));
return LocalTime.parse(str, DatePattern.NORM_TIME_FORMATTER);
}
@Override
public LocalDate getValueDateByKey(String configKey) {
String str = getValueByKey(configKey);
return LocalDate.parse(str, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_PATTERN));
return LocalDate.parse(str, DatePattern.NORM_DATE_FORMATTER);
}
}

View File

@@ -118,16 +118,17 @@ public class SysTenantServiceImpl extends BaseServiceImpl<SysTenantMapper, SysTe
@Override
public IPage<SysTenant> simplePageKeywords(SearchPO params) {
var wrapper = super.getKeywordsQueryWrapper(
params,
List.of(SysTenant::getTenantId, SysTenant::getName, SysTenant::getLinkman)
);
wrapper.lambda().select(
List.of(SysTenant::getTenantId, SysTenant::getLogo, SysTenant::getName, SysTenant::getLinkman)
);
params,
List.of(SysTenant::getTenantId, SysTenant::getName, SysTenant::getLinkman)
)
.lambda()
.select(List.of(SysTenant::getTenantId, SysTenant::getLogo, SysTenant::getName, SysTenant::getLinkman))
.eq(SysTenant::getStatus, StatusEnum.NORMAL.getCode())
.orderByAsc(SysTenant::getCreateTime);
// 如果当前登录的用户,关联的有租户,
var tenantIds = sysUserService.listHaveTenantIds(getUserId());
if (!tenantIds.isEmpty()) {
wrapper.lambda().in(SysTenant::getTenantId, tenantIds);
wrapper.in(SysTenant::getTenantId, tenantIds);
}
Page<SysTenant> pageRequest = Page.of(params.getPageIndex(), params.getPageSize());
return super.page(pageRequest, wrapper);

View File

@@ -29,7 +29,6 @@ import java.util.stream.Collectors;
import static com.xaaef.molly.auth.enums.OAuth2Error.TOKEN_FORMAT_ERROR;
import static com.xaaef.molly.common.consts.LoginConst.*;
import static com.xaaef.molly.common.util.JsonUtils.DEFAULT_DATE_TIME_PATTERN;
/**
@@ -111,7 +110,7 @@ public class JwtTokenServiceImpl implements JwtTokenService {
removeLoginUser(onlineUserKey);
// 获取当前时间
var milli = LocalDateTimeUtil.format(LocalDateTime.now(), DEFAULT_DATE_TIME_PATTERN);
var milli = LocalDateTimeUtil.formatNormal(LocalDateTime.now());
// 将 被强制挤下线的用户,以及时间,保存到 redis中提示给前端用户
strRedisTemplate.opsForValue().set(

View File

@@ -37,8 +37,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import static com.xaaef.molly.common.util.JsonUtils.DEFAULT_DATE_TIME_PATTERN;
/**
* <p>
@@ -98,7 +96,7 @@ public class UserLoginServiceImpl implements UserLoginService {
}
// 判断租户是否过期
if (LocalDateTime.now().isAfter(currentTenant.getExpired())) {
var format = LocalDateTimeUtil.format(currentTenant.getExpired(), DEFAULT_DATE_TIME_PATTERN);
var format = LocalDateTimeUtil.formatNormal(currentTenant.getExpired());
throw new JwtAuthException(StrUtil.format("租户 {} 已经在 {} 过期了!", currentTenant.getName(), format));
}
// 把表单提交的 username password 封装到 UsernamePasswordAuthenticationToken中

View File

@@ -1,5 +1,6 @@
package com.xaaef.molly.web;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.net.Ipv4Util;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xaaef.molly.common.consts.JwtConst;
@@ -28,7 +29,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;
import java.util.Set;
@@ -82,9 +82,9 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
.distinct()
.collect(Collectors.toList());
var multiTenantProperties = tenantService.getByMultiTenantProperties();
var mtp = tenantService.getByMultiTenantProperties();
// 启用 租户ID 拦截器
if (multiTenantProperties.getEnable()) {
if (mtp.getEnable()) {
registry.addInterceptor(tenantIdInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(whiteList);
@@ -92,7 +92,7 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
}
// 启用 项目ID 拦截器
if (multiTenantProperties.getEnableProject()) {
if (mtp.getEnableProject()) {
registry.addInterceptor(projectIdInterceptor)
.addPathPatterns("/**")
.excludePathPatterns(whiteList);
@@ -146,12 +146,11 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
@Bean
public Formatter<Date> dateFormatter() {
return new Formatter<>() {
@Override
public Date parse(String text, Locale locale) {
Date date = null;
try {
date = DateUtils.parseDate(text, locale, JsonUtils.DEFAULT_DATE_TIME_PATTERN);
date = DateUtils.parseDate(text, locale, DatePattern.NORM_DATETIME_PATTERN);
} catch (Exception e) {
log.error(e.getMessage());
}
@@ -160,7 +159,7 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
@Override
public String print(Date date, Locale locale) {
return DateFormatUtils.format(date, JsonUtils.DEFAULT_DATE_TIME_PATTERN, TimeZone.getDefault(), locale);
return DateFormatUtils.format(date, DatePattern.NORM_DATETIME_PATTERN, TimeZone.getDefault(), locale);
}
};
}
@@ -170,12 +169,12 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
return new Formatter<>() {
@Override
public LocalDate parse(String text, Locale locale) {
return LocalDate.parse(text, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_PATTERN, locale));
return LocalDate.parse(text, DatePattern.NORM_DATE_FORMATTER.withLocale(locale));
}
@Override
public String print(LocalDate object, Locale locale) {
return DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_PATTERN, locale).format(object);
return DatePattern.NORM_DATE_FORMATTER.withLocale(locale).format(object);
}
};
}
@@ -185,12 +184,12 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
return new Formatter<>() {
@Override
public LocalTime parse(String text, Locale locale) {
return LocalTime.parse(text, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_TIME_PATTERN, locale));
return LocalTime.parse(text, DatePattern.NORM_TIME_FORMATTER.withLocale(locale));
}
@Override
public String print(LocalTime object, Locale locale) {
return DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_TIME_PATTERN, locale).format(object);
return DatePattern.NORM_TIME_FORMATTER.withLocale(locale).format(object);
}
};
}
@@ -198,15 +197,14 @@ public class CustomSpringWebConfig implements WebMvcConfigurer {
@Bean
public Formatter<LocalDateTime> localDateTimeFormatter() {
return new Formatter<>() {
@Override
public String print(LocalDateTime localDateTime, Locale locale) {
return DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_TIME_PATTERN, locale).format(localDateTime);
public LocalDateTime parse(String text, Locale locale) {
return LocalDateTime.parse(text, DatePattern.NORM_DATETIME_FORMATTER.withLocale(locale));
}
@Override
public LocalDateTime parse(String text, Locale locale) {
return LocalDateTime.parse(text, DateTimeFormatter.ofPattern(JsonUtils.DEFAULT_DATE_TIME_PATTERN, locale));
public String print(LocalDateTime localDateTime, Locale locale) {
return DatePattern.NORM_DATETIME_FORMATTER.withLocale(locale).format(localDateTime);
}
};
}

View File

@@ -36,16 +36,23 @@
<maven-compiler.version>3.11.0</maven-compiler.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- spring-file-storage -->
<!-- x-file-storage文件上传 文档地址 https://x-file-storage.xuyanwu.cn -->
<storage.version>2.0.0</storage.version>
<qiniu.version>7.14.0</qiniu.version>
<!-- 七牛云文件上传 -->
<qiniu-storage.version>7.14.0</qiniu-storage.version>
<!-- 阿里云文件上传 -->
<aliyun-storage.version>3.17.2</aliyun-storage.version>
<!-- 服务器运行状态查询, 如: CPU、磁盘、内存 -->
<oshi.version>6.4.6</oshi.version>
<hutool.version>5.8.22</hutool.version>
<!-- Excel文件操作 -->
<apache-poi.version>5.2.4</apache-poi.version>
<!-- 小而美的工具库 -->
<hutool.version>5.8.23</hutool.version>
<!-- 简单、方便的OpenAPI接口文档 -->
<knife4j.version>4.3.0</knife4j.version>
<!-- MyBatis 的增强工具,基友搭配,效率翻倍 -->
<mybatis-plus.version>3.5.4.1</mybatis-plus.version>
<!-- JavaEE颠覆者 -->
<spring-boot.version>3.1.5</spring-boot.version>
</properties>
@@ -73,14 +80,14 @@
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>