Commit aff0446a3848df3e271a104bacdfb1fdfac57c3c

Authored by puhui999
1 parent 91240351

【代码优化】商城: 完成取消支付订单

yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
... ... @@ -35,6 +35,7 @@ public interface ErrorCodeConstants {
35 35 ErrorCode ORDER_RECEIVE_FAIL_DELIVERY_TYPE_NOT_PICK_UP = new ErrorCode(1_011_000_030, "交易订单自提失败,收货方式不是【用户自提】");
36 36 ErrorCode ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED = new ErrorCode(1_011_000_031, "交易订单修改收货地址失败,原因:订单不是【待发货】状态");
37 37 ErrorCode ORDER_CREATE_FAIL_EXIST_UNPAID = new ErrorCode(1_011_000_032, "交易订单创建失败,原因:存在未付款订单");
  38 + ErrorCode ORDER_CANCEL_PAID_FAIL = new ErrorCode(1_011_000_033, "交易订单取消支付失败,原因:订单不是【{}】状态");
38 39  
39 40 // ========== After Sale 模块 1-011-000-100 ==========
40 41 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1_011_000_100, "售后单不存在");
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -18,6 +18,8 @@ import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
18 18 import cn.iocoder.yudao.module.pay.api.order.PayOrderApi;
19 19 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
20 20 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
  21 +import cn.iocoder.yudao.module.pay.api.refund.PayRefundApi;
  22 +import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
21 23 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
22 24 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
23 25 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
... ... @@ -111,6 +113,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
111 113 private ProductCommentApi productCommentApi;
112 114 @Resource
113 115 public SocialClientApi socialClientApi;
  116 + @Resource
  117 + public PayRefundApi payRefundApi;
114 118  
115 119 @Resource
116 120 private TradeOrderProperties tradeOrderProperties;
... ... @@ -855,14 +859,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
855 859 @Override
856 860 @Transactional(rollbackFor = Exception.class)
857 861 public void cancelPaidOrder(Long userId, Long orderId) {
858   - // TODO @puhui999:需要校验状态;已支付的情况下,才可以。
  862 + // 1.1 检验订单存在
859 863 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
860 864 if (order == null) {
861 865 throw exception(ORDER_NOT_FOUND);
862 866 }
863   - cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
  867 + // 1.2 校验订单是否支付
  868 + if (!order.getPayStatus()) {
  869 + throw exception(ORDER_CANCEL_PAID_FAIL, "已支付");
  870 + }
  871 + // 1.3 校验订单是否已退款
  872 + if (ObjUtil.equal(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
  873 + throw exception(ORDER_CANCEL_PAID_FAIL, "未退款");
  874 + }
864 875  
865   - // TODO @puhui999:需要退款
  876 + // 2.1 取消订单
  877 + cancelOrder0(order, TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE);
  878 + // 2.2 创建退款单
  879 + payRefundApi.createRefund(new PayRefundCreateReqDTO()
  880 + .setAppKey(tradeOrderProperties.getPayAppKey()).setUserIp(getClientIP()) // 支付应用
  881 + .setMerchantOrderId(String.valueOf(order.getId())) // 支付单号
  882 + .setMerchantRefundId(String.valueOf(order.getId()))
  883 + .setReason("取消支付订单").setPrice(order.getPayPrice()));// 价格信息
866 884 }
867 885  
868 886 /**
... ...