Compare commits

...

4 Commits

Author SHA1 Message Date
e8c645a3c0 refactor(device): 移除设备与景区的冗余配置接口
Some checks failed
ZhenTu-BE/pipeline/head There was a failure building this commit
- 删除 DeviceV2Controller 中的设备配置相关接口
- 删除 ScenicV2Controller 中的景区配置相关接口
- 移除 DeviceConfigV2Client 中的扁平化配置接口
- 移除 DeviceV2Client 中的设备详情配置接口
- 更新 DeviceIntegrationExample 示例代码
- 移除 DeviceIntegrationFallbackExample 中的配置缓存示例
- 删除 DeviceConfigIntegrationService 中的配置获取方法
- 删除 DeviceIntegrationService 中的设备配置服务方法- 移除 RenderWorkerV2Client 中的工作器配置接口- 删除 RenderWorkerConfigIntegrationService 中的配置键名- 移除 RenderWorkerIntegrationService 中的工作器配置方法
- 删除 ScenicConfigV2Client 中的扁平化配置接口
- 移除 ScenicV2Client 中的景区配置接口
- 更新 ScenicIntegrationExample 示例代码
- 删除 ScenicConfigIntegrationService 中的配置获取方法
- 删除 ScenicIntegrationService 中的景区配置服务方法
- 修改 ScenicRepository 中景区实体获取逻辑
2025-10-10 23:55:17 +08:00
fe8068b3d9 refactor(scenic): 重构景区配置响应结构
- 移除了过时的配置字段,如预约流程、强制完成时间等
- 调整了字段顺序并添加分类注释(基础配置、功能开关、提示文案)
-保留并优化核心配置项,如水印URL、防录屏类型等
- 清理了未使用的导入包和冗余代码
- 统一了优惠券开关字段,移除重复定义
2025-10-10 13:46:59 +08:00
c689496130 feat(scenic): 添加分享功能配置项
- 在ScenicConfigResp中新增shareEnable字段
- 在AppScenicController中设置shareEnable默认值为true
- 支持景区配置是否开启分享功能
- 保持与shareBeforeBuy配置项的一致性处理
2025-10-10 10:38:47 +08:00
7e16ad35e7 feat(app): 新增分享前购买配置项
- 在AppScenicController中增加shareBeforeBuy配置项- 默认值设置为true以启用该功能- 更新响应对象以支持新的配置选项
2025-10-10 09:26:42 +08:00
19 changed files with 87 additions and 482 deletions

View File

@@ -72,27 +72,14 @@ public class AppScenicController {
public ApiResponse<ScenicConfigResp> getConfig(@PathVariable Long id){ public ApiResponse<ScenicConfigResp> getConfig(@PathVariable Long id){
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(id); ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(id);
ScenicConfigResp resp = new ScenicConfigResp(); ScenicConfigResp resp = new ScenicConfigResp();
resp.setBookRoutine(scenicConfig.getInteger("book_routine"));
resp.setForceFinishTime(scenicConfig.getInteger("force_finish_time"));
resp.setTourTime(scenicConfig.getInteger("tour_time"));
resp.setSampleStoreDay(scenicConfig.getInteger("sample_store_day"));
resp.setFaceStoreDay(scenicConfig.getInteger("face_store_day"));
resp.setVideoStoreDay(scenicConfig.getInteger("video_store_day"));
resp.setAllFree(scenicConfig.getBoolean("all_free"));
resp.setDisableSourceVideo(scenicConfig.getBoolean("disable_source_video"));
resp.setDisableSourceImage(scenicConfig.getBoolean("disable_source_image"));
resp.setAntiScreenRecordType(scenicConfig.getInteger("anti_screen_record_type"));
resp.setVideoSourceStoreDay(scenicConfig.getInteger("video_source_store_day"));
resp.setImageSourceStoreDay(scenicConfig.getInteger("image_source_store_day"));
resp.setUserSourceExpireDay(scenicConfig.getInteger("user_source_expire_day"));
resp.setBrokerDirectRate(scenicConfig.getBigDecimal("broker_direct_rate"));
resp.setVideoSourcePackHint(scenicConfig.getString("video_source_pack_hint"));
resp.setImageSourcePackHint(scenicConfig.getString("image_source_pack_hint"));
resp.setVoucherEnable(scenicConfig.getBoolean("voucher_enable", false));
resp.setEnableVoucher(scenicConfig.getBoolean("voucher_enable", false)); // compactible
resp.setGroupingEnable(scenicConfig.getBoolean("grouping_enable", false));
resp.setShowPhotoWhenWaiting(scenicConfig.getBoolean("show_photo_when_waiting", false));
resp.setWatermarkUrl(scenicConfig.getString("watermark_url")); resp.setWatermarkUrl(scenicConfig.getString("watermark_url"));
resp.setVideoStoreDay(scenicConfig.getInteger("video_store_day"));
resp.setAntiScreenRecordType(scenicConfig.getInteger("anti_screen_record_type"));
resp.setGroupingEnable(scenicConfig.getBoolean("grouping_enable", false));
resp.setVoucherEnable(scenicConfig.getBoolean("voucher_enable", false));
resp.setShowPhotoWhenWaiting(scenicConfig.getBoolean("show_photo_when_waiting", false));
resp.setImageSourcePackHint(scenicConfig.getString("image_source_pack_hint"));
resp.setVideoSourcePackHint(scenicConfig.getString("video_source_pack_hint"));
return ApiResponse.success(resp); return ApiResponse.success(resp);
} }

View File

@@ -63,34 +63,6 @@ public class DeviceV2Controller {
} }
} }
/**
* 设备V2带配置信息分页列表
*/
@GetMapping("/with-config")
public ApiResponse<PageResponse<DeviceV2WithConfigDTO>> listDevicesWithConfig(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String name,
@RequestParam(required = false) String no,
@RequestParam(required = false) String type,
@RequestParam(required = false) Integer isActive,
@RequestParam(required = false) Long scenicId) {
log.info("分页查询设备带配置信息列表, page: {}, pageSize: {}, name: {}, no: {}, type: {}, isActive: {}, scenicId: {}",
page, pageSize, name, no, type, isActive, scenicId);
// 参数验证:限制pageSize最大值为100
if (pageSize > 100) {
pageSize = 100;
}
try {
PageResponse<DeviceV2WithConfigDTO> response = deviceIntegrationService.listDevicesWithConfig(page, pageSize, name, no, type, isActive, scenicId);
return ApiResponse.success(response);
} catch (Exception e) {
log.error("分页查询设备带配置信息列表失败", e);
return ApiResponse.fail("分页查询设备带配置信息列表失败: " + e.getMessage());
}
}
/** /**
* 根据ID获取设备信息 * 根据ID获取设备信息
*/ */
@@ -105,20 +77,6 @@ public class DeviceV2Controller {
} }
} }
/**
* 根据ID获取设备带配置信息
*/
@GetMapping("/{id}/with-config")
public ApiResponse<DeviceV2WithConfigDTO> getDeviceWithConfig(@PathVariable Long id) {
try {
DeviceV2WithConfigDTO device = deviceIntegrationService.getDeviceWithConfig(id);
return ApiResponse.success(device);
} catch (Exception e) {
log.error("获取设备配置信息失败, id: {}", id, e);
return ApiResponse.fail("获取设备配置信息失败: " + e.getMessage());
}
}
/** /**
* 根据设备编号获取设备信息 * 根据设备编号获取设备信息
*/ */
@@ -133,20 +91,6 @@ public class DeviceV2Controller {
} }
} }
/**
* 根据设备编号获取设备带配置信息
*/
@GetMapping("/no/{no}/with-config")
public ApiResponse<DeviceV2WithConfigDTO> getDeviceWithConfigByNo(@PathVariable String no) {
try {
DeviceV2WithConfigDTO device = deviceIntegrationService.getDeviceWithConfigByNo(no);
return ApiResponse.success(device);
} catch (Exception e) {
log.error("根据设备编号获取设备配置信息失败, no: {}", no, e);
return ApiResponse.fail("根据设备编号获取设备配置信息失败: " + e.getMessage());
}
}
/** /**
* 根据设备ID获取设备在线状态 * 根据设备ID获取设备在线状态
*/ */
@@ -327,20 +271,6 @@ public class DeviceV2Controller {
} }
} }
/**
* 获取设备扁平化配置
*/
@GetMapping("/{id}/flat-config")
public ApiResponse<Map<String, Object>> getDeviceFlatConfig(@PathVariable Long id) {
try {
Map<String, Object> config = deviceConfigIntegrationService.getDeviceFlatConfig(id);
return ApiResponse.success(config);
} catch (Exception e) {
log.error("获取设备扁平化配置失败, deviceId: {}", id, e);
return ApiResponse.fail("获取设备扁平化配置失败: " + e.getMessage());
}
}
/** /**
* 根据配置键获取配置 * 根据配置键获取配置
*/ */
@@ -371,21 +301,6 @@ public class DeviceV2Controller {
} }
} }
/**
* 根据设备编号获取扁平化配置
*/
@GetMapping("/no/{no}/flat-config")
public ApiResponse<Map<String, Object>> getDeviceFlatConfigByNo(@PathVariable String no) {
log.info("根据设备编号获取扁平化配置, deviceNo: {}", no);
try {
Map<String, Object> config = deviceConfigIntegrationService.getDeviceFlatConfigByNo(no);
return ApiResponse.success(config);
} catch (Exception e) {
log.error("根据设备编号获取扁平化配置失败, deviceNo: {}", no, e);
return ApiResponse.fail("根据设备编号获取扁平化配置失败: " + e.getMessage());
}
}
/** /**
* 创建设备配置 * 创建设备配置
*/ */

View File

@@ -71,30 +71,6 @@ public class ScenicV2Controller {
} }
} }
/**
* 景区V2带配置信息分页列表
*/
@GetMapping("/with-config")
public ApiResponse<PageResponse<ScenicV2WithConfigDTO>> listScenicsWithConfig(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) String name) {
log.info("分页查询景区带配置信息列表, page: {}, pageSize: {}, status: {}, name: {}", page, pageSize, status, name);
// 参数验证:限制pageSize最大值为100
if (pageSize > 100) {
pageSize = 100;
}
try {
PageResponse<ScenicV2WithConfigDTO> response = scenicIntegrationService.listScenicsWithConfig(page, pageSize, status, name);
return ApiResponse.success(response);
} catch (Exception e) {
log.error("分页查询景区带配置信息列表失败", e);
return ApiResponse.fail("分页查询景区带配置信息列表失败: " + e.getMessage());
}
}
/** /**
* 查询单个景区详情 * 查询单个景区详情
*/ */
@@ -192,36 +168,6 @@ public class ScenicV2Controller {
// ========== 景区配置管理 ========== // ========== 景区配置管理 ==========
/**
* 获取景区及其配置信息
*/
@GetMapping("/{scenicId}/with-config")
public ApiResponse<ScenicV2WithConfigDTO> getScenicWithConfig(@PathVariable Long scenicId) {
log.info("获取景区配置信息, scenicId: {}", scenicId);
try {
ScenicV2WithConfigDTO scenic = scenicIntegrationService.getScenicWithConfig(scenicId);
return ApiResponse.success(scenic);
} catch (Exception e) {
log.error("获取景区配置信息失败, scenicId: {}", scenicId, e);
return ApiResponse.fail("获取景区配置信息失败: " + e.getMessage());
}
}
/**
* 获取景区扁平化配置
*/
@GetMapping("/{scenicId}/flat-config")
public ApiResponse<Map<String, Object>> getScenicFlatConfig(@PathVariable Long scenicId) {
log.info("获取景区扁平化配置, scenicId: {}", scenicId);
try {
Map<String, Object> config = scenicIntegrationService.getScenicFlatConfig(scenicId);
return ApiResponse.success(config);
} catch (Exception e) {
log.error("获取景区扁平化配置失败, scenicId: {}", scenicId, e);
return ApiResponse.fail("获取景区扁平化配置失败: " + e.getMessage());
}
}
/** /**
* 获取景区配置列表 * 获取景区配置列表
*/ */
@@ -316,20 +262,4 @@ public class ScenicV2Controller {
return ApiResponse.fail("批量更新配置失败: " + e.getMessage()); return ApiResponse.fail("批量更新配置失败: " + e.getMessage());
} }
} }
/**
* 扁平化批量更新景区配置
*/
@PutMapping("/{scenicId}/flat-config")
public ApiResponse<BatchUpdateResponse> batchFlatUpdateConfigs(@PathVariable Long scenicId,
@RequestBody Map<String, Object> configs) {
log.info("扁平化批量更新景区配置, scenicId: {}, configs count: {}", scenicId, configs.size());
try {
BatchUpdateResponse response = scenicConfigIntegrationService.batchFlatUpdateConfigs(scenicId, configs);
return ApiResponse.success(response);
} catch (Exception e) {
log.error("扁平化批量更新景区配置失败, scenicId: {}", scenicId, e);
return ApiResponse.fail("扁平化批量更新配置失败: " + e.getMessage());
}
}
} }

View File

@@ -30,18 +30,6 @@ public interface DeviceConfigV2Client {
CommonResponse<DeviceConfigV2DTO> getDeviceConfigByKey(@PathVariable("deviceId") Long deviceId, CommonResponse<DeviceConfigV2DTO> getDeviceConfigByKey(@PathVariable("deviceId") Long deviceId,
@PathVariable("configKey") String configKey); @PathVariable("configKey") String configKey);
/**
* 获取设备扁平化配置
*/
@GetMapping("/{deviceId}/flat")
CommonResponse<Map<String, Object>> getDeviceFlatConfig(@PathVariable("deviceId") Long deviceId);
/**
* 根据设备编号获取设备扁平化配置
*/
@GetMapping("/no/{no}/flat")
CommonResponse<Map<String, Object>> getDeviceFlatConfigByNo(@PathVariable("no") String no);
/** /**
* 创建设备配置 * 创建设备配置
*/ */

View File

@@ -21,18 +21,6 @@ public interface DeviceV2Client {
@GetMapping("/no/{no}") @GetMapping("/no/{no}")
CommonResponse<DeviceV2DTO> getDeviceByNo(@PathVariable("no") String no); CommonResponse<DeviceV2DTO> getDeviceByNo(@PathVariable("no") String no);
/**
* 获取设备详细信息(含配置)
*/
@GetMapping("/{id}/with-config")
CommonResponse<DeviceV2WithConfigDTO> getDeviceWithConfig(@PathVariable("id") Long id);
/**
* 根据设备编号获取设备详细信息(含配置)
*/
@GetMapping("/no/{no}/with-config")
CommonResponse<DeviceV2WithConfigDTO> getDeviceByNoWithConfig(@PathVariable("no") String no);
/** /**
* 创建设备 * 创建设备
*/ */
@@ -65,19 +53,6 @@ public interface DeviceV2Client {
@RequestParam(value = "isActive", required = false) Integer isActive, @RequestParam(value = "isActive", required = false) Integer isActive,
@RequestParam(value = "scenicId", required = false) Long scenicId); @RequestParam(value = "scenicId", required = false) Long scenicId);
/**
* 分页获取设备列表(含配置)
*/
@GetMapping("/with-config")
CommonResponse<PageResponse<DeviceV2WithConfigDTO>> listDevicesWithConfig(
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "no", required = false) String no,
@RequestParam(value = "type", required = false) String type,
@RequestParam(value = "isActive", required = false) Integer isActive,
@RequestParam(value = "scenicId", required = false) Long scenicId);
/** /**
* 根据配置条件筛选设备 * 根据配置条件筛选设备
*/ */

View File

@@ -42,10 +42,6 @@ public class DeviceIntegrationExample {
DeviceV2DTO deviceByNo = deviceService.getDeviceByNo("CAM001"); DeviceV2DTO deviceByNo = deviceService.getDeviceByNo("CAM001");
log.info("根据编号获取设备: {}", deviceByNo.getName()); log.info("根据编号获取设备: {}", deviceByNo.getName());
// 获取设备详细信息(含配置)
DeviceV2WithConfigDTO deviceWithConfig = deviceService.getDeviceWithConfig(ipcDevice.getId());
log.info("获取设备配置: {}", deviceWithConfig.getName());
// 分页查询景区设备列表 // 分页查询景区设备列表
PageResponse<DeviceV2DTO> deviceList = deviceService.getScenicIpcDevices(1001L, 1, 10); PageResponse<DeviceV2DTO> deviceList = deviceService.getScenicIpcDevices(1001L, 1, 10);
log.info("景区设备列表: 总数={}", deviceList.getTotal()); log.info("景区设备列表: 总数={}", deviceList.getTotal());
@@ -106,10 +102,6 @@ public class DeviceIntegrationExample {
List<DeviceConfigV2DTO> configs = deviceConfigService.getDeviceConfigs(deviceId); List<DeviceConfigV2DTO> configs = deviceConfigService.getDeviceConfigs(deviceId);
log.info("设备配置数量: {}", configs.size()); log.info("设备配置数量: {}", configs.size());
// 获取扁平化配置
Map<String, Object> flatConfig = deviceConfigService.getDeviceFlatConfig(deviceId);
log.info("扁平化配置项数: {}", flatConfig.size());
// 使用批量配置API // 使用批量配置API
BatchDeviceConfigRequest builderRequest = deviceConfigService.createBatchConfigBuilder() BatchDeviceConfigRequest builderRequest = deviceConfigService.createBatchConfigBuilder()
.build(); .build();

View File

@@ -43,10 +43,6 @@ public class DeviceIntegrationFallbackExample {
DeviceV2DTO deviceByNo = deviceService.getDeviceByNo(deviceNo); DeviceV2DTO deviceByNo = deviceService.getDeviceByNo(deviceNo);
log.info("根据设备号获取设备成功: {}", deviceByNo.getName()); log.info("根据设备号获取设备成功: {}", deviceByNo.getName());
// 获取设备配置 - 自动降级
DeviceV2WithConfigDTO deviceWithConfig = deviceService.getDeviceWithConfig(deviceId);
log.info("获取设备配置成功,配置数量: {}", deviceWithConfig.getConfig().size());
} catch (Exception e) { } catch (Exception e) {
log.error("所有降级策略失败", e); log.error("所有降级策略失败", e);
} }
@@ -83,14 +79,11 @@ public class DeviceIntegrationFallbackExample {
log.info("=== 降级缓存管理示例 ==="); log.info("=== 降级缓存管理示例 ===");
String deviceCacheKey = "device:1001"; String deviceCacheKey = "device:1001";
String configCacheKey = "device:flat:config:1001";
// 检查降级缓存状态 // 检查降级缓存状态
boolean hasDeviceCache = fallbackService.hasFallbackCache(SERVICE_NAME, deviceCacheKey); boolean hasDeviceCache = fallbackService.hasFallbackCache(SERVICE_NAME, deviceCacheKey);
boolean hasConfigCache = fallbackService.hasFallbackCache(SERVICE_NAME, configCacheKey);
log.info("设备降级缓存存在: {}", hasDeviceCache); log.info("设备降级缓存存在: {}", hasDeviceCache);
log.info("配置降级缓存存在: {}", hasConfigCache);
// 清理特定的降级缓存 // 清理特定的降级缓存
if (hasDeviceCache) { if (hasDeviceCache) {

View File

@@ -39,31 +39,6 @@ public class DeviceConfigIntegrationService {
return handleResponse(response, "根据键获取设备配置失败"); return handleResponse(response, "根据键获取设备配置失败");
} }
public Map<String, Object> getDeviceFlatConfig(Long deviceId) {
return fallbackService.executeWithFallback(
SERVICE_NAME,
"device:flat:config:" + deviceId,
() -> {
CommonResponse<Map<String, Object>> response = deviceConfigV2Client.getDeviceFlatConfig(deviceId);
return handleResponse(response, "获取设备扁平化配置失败");
},
Map.class
);
}
public Map<String, Object> getDeviceFlatConfigByNo(String deviceNo) {
log.debug("根据设备编号获取扁平化配置, deviceNo: {}", deviceNo);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"device:flat:config:no:" + deviceNo,
() -> {
CommonResponse<Map<String, Object>> response = deviceConfigV2Client.getDeviceFlatConfigByNo(deviceNo);
return handleResponse(response, "根据设备编号获取扁平化配置失败");
},
Map.class
);
}
public DeviceConfigV2DTO createDeviceConfig(Long deviceId, CreateDeviceConfigRequest request) { public DeviceConfigV2DTO createDeviceConfig(Long deviceId, CreateDeviceConfigRequest request) {
log.debug("创建设备配置, deviceId: {}, configKey: {}", deviceId, request.getConfigKey()); log.debug("创建设备配置, deviceId: {}, configKey: {}", deviceId, request.getConfigKey());
CommonResponse<DeviceConfigV2DTO> response = deviceConfigV2Client.createDeviceConfig(deviceId, request); CommonResponse<DeviceConfigV2DTO> response = deviceConfigV2Client.createDeviceConfig(deviceId, request);

View File

@@ -48,32 +48,6 @@ public class DeviceIntegrationService {
); );
} }
public DeviceV2WithConfigDTO getDeviceWithConfig(Long deviceId) {
log.debug("获取设备配置信息, deviceId: {}", deviceId);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"device:config:" + deviceId,
() -> {
CommonResponse<DeviceV2WithConfigDTO> response = deviceV2Client.getDeviceWithConfig(deviceId);
return handleResponse(response, "获取设备配置信息失败");
},
DeviceV2WithConfigDTO.class
);
}
public DeviceV2WithConfigDTO getDeviceWithConfigByNo(String deviceNo) {
log.debug("根据设备编号获取设备配置信息, deviceNo: {}", deviceNo);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"device:config:no:" + deviceNo,
() -> {
CommonResponse<DeviceV2WithConfigDTO> response = deviceV2Client.getDeviceByNoWithConfig(deviceNo);
return handleResponse(response, "根据设备编号获取设备配置信息失败");
},
DeviceV2WithConfigDTO.class
);
}
public DeviceV2DTO createDevice(CreateDeviceRequest request) { public DeviceV2DTO createDevice(CreateDeviceRequest request) {
log.debug("创建设备, name: {}, no: {}, type: {}", request.getName(), request.getNo(), request.getType()); log.debug("创建设备, name: {}, no: {}, type: {}", request.getName(), request.getNo(), request.getType());
CommonResponse<DeviceV2DTO> response = deviceV2Client.createDevice(request); CommonResponse<DeviceV2DTO> response = deviceV2Client.createDevice(request);
@@ -101,15 +75,6 @@ public class DeviceIntegrationService {
return handleResponse(response, "分页查询设备列表失败"); return handleResponse(response, "分页查询设备列表失败");
} }
public PageResponse<DeviceV2WithConfigDTO> listDevicesWithConfig(Integer page, Integer pageSize, String name, String no,
String type, Integer isActive, Long scenicId) {
log.debug("分页查询设备带配置列表, page: {}, pageSize: {}, name: {}, no: {}, type: {}, isActive: {}, scenicId: {}",
page, pageSize, name, no, type, isActive, scenicId);
CommonResponse<PageResponse<DeviceV2WithConfigDTO>> response = deviceV2Client.listDevicesWithConfig(
page, pageSize, name, no, type, isActive, scenicId);
return handleResponse(response, "分页查询设备带配置列表失败");
}
/** /**
* 创建IPC摄像头设备 * 创建IPC摄像头设备
*/ */

View File

@@ -18,12 +18,6 @@ public interface RenderWorkerV2Client {
@GetMapping("/{id}") @GetMapping("/{id}")
CommonResponse<RenderWorkerV2DTO> getWorker(@PathVariable("id") Long id); CommonResponse<RenderWorkerV2DTO> getWorker(@PathVariable("id") Long id);
/**
* 获取工作器含配置信息
*/
@GetMapping("/{id}/with-config")
CommonResponse<RenderWorkerV2WithConfigDTO> getWorkerWithConfig(@PathVariable("id") Long id);
/** /**
* 创建工作器 * 创建工作器
*/ */
@@ -52,25 +46,9 @@ public interface RenderWorkerV2Client {
@RequestParam(required = false) Integer isEnabled, @RequestParam(required = false) Integer isEnabled,
@RequestParam(required = false) String name); @RequestParam(required = false) String name);
/**
* 分页查询工作器列表(含配置信息)
*/
@GetMapping("/with-config")
CommonResponse<PageResponse<RenderWorkerV2WithConfigDTO>> listWorkersWithConfig(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer isEnabled,
@RequestParam(required = false) String name);
/** /**
* 根据key获取工作器核心信息 * 根据key获取工作器核心信息
*/ */
@GetMapping("/key/{key}") @GetMapping("/key/{key}")
CommonResponse<RenderWorkerV2DTO> getWorkerByKey(@PathVariable("key") String key); CommonResponse<RenderWorkerV2DTO> getWorkerByKey(@PathVariable("key") String key);
/**
* 根据key获取工作器完整信息(含配置)
*/
@GetMapping("/key/{key}/with-config")
CommonResponse<RenderWorkerV2WithConfigDTO> getWorkerWithConfigByKey(@PathVariable("key") String key);
} }

View File

@@ -70,7 +70,7 @@ public class RenderWorkerConfigIntegrationService {
log.debug("获取渲染工作器平铺配置, workerId: {}", workerId); log.debug("获取渲染工作器平铺配置, workerId: {}", workerId);
return fallbackService.executeWithFallback( return fallbackService.executeWithFallback(
SERVICE_NAME, SERVICE_NAME,
"worker:flat:config:" + workerId, "worker:config:" + workerId,
() -> { () -> {
List<RenderWorkerConfigV2DTO> configs = getWorkerConfigsInternal(workerId); List<RenderWorkerConfigV2DTO> configs = getWorkerConfigsInternal(workerId);
return flattenConfigs(configs); return flattenConfigs(configs);

View File

@@ -42,22 +42,6 @@ public class RenderWorkerIntegrationService {
); );
} }
/**
* 获取工作器详细信息(含配置)(带降级)
*/
public RenderWorkerV2WithConfigDTO getWorkerWithConfig(Long id) {
log.debug("获取渲染工作器详细信息, id: {}", id);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"worker:config:" + id,
() -> {
CommonResponse<RenderWorkerV2WithConfigDTO> response = renderWorkerV2Client.getWorkerWithConfig(id);
return handleResponse(response, "获取渲染工作器详细信息失败");
},
RenderWorkerV2WithConfigDTO.class
);
}
/** /**
* 创建工作器(直接调用,不降级) * 创建工作器(直接调用,不降级)
*/ */
@@ -96,18 +80,6 @@ public class RenderWorkerIntegrationService {
return handleResponse(response, "查询渲染工作器列表失败"); return handleResponse(response, "查询渲染工作器列表失败");
} }
/**
* 分页查询工作器列表(含配置信息)(不降级)
*/
public PageResponse<RenderWorkerV2WithConfigDTO> listWorkersWithConfig(Integer page, Integer pageSize,
Integer isEnabled, String name) {
log.debug("分页查询渲染工作器列表(含配置), page: {}, pageSize: {}, isEnabled: {}, name: {}",
page, pageSize, isEnabled, name);
CommonResponse<PageResponse<RenderWorkerV2WithConfigDTO>> response =
renderWorkerV2Client.listWorkersWithConfig(page, pageSize, isEnabled, name);
return handleResponse(response, "查询渲染工作器列表(含配置)失败");
}
/** /**
* 根据key获取工作器核心信息(带降级) * 根据key获取工作器核心信息(带降级)
*/ */
@@ -124,22 +96,6 @@ public class RenderWorkerIntegrationService {
); );
} }
/**
* 根据key获取工作器详细信息(含配置)(带降级)
*/
public RenderWorkerV2WithConfigDTO getWorkerWithConfigByKey(String key) {
log.debug("根据key获取渲染工作器详细信息, key: {}", key);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"worker:key:config:" + key,
() -> {
CommonResponse<RenderWorkerV2WithConfigDTO> response = renderWorkerV2Client.getWorkerWithConfigByKey(key);
return handleResponse(response, "根据key获取渲染工作器详细信息失败");
},
RenderWorkerV2WithConfigDTO.class
);
}
/** /**
* 处理通用响应 * 处理通用响应
*/ */

View File

@@ -18,9 +18,6 @@ public interface ScenicConfigV2Client {
CommonResponse<ScenicConfigV2DTO> getConfigByKey(@PathVariable("scenicId") Long scenicId, CommonResponse<ScenicConfigV2DTO> getConfigByKey(@PathVariable("scenicId") Long scenicId,
@PathVariable("configKey") String configKey); @PathVariable("configKey") String configKey);
@GetMapping("/{scenicId}/keys")
CommonResponse<Map<String, Object>> getFlatConfigs(@PathVariable("scenicId") Long scenicId);
@PostMapping("/{scenicId}") @PostMapping("/{scenicId}")
CommonResponse<ScenicConfigV2DTO> createConfig(@PathVariable("scenicId") Long scenicId, CommonResponse<ScenicConfigV2DTO> createConfig(@PathVariable("scenicId") Long scenicId,
@RequestBody CreateConfigRequest request); @RequestBody CreateConfigRequest request);
@@ -37,8 +34,4 @@ public interface ScenicConfigV2Client {
@PostMapping("/{scenicId}/batch") @PostMapping("/{scenicId}/batch")
CommonResponse<BatchUpdateResponse> batchUpdateConfigs(@PathVariable("scenicId") Long scenicId, CommonResponse<BatchUpdateResponse> batchUpdateConfigs(@PathVariable("scenicId") Long scenicId,
@RequestBody BatchConfigRequest request); @RequestBody BatchConfigRequest request);
@PostMapping("/{scenicId}/batchFlatUpdate")
CommonResponse<BatchUpdateResponse> batchFlatUpdateConfigs(@PathVariable("scenicId") Long scenicId,
@RequestBody Map<String, Object> configs);
} }

View File

@@ -19,10 +19,6 @@ public interface ScenicV2Client {
@GetMapping("/{scenicId}") @GetMapping("/{scenicId}")
CommonResponse<ScenicV2DTO> getScenic(@PathVariable("scenicId") Long scenicId); CommonResponse<ScenicV2DTO> getScenic(@PathVariable("scenicId") Long scenicId);
@GetMapping("/{scenicId}/with-config")
CommonResponse<ScenicV2WithConfigDTO> getScenicWithConfig(@PathVariable("scenicId") Long scenicId);
@PostMapping("/") @PostMapping("/")
CommonResponse<ScenicV2DTO> createScenic(@RequestBody CreateScenicRequest request); CommonResponse<ScenicV2DTO> createScenic(@RequestBody CreateScenicRequest request);
@@ -41,10 +37,4 @@ public interface ScenicV2Client {
@RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer status, @RequestParam(required = false) Integer status,
@RequestParam(required = false) String name); @RequestParam(required = false) String name);
@GetMapping("/with-config")
CommonResponse<PageResponse<ScenicV2WithConfigDTO>> listScenicsWithConfig(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) String name);
} }

View File

@@ -94,14 +94,6 @@ public class ScenicIntegrationExample {
ScenicV2DTO scenic = scenicIntegrationService.getScenic(scenicId); ScenicV2DTO scenic = scenicIntegrationService.getScenic(scenicId);
log.info("获取景区成功: {}", scenic.getName()); log.info("获取景区成功: {}", scenic.getName());
// 获取景区配置信息 - 自动降级
ScenicV2WithConfigDTO scenicWithConfig = scenicIntegrationService.getScenicWithConfig(scenicId);
log.info("获取景区配置成功,配置数量: {}", scenicWithConfig.getConfig().size());
// 获取扁平化配置 - 自动降级
Map<String, Object> flatConfig = scenicIntegrationService.getScenicFlatConfig(scenicId);
log.info("获取扁平化配置成功,配置项数量: {}", flatConfig.size());
} catch (Exception e) { } catch (Exception e) {
log.error("景区操作降级失败", e); log.error("景区操作降级失败", e);
} }
@@ -116,16 +108,22 @@ public class ScenicIntegrationExample {
Long scenicId = 2001L; Long scenicId = 2001L;
try { try {
// 获取扁平化配置 - 自动降级 // 获取配置列表 - 自动降级
Map<String, Object> flatConfigs = scenicConfigIntegrationService.getFlatConfigs(scenicId); var configs = scenicConfigIntegrationService.listConfigs(scenicId);
log.info("获取扁平化配置成功,配置项数量: {}", flatConfigs.size()); log.info("获取配置列表成功,配置项数量: {}", configs.size());
// 批量更新配置 - 直接操作,失败时抛出异常 // 批量更新配置 - 直接操作,失败时抛出异常
Map<String, Object> updates = new HashMap<>(); BatchConfigRequest batchRequest = new BatchConfigRequest();
updates.put("max_visitors", "5000"); // 添加配置项示例
updates.put("opening_hours", "08:00-18:00"); BatchConfigRequest.BatchConfigItem item1 = new BatchConfigRequest.BatchConfigItem();
item1.setConfigKey("max_visitors");
item1.setConfigValue("5000");
BatchConfigRequest.BatchConfigItem item2 = new BatchConfigRequest.BatchConfigItem();
item2.setConfigKey("opening_hours");
item2.setConfigValue("08:00-18:00");
batchRequest.setConfigs(java.util.Arrays.asList(item1, item2));
BatchUpdateResponse result = scenicConfigIntegrationService.batchFlatUpdateConfigs(scenicId, updates); BatchUpdateResponse result = scenicConfigIntegrationService.batchUpdateConfigs(scenicId, batchRequest);
log.info("批量更新配置完成: 成功 {}, 失败 {}", result.getSuccess(), result.getFailed()); log.info("批量更新配置完成: 成功 {}, 失败 {}", result.getSuccess(), result.getFailed());
} catch (Exception e) { } catch (Exception e) {
@@ -140,14 +138,11 @@ public class ScenicIntegrationExample {
log.info("=== 景区降级缓存管理示例 ==="); log.info("=== 景区降级缓存管理示例 ===");
String scenicCacheKey = "scenic:2001"; String scenicCacheKey = "scenic:2001";
String configCacheKey = "scenic:flat:configs:2001";
// 检查降级缓存状态 // 检查降级缓存状态
boolean hasScenicCache = fallbackService.hasFallbackCache(SERVICE_NAME, scenicCacheKey); boolean hasScenicCache = fallbackService.hasFallbackCache(SERVICE_NAME, scenicCacheKey);
boolean hasConfigCache = fallbackService.hasFallbackCache(SERVICE_NAME, configCacheKey);
log.info("景区降级缓存存在: {}", hasScenicCache); log.info("景区降级缓存存在: {}", hasScenicCache);
log.info("配置降级缓存存在: {}", hasConfigCache);
// 获取降级缓存统计信息 // 获取降级缓存统计信息
IntegrationFallbackService.FallbackCacheStats stats = fallbackService.getFallbackCacheStats(SERVICE_NAME); IntegrationFallbackService.FallbackCacheStats stats = fallbackService.getFallbackCacheStats(SERVICE_NAME);

View File

@@ -48,19 +48,6 @@ public class ScenicConfigIntegrationService {
); );
} }
public Map<String, Object> getFlatConfigs(Long scenicId) {
log.debug("获取景区扁平化配置, scenicId: {}", scenicId);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"scenic:flat:configs:" + scenicId,
() -> {
CommonResponse<Map<String, Object>> response = scenicConfigV2Client.getFlatConfigs(scenicId);
return handleResponse(response, "获取景区扁平化配置失败");
},
Map.class
);
}
public ScenicConfigV2DTO createConfig(Long scenicId, CreateConfigRequest request) { public ScenicConfigV2DTO createConfig(Long scenicId, CreateConfigRequest request) {
log.debug("创建景区配置, scenicId: {}, configKey: {}", scenicId, request.getConfigKey()); log.debug("创建景区配置, scenicId: {}, configKey: {}", scenicId, request.getConfigKey());
CommonResponse<ScenicConfigV2DTO> response = scenicConfigV2Client.createConfig(scenicId, request); CommonResponse<ScenicConfigV2DTO> response = scenicConfigV2Client.createConfig(scenicId, request);
@@ -85,12 +72,6 @@ public class ScenicConfigIntegrationService {
return handleResponse(response, "批量更新景区配置失败"); return handleResponse(response, "批量更新景区配置失败");
} }
public BatchUpdateResponse batchFlatUpdateConfigs(Long scenicId, Map<String, Object> configs) {
log.debug("扁平化批量更新景区配置, scenicId: {}, configs count: {}", scenicId, configs.size());
CommonResponse<BatchUpdateResponse> response = scenicConfigV2Client.batchFlatUpdateConfigs(scenicId, configs);
return handleResponse(response, "扁平化批量更新景区配置失败");
}
private <T> T handleResponse(CommonResponse<T> response, String errorMessage) { private <T> T handleResponse(CommonResponse<T> response, String errorMessage) {
if (response == null || !response.isSuccess()) { if (response == null || !response.isSuccess()) {

View File

@@ -42,32 +42,6 @@ public class ScenicIntegrationService {
); );
} }
public ScenicV2WithConfigDTO getScenicWithConfig(Long scenicId) {
log.debug("获取景区配置信息, scenicId: {}", scenicId);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"scenic:config:" + scenicId,
() -> {
CommonResponse<ScenicV2WithConfigDTO> response = scenicV2Client.getScenicWithConfig(scenicId);
return handleResponse(response, "获取景区配置信息失败");
},
ScenicV2WithConfigDTO.class
);
}
public Map<String, Object> getScenicFlatConfig(Long scenicId) {
log.debug("获取景区扁平化配置, scenicId: {}", scenicId);
return fallbackService.executeWithFallback(
SERVICE_NAME,
"scenic:flat:config:" + scenicId,
() -> {
CommonResponse<Map<String, Object>> response = scenicConfigV2Client.getFlatConfigs(scenicId);
return handleResponse(response, "获取景区扁平化配置失败");
},
Map.class
);
}
public ScenicV2DTO createScenic(CreateScenicRequest request) { public ScenicV2DTO createScenic(CreateScenicRequest request) {
log.debug("创建景区, name: {}", request.getName()); log.debug("创建景区, name: {}", request.getName());
CommonResponse<ScenicV2DTO> response = scenicV2Client.createScenic(request); CommonResponse<ScenicV2DTO> response = scenicV2Client.createScenic(request);
@@ -98,12 +72,6 @@ public class ScenicIntegrationService {
return handleResponse(response, "分页查询景区列表失败"); return handleResponse(response, "分页查询景区列表失败");
} }
public PageResponse<ScenicV2WithConfigDTO> listScenicsWithConfig(Integer page, Integer pageSize, Integer status, String name) {
log.debug("分页查询景区带配置列表, page: {}, pageSize: {}, status: {}, name: {}", page, pageSize, status, name);
CommonResponse<PageResponse<ScenicV2WithConfigDTO>> response = scenicV2Client.listScenicsWithConfig(page, pageSize, status, name);
return handleResponse(response, "分页查询景区带配置列表失败");
}
private <T> T handleResponse(CommonResponse<T> response, String errorMessage) { private <T> T handleResponse(CommonResponse<T> response, String errorMessage) {
if (response == null || !response.isSuccess()) { if (response == null || !response.isSuccess()) {
String msg = response != null && response.getMessage() != null String msg = response != null && response.getMessage() != null

View File

@@ -1,16 +1,7 @@
package com.ycwl.basic.model.pc.scenic.resp; package com.ycwl.basic.model.pc.scenic.resp;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycwl.basic.facebody.enums.FaceBodyAdapterType;
import com.ycwl.basic.pay.enums.PayAdapterType;
import com.ycwl.basic.storage.enums.StorageType;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/** /**
* @Author:longbinbin * @Author:longbinbin
* @Date:2024/12/2 10:53 * @Date:2024/12/2 10:53
@@ -19,35 +10,49 @@ import java.util.Date;
@Data @Data
public class ScenicConfigResp { public class ScenicConfigResp {
// ========== 基础配置 ==========
/** /**
* 预约流程,1-预约,2-在线,3-全部 * 水印URL
*/ */
private Integer bookRoutine; private String watermarkUrl;
private Integer forceFinishTime;
private Integer tourTime;
/** /**
* 样本保存时间 * 视频存储天数
*/
private Integer sampleStoreDay;
private Integer faceStoreDay;
/**
* 视频保存时间
*/ */
private Integer videoStoreDay; private Integer videoStoreDay;
private Boolean allFree;
private Boolean disableSourceVideo;
private Boolean disableSourceImage;
private Integer antiScreenRecordType;
private Integer videoSourceStoreDay;
private Integer imageSourceStoreDay;
private Integer userSourceExpireDay;
private BigDecimal brokerDirectRate;
private String imageSourcePackHint = ""; /**
private String videoSourcePackHint = ""; * 防录屏类型配置
private Boolean voucherEnable; */
private Boolean enableVoucher; private Integer antiScreenRecordType;
// ========== 功能开关 ==========
/**
* 分组功能开关
*/
private Boolean groupingEnable; private Boolean groupingEnable;
/**
* 优惠券功能开关
*/
private Boolean voucherEnable;
/**
* 等待时显示照片开关
*/
private Boolean showPhotoWhenWaiting; private Boolean showPhotoWhenWaiting;
private String watermarkUrl;
// ========== 提示文案 ==========
/**
* 图片素材包提示文案
*/
private String imageSourcePackHint = "";
/**
* 视频素材包提示文案
*/
private String videoSourcePackHint = "";
} }

View File

@@ -52,8 +52,27 @@ public class ScenicRepository {
} }
public ScenicEntity getScenic(Long id) { public ScenicEntity getScenic(Long id) {
ScenicV2WithConfigDTO scenicDTO = scenicIntegrationService.getScenicWithConfig(id); // 分别获取景区基础信息和配置信息
ScenicEntity scenicEntity = convertToScenicEntity(scenicDTO); ScenicV2DTO scenicBasic = scenicIntegrationService.getScenic(id);
List<ScenicConfigV2DTO> configList = scenicConfigIntegrationService.listConfigs(id);
// 将配置列表转换为Map
Map<String, Object> configMap = new HashMap<>();
if (configList != null) {
for (ScenicConfigV2DTO config : configList) {
configMap.put(config.getConfigKey(), config.getConfigValue());
}
}
// 手动组合成WithConfig对象用于转换
ScenicV2WithConfigDTO scenicWithConfig = new ScenicV2WithConfigDTO();
scenicWithConfig.setId(scenicBasic.getId());
scenicWithConfig.setName(scenicBasic.getName());
scenicWithConfig.setMpId(scenicBasic.getMpId());
scenicWithConfig.setStatus(scenicBasic.getStatus());
scenicWithConfig.setConfig(configMap);
ScenicEntity scenicEntity = convertToScenicEntity(scenicWithConfig);
return scenicEntity; return scenicEntity;
} }