p-honggang.li
2025-08-20 fefed50bf97060a82aabd09e090fa08ce532532f
src/main/java/com/webmanage/controller/OrderController.java
@@ -3,7 +3,9 @@
import com.webmanage.common.Result;
import com.webmanage.dto.CreateOrderDTO;
import com.webmanage.dto.OrderQueryDTO;
import com.webmanage.entity.OrderInfo;
import com.webmanage.service.OrderInfoService;
import com.webmanage.service.TokenService;
import com.webmanage.service.OrderNoService;
import com.webmanage.vo.OrderDetailVO;
import io.swagger.annotations.Api;
@@ -29,6 +31,7 @@
public class OrderController {
    @Resource private OrderInfoService orderInfoService;
    @Resource private OrderNoService orderNoService;
    @Resource private TokenService tokenService;
    @PostMapping("/buyer/page")
    @ApiOperation("分页查询买家订单列表")
@@ -38,17 +41,33 @@
    }
    @PostMapping("/create")
    @ApiOperation("创建订单(包含订单详情)")
    public Result<Object> createOrder(@Valid @RequestBody CreateOrderDTO createOrderDTO) {
    @ApiOperation("创建订单(包含订单详情),需在 Header 携带 Idempotency-Token 防重复提交")
    public Result<OrderInfo> createOrder(@RequestHeader(value = "Idempotency-Token", required = false) String token,
                                         @Valid @RequestBody CreateOrderDTO createOrderDTO) {
        try {
            String orderId = orderInfoService.createOrder(createOrderDTO);
            return Result.success(orderId);
            if (!tokenService.verifyAndConsume(token)) {
                return Result.error("请求无效或重复提交,请刷新页面后重试");
            }
            OrderInfo orderInfo = orderInfoService.createOrder(createOrderDTO);
            return Result.success(orderInfo);
        } catch (Exception e) {
            log.error("创建订单失败", e);
            return Result.error("创建订单失败:" + e.getMessage());
        }
    }
    @GetMapping("/idempotency/token")
    @ApiOperation("获取一次性防重复提交 Token")
    public Result<Object> getIdempotencyToken(@RequestParam(required = false) Long userId) {
        try {
            String token = tokenService.generateToken(userId);
            return Result.success("token生成",token);
        } catch (Exception e) {
            log.error("生成防重复提交 Token 失败", e);
            return Result.error("生成防重复提交 Token 失败:" + e.getMessage());
        }
    }
    @GetMapping("/no/new")
    @ApiOperation("生成唯一订单号")
    public Result<Object> generateOrderNo() {