| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package com.ruoyi.app.flashdelivery.controller;
- import com.ruoyi.app.flashdelivery.dto.*;
- import com.ruoyi.app.flashdelivery.exception.FlashDeliveryQuoteChangedException;
- 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.common.utils.MessageUtils;
- 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) {
- try {
- return success(service.create(userId(token), request));
- } catch (FlashDeliveryQuoteChangedException exception) {
- return AjaxResult.error(MessageUtils.message("flash.delivery.quote.changed"),
- exception.getLatestQuote());
- }
- }
- /**
- * 分页查询当前用户参与的闪送订单。
- *
- * @param token 登录令牌,用于解析当前用户 ID
- * @param page 页码,从 1 开始,默认 1
- * @param size 每页数量,默认 10,服务端限制为 1 至 100
- * @param role 订单角色;sender 表示我发的,receiver 表示我收的,不传按 sender 处理
- */
- @GetMapping("/orders")
- @Auth
- public AjaxResult orders(@RequestHeader String token,
- @RequestParam(defaultValue = "1") int page,
- @RequestParam(defaultValue = "10") int size,
- @RequestParam(required = false) String role) {
- return success(service.userOrders(userId(token), page, size, role));
- }
- /** 查询本人订单详情,直接返回订单字段和按类型分组的履约图片。 */
- @GetMapping("/orders/{id}")
- @Auth
- public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) {
- return success(service.userDetail(userId(token), id));
- }
- /** 修改取送信息的预报价,不写订单;沿用该订单计价快照。 */
- @PostMapping("/orders/{id}/address/quote")
- @Auth
- public AjaxResult quoteAddress(@RequestHeader String token, @PathVariable Long id,
- @RequestBody FlashDeliveryAddressChangeRequest request) {
- return success(service.quoteAddress(userId(token), id, request));
- }
- /** 确认修改当前订单取送信息;路线或报价变化时返回最新报价。 */
- @PostMapping("/orders/address")
- @Auth
- public AjaxResult updateAddress(@RequestHeader String token,
- @RequestBody FlashDeliveryAddressConfirmRequest request) {
- try {
- return success(service.updateAddress(userId(token), request == null ? null : request.getOrderId(), request));
- } catch (FlashDeliveryQuoteChangedException exception) {
- return AjaxResult.error(MessageUtils.message("flash.delivery.quote.changed"),
- exception.getLatestQuote());
- }
- }
- /** 待接单时追加正整数小费,同步增加订单总金额。 */
- @PostMapping("/orders/tip")
- @Auth
- public AjaxResult addTip(@RequestHeader String token,
- @RequestBody FlashDeliveryTipAddRequest request) {
- return success(service.addTip(userId(token), request == null ? null : request.getOrderId(), request));
- }
- /** 在待接单或已接单阶段取消本人订单。 */
- @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)); }
- }
|