OpenDeliveryOrderController.java 1.97 KB
package com.diligrp.rider.controller;

import com.diligrp.rider.common.result.Result;
import com.diligrp.rider.dto.DeliveryOrderCreateDTO;
import com.diligrp.rider.service.DeliveryOrderService;
import com.diligrp.rider.vo.DeliveryOrderCreateVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

/**
 * 开放平台:配送订单接口
 * 路径 /api/open/** 由 OpenApiInterceptor 做签名鉴权
 * X-App-Key 会由拦截器写入 request attribute
 */
@RestController
@RequestMapping("/api/open/delivery/order")
@RequiredArgsConstructor
public class OpenDeliveryOrderController {

    private final DeliveryOrderService deliveryOrderService;

    /**
     * 创建配送订单(推单)
     * 外部系统在自己完成支付后调用此接口,中台接管配送
     */
    @PostMapping("/create")
    public Result<DeliveryOrderCreateVO> create(
            @Valid @RequestBody DeliveryOrderCreateDTO dto,
            HttpServletRequest request) {
        String appKey = request.getHeader("X-App-Key");
        return Result.success(deliveryOrderService.create(appKey, dto));
    }

    /**
     * 查询配送订单状态
     * 接入方可轮询此接口跟踪配送进度
     */
    @GetMapping("/query")
    public Result<DeliveryOrderCreateVO> query(
            @RequestParam String outOrderNo,
            HttpServletRequest request) {
        String appKey = request.getHeader("X-App-Key");
        return Result.success(deliveryOrderService.queryByOutOrderNo(appKey, outOrderNo));
    }

    /**
     * 取消配送订单
     * 仅 status=2(待接单)可取消
     */
    @PostMapping("/cancel")
    public Result<Void> cancel(
            @RequestParam String outOrderNo,
            HttpServletRequest request) {
        String appKey = request.getHeader("X-App-Key");
        deliveryOrderService.cancel(appKey, outOrderNo);
        return Result.success();
    }
}