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,6 +35,7 @@ public interface ErrorCodeConstants {
35 ErrorCode ORDER_RECEIVE_FAIL_DELIVERY_TYPE_NOT_PICK_UP = new ErrorCode(1_011_000_030, "交易订单自提失败,收货方式不是【用户自提】"); 35 ErrorCode ORDER_RECEIVE_FAIL_DELIVERY_TYPE_NOT_PICK_UP = new ErrorCode(1_011_000_030, "交易订单自提失败,收货方式不是【用户自提】");
36 ErrorCode ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED = new ErrorCode(1_011_000_031, "交易订单修改收货地址失败,原因:订单不是【待发货】状态"); 36 ErrorCode ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED = new ErrorCode(1_011_000_031, "交易订单修改收货地址失败,原因:订单不是【待发货】状态");
37 ErrorCode ORDER_CREATE_FAIL_EXIST_UNPAID = new ErrorCode(1_011_000_032, "交易订单创建失败,原因:存在未付款订单"); 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 // ========== After Sale 模块 1-011-000-100 ========== 40 // ========== After Sale 模块 1-011-000-100 ==========
40 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1_011_000_100, "售后单不存在"); 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,6 +18,8 @@ import cn.iocoder.yudao.module.member.api.address.dto.MemberAddressRespDTO;
18 import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; 18 import cn.iocoder.yudao.module.pay.api.order.PayOrderApi;
19 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; 19 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
20 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; 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 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; 23 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
22 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; 24 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
23 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO; 25 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
@@ -111,6 +113,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -111,6 +113,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
111 private ProductCommentApi productCommentApi; 113 private ProductCommentApi productCommentApi;
112 @Resource 114 @Resource
113 public SocialClientApi socialClientApi; 115 public SocialClientApi socialClientApi;
  116 + @Resource
  117 + public PayRefundApi payRefundApi;
114 118
115 @Resource 119 @Resource
116 private TradeOrderProperties tradeOrderProperties; 120 private TradeOrderProperties tradeOrderProperties;
@@ -855,14 +859,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -855,14 +859,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
855 @Override 859 @Override
856 @Transactional(rollbackFor = Exception.class) 860 @Transactional(rollbackFor = Exception.class)
857 public void cancelPaidOrder(Long userId, Long orderId) { 861 public void cancelPaidOrder(Long userId, Long orderId) {
858 - // TODO @puhui999:需要校验状态;已支付的情况下,才可以。 862 + // 1.1 检验订单存在
859 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId); 863 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(orderId, userId);
860 if (order == null) { 864 if (order == null) {
861 throw exception(ORDER_NOT_FOUND); 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 /**