package com.tourguide.api.mini;
|
|
import com.tourguide.common.api.ApiResponse;
|
import com.tourguide.common.api.PageResponse;
|
import com.tourguide.modules.order.dto.MiniOrderListResponse;
|
import com.tourguide.modules.order.dto.MiniOrderCreateRequest;
|
import com.tourguide.modules.order.dto.MiniOrderSummaryResponse;
|
import com.tourguide.modules.order.dto.TourOrderResponse;
|
import com.tourguide.modules.order.service.MiniTourOrderCommandService;
|
import com.tourguide.modules.order.service.MiniTourOrderService;
|
import com.tourguide.security.AppUserPrincipal;
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PutMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RestController;
|
import javax.validation.Valid;
|
|
/**
|
* 游客小程序个人订单查询接口。
|
* 所有查询均使用 MINI Token 中的游客主键限定数据范围,客户端不能查看其他游客订单。
|
*/
|
@RestController
|
@RequestMapping("/api/mini/orders")
|
public class MiniTourOrderController {
|
private final MiniTourOrderService orderService;
|
private final MiniTourOrderCommandService commandService;
|
|
public MiniTourOrderController(MiniTourOrderService orderService,
|
MiniTourOrderCommandService commandService) {
|
this.orderService = orderService;
|
this.commandService = commandService;
|
}
|
|
/**
|
* 分页查询当前游客的订单,并按下单时间从新到旧排序。
|
* completed 分组同时包含待评价和已评价订单,响应中的 displayStatus 用于区分按钮和状态文案。
|
*
|
* @param principal 安全过滤器解析出的当前游客身份
|
* @param status 页面状态标签:all、pendingPay、pendingGuide、serving 或 completed
|
* @param page 页码,从 1 开始
|
* @param size 每页记录数
|
* @return 当前游客的订单分页结果
|
*/
|
@GetMapping
|
public ApiResponse<PageResponse<MiniOrderListResponse>> page(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@RequestParam(defaultValue = "all") String status,
|
@RequestParam(defaultValue = "1") long page,
|
@RequestParam(defaultValue = "10") long size) {
|
return ApiResponse.success(orderService.page(principal.getUserId(), status, page, size));
|
}
|
|
/**
|
* 查询个人中心订单入口的各状态数量,用于展示待付款、待讲解、讲解中和已完成角标。
|
*
|
* @param principal 安全过滤器解析出的当前游客身份
|
* @return 当前游客各主要订单状态数量
|
*/
|
@GetMapping("/summary")
|
public ApiResponse<MiniOrderSummaryResponse> summary(@AuthenticationPrincipal AppUserPrincipal principal) {
|
return ApiResponse.success(orderService.summary(principal.getUserId()));
|
}
|
|
@PostMapping
|
public ApiResponse<TourOrderResponse> create(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@Valid @RequestBody MiniOrderCreateRequest request) {
|
return ApiResponse.success(commandService.create(principal.getUserId(), request));
|
}
|
|
/**
|
* 确认当前游客的订单支付成功,将订单从待支付流转为等待导游接单。
|
* 当前用于小程序模拟支付完成;正式微信支付接入后应改由服务端支付回调确认。
|
*
|
* @param principal 安全过滤器解析出的当前游客身份
|
* @param id 当前游客订单主键
|
* @return 支付完成后的订单详情
|
*/
|
@PutMapping("/{id}/pay")
|
public ApiResponse<TourOrderResponse> pay(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@PathVariable Long id) {
|
return ApiResponse.success(commandService.confirmPayment(principal.getUserId(), id));
|
}
|
|
@GetMapping("/active")
|
public ApiResponse<TourOrderResponse> active(@AuthenticationPrincipal AppUserPrincipal principal) {
|
return ApiResponse.success(commandService.active(principal.getUserId()));
|
}
|
|
@GetMapping("/{id}")
|
public ApiResponse<TourOrderResponse> detail(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@PathVariable Long id) {
|
return ApiResponse.success(commandService.detail(principal.getUserId(), id));
|
}
|
|
@PutMapping("/{id}/cancel")
|
public ApiResponse<TourOrderResponse> cancel(
|
@AuthenticationPrincipal AppUserPrincipal principal,
|
@PathVariable Long id) {
|
return ApiResponse.success(commandService.cancel(principal.getUserId(), id));
|
}
|
}
|