|
@@ -1580,7 +1580,10 @@ DISCOUNT("畅学卡")
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void refundPayment(String orderNo, String reason) {
|
|
|
+ public void refundPayment(String orderNo, String reason, List<Long> orderDetailIds) {
|
|
|
+ if (CollectionUtils.isEmpty(orderDetailIds)) {
|
|
|
+ throw new BizException("退款订单明细不能为空");
|
|
|
+ }
|
|
|
|
|
|
// 查询订单信息,支付状态
|
|
|
UserPaymentOrderWrapper.UserPaymentOrder paymentOrder = userPaymentOrderService.getUserPaymentOrderByOrderNo(orderNo);
|
|
@@ -1608,7 +1611,7 @@ DISCOUNT("畅学卡")
|
|
|
List<PaymentDivMemberRecord> records = paymentDivMemberRecordService.getByOrderNo(paymentOrder.getOrderNo());
|
|
|
|
|
|
for (PaymentDivMemberRecord record : records) {
|
|
|
- if (record.getTenantEnterFlag()) {
|
|
|
+ if (Boolean.TRUE.equals(record.getTenantEnterFlag())) {
|
|
|
|
|
|
refundFlag = saveDivBackRecord(paymentOrder, record);
|
|
|
|
|
@@ -1617,11 +1620,11 @@ DISCOUNT("畅学卡")
|
|
|
}
|
|
|
|
|
|
if (refundFlag) {
|
|
|
- refundOnly(reason, paymentOrder.getOrderNo());
|
|
|
+ refundOnly(reason, paymentOrder.getOrderNo(),orderDetailIds);
|
|
|
}
|
|
|
|
|
|
//处理退款业务
|
|
|
- userOrderRefundService.orderRefundSuccessBizHandleByOrderNo(paymentOrder.getOrderNo());
|
|
|
+ userOrderRefundService.orderRefundSuccessBizHandleByOrderNo(paymentOrder.getOrderNo(),orderDetailIds);
|
|
|
}, 10L, TimeUnit.SECONDS);
|
|
|
|
|
|
}
|
|
@@ -1632,6 +1635,16 @@ DISCOUNT("畅学卡")
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void refundOnly(String reason, String orderNo) {
|
|
|
+ refundOnly(reason, orderNo,null);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 退款
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void refundOnly(String reason, String orderNo, List<Long> orderDetailIds) {
|
|
|
|
|
|
// 查询订单信息,支付状态
|
|
|
UserPaymentOrderWrapper.UserPaymentOrder paymentOrder = userPaymentOrderService.getUserPaymentOrderByOrderNo(orderNo);
|
|
@@ -1643,15 +1656,17 @@ DISCOUNT("畅学卡")
|
|
|
throw new BizException("订单信息不存在");
|
|
|
}
|
|
|
|
|
|
+ List<UserOrderDetailVo> collect = detail.getOrderDetailList().stream().filter(o -> orderDetailIds.contains(o.getId())).collect(Collectors.toList());
|
|
|
+ BigDecimal reduce = collect.stream().map(o -> o.getActualPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 提交退款申请记录
|
|
|
UserOrderRefund userRefundOrder = new UserOrderRefund();
|
|
|
userRefundOrder.setUserId(paymentOrder.getId());
|
|
|
userRefundOrder.setOrderId(paymentOrder.getId());
|
|
|
userRefundOrder.setOrderNo(paymentOrder.getOrderNo());
|
|
|
- userRefundOrder.setOredrDetilIds(detail.getOrderDetailList().stream().map(o -> o.getId().toString()).collect(Collectors.joining(",")));
|
|
|
+ userRefundOrder.setOredrDetilIds(collect.stream().map(o -> o.getId().toString()).collect(Collectors.joining(",")));
|
|
|
userRefundOrder.setStatus(AuthStatusEnum.PASS);
|
|
|
- userRefundOrder.setApplyAmount(paymentOrder.getPaymentCashAmount());
|
|
|
- userRefundOrder.setActualAmount(paymentOrder.getPaymentCashAmount());
|
|
|
+ userRefundOrder.setApplyAmount(reduce);
|
|
|
+ userRefundOrder.setActualAmount(reduce);
|
|
|
userRefundOrder.setReason(reason);
|
|
|
userOrderRefundService.save(userRefundOrder);
|
|
|
|
|
@@ -1661,12 +1676,11 @@ DISCOUNT("畅学卡")
|
|
|
orderRefundBill.setBillNo(IdWorker.getIdStr());
|
|
|
orderRefundBill.setRefundAmt(userRefundOrder.getActualAmount());
|
|
|
|
|
|
-
|
|
|
RefundOrder refundOrder = new RefundOrder();
|
|
|
refundOrder.setUserId(paymentOrder.getUserId().toString());
|
|
|
refundOrder.setMerOrderNo(orderRefundBill.getBillNo());
|
|
|
refundOrder.setRefundAmount(orderRefundBill.getRefundAmt());
|
|
|
- refundOrder.setOrderAmount(paymentOrder.getPaymentCashAmount());
|
|
|
+ refundOrder.setOrderAmount(reduce);
|
|
|
refundOrder.setReason(reason);
|
|
|
refundOrder.setTransNo(paymentOrder.getTransNo());
|
|
|
refundOrder.setPaymentOrderNo(paymentOrder.getOrderNo());
|
|
@@ -1674,24 +1688,25 @@ DISCOUNT("畅学卡")
|
|
|
// 执行状态锁定
|
|
|
String lockNameInner = redisCacheService.getPaymentCacheKey(orderRefundBill.getBillNo());
|
|
|
DistributedLock.of(redissonClient).runIfLockCanGet(lockNameInner, () -> {
|
|
|
- if (StringUtils.isEmpty(paymentOrder.getTransNo())) {
|
|
|
+ if (StringUtils.isEmpty(paymentOrder.getTransNo()) || reduce.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
orderRefundBill.setStatus(TradeStatusEnum.succeeded);
|
|
|
userOrderRefundBillService.save(orderRefundBill);
|
|
|
- }
|
|
|
- try {
|
|
|
- RefundResp refundResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor()).refund(refundOrder);
|
|
|
- // 申请请求失败
|
|
|
- if (PaymentStatus.FAILED == refundResp.getPaymentStatus()) {
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ RefundResp refundResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor()).refund(refundOrder);
|
|
|
+ // 申请请求失败
|
|
|
+ if (PaymentStatus.FAILED == refundResp.getPaymentStatus()) {
|
|
|
+ orderRefundBill.setStatus(TradeStatusEnum.failed);
|
|
|
+ orderRefundBill.setPayFailMsg(refundResp.getMsg());
|
|
|
+ } else {
|
|
|
+ orderRefundBill.setTransNo(refundResp.getTransNo());
|
|
|
+ orderRefundBill.setStatus(TradeStatusEnum.pending);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
orderRefundBill.setStatus(TradeStatusEnum.failed);
|
|
|
- orderRefundBill.setPayFailMsg(refundResp.getMsg());
|
|
|
- } else {
|
|
|
- orderRefundBill.setTransNo(refundResp.getTransNo());
|
|
|
- orderRefundBill.setStatus(TradeStatusEnum.pending);
|
|
|
+ orderRefundBill.setPayFailMsg(e.getMessage());
|
|
|
+ log.error("refundOnly orderNo={}", orderRefundBill.getBillNo(), e);
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- orderRefundBill.setStatus(TradeStatusEnum.failed);
|
|
|
- orderRefundBill.setPayFailMsg(e.getMessage());
|
|
|
- log.error("refundOnly orderNo={}", orderRefundBill.getBillNo(), e);
|
|
|
}
|
|
|
|
|
|
userOrderRefundBillService.save(orderRefundBill);
|