FlashDeliveryRiderController.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.ruoyi.app.flashdelivery.controller;
  2. import com.ruoyi.app.flashdelivery.dto.FlashDeliveryTargetRequest;
  3. import com.ruoyi.app.flashdelivery.dto.FlashDeliveryProofRequest;
  4. import com.ruoyi.app.flashdelivery.dto.FlashDeliveryDeliverRequest;
  5. import com.ruoyi.app.flashdelivery.service.FlashDeliveryApplicationService;
  6. import com.ruoyi.common.annotation.Anonymous;
  7. import com.ruoyi.common.core.controller.BaseController;
  8. import com.ruoyi.common.core.domain.AjaxResult;
  9. import com.ruoyi.system.utils.Auth;
  10. import com.ruoyi.system.utils.JwtUtil;
  11. import org.springframework.web.bind.annotation.*;
  12. import java.math.BigDecimal;
  13. /** 骑手端闪送接口;仅 userType=2 的 token 可执行接单和履约操作。 */
  14. @RestController
  15. @RequestMapping("/system/flashDelivery/rider")
  16. @Anonymous
  17. public class FlashDeliveryRiderController extends BaseController {
  18. private final FlashDeliveryApplicationService service;
  19. public FlashDeliveryRiderController(FlashDeliveryApplicationService service) { this.service = service; }
  20. /**
  21. * 按页签查询可抢任务或当前骑手自己的任务。
  22. *
  23. * @param token 登录令牌,用于解析当前骑手 ID
  24. * @param page 页码,从 1 开始,默认 1
  25. * @param size 每页数量,默认 10,服务端限制为 1 至 100
  26. * @param tab 骑手任务页签:newTask、toPickup、delivering、completed 或 cancelled
  27. * @param longitude 骑手当前经度;newTask 页签选填,传入时必须与纬度同时提供
  28. * @param latitude 骑手当前纬度;newTask 页签选填,传入时必须与经度同时提供
  29. */
  30. @GetMapping("/orders")
  31. @Auth
  32. public AjaxResult orders(@RequestHeader String token,
  33. @RequestParam(defaultValue = "1") int page,
  34. @RequestParam(defaultValue = "10") int size,
  35. @RequestParam(defaultValue = "newTask") String tab,
  36. @RequestParam(required = false) BigDecimal longitude,
  37. @RequestParam(required = false) BigDecimal latitude) {
  38. return success(service.riderOrders(userId(token), page, size, tab, longitude, latitude));
  39. }
  40. /**
  41. * 骑手端任务角标数量:一次返回闪送订单 newTask/toPickup/delivering 三个页签的计数,
  42. * App 无需逐页签切换请求;newTask 距离过滤口径与列表一致。
  43. *
  44. * @param token 登录令牌,用于解析当前骑手 ID
  45. * @param longitude 骑手当前经度;选填,传入时必须与纬度同时提供
  46. * @param latitude 骑手当前纬度;选填,传入时必须与经度同时提供
  47. */
  48. @GetMapping("/orderCount")
  49. @Auth
  50. public AjaxResult orderCount(@RequestHeader String token,
  51. @RequestParam(required = false) BigDecimal longitude,
  52. @RequestParam(required = false) BigDecimal latitude) {
  53. return success(service.riderOrderCounts(userId(token), longitude, latitude));
  54. }
  55. /** 接单前隐藏敏感字段;接单后仅中单骑手可见完整履约信息。 */
  56. @GetMapping("/orders/{id}")
  57. @Auth
  58. public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) {
  59. return success(service.riderDetail(userId(token), id));
  60. }
  61. /** 按订单编号查询订单详情;脱敏与归属校验和数字 ID 查询一致。 */
  62. @GetMapping("/orders/byOrderNo")
  63. @Auth
  64. public AjaxResult detailByOrderNo(@RequestHeader String token, @RequestParam String orderNo) {
  65. return success(service.riderDetailByOrderNo(userId(token), orderNo));
  66. }
  67. /** 原子抢单;同一订单只能由一个骑手成功接取。 */
  68. @PostMapping("/orders/{id}/accept")
  69. @Auth
  70. public AjaxResult accept(@RequestHeader String token, @PathVariable Long id) {
  71. return success(service.accept(userId(token), id));
  72. }
  73. /** 骑手确认实际收款;仅首次条件更新写入审计日志,重复调用幂等成功。 */
  74. @PostMapping("/orders/{id}/confirmPayment")
  75. @Auth
  76. public AjaxResult confirmPayment(@RequestHeader String token, @PathVariable Long id) {
  77. service.confirmPayment(userId(token), id);
  78. return success();
  79. }
  80. /** 上传指定取货站凭证;全部取货站完成后订单才进入已取件。 */
  81. @PostMapping("/orders/{id}/pickup")
  82. @Auth
  83. public AjaxResult pickup(@RequestHeader String token, @PathVariable Long id,
  84. @RequestBody FlashDeliveryProofRequest request) {
  85. service.pickup(userId(token), id, request);
  86. return success();
  87. }
  88. /** 上传送达凭证并将已取件订单推进为已送达。 */
  89. @PostMapping("/orders/{id}/deliver")
  90. @Auth
  91. public AjaxResult deliver(@RequestHeader String token, @PathVariable Long id,
  92. @RequestBody FlashDeliveryDeliverRequest request) {
  93. service.deliver(userId(token), id, request);
  94. return success();
  95. }
  96. /** 只确认指定站点取货,不自动选择其他待取站点。 */
  97. @PostMapping("/orders/{id}/stops/{stopId}/pickup")
  98. @Auth
  99. public AjaxResult pickupStop(@RequestHeader String token, @PathVariable Long id, @PathVariable Long stopId,
  100. @RequestBody FlashDeliveryProofRequest request) {
  101. service.pickupAtStop(userId(token), id, stopId, request);
  102. return success();
  103. }
  104. /** 保存前往目标及必要的骑手同意声明,不推进取件状态。 */
  105. @PostMapping("/orders/{id}/stops/{stopId}/target")
  106. @Auth
  107. public AjaxResult target(@RequestHeader String token, @PathVariable Long id, @PathVariable Long stopId,
  108. @RequestBody FlashDeliveryTargetRequest request) {
  109. return success(service.selectTarget(userId(token), id, stopId, request));
  110. }
  111. private Long userId(String token) { return Long.valueOf(new JwtUtil().getusid(token)); }
  112. }