Browse Source

材料合计

yangyj 5 months ago
parent
commit
b17cce899a

+ 30 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -865,6 +865,7 @@ public class ExecutorMeter extends FormulaExecutor {
                 LinkedHashMap<String,List<MaterialsArrival>> group= list.stream().collect(Collectors.groupingBy(MaterialsArrival::getName, LinkedHashMap::new,Collectors.toList()));
                 LinkedHashMap<String,List<MaterialsArrival>> group= list.stream().collect(Collectors.groupingBy(MaterialsArrival::getName, LinkedHashMap::new,Collectors.toList()));
                int rowSize= capacity-1;
                int rowSize= capacity-1;
                 AtomicInteger sn= new AtomicInteger(1);
                 AtomicInteger sn= new AtomicInteger(1);
+                AtomicBoolean isLast= new AtomicBoolean(false);
                 group.forEach((k,v)->{
                 group.forEach((k,v)->{
                    List<List<MaterialsArrival>> pages=BaseUtils.splitList(v,rowSize);
                    List<List<MaterialsArrival>> pages=BaseUtils.splitList(v,rowSize);
                    List<MaterialsArrival> tmp = new ArrayList<>();
                    List<MaterialsArrival> tmp = new ArrayList<>();
@@ -872,6 +873,7 @@ public class ExecutorMeter extends FormulaExecutor {
                        List<MaterialsArrival> data = pages.get(i);
                        List<MaterialsArrival> data = pages.get(i);
                        data.forEach(ma->{
                        data.forEach(ma->{
                            /*排序*/
                            /*排序*/
+                           isLast.set(sn.get() == list.size());
                            ma.setSn( String.valueOf( sn.getAndIncrement()));
                            ma.setSn( String.valueOf( sn.getAndIncrement()));
                        });
                        });
                        tmp.addAll(data);
                        tmp.addAll(data);
@@ -880,26 +882,39 @@ public class ExecutorMeter extends FormulaExecutor {
                            /*最后一页合计*/
                            /*最后一页合计*/
                            over--;
                            over--;
                        }
                        }
+                       if(isLast.get()){
+                           over--;
+                       }
                        if(over>0){
                        if(over>0){
                            tmp.addAll(Collections.nCopies(over,new MaterialsArrival()));
                            tmp.addAll(Collections.nCopies(over,new MaterialsArrival()));
                        }
                        }
-                       MaterialsArrival xj= new MaterialsArrival();
-
-                       xj.setName("小计");
+                      /* MaterialsArrival xj= new MaterialsArrival();
+                      xj.setName("本页小计");
                        xj.setQuantity(data.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                        xj.setQuantity(data.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                        xj.setAmount(data.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                        xj.setAmount(data.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                        xj.setTotal(data.stream().map(e->BaseUtils.str2BigDecimal(e.getTotal())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                        xj.setTotal(data.stream().map(e->BaseUtils.str2BigDecimal(e.getTotal())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
-                       tmp.add(xj);
+                       tmp.add(xj);*/
                    }
                    }
-                   MaterialsArrival hj= new MaterialsArrival();
-                   hj.setName("合计");
-                   hj.setQuantity(v.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
-                   hj.setAmount(v.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
-                   hj.setTotal(v.stream().map(e->BaseUtils.str2BigDecimal(e.getTotal())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
-                   materialSum=StringUtils.number2String(hj.getTotal(),0);
-                   tmp.add(hj);
+                   MaterialsArrival xj= new MaterialsArrival();
+                   xj.setName("小计");
+                   xj.setQuantity(v.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                   xj.setAmount(v.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                   xj.setTotal(v.stream().map(e->BaseUtils.str2BigDecimal(e.getTotal())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                   /*materialSum=StringUtils.number2String(xj.getTotal(),0);*/
+                   tmp.add(xj);
                    dataList.addAll(tmp);
                    dataList.addAll(tmp);
+                   if(isLast.get()){
+                       /*最后一条*/
+                       MaterialsArrival hj= new MaterialsArrival();
+                       hj.setName("合计");
+                       hj.setQuantity(list.stream().map(e->BaseUtils.str2BigDecimal(e.getQuantity())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                       hj.setAmount(list.stream().map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                       hj.setTotal(list.stream().map(e->BaseUtils.str2BigDecimal(e.getTotal())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
+                       materialSum=StringUtils.number2String(hj.getTotal(),0);
+                       dataList.add(hj);
+                   }
                });
                });
+
             }
             }
             putOut(MaterialsArrival.class);
             putOut(MaterialsArrival.class);
         }
         }
@@ -1221,7 +1236,7 @@ public class ExecutorMeter extends FormulaExecutor {
                              /*小计本期累计支付*/
                              /*小计本期累计支付*/
                              rebateIncentiveAdvPay.setSubtotal(subtotal.toPlainString());
                              rebateIncentiveAdvPay.setSubtotal(subtotal.toPlainString());
                              tec.periodInfo.setSubTotal( dataList.stream().limit(dataList.indexOf(certificate)).map(e->BaseUtils.str2BigDecimal(e.getCurrentPeriodPay())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
                              tec.periodInfo.setSubTotal( dataList.stream().limit(dataList.indexOf(certificate)).map(e->BaseUtils.str2BigDecimal(e.getCurrentPeriodPay())).reduce(BigDecimal.ZERO,BigDecimal::add).toPlainString());
-                             String dyTotalAmount=baseInfo.getDyTotalAmount().toPlainString();
+                             String dyTotalAmount=BaseUtils.str2BigDecimal(baseInfo.getDyTotalAmount()).toPlainString();
                              /*当前累计小计>=30 才扣回*/
                              /*当前累计小计>=30 才扣回*/
                              if(Double.parseDouble(ratioFc.apply(subtotal.toPlainString(),baseInfo.getContractAmount().toPlainString()))>=30) {
                              if(Double.parseDouble(ratioFc.apply(subtotal.toPlainString(),baseInfo.getContractAmount().toPlainString()))>=30) {
                                  /*是否扣回完成*/
                                  /*是否扣回完成*/
@@ -1246,7 +1261,9 @@ public class ExecutorMeter extends FormulaExecutor {
                                  InterimPayCertificateItem preSubTotal = previousMap.get("扣回动员预付款");
                                  InterimPayCertificateItem preSubTotal = previousMap.get("扣回动员预付款");
                                  if (finish.get()&&isCur.get()) {
                                  if (finish.get()&&isCur.get()) {
                                      /*如果小计累计已经>=79,则全部扣回剩下的*/
                                      /*如果小计累计已经>=79,则全部扣回剩下的*/
-                                     rebateIncentiveAdvPay.setCurrentPay(subtractFc.apply(dyTotalAmount,preSubTotal.getCurrentPeriodEndPay()));
+                                     if(preSubTotal!=null) {
+                                         rebateIncentiveAdvPay.setCurrentPay(subtractFc.apply(dyTotalAmount, preSubTotal.getCurrentPeriodEndPay()));
+                                     }
                                      rebateIncentiveAdvPay.setRetained(rebateIncentiveAdvPay.getCurrentPay());
                                      rebateIncentiveAdvPay.setRetained(rebateIncentiveAdvPay.getCurrentPay());
                                  } else {
                                  } else {
                                      rebateIncentiveAdvPay.calc(baseInfo.getContractAmount().toPlainString(), dyTotalAmount);
                                      rebateIncentiveAdvPay.calc(baseInfo.getContractAmount().toPlainString(), dyTotalAmount);