|
@@ -701,7 +701,6 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
rechargeDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
|
|
|
rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
|
|
|
}
|
|
|
- sysUserCashAccountDetailService.insert(paymentDetail);
|
|
|
saveSellOrder(studentPaymentOrder.getOrderNo());
|
|
|
} else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
|
|
|
if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
@@ -747,8 +746,15 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
Map<String, BigDecimal> costMap = new HashMap<>(2);
|
|
|
List<SellOrder> sellOrders = new ArrayList<>();
|
|
|
BigDecimal balancePaymentAmount = orderByOrderNo.getBalancePaymentAmount();
|
|
|
-
|
|
|
- for (Integer e : goodsId) {
|
|
|
+ //可用余额
|
|
|
+ BigDecimal usableBalance = balancePaymentAmount;
|
|
|
+ BigDecimal marketAmount = studentGoodsSell.getMarketAmount();
|
|
|
+ //可用减免金额
|
|
|
+ BigDecimal usableMarketAmount = marketAmount;
|
|
|
+
|
|
|
+ BigDecimal totalAmount = goodsSellDtos.stream().map(e -> e.getTotalGoodsPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ for (int i = 0; i < goodsId.size(); i++) {
|
|
|
+ Integer e = goodsId.get(i);
|
|
|
GoodsSellDto goodsSellDto = collect.get(e).get(0);
|
|
|
Goods goods = goodsMap.get(e).get(0);
|
|
|
|
|
@@ -761,22 +767,38 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
sellOrder.setTransNo(orderByOrderNo.getTransNo());
|
|
|
sellOrder.setOrderId(orderByOrderNo.getId());
|
|
|
sellOrder.setOrderNo(orderByOrderNo.getOrderNo());
|
|
|
+ //如果没有减免金额
|
|
|
+ if(marketAmount.doubleValue() > 0l){
|
|
|
+ //如果是最后一件商品
|
|
|
+ if(i == goodsId.size() - 1){
|
|
|
+ goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(usableMarketAmount));
|
|
|
+ totalAmount = totalAmount.subtract(usableMarketAmount);
|
|
|
+ }else {
|
|
|
+ //获取分配的减免金额
|
|
|
+ BigDecimal multiply = usableMarketAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ totalAmount = totalAmount.subtract(multiply);
|
|
|
+ goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
|
|
|
+ usableMarketAmount = usableMarketAmount.subtract(multiply);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
sellOrder.setExpectAmount(goodsSellDto.getTotalGoodsPrice());
|
|
|
//如果没有使用余额,那么实际金额和预计金额一致
|
|
|
if(balancePaymentAmount.doubleValue() == 0l){
|
|
|
sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice());
|
|
|
sellOrder.setBalanceAmount(BigDecimal.ZERO);
|
|
|
}else {
|
|
|
- //余额大于等于商品总价
|
|
|
- if(balancePaymentAmount.compareTo(goodsSellDto.getTotalGoodsPrice()) >= 1){
|
|
|
- sellOrder.setActualAmount(BigDecimal.ZERO);
|
|
|
- sellOrder.setBalanceAmount(goodsSellDto.getTotalGoodsPrice());
|
|
|
- balancePaymentAmount = balancePaymentAmount.subtract(goodsSellDto.getTotalGoodsPrice());
|
|
|
+ //如果是最后一件商品
|
|
|
+ if(i == goodsId.size() - 1){
|
|
|
+ sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(usableBalance));
|
|
|
+ sellOrder.setBalanceAmount(usableBalance);
|
|
|
}else {
|
|
|
- //余额小于商品总价
|
|
|
- sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(balancePaymentAmount));
|
|
|
- sellOrder.setBalanceAmount(balancePaymentAmount);
|
|
|
- balancePaymentAmount = BigDecimal.ZERO;
|
|
|
+ //获取分配的余额
|
|
|
+ BigDecimal multiply = balancePaymentAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ //余额大于等于商品总价
|
|
|
+ sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
|
|
|
+ sellOrder.setBalanceAmount(multiply);
|
|
|
+ usableBalance = usableBalance.subtract(multiply);
|
|
|
}
|
|
|
}
|
|
|
sellOrder.setSellCost(goods.getDiscountPrice());
|