FlashDeliveryRiderController.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.ruoyi.app.flashdelivery.controller;
  2. import com.ruoyi.app.flashdelivery.dto.FlashDeliveryProofRequest;
  3. import com.ruoyi.app.flashdelivery.dto.FlashDeliveryDeliverRequest;
  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.system.utils.Auth;
  9. import com.ruoyi.system.utils.JwtUtil;
  10. import org.springframework.web.bind.annotation.*;
  11. import java.math.BigDecimal;
  12. /** 骑手端闪送接口;仅 userType=2 的 token 可执行接单和履约操作。 */
  13. @RestController
  14. @RequestMapping("/system/flashDelivery/rider")
  15. @Anonymous
  16. public class FlashDeliveryRiderController extends BaseController {
  17. private final FlashDeliveryApplicationService service;
  18. public FlashDeliveryRiderController(FlashDeliveryApplicationService service) { this.service = service; }
  19. /**
  20. * 按页签查询可抢任务或当前骑手自己的任务。
  21. *
  22. * @param token 登录令牌,用于解析当前骑手 ID
  23. * @param page 页码,从 1 开始,默认 1
  24. * @param size 每页数量,默认 10,服务端限制为 1 至 100
  25. * @param tab 骑手任务页签:newTask、toPickup、delivering、completed 或 cancelled
  26. * @param longitude 骑手当前经度;newTask 页签选填,传入时必须与纬度同时提供
  27. * @param latitude 骑手当前纬度;newTask 页签选填,传入时必须与经度同时提供
  28. */
  29. @GetMapping("/orders")
  30. @Auth
  31. public AjaxResult orders(@RequestHeader String token,
  32. @RequestParam(defaultValue = "1") int page,
  33. @RequestParam(defaultValue = "10") int size,
  34. @RequestParam(defaultValue = "newTask") String tab,
  35. @RequestParam(required = false) BigDecimal longitude,
  36. @RequestParam(required = false) BigDecimal latitude) {
  37. return success(service.riderOrders(userId(token), page, size, tab, longitude, latitude));
  38. }
  39. /** 接单前隐藏敏感字段;接单后仅中单骑手可见完整履约信息。 */
  40. @GetMapping("/orders/{id}")
  41. @Auth
  42. public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) {
  43. return success(service.riderDetail(userId(token), id));
  44. }
  45. /** 原子抢单;同一订单只能由一个骑手成功接取。 */
  46. @PostMapping("/orders/{id}/accept")
  47. @Auth
  48. public AjaxResult accept(@RequestHeader String token, @PathVariable Long id) {
  49. return success(service.accept(userId(token), id));
  50. }
  51. /** 上传取件凭证并将已接单订单推进为已取件。 */
  52. @PostMapping("/orders/{id}/pickup")
  53. @Auth
  54. public AjaxResult pickup(@RequestHeader String token, @PathVariable Long id,
  55. @RequestBody FlashDeliveryProofRequest request) {
  56. service.pickup(userId(token), id, request);
  57. return success();
  58. }
  59. /** 上传送达凭证并将已取件订单推进为已送达。 */
  60. @PostMapping("/orders/{id}/deliver")
  61. @Auth
  62. public AjaxResult deliver(@RequestHeader String token, @PathVariable Long id,
  63. @RequestBody FlashDeliveryDeliverRequest request) {
  64. service.deliver(userId(token), id, request);
  65. return success();
  66. }
  67. private Long userId(String token) { return Long.valueOf(new JwtUtil().getusid(token)); }
  68. }