Commit 1c8a36513b7cce02a6664122d6cbda94ffbc0b3f
1 parent
9ea129ba
feat 退款允许相同订单多次退款
Showing
7 changed files
with
26 additions
and
15 deletions
cashier-mall/src/main/java/com/diligrp/cashier/mall/api/RtMallOrderRefundApi.java
| ... | ... | @@ -41,7 +41,12 @@ public class RtMallOrderRefundApi { |
| 41 | 41 | @PostMapping("/refund/v1") |
| 42 | 42 | @ParamLogPrint(outPrint = true) |
| 43 | 43 | @Sign(sign = RtMallSign.class) |
| 44 | - @RepeatSubmit(prefix = "refund:", value = {"#req['order_id']", "#req['trade_id']"}, duplicationSubmit = SpelDuplicationSubmit.class) | |
| 44 | + @RepeatSubmit( | |
| 45 | + prefix = "refund:", | |
| 46 | + waitTime = 5, | |
| 47 | + leaseTime = 10, | |
| 48 | + value = {"#req['order_id']", "#req['trade_id']"}, | |
| 49 | + duplicationSubmit = SpelDuplicationSubmit.class) | |
| 45 | 50 | public RtMarkMessage<RefundSuccessVO> refund(@RequestBody Object req) { |
| 46 | 51 | RefundCO refundCo = JsonUtils.convertValue(req, RefundCO.class); |
| 47 | 52 | RtMallValidateUtils.valid(refundCo); | ... | ... |
cashier-mall/src/main/java/com/diligrp/cashier/mall/api/RtMallScanOrderRefundApi.java
| ... | ... | @@ -41,7 +41,12 @@ public class RtMallScanOrderRefundApi { |
| 41 | 41 | @PostMapping("/refund/v1") |
| 42 | 42 | @ParamLogPrint(outPrint = true) |
| 43 | 43 | @Sign(sign = RtMallSign.class) |
| 44 | - @RepeatSubmit(prefix = "refund:", value = {"#req['order_id']", "#req['trade_id']"}, duplicationSubmit = SpelDuplicationSubmit.class) | |
| 44 | + @RepeatSubmit( | |
| 45 | + prefix = "refund:", | |
| 46 | + waitTime = 5, | |
| 47 | + leaseTime = 10, | |
| 48 | + value = {"#req['order_id']", "#req['trade_id']"}, | |
| 49 | + duplicationSubmit = SpelDuplicationSubmit.class) | |
| 45 | 50 | public RtMarkMessage<RefundSuccessVO> refund(@RequestBody Object req) { |
| 46 | 51 | RefundCO refundCo = JsonUtils.convertValue(req, RefundCO.class); |
| 47 | 52 | RtMallValidateUtils.valid(refundCo); | ... | ... |
cashier-mall/src/main/java/com/diligrp/cashier/mall/dao/MallBizRefundDao.java
| ... | ... | @@ -22,5 +22,5 @@ public interface MallBizRefundDao extends MybatisMapperSupport { |
| 22 | 22 | |
| 23 | 23 | MallBizRefund getByRefundTradeId(@Param("refundTradeId") String refundTradeId); |
| 24 | 24 | |
| 25 | - int countRefund(@Param("bizOrderId") Long bizOrderId); | |
| 25 | + long sumRefundFee(@Param("bizOrderId") Long bizOrderId); | |
| 26 | 26 | } | ... | ... |
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/biz/MallBizRefundService.java
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/biz/impl/MallBizRefundServiceImpl.java
| ... | ... | @@ -63,10 +63,11 @@ public class MallBizRefundServiceImpl implements MallBizRefundService { |
| 63 | 63 | @Override |
| 64 | 64 | @Transactional(rollbackFor = {Exception.class}) |
| 65 | 65 | public RefundSuccessVO refund(RefundCO refundCo) { |
| 66 | - MallBizRefund mallBizRefund = mallBizRefundDao.getMallBizRefund(new MallBizRefund(refundCo.getOrderId(), refundCo.getTradeId())); | |
| 67 | - if (Objects.nonNull(mallBizRefund)) { | |
| 68 | - throw new RtMartMallException(RtMarkErrorCode.E5006); | |
| 69 | - } | |
| 66 | + // 允许重复退款 | |
| 67 | +// MallBizRefund mallBizRefund = mallBizRefundDao.getMallBizRefund(new MallBizRefund(refundCo.getOrderId(), refundCo.getTradeId())); | |
| 68 | +// if (Objects.nonNull(mallBizRefund)) { | |
| 69 | +// throw new RtMartMallException(RtMarkErrorCode.E5006); | |
| 70 | +// } | |
| 70 | 71 | |
| 71 | 72 | MallBizOrder mallBizOrder = mallBizOrderDao.getByOrderId(refundCo.getOrderId()); |
| 72 | 73 | if (Objects.isNull(mallBizOrder)) { |
| ... | ... | @@ -167,8 +168,8 @@ public class MallBizRefundServiceImpl implements MallBizRefundService { |
| 167 | 168 | * countNoRefund |
| 168 | 169 | */ |
| 169 | 170 | @Override |
| 170 | - public int countRefund(Long bizOrderId) { | |
| 171 | - return mallBizRefundDao.countRefund(bizOrderId); | |
| 171 | + public long sumRefundFee(Long bizOrderId) { | |
| 172 | + return mallBizRefundDao.sumRefundFee(bizOrderId); | |
| 172 | 173 | } |
| 173 | 174 | |
| 174 | 175 | @Override | ... | ... |
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/sourcechannel/AbstractSourceChannel.java
| ... | ... | @@ -14,7 +14,6 @@ import com.diligrp.cashier.mall.property.RtMallDynamicProperty; |
| 14 | 14 | import com.diligrp.cashier.mall.service.biz.MallBizPaymentService; |
| 15 | 15 | import com.diligrp.cashier.mall.service.biz.MallBizRefundService; |
| 16 | 16 | import com.diligrp.cashier.mall.type.OrderState; |
| 17 | -import com.diligrp.cashier.mall.type.OrderType; | |
| 18 | 17 | import com.diligrp.cashier.mall.type.RtMarkErrorCode; |
| 19 | 18 | import com.diligrp.cashier.pipeline.type.PaymentState; |
| 20 | 19 | import com.diligrp.cashier.shared.spi.domain.PaymentResultBO; |
| ... | ... | @@ -129,8 +128,8 @@ public abstract class AbstractSourceChannel { |
| 129 | 128 | List<MallBizPaymentOrder> paymentOrderList = mallBizPaymentService.listPaymentOrderByBizOrderId(mallBizRefund.getBizOrderId()); |
| 130 | 129 | boolean success = paymentOrderList.stream().allMatch(vo -> Objects.equals(vo.getPayState(), PaymentState.SUCCESS.getCode())); |
| 131 | 130 | if (success) { |
| 132 | - long count = mallBizRefundService.countRefund(mallBizRefund.getBizOrderId()); | |
| 133 | - if (paymentOrderList.size() == count) { | |
| 131 | + long sumRefundFee = mallBizRefundService.sumRefundFee(mallBizRefund.getBizOrderId()); | |
| 132 | + if (paymentOrderList.stream().mapToLong(MallBizPaymentOrder::getPayFee).sum() == sumRefundFee) { | |
| 134 | 133 | LOG.info("订单全部退款完成,orderId:{}", mallBizRefund.getBizOrderId()); |
| 135 | 134 | mallBizOrderDao.updateByIds(List.of(mallBizRefund.getBizOrderId()), OrderState.PAYED_CANCEL.code); |
| 136 | 135 | } | ... | ... |
cashier-mall/src/main/resources/com/diligrp/cashier/dao/mapper/MallBizRefundDao.xml
| ... | ... | @@ -339,8 +339,9 @@ |
| 339 | 339 | where refund_trade_id = #{refundTradeId} |
| 340 | 340 | </select> |
| 341 | 341 | |
| 342 | - <select id="countRefund" resultType="java.lang.Integer"> | |
| 343 | - select count(*) | |
| 342 | + <select id="sumRefundFee" resultType="java.lang.Long"> | |
| 343 | + select | |
| 344 | + sum(refund_fee) as refundFee | |
| 344 | 345 | from mall_biz_refund |
| 345 | 346 | where biz_order_id = #{bizOrderId} |
| 346 | 347 | and refund_state = 4 | ... | ... |