zouxuan 4 년 전
부모
커밋
a822420f3d
1개의 변경된 파일20개의 추가작업 그리고 7개의 파일을 삭제
  1. 20 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

+ 20 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

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