Administrator
yesterday 9dfd9506d0743a22d404046ffe7cda6081404a8a
src/main/java/cc/mrbird/febs/mall/controller/dependentStation/ApiMallOrderController.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.LimitType;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.common.utils.ValidateEntityUtils;
import cc.mrbird.febs.mall.controller.dependentStation.constant.OrderConstants;
import cc.mrbird.febs.mall.dto.*;
@@ -15,6 +16,7 @@
import cc.mrbird.febs.mall.vo.OrderListVo;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.service.LwPayService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -174,6 +176,49 @@
        return new FebsResponse().success().data(iXcxPayService.getTemplateId());
    }
    // ==================== XT 支付 ====================
    /**
     * 创建订单并通过 XT 支付
     * <p>
     * 流程:创建订单 → 通过 XT 支付链接
     * <p>
     */
    @ApiOperation(value = "创建订单-XT支付", notes = "创建订单并返回XT支付")
    @PostMapping(value = "/createOrderByXtPay")
    @Limit(key = "createOrderByXtPay", period = 1, count = 1, name = "XT下单", prefix = "limit", limitType = LimitType.IP)
    public FebsResponse createOrderByXtPay(@RequestBody @Validated XtPayCreateOrderDto lwPayDto) {
        // 1. 创建订单
        AddOrderDto addOrderDto = lwPayDto.getOrder();
        Long orderId = mallOrderInfoService.createOrder(addOrderDto);
        // 2. 获取订单详情
        MallOrderInfo order = mallOrderInfoService.getById(orderId);
        if (order != null
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            return mallOrderInfoService.createOrderByXtPay();
        }
        return new FebsResponse().fail().message("Payment channel exception");
    }
    @ApiOperation(value = "XT支付", notes = "XT支付")
    @PostMapping(value = "/payOrderByXtPay", produces = "application/json")
    public FebsResponse payOrderByXtPay(@RequestBody @Validated ApiOrderPayDto payDto) {
        Long orderId = payDto.getOrderId();
        Integer payType = payDto.getPayType();
        // 2. 获取订单详情
        MallOrderInfo order = mallOrderInfoService.getById(orderId);
        if (order != null
                && OrderConstants.PAY_TYPE_XT == payType
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            return mallOrderInfoService.createOrderByXtPay();
        }
        return new FebsResponse().fail().message("Payment channel exception");
    }
    // ==================== LWPAY 支付 ====================
    /**
@@ -198,6 +243,7 @@
        if (order != null
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            // 3. 调用 LWPAY 代收接口
            try {
                String payUrl = lwPayService.createPayment(
@@ -237,6 +283,14 @@
                && OrderConstants.PAY_TYPE_SYSTEM == payType
                && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()
        ){
            String orderNo = MallUtils.getOrderNum();
            order.setOrderNo(orderNo);
            mallOrderInfoService.getBaseMapper().update(
                    null,
                    Wrappers.lambdaUpdate(MallOrderInfo.class)
                    .set(MallOrderInfo::getOrderNo, orderNo)
                    .eq(MallOrderInfo::getId, orderId)
            );
            // 3. 调用 LWPAY 代收接口
            try {
                String payUrl = lwPayService.createPayment(
@@ -249,7 +303,7 @@
                result.put("orderNo", order.getOrderNo());
                result.put("amount", order.getAmount());
                result.put("payUrl", payUrl);
                return new FebsResponse().success().data(result).message("下单成功");
                return new FebsResponse().success().data(result).message("success");
            } catch (Exception e) {
                log.error("LWPAY 代收下单失败: orderId={}", orderId, e);
                return new FebsResponse().fail().message("Payment channel exception: " + e.getMessage());