FlashDeliveryUserController.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package com.ruoyi.app.flashdelivery.controller;
  2. import com.ruoyi.app.flashdelivery.dto.*;
  3. import com.ruoyi.app.flashdelivery.exception.FlashDeliveryQuoteChangedException;
  4. import com.ruoyi.app.flashdelivery.service.FlashDeliveryApplicationService;
  5. import com.ruoyi.common.annotation.Anonymous;
  6. import com.ruoyi.common.core.controller.BaseController;
  7. import com.ruoyi.common.core.domain.AjaxResult;
  8. import com.ruoyi.common.utils.MessageUtils;
  9. import com.ruoyi.system.utils.Auth;
  10. import com.ruoyi.system.utils.JwtUtil;
  11. import org.springframework.web.bind.annotation.*;
  12. /** 用户端闪送接口;用户身份始终从请求头 token 解析。 */
  13. @RestController
  14. @RequestMapping("/system/flashDelivery")
  15. @Anonymous
  16. public class FlashDeliveryUserController extends BaseController {
  17. private final FlashDeliveryApplicationService service;
  18. public FlashDeliveryUserController(FlashDeliveryApplicationService service) { this.service = service; }
  19. /** 获取当前启用的服务类型和公开计价摘要。 */
  20. @GetMapping("/home")
  21. @Auth
  22. public AjaxResult home(@RequestHeader String token) { return success(service.home()); }
  23. /** 根据取送坐标获取服务端实时报价。 */
  24. @PostMapping("/quote")
  25. @Auth
  26. public AjaxResult quote(@RequestHeader String token, @RequestBody FlashDeliveryQuoteRequest request) {
  27. userId(token);
  28. return success(service.quote(request));
  29. }
  30. /** 幂等创建闪送订单,客户端不能指定用户、距离或金额。 */
  31. @PostMapping("/orders")
  32. @Auth
  33. public AjaxResult create(@RequestHeader String token, @RequestBody FlashDeliveryCreateRequest request) {
  34. try {
  35. return success(service.create(userId(token), request));
  36. } catch (FlashDeliveryQuoteChangedException exception) {
  37. return AjaxResult.error(MessageUtils.message("flash.delivery.quote.changed"),
  38. exception.getLatestQuote());
  39. }
  40. }
  41. /**
  42. * 分页查询当前用户参与的闪送订单。
  43. *
  44. * @param token 登录令牌,用于解析当前用户 ID
  45. * @param page 页码,从 1 开始,默认 1
  46. * @param size 每页数量,默认 10,服务端限制为 1 至 100
  47. * @param role 订单角色;sender 表示我发的,receiver 表示我收的,不传按 sender 处理
  48. */
  49. @GetMapping("/orders")
  50. @Auth
  51. public AjaxResult orders(@RequestHeader String token,
  52. @RequestParam(defaultValue = "1") int page,
  53. @RequestParam(defaultValue = "10") int size,
  54. @RequestParam(required = false) String role) {
  55. return success(service.userOrders(userId(token), page, size, role));
  56. }
  57. /** 查询本人订单详情,直接返回订单字段和按类型分组的履约图片。 */
  58. @GetMapping("/orders/{id}")
  59. @Auth
  60. public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) {
  61. return success(service.userDetail(userId(token), id));
  62. }
  63. /** 修改取送信息的预报价,不写订单;沿用该订单计价快照。 */
  64. @PostMapping("/orders/{id}/address/quote")
  65. @Auth
  66. public AjaxResult quoteAddress(@RequestHeader String token, @PathVariable Long id,
  67. @RequestBody FlashDeliveryAddressChangeRequest request) {
  68. return success(service.quoteAddress(userId(token), id, request));
  69. }
  70. /** 确认修改当前订单取送信息;路线或报价变化时返回最新报价。 */
  71. @PostMapping("/orders/address")
  72. @Auth
  73. public AjaxResult updateAddress(@RequestHeader String token,
  74. @RequestBody FlashDeliveryAddressConfirmRequest request) {
  75. try {
  76. return success(service.updateAddress(userId(token), request == null ? null : request.getOrderId(), request));
  77. } catch (FlashDeliveryQuoteChangedException exception) {
  78. return AjaxResult.error(MessageUtils.message("flash.delivery.quote.changed"),
  79. exception.getLatestQuote());
  80. }
  81. }
  82. /** 待接单时追加正整数小费,同步增加订单总金额。 */
  83. @PostMapping("/orders/tip")
  84. @Auth
  85. public AjaxResult addTip(@RequestHeader String token,
  86. @RequestBody FlashDeliveryTipAddRequest request) {
  87. return success(service.addTip(userId(token), request == null ? null : request.getOrderId(), request));
  88. }
  89. /** 在待接单或已接单阶段取消本人订单。 */
  90. @PostMapping("/orders/{id}/cancel")
  91. @Auth
  92. public AjaxResult cancel(@RequestHeader String token, @PathVariable Long id,
  93. @RequestBody FlashDeliveryReasonRequest request) {
  94. service.userCancel(userId(token), id, request);
  95. return success();
  96. }
  97. /** 用户确认已经收到物品,将已送达订单置为已完成。 */
  98. @PostMapping("/orders/{id}/confirmReceipt")
  99. @Auth
  100. public AjaxResult confirmReceipt(@RequestHeader String token, @PathVariable Long id) {
  101. service.confirmReceipt(userId(token), id);
  102. return success();
  103. }
  104. private Long userId(String token) { return Long.valueOf(new JwtUtil().getusid(token)); }
  105. }