feat(scenic): 添加景区配置管理器并集成缓存支持

- 新增 ScenicConfigManager 类,用于管理和获取景区配置
- 在 ScenicRepository 中添加获取景区配置管理器的方法
- 实现了带缓存支持的景区配置获取,提高性能
This commit is contained in:
2025-08-28 09:52:43 +08:00
parent ff320ba3e8
commit 95d8b742ee
2 changed files with 443 additions and 0 deletions

View File

@@ -6,6 +6,8 @@ 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.integration.scenic.service.ScenicConfigIntegrationService;
import com.ycwl.basic.integration.scenic.dto.config.ScenicConfigV2DTO;
import com.ycwl.basic.mapper.MpConfigMapper;
import com.ycwl.basic.mapper.MpNotifyConfigMapper;
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
@@ -17,11 +19,13 @@ 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 com.ycwl.basic.util.ScenicConfigManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
public class ScenicRepository {
@@ -31,6 +35,8 @@ public class ScenicRepository {
private RedisTemplate<String, String> redisTemplate;
@Autowired
private ScenicIntegrationService scenicIntegrationService;
@Autowired
private ScenicConfigIntegrationService scenicConfigIntegrationService;
public static final String SCENIC_CACHE_KEY = "scenic:%s";
public static final String SCENIC_BASIC_CACHE_KEY = "scenic:basic:%s";
@@ -307,5 +313,66 @@ public class ScenicRepository {
return entity;
}
/**
* 获取景区配置管理器
*
* @param scenicId 景区ID
* @return ScenicConfigManager实例,如果获取失败返回null
*/
public ScenicConfigManager getScenicConfigManager(Long scenicId) {
try {
List<ScenicConfigV2DTO> configList = scenicConfigIntegrationService.listConfigs(scenicId);
if (configList != null) {
return new ScenicConfigManager(configList);
}
return null;
} catch (Exception e) {
return null;
}
}
/**
* 获取景区配置管理器,带缓存支持
*
* @param scenicId 景区ID
* @return ScenicConfigManager实例,如果获取失败返回null
*/
public ScenicConfigManager getScenicConfigManagerWithCache(Long scenicId) {
String key = String.format(SCENIC_CONFIG_CACHE_KEY + ":manager", scenicId);
try {
List<com.ycwl.basic.integration.scenic.dto.config.ScenicConfigV2DTO> configList =
scenicConfigIntegrationService.listConfigs(scenicId);
if (configList != null) {
ScenicConfigManager manager = new ScenicConfigManager(configList);
// 请求成功,写入缓存(将配置列表序列化存储)
redisTemplate.opsForValue().set(
key,
JacksonUtil.toJSONString(configList)
);
return manager;
}
return null;
} catch (Exception e) {
// 请求失败,尝试从缓存获取历史成功数据
if (redisTemplate.hasKey(key)) {
try {
String cachedConfigJson = redisTemplate.opsForValue().get(key);
@SuppressWarnings("unchecked")
List<ScenicConfigV2DTO> cachedConfigList =
JacksonUtil.parseArray(cachedConfigJson, ScenicConfigV2DTO.class);
return new ScenicConfigManager(cachedConfigList);
} catch (Exception cacheException) {
// 缓存解析失败,返回null
return null;
}
}
// 缓存也没有,返回null
return null;
}
}
}