refactor(scenic): 重构景区相关接口和缓存机制

- 移除 ScenicMapper 接口,将相关方法移至 ScenicRepository
- 修改景区列表查询逻辑,使用 ScenicRepository 的 list 方法
- 优化景区详情获取方式,使用 ScenicRepository 的 getScenicBasic 方法
- 重构缓存机制,增加对景区基本信息的缓存
- 优化 AppScenicService 和 ScenicService接口,使用 ScenicV2DTO 替代 ScenicRespV
This commit is contained in:
2025-08-27 16:37:57 +08:00
parent 21f76ff9c5
commit f2ac6aaea0
20 changed files with 324 additions and 474 deletions

View File

@@ -1,6 +1,11 @@
package com.ycwl.basic.repository;
import com.ycwl.basic.utils.JacksonUtil;
import com.ycwl.basic.facebody.enums.FaceBodyAdapterType;
import com.ycwl.basic.integration.common.util.ConfigValueUtil;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2ListResponse;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import com.ycwl.basic.integration.scenic.service.ScenicIntegrationService;
import com.ycwl.basic.mapper.MpConfigMapper;
import com.ycwl.basic.mapper.MpNotifyConfigMapper;
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
@@ -8,13 +13,10 @@ import com.ycwl.basic.model.pc.mp.MpNotifyConfigEntity;
import com.ycwl.basic.model.pc.mp.ScenicMpNotifyVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.entity.ScenicEntity;
import com.ycwl.basic.integration.scenic.service.ScenicIntegrationService;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import com.ycwl.basic.integration.common.util.ConfigValueUtil;
import com.ycwl.basic.facebody.enums.FaceBodyAdapterType;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.pay.enums.PayAdapterType;
import com.ycwl.basic.storage.enums.StorageType;
import com.ycwl.basic.utils.JacksonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@@ -31,6 +33,7 @@ public class ScenicRepository {
private ScenicIntegrationService scenicIntegrationService;
public static final String SCENIC_CACHE_KEY = "scenic:%s";
public static final String SCENIC_BASIC_CACHE_KEY = "scenic:basic:%s";
public static final String SCENIC_FULL_CACHE_KEY = "scenic:f%s";
public static final String SCENIC_CONFIG_CACHE_KEY = "scenic:%s:config";
public static final String SCENIC_MP_CACHE_KEY = "scenic:%s:mp";
@@ -38,6 +41,30 @@ public class ScenicRepository {
@Autowired
private MpNotifyConfigMapper mpNotifyConfigMapper;
public ScenicV2DTO getScenicBasic(Long id) {
String key = String.format(SCENIC_BASIC_CACHE_KEY, id);
try {
ScenicV2DTO scenicDTO = scenicIntegrationService.getScenic(id);
// 请求成功,写入缓存
if (scenicDTO != null) {
redisTemplate.opsForValue().set(
key,
JacksonUtil.toJSONString(scenicDTO)
);
}
return scenicDTO;
} catch (Exception e) {
// 请求失败,尝试从缓存获取历史成功数据
String cacheKey = key;
if (redisTemplate.hasKey(cacheKey)) {
return JacksonUtil.parseObject(redisTemplate.opsForValue().get(cacheKey), ScenicV2DTO.class);
}
// 缓存也没有,返回null
return null;
}
}
public ScenicEntity getScenic(Long id) {
String key = String.format(SCENIC_CACHE_KEY, id);
try {
@@ -155,8 +182,34 @@ public class ScenicRepository {
return null;
}
public List<ScenicV2DTO> list(ScenicReqQuery scenicReqQuery) {
try {
// 将 ScenicReqQuery 参数转换为 zt-scenic 服务需要的参数
Integer page = scenicReqQuery.getPageNum();
Integer pageSize = scenicReqQuery.getPageSize();
Integer status = null;
if (scenicReqQuery.getStatus() != null) {
status = Integer.valueOf(scenicReqQuery.getStatus());
}
String name = scenicReqQuery.getName();
// 调用 zt-scenic 服务的 list 方法
ScenicV2ListResponse response = scenicIntegrationService.listScenics(page, pageSize, status, name);
// 将 ScenicV2DTO 列表转换为 ScenicEntity 列表
if (response != null && response.getList() != null) {
return response.getList();
}
return new java.util.ArrayList<>();
} catch (Exception e) {
// 如果调用失败,返回空列表
return new java.util.ArrayList<>();
}
}
public void clearCache(Long scenicId) {
redisTemplate.delete(String.format(SCENIC_CACHE_KEY, scenicId));
redisTemplate.delete(String.format(SCENIC_BASIC_CACHE_KEY, scenicId));
redisTemplate.delete(String.format(SCENIC_FULL_CACHE_KEY, scenicId));
redisTemplate.delete(String.format(SCENIC_CONFIG_CACHE_KEY, scenicId));
redisTemplate.delete(String.format(SCENIC_MP_CACHE_KEY, scenicId));
@@ -172,8 +225,6 @@ public class ScenicRepository {
entity.setName(dto.getName());
entity.setMpId(dto.getMpId());
entity.setStatus(dto.getStatus().toString());
entity.setCreateTime(new java.util.Date(dto.getCreateTime()));
entity.setUpdateTime(new java.util.Date(dto.getUpdateTime()));
return entity;
}
@@ -186,8 +237,6 @@ public class ScenicRepository {
entity.setName(dto.getName());
entity.setMpId(dto.getMpId());
entity.setStatus(dto.getStatus().toString());
entity.setCreateTime(new java.util.Date(dto.getCreateTime()));
entity.setUpdateTime(new java.util.Date(dto.getUpdateTime()));
if (dto.getConfig() != null) {
entity.setAddress(ConfigValueUtil.getStringValue(dto.getConfig(), "address"));
entity.setArea(ConfigValueUtil.getStringValue(dto.getConfig(), "area"));