Browse Source

退款增加现金余额逻辑

liyuan 5 months ago
parent
commit
30f0d23efd

+ 11 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -6193,7 +6193,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				}
 			}
 		}
-		List<Long> goodsIds = new ArrayList<>();
 		if ("XS".equals(order.getBsType()) || "TKXS".equals(order.getBsType()) || "GX".equals(order.getBsType())) {
 			PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
 			if (corpsDesc == null) {
@@ -6205,7 +6204,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				.in("pid", orderList)
 				.eq("is_deleted", 0)
 				.eq("tenant_id", AuthUtil.getTenantId()));
-			goodsIds = list.stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			List<Long> goodsIds = list.stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
 			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 				.eq(PjGoodsDesc::getIsDeleted, 0)
@@ -6388,7 +6387,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				orderItemsService.updateBatchById(list);
 			}
 			if ("额度支付".equals(order.getBusinessSource())) {
-				corpsDesc.setLimitAmount(corpsDesc.getLimitAmount().add(order.getTotalMoney()));
+				BigDecimal realTotalMoney = Objects.isNull(order.getPaymentRecoveredBalance()) ? BigDecimal.ZERO : order.getPaymentRecoveredBalance();
+				corpsDesc.setLimitAmount(corpsDesc.getLimitAmount().add(order.getTotalMoney().subtract(realTotalMoney)));
 				corpsDescMapper.updateById(corpsDesc);
 			}
 			if (ObjectUtils.isNull(order.getOldTrxId())) {
@@ -6407,7 +6407,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					order.setXcxStatus("待确认");
 				} else {
 					BigDecimal amount = orderListNew.stream().map(PjOrder::getPaymentAmountTl).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-					R<Map<String, String>> r = payService.refund(order.getId(), amount, order.getOrdNo(), order.getSrcOrdNo(), order.getOldTrxId());
+					// 减去订单内使用的余额
+					BigDecimal recoveredBalanceAmount = orderListNew.stream().map(PjOrder::getPaymentRecoveredBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+					BigDecimal realAmount = amount.subtract(recoveredBalanceAmount);
+					if (realAmount.compareTo(BigDecimal.ZERO) > 0) {
+						corpsDesc.setRecoveredBalance(corpsDesc.getRecoveredBalance().add(recoveredBalanceAmount));
+						corpsDescMapper.updateById(corpsDesc);
+					}
+					R<Map<String, String>> r = payService.refund(order.getId(), realAmount, order.getOrdNo(), order.getSrcOrdNo(), order.getOldTrxId());
 					if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 						Map<String, String> map = r.getData();
 						String returnCode = map.get("retcode");