package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.operation.dto.ScenicSpotDetailResponse; import com.tourguide.modules.operation.dto.ScenicSpotDetailSaveRequest; import com.tourguide.modules.operation.dto.ScenicSpotListResponse; import com.tourguide.modules.operation.dto.ScenicSpotStatusRequest; import com.tourguide.modules.operation.service.OperationScenicSpotService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; /** * 管理后台运营景区管理接口。 * 聚合维护景区基础资料、四类讲解价格、地图汇合点和导游接单时间配置。 */ @RestController @RequestMapping("/api/admin/operation-scenic-spots") public class AdminOperationScenicSpotController { private final OperationScenicSpotService scenicSpotService; public AdminOperationScenicSpotController(OperationScenicSpotService scenicSpotService) { this.scenicSpotService = scenicSpotService; } /** * 分页查询运营景区,支持按景区名称、所属城市、状态和创建日期筛选。 * * @param page 页码,从 1 开始 * @param size 每页记录数 * @param keyword 景区名称关键字 * @param cityId 所属运营城市主键 * @param status 启用或禁用状态 * @param startDate 创建日期起始值,包含当天 * @param endDate 创建日期结束值,包含当天 * @return 景区及四类优惠价格组成的分页结果 */ @GetMapping public ApiResponse> page( @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String keyword, @RequestParam(required = false) Long cityId, @RequestParam(required = false) Integer status, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) { return ApiResponse.success(scenicSpotService.page(page, size, keyword, cityId, status, startDate, endDate)); } /** * 新增景区并在同一事务中保存价格、汇合点和接单时间配置。 * * @param request 景区完整配置 * @return 新建后的景区完整详情 */ @PostMapping public ApiResponse create(@Valid @RequestBody ScenicSpotDetailSaveRequest request) { return ApiResponse.success(scenicSpotService.create(request)); } /** * 查询指定景区的基础资料、四类价格、汇合点和接单时间配置。 * * @param id 景区主键 * @return 景区完整详情 */ @GetMapping("/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.success(scenicSpotService.detail(id)); } /** * 聚合更新指定景区的基础资料及全部运营配置。 * 价格和汇合点按本次提交内容整体替换,调用方应提交完整配置。 * * @param id 景区主键 * @param request 景区最新完整配置 * @return 更新后的景区完整详情 */ @PutMapping("/{id}") public ApiResponse save(@PathVariable Long id, @Valid @RequestBody ScenicSpotDetailSaveRequest request) { return ApiResponse.success(scenicSpotService.save(id, request)); } /** * 启用或禁用指定景区,状态变更不删除已有价格和汇合点配置。 * * @param id 景区主键 * @param request 目标状态,1 为启用、0 为禁用 * @return 无业务数据的成功响应 */ @PutMapping("/{id}/status") public ApiResponse updateStatus(@PathVariable Long id, @Valid @RequestBody ScenicSpotStatusRequest request) { scenicSpotService.updateStatus(id, request.getStatus()); return ApiResponse.success(); } }