| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package com.ruoyi.app.flashdelivery.controller;
- import com.ruoyi.app.flashdelivery.dto.FlashDeliveryTargetRequest;
- import com.ruoyi.app.flashdelivery.dto.FlashDeliveryProofRequest;
- import com.ruoyi.app.flashdelivery.dto.FlashDeliveryDeliverRequest;
- 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.*;
- import java.math.BigDecimal;
- /** 骑手端闪送接口;仅 userType=2 的 token 可执行接单和履约操作。 */
- @RestController
- @RequestMapping("/system/flashDelivery/rider")
- @Anonymous
- public class FlashDeliveryRiderController extends BaseController {
- private final FlashDeliveryApplicationService service;
- public FlashDeliveryRiderController(FlashDeliveryApplicationService service) { this.service = service; }
- /**
- * 按页签查询可抢任务或当前骑手自己的任务。
- *
- * @param token 登录令牌,用于解析当前骑手 ID
- * @param page 页码,从 1 开始,默认 1
- * @param size 每页数量,默认 10,服务端限制为 1 至 100
- * @param tab 骑手任务页签:newTask、toPickup、delivering、completed 或 cancelled
- * @param longitude 骑手当前经度;newTask 页签选填,传入时必须与纬度同时提供
- * @param latitude 骑手当前纬度;newTask 页签选填,传入时必须与经度同时提供
- */
- @GetMapping("/orders")
- @Auth
- public AjaxResult orders(@RequestHeader String token,
- @RequestParam(defaultValue = "1") int page,
- @RequestParam(defaultValue = "10") int size,
- @RequestParam(defaultValue = "newTask") String tab,
- @RequestParam(required = false) BigDecimal longitude,
- @RequestParam(required = false) BigDecimal latitude) {
- return success(service.riderOrders(userId(token), page, size, tab, longitude, latitude));
- }
- /**
- * 骑手端任务角标数量:一次返回闪送订单 newTask/toPickup/delivering 三个页签的计数,
- * App 无需逐页签切换请求;newTask 距离过滤口径与列表一致。
- *
- * @param token 登录令牌,用于解析当前骑手 ID
- * @param longitude 骑手当前经度;选填,传入时必须与纬度同时提供
- * @param latitude 骑手当前纬度;选填,传入时必须与经度同时提供
- */
- @GetMapping("/orderCount")
- @Auth
- public AjaxResult orderCount(@RequestHeader String token,
- @RequestParam(required = false) BigDecimal longitude,
- @RequestParam(required = false) BigDecimal latitude) {
- return success(service.riderOrderCounts(userId(token), longitude, latitude));
- }
- /** 接单前隐藏敏感字段;接单后仅中单骑手可见完整履约信息。 */
- @GetMapping("/orders/{id}")
- @Auth
- public AjaxResult detail(@RequestHeader String token, @PathVariable Long id) {
- return success(service.riderDetail(userId(token), id));
- }
- /** 按订单编号查询订单详情;脱敏与归属校验和数字 ID 查询一致。 */
- @GetMapping("/orders/byOrderNo")
- @Auth
- public AjaxResult detailByOrderNo(@RequestHeader String token, @RequestParam String orderNo) {
- return success(service.riderDetailByOrderNo(userId(token), orderNo));
- }
- /** 原子抢单;同一订单只能由一个骑手成功接取。 */
- @PostMapping("/orders/{id}/accept")
- @Auth
- public AjaxResult accept(@RequestHeader String token, @PathVariable Long id) {
- return success(service.accept(userId(token), id));
- }
- /** 骑手确认实际收款;仅首次条件更新写入审计日志,重复调用幂等成功。 */
- @PostMapping("/orders/{id}/confirmPayment")
- @Auth
- public AjaxResult confirmPayment(@RequestHeader String token, @PathVariable Long id) {
- service.confirmPayment(userId(token), id);
- return success();
- }
- /** 上传指定取货站凭证;全部取货站完成后订单才进入已取件。 */
- @PostMapping("/orders/{id}/pickup")
- @Auth
- public AjaxResult pickup(@RequestHeader String token, @PathVariable Long id,
- @RequestBody FlashDeliveryProofRequest request) {
- service.pickup(userId(token), id, request);
- return success();
- }
- /** 上传送达凭证并将已取件订单推进为已送达。 */
- @PostMapping("/orders/{id}/deliver")
- @Auth
- public AjaxResult deliver(@RequestHeader String token, @PathVariable Long id,
- @RequestBody FlashDeliveryDeliverRequest request) {
- service.deliver(userId(token), id, request);
- return success();
- }
- /** 只确认指定站点取货,不自动选择其他待取站点。 */
- @PostMapping("/orders/{id}/stops/{stopId}/pickup")
- @Auth
- public AjaxResult pickupStop(@RequestHeader String token, @PathVariable Long id, @PathVariable Long stopId,
- @RequestBody FlashDeliveryProofRequest request) {
- service.pickupAtStop(userId(token), id, stopId, request);
- return success();
- }
- /** 保存前往目标及必要的骑手同意声明,不推进取件状态。 */
- @PostMapping("/orders/{id}/stops/{stopId}/target")
- @Auth
- public AjaxResult target(@RequestHeader String token, @PathVariable Long id, @PathVariable Long stopId,
- @RequestBody FlashDeliveryTargetRequest request) {
- return success(service.selectTarget(userId(token), id, stopId, request));
- }
- private Long userId(String token) { return Long.valueOf(new JwtUtil().getusid(token)); }
- }
|