package com.ruoyi.app.flashdelivery.controller; import com.ruoyi.app.flashdelivery.dto.*; import com.ruoyi.app.flashdelivery.service.FlashDeliveryApplicationService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.utils.Auth; import com.ruoyi.system.utils.JwtUtil; import org.springframework.web.bind.annotation.*; /** 用户端闪送接口;用户身份始终从请求头 token 解析。 */ @RestController @RequestMapping("/system/flashDelivery") @Anonymous public class FlashDeliveryUserController extends BaseController { private final FlashDeliveryApplicationService service; public FlashDeliveryUserController(FlashDeliveryApplicationService service) { this.service = service; } /** 获取当前启用的服务类型和公开计价摘要。 */ @GetMapping("/home") @Auth public AjaxResult home(@RequestHeader String token) { return success(service.home()); } /** 根据取送坐标获取服务端实时报价。 */ @PostMapping("/quote") @Auth public AjaxResult quote(@RequestHeader String token, @RequestBody FlashDeliveryQuoteRequest request) { userId(token); return success(service.quote(request)); } /** 幂等创建闪送订单,客户端不能指定用户、距离或金额。 */ @PostMapping("/orders") @Auth public AjaxResult create(@RequestHeader String token, @RequestBody FlashDeliveryCreateRequest request) { return success(service.create(userId(token), request)); } /** 分页查询当前用户自己的闪送订单。 */ @GetMapping("/orders") @Auth public AjaxResult orders(@RequestHeader String token, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String status, @RequestParam(required = false) String scene, @RequestParam(required = false) String serviceType) { return success(service.userOrders(userId(token), pageNum, pageSize, status, scene, serviceType)); } /** 查询本人订单详情、履约图片和状态日志。 */ @GetMapping("/orders/{id}") @Auth public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) { return success(service.userDetail(userId(token), id)); } /** 在待接单或已接单阶段取消本人订单。 */ @PostMapping("/orders/{id}/cancel") @Auth public AjaxResult cancel(@RequestHeader String token, @PathVariable Long id, @RequestBody FlashDeliveryReasonRequest request) { service.userCancel(userId(token), id, request); return success(); } /** 用户确认已经收到物品,将已送达订单置为已完成。 */ @PostMapping("/orders/{id}/confirmReceipt") @Auth public AjaxResult confirmReceipt(@RequestHeader String token, @PathVariable Long id) { service.confirmReceipt(userId(token), id); return success(); } private Long userId(String token) { return Long.valueOf(new JwtUtil().getusid(token)); } }