mirror of
https://github.com/thousmile/molly-multi-tenant.git
synced 2025-12-30 04:32:26 +00:00
1.移除JsonUtils中日期格式化 2.添加Excel工具类 3.升级部分库!
This commit is contained in:
8
.gitignore
vendored
8
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
/*
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
BIN
server/molly-service/aa.xlsx
Normal file
BIN
server/molly-service/aa.xlsx
Normal file
Binary file not shown.
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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中
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user