Commit aff0446a3848df3e271a104bacdfb1fdfac57c3c
1 parent
91240351
【代码优化】商城: 完成取消支付订单
Showing
2 changed files
with
22 additions
and
3 deletions
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 | /** |