refactor(service): 修改IEntityService泛型为VO类型并优化缓存策略

重构所有注解@CacheConfig的Service类,将IEntityService泛型从实体类改为VO类
实现实体与VO之间的转换逻辑,使用VO替代实体进行缓存以避免序列化问题
更新相关依赖组件和测试用例,确保功能完整性和系统兼容性
优化Redis缓存配置,清理旧缓存数据并验证新缓存策略有效性
This commit is contained in:
2025-09-28 18:19:00 +08:00
parent df6188db40
commit b03b5385a5
75 changed files with 3144 additions and 1377 deletions

View File

@@ -0,0 +1,64 @@
package com.ecep.contract.config;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
/**
* 自定义LocalDateTime反序列化器支持多种格式
*/
class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
private final List<DateTimeFormatter> formatters;
public CustomLocalDateTimeDeserializer() {
super(LocalDateTime.class);
// 支持多种日期时间格式
this.formatters = new ArrayList<>();
// ISO标准格式
this.formatters.add(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
// 项目默认格式 yyyy-MM-dd HH:mm:ss
this.formatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 其他可能的格式
this.formatters.add(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
this.formatters.add(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
this.formatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"));
this.formatters.add(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
}
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String value = p.getText().trim();
if (value == null || value.isEmpty()) {
return null;
}
// 尝试使用各种格式解析
for (DateTimeFormatter formatter : formatters) {
try {
return LocalDateTime.parse(value, formatter);
} catch (Exception e) {
// 尝试下一种格式
continue;
}
}
// 如果所有格式都失败尝试使用ISO_INSTANT格式可能是时间戳字符串
try {
return LocalDateTime.ofInstant(Instant.parse(value), ZoneId.systemDefault());
} catch (Exception e) {
// 仍然失败,抛出异常
throw new JsonParseException(p, "无法解析为LocalDateTime: " + value);
}
}
}