refactor(scenic): 重构景区管理接口并新增 V2 版本

- 新增 ScenicV2Controller 控制器,实现景区 V2 版本的 CRUD操作和配置管理
- 移除 ScenicConfigWithDefaultClient 和 ScenicMetaClient 接口- 更新 ScenicV2Client接口,添加分页查询方法
- 删除 ConfigWithDefaultResponse、BatchSetFieldEnabledRequest、EnabledFieldsResponse、FieldConfigDTO 和 SetFieldEnabledRequest 类
- 新增 ScenicV2ListResponse 和 ScenicV2WithConfigListResponse 类- 更新 ScenicConfigIntegrationService 和 ScenicIntegrationService,移除与配置相关的方法
- 删除 ScenicMetaIntegrationService 类
This commit is contained in:
2025-08-27 00:11:00 +08:00
parent f6bd7e48a3
commit 7c2db2ad22
14 changed files with 380 additions and 229 deletions

View File

@@ -1,15 +0,0 @@
package com.ycwl.basic.integration.scenic.client;
import com.ycwl.basic.integration.common.response.CommonResponse;
import com.ycwl.basic.integration.scenic.dto.config.ConfigWithDefaultResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = "zt-scenic", contextId = "scenic-config-with-default", path = "/api/scenic/config-with-default")
public interface ScenicConfigWithDefaultClient {
@GetMapping("/{scenicId}/{configKey}")
CommonResponse<ConfigWithDefaultResponse> getConfigWithDefault(@PathVariable("scenicId") Long scenicId,
@PathVariable("configKey") String configKey);
}

View File

@@ -1,40 +0,0 @@
package com.ycwl.basic.integration.scenic.client;
import com.ycwl.basic.integration.common.response.CommonResponse;
import com.ycwl.basic.integration.scenic.dto.meta.*;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import com.ycwl.basic.integration.scenic.dto.scenic.UpdateScenicRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@FeignClient(name = "zt-scenic", contextId = "scenic-meta", path = "/api/scenic/meta")
public interface ScenicMetaClient {
@GetMapping("/{scenicId}/fields/enabled")
CommonResponse<EnabledFieldsResponse> getEnabledFields(@PathVariable("scenicId") Long scenicId);
@GetMapping("/fields/all")
CommonResponse<List<FieldConfigDTO>> getAllFields();
@GetMapping("/fields/{fieldKey}")
CommonResponse<FieldConfigDTO> getFieldConfig(@PathVariable("fieldKey") String fieldKey);
@PostMapping("/{scenicId}/fields/{fieldKey}/enabled")
CommonResponse<Void> setFieldEnabled(@PathVariable("scenicId") Long scenicId,
@PathVariable("fieldKey") String fieldKey,
@RequestBody SetFieldEnabledRequest request);
@PostMapping("/{scenicId}/fields/batch-enabled")
CommonResponse<Void> batchSetFieldEnabled(@PathVariable("scenicId") Long scenicId,
@RequestBody BatchSetFieldEnabledRequest request);
@GetMapping("/{scenicId}/with-config")
CommonResponse<ScenicV2WithConfigDTO> getScenicWithConfigEnhanced(@PathVariable("scenicId") Long scenicId);
@PutMapping("/{scenicId}/config")
CommonResponse<Void> updateConfigEnhanced(@PathVariable("scenicId") Long scenicId,
@RequestBody Map<String, Object> configs);
}

View File

@@ -6,6 +6,8 @@ import com.ycwl.basic.integration.scenic.dto.filter.ScenicFilterRequest;
import com.ycwl.basic.integration.scenic.dto.scenic.CreateScenicRequest;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2ListResponse;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigListResponse;
import com.ycwl.basic.integration.scenic.dto.scenic.UpdateScenicRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@@ -21,8 +23,6 @@ public interface ScenicV2Client {
@GetMapping("/{scenicId}/with-config")
CommonResponse<ScenicV2WithConfigDTO> getScenicWithConfig(@PathVariable("scenicId") Long scenicId);
@GetMapping("/{scenicId}/flat")
CommonResponse<Map<String, Object>> getScenicFlatConfig(@PathVariable("scenicId") Long scenicId);
@PostMapping("/")
CommonResponse<ScenicV2DTO> createScenic(@RequestBody CreateScenicRequest request);
@@ -36,4 +36,16 @@ public interface ScenicV2Client {
@PostMapping("/filter")
CommonResponse<ScenicFilterPageResponse> filterScenics(@RequestBody ScenicFilterRequest request);
@GetMapping("/")
CommonResponse<ScenicV2ListResponse> listScenics(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) String name);
@GetMapping("/with-config")
CommonResponse<ScenicV2WithConfigListResponse> listScenicsWithConfig(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Integer status,
@RequestParam(required = false) String name);
}

View File

@@ -1,16 +0,0 @@
package com.ycwl.basic.integration.scenic.dto.config;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class ConfigWithDefaultResponse {
@JsonProperty("configKey")
private String configKey;
@JsonProperty("configValue")
private String configValue;
@JsonProperty("source")
private String source;
}

View File

@@ -1,26 +0,0 @@
package com.ycwl.basic.integration.scenic.dto.meta;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class BatchSetFieldEnabledRequest {
@JsonProperty("fields")
@NotEmpty(message = "字段列表不能为空")
@Valid
private List<FieldEnabledItem> fields;
@Data
public static class FieldEnabledItem {
@JsonProperty("fieldKey")
@NotEmpty(message = "字段键不能为空")
private String fieldKey;
@JsonProperty("enabled")
private Boolean enabled;
}
}

View File

@@ -1,12 +0,0 @@
package com.ycwl.basic.integration.scenic.dto.meta;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class EnabledFieldsResponse {
@JsonProperty("enabledFields")
private List<String> enabledFields;
}

View File

@@ -1,22 +0,0 @@
package com.ycwl.basic.integration.scenic.dto.meta;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class FieldConfigDTO {
@JsonProperty("fieldKey")
private String fieldKey;
@JsonProperty("fieldName")
private String fieldName;
@JsonProperty("fieldType")
private String fieldType;
@JsonProperty("description")
private String description;
@JsonProperty("enabled")
private Boolean enabled;
}

View File

@@ -1,13 +0,0 @@
package com.ycwl.basic.integration.scenic.dto.meta;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Data
public class SetFieldEnabledRequest {
@JsonProperty("enabled")
@NotNull(message = "enabled状态不能为空")
private Boolean enabled;
}

View File

@@ -0,0 +1,21 @@
package com.ycwl.basic.integration.scenic.dto.scenic;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class ScenicV2ListResponse {
@JsonProperty("list")
private List<ScenicV2DTO> list;
@JsonProperty("total")
private Long total;
@JsonProperty("page")
private Integer page;
@JsonProperty("pageSize")
private Integer pageSize;
}

View File

@@ -0,0 +1,21 @@
package com.ycwl.basic.integration.scenic.dto.scenic;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class ScenicV2WithConfigListResponse {
@JsonProperty("list")
private List<ScenicV2WithConfigDTO> list;
@JsonProperty("total")
private Long total;
@JsonProperty("page")
private Integer page;
@JsonProperty("pageSize")
private Integer pageSize;
}

View File

@@ -3,7 +3,6 @@ package com.ycwl.basic.integration.scenic.service;
import com.ycwl.basic.integration.common.exception.IntegrationException;
import com.ycwl.basic.integration.common.response.CommonResponse;
import com.ycwl.basic.integration.scenic.client.ScenicConfigV2Client;
import com.ycwl.basic.integration.scenic.client.ScenicConfigWithDefaultClient;
import com.ycwl.basic.integration.scenic.dto.config.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -18,7 +17,6 @@ import java.util.Map;
public class ScenicConfigIntegrationService {
private final ScenicConfigV2Client scenicConfigV2Client;
private final ScenicConfigWithDefaultClient scenicConfigWithDefaultClient;
public List<ScenicConfigV2DTO> listConfigs(Long scenicId) {
log.info("获取景区配置列表, scenicId: {}", scenicId);
@@ -68,11 +66,6 @@ public class ScenicConfigIntegrationService {
return handleResponse(response, "扁平化批量更新景区配置失败");
}
public ConfigWithDefaultResponse getConfigWithDefault(Long scenicId, String configKey) {
log.info("获取带默认值的配置, scenicId: {}, configKey: {}", scenicId, configKey);
CommonResponse<ConfigWithDefaultResponse> response = scenicConfigWithDefaultClient.getConfigWithDefault(scenicId, configKey);
return handleResponse(response, "获取带默认值的配置失败");
}
private <T> T handleResponse(CommonResponse<T> response, String errorMessage) {
if (response == null || !response.isSuccess()) {

View File

@@ -9,6 +9,8 @@ import com.ycwl.basic.integration.scenic.dto.filter.ScenicFilterRequest;
import com.ycwl.basic.integration.scenic.dto.scenic.CreateScenicRequest;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2ListResponse;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigListResponse;
import com.ycwl.basic.integration.scenic.dto.scenic.UpdateScenicRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -66,6 +68,18 @@ public class ScenicIntegrationService {
return handleResponse(response, "筛选景区失败");
}
public ScenicV2ListResponse listScenics(Integer page, Integer pageSize, Integer status, String name) {
log.info("分页查询景区列表, page: {}, pageSize: {}, status: {}, name: {}", page, pageSize, status, name);
CommonResponse<ScenicV2ListResponse> response = scenicV2Client.listScenics(page, pageSize, status, name);
return handleResponse(response, "分页查询景区列表失败");
}
public ScenicV2WithConfigListResponse listScenicsWithConfig(Integer page, Integer pageSize, Integer status, String name) {
log.info("分页查询景区带配置列表, page: {}, pageSize: {}, status: {}, name: {}", page, pageSize, status, name);
CommonResponse<ScenicV2WithConfigListResponse> response = scenicV2Client.listScenicsWithConfig(page, pageSize, status, name);
return handleResponse(response, "分页查询景区带配置列表失败");
}
private <T> T handleResponse(CommonResponse<T> response, String errorMessage) {
if (response == null || !response.isSuccess()) {
String msg = response != null && response.getMessage() != null

View File

@@ -1,76 +0,0 @@
package com.ycwl.basic.integration.scenic.service;
import com.ycwl.basic.integration.common.exception.IntegrationException;
import com.ycwl.basic.integration.common.response.CommonResponse;
import com.ycwl.basic.integration.scenic.client.ScenicMetaClient;
import com.ycwl.basic.integration.scenic.dto.meta.*;
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2WithConfigDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@RequiredArgsConstructor
public class ScenicMetaIntegrationService {
private final ScenicMetaClient scenicMetaClient;
public EnabledFieldsResponse getEnabledFields(Long scenicId) {
log.info("获取启用的字段, scenicId: {}", scenicId);
CommonResponse<EnabledFieldsResponse> response = scenicMetaClient.getEnabledFields(scenicId);
return handleResponse(response, "获取启用的字段失败");
}
public List<FieldConfigDTO> getAllFields() {
log.info("获取所有字段配置");
CommonResponse<List<FieldConfigDTO>> response = scenicMetaClient.getAllFields();
return handleResponse(response, "获取所有字段配置失败");
}
public FieldConfigDTO getFieldConfig(String fieldKey) {
log.info("获取字段配置, fieldKey: {}", fieldKey);
CommonResponse<FieldConfigDTO> response = scenicMetaClient.getFieldConfig(fieldKey);
return handleResponse(response, "获取字段配置失败");
}
public void setFieldEnabled(Long scenicId, String fieldKey, Boolean enabled) {
log.info("设置字段启用状态, scenicId: {}, fieldKey: {}, enabled: {}", scenicId, fieldKey, enabled);
SetFieldEnabledRequest request = new SetFieldEnabledRequest();
request.setEnabled(enabled);
CommonResponse<Void> response = scenicMetaClient.setFieldEnabled(scenicId, fieldKey, request);
handleResponse(response, "设置字段启用状态失败");
}
public void batchSetFieldEnabled(Long scenicId, BatchSetFieldEnabledRequest request) {
log.info("批量设置字段启用状态, scenicId: {}, fields count: {}", scenicId, request.getFields().size());
CommonResponse<Void> response = scenicMetaClient.batchSetFieldEnabled(scenicId, request);
handleResponse(response, "批量设置字段启用状态失败");
}
public ScenicV2WithConfigDTO getScenicWithConfigEnhanced(Long scenicId) {
log.info("获取景区与配置(增强版), scenicId: {}", scenicId);
CommonResponse<ScenicV2WithConfigDTO> response = scenicMetaClient.getScenicWithConfigEnhanced(scenicId);
return handleResponse(response, "获取景区与配置(增强版)失败");
}
public void updateConfigEnhanced(Long scenicId, Map<String, Object> configs) {
log.info("更新配置(增强版), scenicId: {}, configs count: {}", scenicId, configs.size());
CommonResponse<Void> response = scenicMetaClient.updateConfigEnhanced(scenicId, configs);
handleResponse(response, "更新配置(增强版)失败");
}
private <T> T handleResponse(CommonResponse<T> response, String errorMessage) {
if (response == null || !response.isSuccess()) {
String msg = response != null && response.getMessage() != null
? response.getMessage()
: errorMessage;
Integer code = response != null ? response.getCode() : 5000;
throw new IntegrationException(code, msg, "zt-scenic");
}
return response.getData();
}
}