|
@@ -751,7 +751,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
BigDecimal usableMarketAmount = marketAmount;
|
|
|
//包含减免余额的总金额
|
|
|
BigDecimal totalAmount = goodsSellDtos.stream().map(e -> e.getTotalGoodsPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal subtract = totalAmount.subtract(marketAmount);
|
|
|
+ //应付总额
|
|
|
+ BigDecimal totalActual = totalAmount.subtract(marketAmount);
|
|
|
+ //可用应付
|
|
|
+ BigDecimal usableActual = totalActual;
|
|
|
+ //获取实付总额
|
|
|
+ BigDecimal realityAmount = totalActual.subtract(usableBalance);
|
|
|
+ //可用实付总额
|
|
|
+ BigDecimal usableAmount = realityAmount;
|
|
|
for (int i = 0; i < goodsId.size(); i++) {
|
|
|
Integer e = goodsId.get(i);
|
|
|
GoodsSellDto goodsSellDto = collect.get(e).get(0);
|
|
@@ -766,6 +773,9 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
sellOrder.setTransNo(orderByOrderNo.getTransNo());
|
|
|
sellOrder.setOrderId(orderByOrderNo.getId());
|
|
|
sellOrder.setOrderNo(orderByOrderNo.getOrderNo());
|
|
|
+ //获取比例
|
|
|
+ BigDecimal ratioAmount = goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 6, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
//如果有减免金额
|
|
|
if(marketAmount.doubleValue() > 0l){
|
|
|
//如果是最后一件商品
|
|
@@ -773,13 +783,12 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(usableMarketAmount));
|
|
|
}else {
|
|
|
//获取分配的减免金额
|
|
|
- BigDecimal multiply = marketAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ BigDecimal multiply = ratioAmount.multiply(usableMarketAmount);
|
|
|
goodsSellDto.setTotalGoodsPrice(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
|
|
|
usableMarketAmount = usableMarketAmount.subtract(multiply);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- sellOrder.setExpectAmount(goodsSellDto.getTotalGoodsPrice());
|
|
|
//如果没有使用余额,那么实际金额和预计金额一致
|
|
|
if(balancePaymentAmount.doubleValue() == 0l){
|
|
|
sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice());
|
|
@@ -787,17 +796,21 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
|
|
|
}else {
|
|
|
//如果是最后一件商品
|
|
|
if(i == goodsId.size() - 1){
|
|
|
- sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(usableBalance));
|
|
|
+ sellOrder.setActualAmount(usableAmount);
|
|
|
sellOrder.setBalanceAmount(usableBalance);
|
|
|
}else {
|
|
|
//获取分配的余额
|
|
|
- BigDecimal multiply = balancePaymentAmount.multiply(goodsSellDto.getTotalGoodsPrice().divide(subtract, 2, BigDecimal.ROUND_HALF_UP));
|
|
|
- //余额大于等于商品总价
|
|
|
- sellOrder.setActualAmount(goodsSellDto.getTotalGoodsPrice().subtract(multiply));
|
|
|
+ BigDecimal multiply = ratioAmount.multiply(balancePaymentAmount);
|
|
|
+ //分配的实际支付
|
|
|
+ BigDecimal multiply1 = ratioAmount.multiply(realityAmount);
|
|
|
+ sellOrder.setActualAmount(multiply1);
|
|
|
sellOrder.setBalanceAmount(multiply);
|
|
|
+ usableAmount = usableAmount.subtract(multiply1);
|
|
|
usableBalance = usableBalance.subtract(multiply);
|
|
|
+ usableActual = usableActual.subtract(multiply1).subtract(multiply);
|
|
|
}
|
|
|
}
|
|
|
+ sellOrder.setExpectAmount(sellOrder.getActualAmount().add(sellOrder.getBalanceAmount()));
|
|
|
sellOrder.setSellCost(goods.getDiscountPrice());
|
|
|
sellOrder.setSellCost2(JSONObject.toJSONString(costMap));
|
|
|
sellOrder.setType(SellTypeEnum.valueOf(goods.getType().getCode()));
|