|  | @@ -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());
 |