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

@@ -34,14 +34,14 @@ public class AbstractCtx {
private Map<Class<?>, Object> cachedBeans = new HashMap<>();
public <T> T getBean(Class<T> requiredType) throws BeansException {
return SpringApp.getBean(requiredType);
return getCachedBean(requiredType);
}
@SuppressWarnings("unchecked")
public <T> T getCachedBean(Class<T> requiredType) throws BeansException {
Object object = cachedBeans.get(requiredType);
if (object == null) {
object = getBean(requiredType);
object = SpringApp.getBean(requiredType);
cachedBeans.put(requiredType, object);
}
return (T) object;
@@ -60,7 +60,7 @@ public class AbstractCtx {
}
public boolean updateText(Supplier<String> getter, Consumer<String> setter, String text, MessageHolder holder,
String topic) {
String topic) {
if (!Objects.equals(getter.get(), text)) {
setter.accept(text);
holder.info(topic + "修改为: " + text);
@@ -70,7 +70,7 @@ public class AbstractCtx {
}
public boolean updateAppendText(Supplier<String> getter, Consumer<String> setter, String text, MessageHolder holder,
String topic) {
String topic) {
if (StringUtils.hasText(text)) {
String str = MyStringUtils.appendIfAbsent(getter.get(), text);
if (!Objects.equals(getter.get(), str)) {
@@ -83,7 +83,7 @@ public class AbstractCtx {
}
public boolean updateLocalDate(Supplier<LocalDate> getter, Consumer<LocalDate> setter, java.sql.Date date,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
if (date != null) {
return updateLocalDate(getter, setter, date.toLocalDate(), holder, topic);
}
@@ -91,12 +91,12 @@ public class AbstractCtx {
}
public boolean updateLocalDate(Supplier<LocalDate> getter, Consumer<LocalDate> setter, LocalDate date,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
return updateLocalDate(getter, setter, date, holder, topic, false);
}
public boolean updateLocalDate(Supplier<LocalDate> getter, Consumer<LocalDate> setter, LocalDate date,
MessageHolder holder, String topic, boolean allowNull) {
MessageHolder holder, String topic, boolean allowNull) {
if (date == null && !allowNull) {
return false;
}
@@ -109,7 +109,7 @@ public class AbstractCtx {
}
public boolean updateLocalDate(Supplier<LocalDate> getter, Consumer<LocalDate> setter, String strDate,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
LocalDate date = null;
if (StringUtils.hasText(strDate)) {
try {
@@ -122,7 +122,7 @@ public class AbstractCtx {
}
public boolean updateLocalDate(Supplier<LocalDate> getter, Consumer<LocalDate> setter, Timestamp timestamp,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
LocalDate date = null;
if (timestamp != null) {
@@ -136,7 +136,7 @@ public class AbstractCtx {
}
public boolean updateLocalDateTime(Supplier<LocalDateTime> getter, Consumer<LocalDateTime> setter,
Timestamp timestamp, MessageHolder holder, String topic) {
Timestamp timestamp, MessageHolder holder, String topic) {
LocalDateTime dateTime = null;
if (timestamp != null) {
@@ -152,7 +152,7 @@ public class AbstractCtx {
}
public boolean updateLocalDateTime(Supplier<LocalDateTime> getter, Consumer<LocalDateTime> setter,
LocalDateTime dateTime, MessageHolder holder, String topic) {
LocalDateTime dateTime, MessageHolder holder, String topic) {
if (!Objects.equals(getter.get(), dateTime)) {
setter.accept(dateTime);
holder.info(topic + "修改为: " + dateTime);
@@ -162,7 +162,7 @@ public class AbstractCtx {
}
public boolean updateInstant(Supplier<Instant> getter, Consumer<Instant> setter, Instant instant,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
if (!Objects.equals(getter.get(), instant)) {
setter.accept(instant);
holder.info(topic + "修改为: " + instant);
@@ -172,13 +172,13 @@ public class AbstractCtx {
}
public boolean updateNumber(Supplier<Double> getter, Consumer<Double> setter, BigDecimal value,
MessageHolder holder, String topic) {
MessageHolder holder, String topic) {
double val = value.doubleValue();
return updateNumber(getter, setter, val, holder, topic);
}
public boolean updateNumber(Supplier<Double> getter, Consumer<Double> setter, double value, MessageHolder holder,
String topic) {
String topic) {
if (getter.get() == null || !NumberUtils.equals(getter.get(), value)) {
setter.accept(value);
holder.info(topic + "修改为: " + value);
@@ -188,7 +188,7 @@ public class AbstractCtx {
}
public boolean updateNumber(Supplier<Float> getter, Consumer<Float> setter, float value, MessageHolder holder,
String topic) {
String topic) {
if (getter.get() == null || !NumberUtils.equals(getter.get(), value)) {
setter.accept(value);
holder.info(topic + "修改为: " + value);
@@ -198,7 +198,7 @@ public class AbstractCtx {
}
public boolean updateNumber(Supplier<Integer> getter, Consumer<Integer> setter, Integer value, MessageHolder holder,
String topic) {
String topic) {
if (getter.get() == null || !NumberUtils.equals(getter.get(), value)) {
setter.accept(value);
holder.info(topic + "修改为: " + value);

View File

@@ -39,9 +39,8 @@ public class CloudRkSyncTask extends Tasker<Object> {
try {
cloudRkCtx = new CloudRkCtx();
service = SpringApp.getBean(CloudRkService.class);
cloudRkCtx.setCloudRkService(service);
} catch (BeansException e) {
holder.error("没有找到 " + CloudServiceConstant.RK_NAME + " 服务");
holder.error(CloudServiceConstant.RK_NAME + " 服务未启用");
return null;
}

View File

@@ -1,4 +1,12 @@
package com.ecep.contract.cloud.rk.ctx;
import com.ecep.contract.cloud.rk.CloudRkService;
import org.springframework.beans.BeansException;
public interface CloudRkContext {
<T> T getBean(Class<T> requiredType) throws BeansException;
default CloudRkService getCloudRkService() {
return getBean(CloudRkService.class);
}
}

View File

@@ -1,7 +1,5 @@
package com.ecep.contract.cloud.rk.ctx;
import static com.ecep.contract.SpringApp.getBean;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
@@ -31,13 +29,11 @@ import org.springframework.util.StringUtils;
import com.ecep.contract.BlackReasonType;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.SpringApp;
import com.ecep.contract.cloud.AbstractCtx;
import com.ecep.contract.cloud.rk.CloudRkService;
import com.ecep.contract.ds.company.service.CompanyBlackReasonService;
import com.ecep.contract.ds.company.service.CompanyContactService;
import com.ecep.contract.ds.company.service.CompanyOldNameService;
import com.ecep.contract.ds.company.service.CompanyService;
import com.ecep.contract.model.CloudRk;
import com.ecep.contract.model.Company;
import com.ecep.contract.model.CompanyBlackReason;
@@ -50,46 +46,16 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Setter;
public class CloudRkCtx extends AbstractCtx {
public class CloudRkCtx extends AbstractCtx implements CloudRkContext {
private static final Logger logger = LoggerFactory.getLogger(CloudRkCtx.class);
@Setter
private CloudRkService cloudRkService;
@Setter
private CompanyService companyService;
@Setter
private CompanyBlackReasonService companyBlackReasonService;
@Setter
private ObjectMapper objectMapper;
private Proxy socksProxy;
public CloudRkService getCloudRkService() {
if (cloudRkService == null) {
cloudRkService = getBean(CloudRkService.class);
}
return cloudRkService;
}
public CompanyService getCompanyService() {
if (companyService == null) {
companyService = getBean(CompanyService.class);
}
return companyService;
}
CompanyBlackReasonService getCompanyBlackReasonService() {
if (companyBlackReasonService == null) {
companyBlackReasonService = getBean(CompanyBlackReasonService.class);
}
return companyBlackReasonService;
return getCachedBean(CompanyBlackReasonService.class);
}
ObjectMapper getObjectMapper() {
if (objectMapper == null) {
objectMapper = getBean(ObjectMapper.class);
}
return objectMapper;
return getCachedBean(ObjectMapper.class);
}
Proxy getSocksProxy() {
@@ -150,7 +116,11 @@ public class CloudRkCtx extends AbstractCtx {
} catch (Exception e) {
// 异常
logger.error("使用评分接口更新企业资信评价等级时发生错误", e);
cloudRk.setDescription("评分接口错误:" + e.getMessage());
String message = "评分接口错误:" + e.getMessage();
if (message.length() > 50) {
message = message.substring(0, 50);
}
cloudRk.setDescription(message);
}
return updated;
}
@@ -172,11 +142,12 @@ public class CloudRkCtx extends AbstractCtx {
}
}
CompanyBlackReasonService companyBlackReasonService = getCompanyBlackReasonService();
String api = getConfService().getString(CloudRkService.KEY_BLACK_LIST_URL);
List<String> companyNames = getCompanyService().getAllNames(company);
List<CompanyBlackReason> reasonList = new ArrayList<>();
List<CompanyBlackReason> dbReasons = getCompanyBlackReasonService().findAllByCompany(company);
List<CompanyBlackReason> dbReasons = companyBlackReasonService.findAllByCompany(company);
for (String name : companyNames) {
String url = api + URLEncoder.encode(name, StandardCharsets.UTF_8);
try {
@@ -195,7 +166,7 @@ public class CloudRkCtx extends AbstractCtx {
}
for (CompanyBlackReason companyBlackReason : reasonList) {
getCompanyBlackReasonService().save(companyBlackReason);
companyBlackReasonService.save(companyBlackReason);
}
cloudRk.setCloudBlackListUpdated(LocalDateTime.now());
return true;
@@ -634,14 +605,15 @@ public class CloudRkCtx extends AbstractCtx {
return modified;
}
public boolean updateLocalDateTime(Supplier<LocalDateTime> getter, Consumer<LocalDateTime> setter, JsonNode data,String field,
public boolean updateLocalDateTime(Supplier<LocalDateTime> getter, Consumer<LocalDateTime> setter, JsonNode data,
String field,
MessageHolder holder, String topic) {
JsonNode node = data.get(field);
JsonNode node = data.get(field);
if (node == null || node.isNull()) {
return false;
}
LocalDateTime updated = getObjectMapper().convertValue(node, LocalDateTime.class);
updateLocalDateTime(getter, setter, updated, holder, topic);
LocalDateTime updated = getObjectMapper().convertValue(node, LocalDateTime.class);
updateLocalDateTime(getter, setter, updated, holder, topic);
return false;
}
@@ -654,7 +626,7 @@ public class CloudRkCtx extends AbstractCtx {
return;
}
CompanyContactService contactService = SpringApp.getBean(CompanyContactService.class);
CompanyContactService contactService = getCachedBean(CompanyContactService.class);
List<CompanyContact> contactList = contactService.findAllByCompanyAndName(company, legalRepresentative);
if (contactList == null) {
// db error
@@ -746,7 +718,7 @@ public class CloudRkCtx extends AbstractCtx {
historyNames.add(trimmed);
}
}
CompanyOldNameService service = SpringApp.getBean(CompanyOldNameService.class);
CompanyOldNameService service = getCachedBean(CompanyOldNameService.class);
List<CompanyOldName> oldNames = service.findAllByCompany(company);
for (CompanyOldName oldName : oldNames) {
// 已经存在的移除

View File

@@ -6,10 +6,9 @@ import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
import java.util.stream.Stream;
import com.ecep.contract.service.WebSocketServerTasker;
import com.ecep.contract.service.tasker.WebSocketServerTasker;
import com.fasterxml.jackson.databind.JsonNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -47,10 +47,6 @@ public class AbstractYongYouU8Ctx extends AbstractCtx {
}
}
public CompanyService getCompanyService() {
return getCachedBean(CompanyService.class);
}
public CompanyCustomerService getCompanyCustomerService() {
return getCachedBean(CompanyCustomerService.class);
}

View File

@@ -6,6 +6,7 @@ import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
import com.ecep.contract.ds.company.CompanyContext;
import org.springframework.util.StringUtils;
import com.ecep.contract.MessageHolder;
@@ -18,17 +19,7 @@ import com.ecep.contract.model.CompanyOldName;
import lombok.Setter;
public class CompanyCtx extends AbstractYongYouU8Ctx {
@Setter
private CompanyOldNameService companyOldNameService;
CompanyOldNameService getCompanyOldNameService() {
if (companyOldNameService == null) {
companyOldNameService = getBean(CompanyOldNameService.class);
}
return companyOldNameService;
}
public class CompanyCtx extends AbstractYongYouU8Ctx implements CompanyContext {
public boolean updateCompanyNameIfAbsent(Company company, String name, MessageHolder holder) {
if (!StringUtils.hasText(name)) {
return false;
@@ -110,7 +101,7 @@ public class CompanyCtx extends AbstractYongYouU8Ctx {
return null;
}
CompanyService companyService = getCompanyService();
String autoCreateAfter = getConfService().getString(CloudYuConstant.KEY_AUTO_CREATE_COMPANY_AFTER);
String autoCreateAfter = getConfService().getString(CloudYuConstant.KEY_AUTO_CREATE_COMPANY_AFTER);
// 当配置存在,且开发时间小于指定时间,不创建
if (StringUtils.hasText(autoCreateAfter)) {
LocalDate miniDate = LocalDate.parse(autoCreateAfter);