فهرست منبع

节点公式、章节号

yangyj 1 سال پیش
والد
کامیت
ce15af87d7

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/AdvancePaymentCertificate.java

@@ -26,4 +26,6 @@ public class AdvancePaymentCertificate implements  DataModel {
     private String calculateFormula;
     @JSONField(name = "key_7", label = "申请依据", ordinal = 5)
     private String applyCause;
+    @JSONField(name = "key_8", label = "支付期限", ordinal = 12)
+    private String payDate;
 }

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SupervisionCertificate.java

@@ -15,6 +15,8 @@ public class SupervisionCertificate implements  DataModel{
     public static final String ID="20350000000";
     public static final String TBN="SCert";
     public static final String TBN_CH="监理服务费期中支付证书";
+    @JSONField(name = "key_0",label="项目名称",ordinal = 1)
+    private String itemName;
     @JSONField(name = "key_1",label="合同金额月数",ordinal = 1)
     private String month;
     @JSONField(name = "key_2",label="合同金额单价",ordinal = 1)
@@ -37,7 +39,6 @@ public class SupervisionCertificate implements  DataModel{
     private String pageTotal;
     @JSONField(name = "key_68",label="第N页" ,ordinal = 101)
     private String pageIndex;
-    private String itemName;
     /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
     private Boolean isSummary=false;
     /**计算的时候控制正负属性*/

+ 80 - 23
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -90,7 +90,7 @@ public class ExecutorMeter extends FormulaExecutor {
     private BinaryOperator<String> addFc = (a,b)-> BaseUtils.str2BigDecimal(a).add(BaseUtils.str2BigDecimal(b)).toString();
 
     /*按照二级清单编号,合计合同清单{合同金额,变更金额}*/
-    private Function<List<InventoryForm>, Map<String, BigDecimal[]>> contractMoneySum = data -> data.stream()
+    private Function<List<InventoryForm>, Map<String, BigDecimal[]>> contractMoneySum = data -> data.stream().filter(e->StringUtils.isNotEmpty(e.getContractMoney()))
             .collect(Collectors.groupingBy(
                     this::getPrefix,
                     Collectors.reducing(
@@ -112,13 +112,6 @@ public class ExecutorMeter extends FormulaExecutor {
 
 
 
-    Function<InventoryForm,String> level2Fn=inventoryForm -> {
-        String prefix = inventoryForm.getFormNumber();
-        if(inventoryForm.getFormName().contains(BTDL)){
-            return prefix+":"+BTDL;
-        }
-        return prefix;
-    };
     static  String BTDL="保通道路";
    /**根据清单编号获取支付项目章节编号*/
     public String getPrefix(String fn){
@@ -127,7 +120,7 @@ public class ExecutorMeter extends FormulaExecutor {
             fn= fn.split("-")[0];
             for (InventoryForm itf : tec.meterInfo.getChapter()) {
                 /*204-1-11(保通道路)*/
-                String prefix = level2Fn.apply(itf);
+                String prefix = chapterPreFixFc.apply(itf);
                 if (BaseUtils.isNumber(fn)) {
                     fn = String.valueOf(100 * (Integer.parseInt(fn) / 100));
                 }
@@ -147,6 +140,9 @@ public class ExecutorMeter extends FormulaExecutor {
         if(prefix!=null) {
             boolean hasWord = inventoryForm.getFormName().contains(BTDL)||inventoryForm.getFormNumber().contains(BTDL);
             String  fn= prefix.split("-")[0];
+            if(inventoryForm.getFormName().contains(BTDL)){
+                fn=inventoryForm.getChapter();
+            }
             /*204-1-11(保通道路)*/
             if (BaseUtils.isNumber(fn)) {
                 fn = String.valueOf(100 * (Integer.parseInt(fn) / 100));
@@ -159,14 +155,23 @@ public class ExecutorMeter extends FormulaExecutor {
         return "NULL";
     }
 
-
+    /*获取章编号*/
     Function<InventoryForm,String> chapterPreFixFc=inventoryForm->{
-        if(inventoryForm.getFormName().contains(BTDL)){
-            return inventoryForm.getFormNumber()+":"+BTDL;
+        if(inventoryForm.getFormName().contains(BTDL)||inventoryForm.getFormNumber().contains(BTDL)){
+            return inventoryForm.getChapter()+":"+BTDL;
         }
         return inventoryForm.getFormNumber();
     } ;
 
+    /*章节排序*/
+    ToIntFunction<InventoryForm> toIntFc=itf->{
+        String chapter = itf.getChapter();
+        if(BaseUtils.isNumber(chapter)){
+            return BaseUtils.obj2IntegerZero(chapter);
+        }else{
+            return 1000;
+        }
+    };
 
     /*获取动态行最大行数,codeFind为相关元素码集合 */
     public Integer getLineSize(List<String> codeFind){
@@ -213,8 +218,10 @@ public class ExecutorMeter extends FormulaExecutor {
         }else if(MeterType.START.equals(tec.getMeterType())||MeterType.START_JL.equals(tec.getMeterType())){
             /*开工预付款支付证书处理*/
             this.specialList.add(new StayPayCalc());
-            /*动员预付款-中期支付证书*/
+            /*动员预付款-中期支付证书-施工*/
             this.specialList.add(new InterimPayCertStart());
+            /*动员预付款-中期支付证书-监理*/
+            this.specialList.add(new SupervisionCertificateStart());
         }
         this.specialList.stream().filter(Special::ready).forEach(special->{
             try{
@@ -573,6 +580,49 @@ public class ExecutorMeter extends FormulaExecutor {
             putOut();
         }
     }
+
+    @Data
+    @EqualsAndHashCode(callSuper = true)
+    public  class SupervisionCertificateStart extends   BaseSpecial<SupervisionCertificate> implements Special{
+        private final LinkedHashMap<String,String> itemNamesMap=new LinkedHashMap<>();
+        /* Arrays.asList("正常监理服务费","其他费用","附加监理服务费","额外服务费","缺陷期监理服务费","小计","费用调整","合计","监理单位违约金","奖励","动员预付款","扣回动员预付款","实际支付金额");*/
+        /*正整数对应章节,-1是合计项,-100手填,-101 手填扣款项*/
+        {
+            itemNamesMap.put("施工阶段监理服务费(含施工准备期、施工及交工验收期)","100");
+            itemNamesMap.put("缺陷期监理服务费","300");
+            itemNamesMap.put("其他费用","400");
+            itemNamesMap.put("小计","-1");
+            itemNamesMap.put("费用调整","-100");
+            itemNamesMap.put("合计","-1");
+            itemNamesMap.put("监理单位违约金","-101");
+            itemNamesMap.put("奖励","-100");
+            itemNamesMap.put("动员预付款","-100");
+            itemNamesMap.put("扣回动员预付款","-100");
+            itemNamesMap.put("实际支付金额","-1");
+        }
+        @Override
+        public boolean ready() {
+            return MeterType.START_JL.equals(tec.getMeterType());
+        }
+
+        @Override
+        public void parse() {
+            List<InventoryForm> inventoryForms = tec.meterInfo.getInventoryForms();
+            List<InventoryForm> chapters = tec.meterInfo.getChapter();
+            LinkedHashMap<Integer, List<ChangeToken>> changeTokenListMap = tec.meterInfo.getChangeTokenListMap();
+            /* 本期变更 */
+            List<ChangeToken> changeTokenList0 = changeTokenListMap.get(MeterInfo.CUR);
+            /* 上期末变更 */
+            List<ChangeToken> changeTokenList1 = changeTokenListMap.get(MeterInfo.PRE);
+            /* 本期末变更 */
+            List<ChangeToken> changeTokenList2 = changeTokenListMap.get(MeterInfo.END);
+            /*合同金额*/
+            Map<String, BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
+            LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
+        }
+
+    }
+
     @Data
     @EqualsAndHashCode(callSuper = true)
     public  class MaterialsArrivalSp extends   BaseSpecial<MaterialsArrival> implements Special{
@@ -610,8 +660,9 @@ public class ExecutorMeter extends FormulaExecutor {
         /*甬台温,开工预付款款,中期支付证书*/
         @Override
         public boolean ready() {
-            return true;
+            return MeterType.START.equals(tec.getMeterType());
         }
+
         @Override
         public void parse() {
             builderFormDatas(InterimPaymentCertificate.class);
@@ -626,7 +677,8 @@ public class ExecutorMeter extends FormulaExecutor {
             List<ChangeToken> changeTokenList2 = changeTokenListMap.get(MeterInfo.END);
             /*合同金额*/
             Map<String, BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
-            LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
+
+            LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().sorted(Comparator.comparingInt(toIntFc)).collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
             dictMap.forEach((k,v)->{
                 BigDecimal[] sum = contractMoney.get(k);
                 String ch = v.getFormNumber();
@@ -729,7 +781,8 @@ public class ExecutorMeter extends FormulaExecutor {
                  Map<String,BigDecimal> currentMoney= moneySum.apply(current);
                 /*合同金额*/
                  Map<String,BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
-                 Map<String,InventoryForm> dictMap= chapters.stream().collect(Collectors.toMap(InventoryForm::getFormNumber, e->e,(v1,v2)->v1));
+                 /*Map<String,InventoryForm> dictMap= chapters.stream().collect(Collectors.toMap(InventoryForm::getFormNumber, e->e,(v1,v2)->v1));*/
+                 LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().sorted(Comparator.comparingInt(toIntFc)).collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
                  for(Map.Entry<String,BigDecimal[]> cm:contractMoney.entrySet()){
                        if(Func.isEmpty(cm.getKey()))continue;
                      InventoryForm inventoryForm=dictMap.get(cm.getKey());
@@ -850,13 +903,6 @@ public class ExecutorMeter extends FormulaExecutor {
                               t.setPreviousPeriodEndChangeMoney("");
                               t.setCurrentPeriodChangeMoney("");
                               t.setCurrentPeriodEndChangeMoney("");
-                              int over= capacity-dataList.size()-payItemZj.size();
-                              if(over>0){
-                                  int index = dataList.indexOf(t);
-                                  for(int i=0;i<over;i++){
-                                      dataList.add(index,new InterimPaymentCertificate(""));
-                                  }
-                              }
                      });
                      dataList.addAll(payItemZj);
                      /*生成中期支付证书可编辑列表*/
@@ -933,6 +979,17 @@ public class ExecutorMeter extends FormulaExecutor {
              }
              /*本次实际支付金额合计*/
             fieldDataFcMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(BaseUtils::obj2DoubleZero).sum()));
+
+            /*占位行*/
+            dataList.stream().filter(t->t.getChapterSeq()!=null&&t.getChapterSeq().contains("小计")).findFirst().ifPresent(t->{
+                int over= capacity-dataList.size();
+                if(over>0){
+                    int index = dataList.indexOf(t);
+                    for(int i=0;i<over;i++){
+                        dataList.add(index,new InterimPaymentCertificate(""));
+                    }
+                }
+            });
             /*内容输出*/
             putOut();
         }

+ 17 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -22,7 +22,9 @@ import org.springframework.web.context.WebApplicationContext;
 
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -206,7 +208,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
     }
     private void forG8(FormData cur,List<List<TurnPoint>> result, Map<String, Object> g8,TableElementConverter tec) {
         List<TurnPoint> data=result.stream().flatMap(Collection::stream).collect(Collectors.toList());
-        g8.put("dx", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(tp -> CustomFunction.xN(tp.getDx(), 1000)).collect(Collectors.toList()));
+        BiFunction<Predicate<TurnPoint>,Function<TurnPoint,Object>,List<Object>> dataFc= (predicate,field)-> data.stream().filter(predicate).map(field).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+       /* g8.put("dx", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(tp -> CustomFunction.xN(tp.getDx(), 1000)).collect(Collectors.toList()));
         g8.put("dxv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical()).map(tp -> CustomFunction.xN(tp.getDx(), 1000)).collect(Collectors.toList()));
         g8.put("dxnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(tp -> CustomFunction.xN(tp.getDx(), 1000)).collect(Collectors.toList()));
         g8.put("sc", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(TurnPoint::getSc).collect(Collectors.toList()));
@@ -217,6 +220,19 @@ public class FormulaTurnPoint implements FormulaStrategy {
         g8.put("sjnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(TurnPoint::getSj).collect(Collectors.toList()));
         g8.put("cd", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(TurnPoint::getName).collect(Collectors.toList()));
         g8.put("cdv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical()).map(TurnPoint::getName).collect(Collectors.toList()));
+        g8.put("cdnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(TurnPoint::getName).collect(Collectors.toList()));*/
+
+        g8.put("dx", dataFc.apply(e -> TurnPoint.CE.equals(e.getType()),tp -> CustomFunction.xN(tp.getDx(), 1000)));
+        g8.put("dxv", dataFc.apply(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical(),tp -> CustomFunction.xN(tp.getDx(), 1000)));
+        g8.put("dxnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(tp -> CustomFunction.xN(tp.getDx(), 1000)).collect(Collectors.toList()));
+        g8.put("sc", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(TurnPoint::getSc).collect(Collectors.toList()));
+        g8.put("scv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical()).map(TurnPoint::getSc).collect(Collectors.toList()));
+        g8.put("scnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(TurnPoint::getSc).collect(Collectors.toList()));
+        g8.put("sj", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(TurnPoint::getSj).collect(Collectors.toList()));
+        g8.put("sjv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical()).map(TurnPoint::getSj).collect(Collectors.toList()));
+        g8.put("sjnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(TurnPoint::getSj).collect(Collectors.toList()));
+        g8.put("cd", data.stream().filter(e -> TurnPoint.CE.equals(e.getType())).map(TurnPoint::getName).collect(Collectors.toList()));
+        g8.put("cdv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && e.getVertical()).map(TurnPoint::getName).collect(Collectors.toList()));
         g8.put("cdnv", data.stream().filter(e -> TurnPoint.CE.equals(e.getType()) && !e.getVertical()).map(TurnPoint::getName).collect(Collectors.toList()));
         List<NodeTable> nodeTableList=tec.getTableAll();
         /*c8.103*/

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -2788,7 +2788,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     public Boolean hasPart(String id) {
         if (Func.isNotBlank(id)) {
             List<Map<String, Object>> mapList = this.jdbcTemplate.queryForList("select a.id from m_wbs_tree a join m_wbs_info b on a.wbs_id=b.id where a.id=" + id + "  and b.wbs_type=3  union  select p_key_id from m_wbs_tree_private where p_key_id =" + id + " and wbs_type =3");
-            return mapList.size() == 0;
+          /*  return mapList.size() == 0;*/
         }
         return true;
     }