yangyj 7 months ago
parent
commit
e69a6ba196

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -103,6 +103,13 @@ public class ExecutorInit extends FormulaExecutor {
             /*支付信息*/
             payment();
             /*tec.meterInfo.setPaymentList(paymentListFc.apply(tec.getContractId()));*/
+            if(StringUtils.isNotEmpty(tec.periodInfo.getMaterialIds())) {
+                /*加载合同材料、材料清单*/
+               List<Material> materialList=  materialFormFc.apply(tec.getContractId());
+               String[] periodIds= tec.periodInfo.getMaterialIds().split(",");
+                materialList=materialList.stream().filter(e->BaseUtils.inChain(periodIds,e.getPeriodId().toString())).collect(Collectors.toList());
+                tec.meterInfo.setMaterialsAll(materialList);
+            }
         }
         /*支付项信息*/
         tec.meterInfo.setMidPayItemList(midPayItemListFc.apply(tec.getContractId()));

+ 39 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.annotation.JSONField;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
-import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.common.utils.BaseUtils;
@@ -27,7 +26,6 @@ import org.springframework.beans.BeanUtils;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -209,6 +207,7 @@ public class ExecutorMeter extends FormulaExecutor {
             this.specialList.add(new MaterialsArrivalSp());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             this.specialList.add(new InterimPayCert());
+            this.specialList.add(new MaterialsArrivalSp());
             this.specialList.add(new InterimSum());
             /*分项工程中期支付汇总*/
             this.specialList.add(new SubIPaySum());
@@ -723,12 +722,14 @@ public class ExecutorMeter extends FormulaExecutor {
             return MeterInfo.MB_ZJ.equals(tec.getMeterInfo().getTemplate());
         }
 
+
+        private Function<MaterialsArrival,String> fc= m-> m.getPeriodNumber()+m.getName()+m.getUnit()+m.getPrice()+m.getSource()+m.getInvoice()+m.getWarrantyNumber()+m.getSsr();
         @Override
         public void parse() {
             builderFormDatas(MaterialsArrival.class);
             if(materials.size()>0){
                 String ratio = BaseUtils.str2BigDecimal(tec.meterInfo.getBaseInfo().getDeductRatio()).toPlainString();
-                dataList.addAll(materials.stream().map(e->{
+                List<MaterialsArrival> list =materials.stream().map(e->{
                             MaterialsArrival ma = new MaterialsArrival();
                             ma.setPeriodNumber(tec.periodInfo.getPeriodNumber());
                             ma.setName(e.getMaterialName());
@@ -746,7 +747,38 @@ public class ExecutorMeter extends FormulaExecutor {
                             ma.setSsr(e.getCertificate());
                             return ma;
                         }
-                ).collect(Collectors.toList()));
+                ).collect(Collectors.toList());
+               LinkedHashMap<String,List<MaterialsArrival>> group= list.stream().collect(Collectors.groupingBy(MaterialsArrival::getName, LinkedHashMap::new,Collectors.toList()));
+               int rowSize= capacity-1;
+               group.forEach((k,v)->{
+                   List<List<MaterialsArrival>> pages=BaseUtils.splitList(v,rowSize);
+                   List<MaterialsArrival> tmp = new ArrayList<>();
+                   for(int i=0;i<pages.size();i++){
+                       List<MaterialsArrival> data = pages.get(i);
+                       tmp.addAll(data);
+                       int over= rowSize-v.size();
+                       if(i==pages.size()-1){
+                           over--;
+                       }
+                       if(over>0){
+                           tmp.addAll(Collections.nCopies(over,new MaterialsArrival()));
+                       }
+                       MaterialsArrival xj= new MaterialsArrival();
+
+                       xj.setName("小计");
+                       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.setTotal(divideFc.apply(multiFc.apply(xj.getAmount(),ratio),"100"));
+                       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(divideFc.apply(multiFc.apply(hj.getAmount(),ratio),"100"));
+                   tmp.add(hj);
+                   dataList.addAll(tmp);
+               });
             }
             putOut(MaterialsArrival.class);
         }
@@ -1161,6 +1193,9 @@ public class ExecutorMeter extends FormulaExecutor {
             });
             /*内容输出*/
             putOut();
+
+            /*材料预付款关联*/
+            materials=tec.meterInfo.getMaterialsAll();
         }
 
         public void periodCount(InterimPaymentCertificate last){