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<PageResponse<ScenicSpotListResponse>> 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<ScenicSpotDetailResponse> create(@Valid @RequestBody ScenicSpotDetailSaveRequest request) {
|
return ApiResponse.success(scenicSpotService.create(request));
|
}
|
|
/**
|
* 查询指定景区的基础资料、四类价格、汇合点和接单时间配置。
|
*
|
* @param id 景区主键
|
* @return 景区完整详情
|
*/
|
@GetMapping("/{id}")
|
public ApiResponse<ScenicSpotDetailResponse> detail(@PathVariable Long id) {
|
return ApiResponse.success(scenicSpotService.detail(id));
|
}
|
|
/**
|
* 聚合更新指定景区的基础资料及全部运营配置。
|
* 价格和汇合点按本次提交内容整体替换,调用方应提交完整配置。
|
*
|
* @param id 景区主键
|
* @param request 景区最新完整配置
|
* @return 更新后的景区完整详情
|
*/
|
@PutMapping("/{id}")
|
public ApiResponse<ScenicSpotDetailResponse> 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<Void> updateStatus(@PathVariable Long id,
|
@Valid @RequestBody ScenicSpotStatusRequest request) {
|
scenicSpotService.updateStatus(id, request.getStatus());
|
return ApiResponse.success();
|
}
|
}
|