You've already forked FrameTour-BE
refactor(integration): 重构配置管理功能
- 新增通用 ConfigManager 类,实现配置管理的通用功能 - 新增 DeviceConfigManager 和 ScenicConfigManager 类,分别实现设备和景区的配置管理- 更新相关控制器和服务,使用新的配置管理器类 -调整设备和景区的配置数据结构,以适应新的管理方式
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package com.ycwl.basic.repository;
|
||||
|
||||
import com.ycwl.basic.integration.device.service.DeviceConfigIntegrationService;
|
||||
import com.ycwl.basic.integration.device.dto.config.DeviceConfigV2DTO;
|
||||
import com.ycwl.basic.utils.JacksonUtil;
|
||||
import com.ycwl.basic.mapper.DeviceMapper;
|
||||
import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
|
||||
@@ -7,6 +9,7 @@ import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
|
||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||
import com.ycwl.basic.integration.device.service.DeviceIntegrationService;
|
||||
import com.ycwl.basic.integration.device.dto.device.DeviceV2DTO;
|
||||
import com.ycwl.basic.integration.common.manager.DeviceConfigManager;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -31,6 +34,9 @@ public class DeviceRepository {
|
||||
public static final String DEVICE_ONLINE_CACHE_KEY = "device:online_status:%s";
|
||||
public static final String DEVICE_CACHE_KEY = "device:%s";
|
||||
public static final String DEVICE_CONFIG_CACHE_KEY = "device:%s:config";
|
||||
public static final String DEVICE_CONFIG_MANAGER_CACHE_KEY = "device:%s:config:manager";
|
||||
@Autowired
|
||||
private DeviceConfigIntegrationService deviceConfigIntegrationService;
|
||||
|
||||
/**
|
||||
* 将DeviceV2DTO转换为DeviceEntity
|
||||
@@ -71,18 +77,41 @@ public class DeviceRepository {
|
||||
}
|
||||
|
||||
public DeviceConfigEntity getDeviceConfig(Long deviceId) {
|
||||
if (redisTemplate.hasKey(String.format(DEVICE_CONFIG_CACHE_KEY, deviceId))) {
|
||||
return JacksonUtil.parseObject(redisTemplate.opsForValue().get(String.format(DEVICE_CONFIG_CACHE_KEY, deviceId)), DeviceConfigEntity.class);
|
||||
List<DeviceConfigV2DTO> configList = deviceConfigIntegrationService.getDeviceConfigs(deviceId);
|
||||
if (configList != null && !configList.isEmpty()) {
|
||||
return convertToDeviceConfigEntity(configList, deviceId);
|
||||
}
|
||||
DeviceConfigEntity deviceConfig = deviceMapper.getConfigByDeviceId(deviceId);
|
||||
if (null == deviceConfig) {
|
||||
deviceConfig = new DeviceConfigEntity();
|
||||
deviceConfig.setId(SnowFlakeUtil.getLongId());
|
||||
deviceConfig.setDeviceId(deviceId);
|
||||
deviceMapper.addConfig(deviceConfig);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备配置管理器
|
||||
*
|
||||
* @param deviceId 设备ID
|
||||
* @return DeviceConfigManager实例,如果获取失败返回null
|
||||
*/
|
||||
public DeviceConfigManager getDeviceConfigManager(Long deviceId) {
|
||||
try {
|
||||
List<DeviceConfigV2DTO> configList = deviceConfigIntegrationService.getDeviceConfigs(deviceId);
|
||||
return new DeviceConfigManager(configList);
|
||||
} catch (Exception e) {
|
||||
log.warn("获取设备配置管理器失败, deviceId: {}", deviceId, e);
|
||||
return null;
|
||||
}
|
||||
redisTemplate.opsForValue().set(String.format(DEVICE_CONFIG_CACHE_KEY, deviceId), JacksonUtil.toJSONString(deviceConfig), 3, TimeUnit.DAYS);
|
||||
return deviceConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将DeviceConfigV2DTO列表转换为DeviceConfigEntity(为了兼容性)
|
||||
*/
|
||||
private DeviceConfigEntity convertToDeviceConfigEntity(List<DeviceConfigV2DTO> configList, Long deviceId) {
|
||||
DeviceConfigEntity entity = new DeviceConfigEntity();
|
||||
entity.setId(SnowFlakeUtil.getLongId());
|
||||
entity.setDeviceId(deviceId);
|
||||
|
||||
// 由于DeviceConfigEntity没有通用的configJson字段,这里只设置基本信息
|
||||
// 具体的配置项需要通过DeviceConfigManager来访问
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
public boolean clearDeviceCache(String deviceNo) {
|
||||
@@ -106,9 +135,11 @@ public class DeviceRepository {
|
||||
DeviceEntity device = getDevice(deviceId);
|
||||
redisTemplate.delete(String.format(DEVICE_CACHE_KEY, device.getNo()));
|
||||
redisTemplate.delete(String.format(DEVICE_CONFIG_CACHE_KEY, device.getNo()));
|
||||
redisTemplate.delete(String.format(DEVICE_CONFIG_MANAGER_CACHE_KEY, device.getNo()));
|
||||
}
|
||||
redisTemplate.delete(String.format(DEVICE_CACHE_KEY, deviceId));
|
||||
redisTemplate.delete(String.format(DEVICE_CONFIG_CACHE_KEY, deviceId));
|
||||
redisTemplate.delete(String.format(DEVICE_CONFIG_MANAGER_CACHE_KEY, deviceId));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -19,13 +19,12 @@ 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 com.ycwl.basic.integration.common.manager.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 {
|
||||
|
Reference in New Issue
Block a user