You've already forked FrameTour-BE
feat(scenic): 添加景区配置管理器并集成缓存支持
- 新增 ScenicConfigManager 类,用于管理和获取景区配置 - 在 ScenicRepository 中添加获取景区配置管理器的方法 - 实现了带缓存支持的景区配置获取,提高性能
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user