소스 검색

计量相关

yangyj 1 년 전
부모
커밋
fdea984d4b

+ 27 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java

@@ -72,8 +72,33 @@ public class BaseInfo  {
     /**预付款比例*/
     @JSONField(name = "key_12",label="预付款比例",ordinal = 12)
     private Double  deductRatio=0.7;
-
-
+    /**合同开始时间*/
+    @JSONField(name = "key_18",label="合同计划开始时间",ordinal = 13)
+    private String  startDatePlan;
+    /**合同结束时间*/
+    @JSONField(name = "key_19",label="合同计划结束时间",ordinal = 13)
+    private String  endDatePlan;
+    /**合同结束时间*/
+    @JSONField(name = "key_20",label="合同延长天数",ordinal = 15)
+    private String  extensionDays;
+    /**暂定金额*/
+    @JSONField(name = "key_21",label="暂定金额",ordinal = 15)
+    private String  provisionalSum;
+    /**工程清单金额*/
+    @JSONField(name = "key_22",label="工程清单金额",ordinal = 15)
+    private String  BOQAmount;
+    /**合同实际开始时间*/
+    @JSONField(name = "key_23",label="合同实际开始时间",ordinal = 13)
+    private String  startDate;
+    /**合同实际结束时间*/
+    @JSONField(name = "key_24",label="合同实际结束时间",ordinal = 13)
+    private String  endDate;
+    /**合同实际开始时间*/
+    @JSONField(name = "key_25",label="开始桩号",ordinal = 13)
+    private String startStation;
+    /**结束桩号*/
+    @JSONField(name = "key_26",label="结束桩号",ordinal = 13)
+    private String endStation;
 
 
 }

+ 32 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterInfo.java

@@ -0,0 +1,32 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import org.springblade.manager.dto.TreeNode;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author yangyj
+ * @Date 2024/3/13 14:26
+ * @description 集中存放计量相关数据
+ */
+@Data
+public class MeterInfo {
+    /*默认计量模版*/
+    public static Integer MB_GX=0;
+    /*浙江计量模版*/
+    public static Integer MB_ZJ=1;
+    /**计量单元树*/
+    private CompletableFuture<Map<Long, TreeNode<MeterTree>>> meterTreeMap;
+    /**模版*/
+    private Integer config=MB_GX;
+    /**合同信息*/
+    BaseInfo baseInfo;
+    /**计量期信息*/
+    LinkedHashMap<Long,MeterPeriodInfo> meterPeriodInfoLinkedHashMap= new LinkedHashMap<>();
+
+
+}

+ 10 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -38,12 +38,21 @@ public class MeterPeriodInfo {
     /**本期末累计支付金额*/
     @JSONField(name = "key_7",label="本期末累计支付金额",ordinal = 4)
     private String  total;
+    /**累计变更金额*/
+    @JSONField(name = "key_8",label="累计变更金额",ordinal = 5)
+    private String  cumulativeChangeMoney ;
+    /**累计变更金额*/
+    @JSONField(name = "key_9",label="开工累计天数",ordinal = 5)
+    private String  OperatingDays ;
     /**请款理由*/
     @JSONField(name = "key_5",label="请款理由",ordinal = 5)
     private String  cause;
     /**排序号*/
     private Integer sort;
-
+    /**计量期ID*/
     private Long id;
+    /**证书id*/
+    private Long reportId;
+
 
 }

+ 30 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubprojectInterimPaymentSummary.java

@@ -8,6 +8,8 @@ import org.springblade.core.tool.utils.StringPool;
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -67,20 +69,48 @@ public class SubprojectInterimPaymentSummary {
     /**第n页 共m页*/
     @JSONField(name = "key_12",label="页码",ordinal = 101)
     private String pageCount;
+    /**变更金额*/
+    @JSONField(name = "key_16",label="变更金额-ZJ",ordinal = 101)
+    private String adjustmentAmount;
+    /**单项占合同价*/
+    @JSONField(name = "key_17",label="单项占合同价-ZJ",ordinal = 101)
+    private String itemPercent;
+    /**单项计划完成*/
+    @JSONField(name = "key_18",label="单项计划完成-ZJ",ordinal = 101)
+    private String itemProgress;
+    /**单项计划完成*/
+    @JSONField(name = "key_19",label="本期占该合同金额-ZJ",ordinal = 101)
+    private String currentPayPercent;
+    /**本期末累计占变更后的总金额*/
+    @JSONField(name = "key_20",label="本期末累计占变更后的总金额-ZJ",ordinal = 101)
+    private String payPercent;
+    /**本期末累计占变更后的总金额*/
+    @JSONField(name = "key_21",label="按月计划与实际完成-ZJ",ordinal = 101)
+    private List<String> monthlyCompletion ;
+    /**累计实际完成*/
+    @JSONField(name = "key_22",label="累计实际完成-ZJ",ordinal = 101)
+    private String actualCompletion;
+    /**本次实际完成*/
+    @JSONField(name = "key_23",label="本次实际完成-ZJ",ordinal = 101)
+    private String currentCompletion;
+
 
     public SubprojectInterimPaymentSummary(String itemName) {
         this.itemName = itemName;
         this.currentPeriodPay = "0.0";
         this.currentPeriodEndPay = "0.0";
+        this.monthlyCompletion= Collections.nCopies(12,StringPool.EMPTY);
     }
 
     public SubprojectInterimPaymentSummary(String itemName, String currentPeriodPay, String currentPeriodEndPay) {
         this.itemName = itemName;
         this.currentPeriodPay = currentPeriodPay;
         this.currentPeriodEndPay = currentPeriodEndPay;
+        this.monthlyCompletion= Collections.nCopies(12,StringPool.EMPTY);
     }
 
     public SubprojectInterimPaymentSummary() {
+        this.monthlyCompletion= Collections.nCopies(12,StringPool.EMPTY);
     }
 
     public void count( @NotNull Consumer<String> setting ,@NotNull  List<SubprojectInterimPaymentSummary> data, @NotNull  Function<SubprojectInterimPaymentSummary,String> fc,@NotNull Integer scale){

+ 13 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -875,6 +875,18 @@ public class CustomFunction {
         return timePassed(t1, t2, "D", 0, "yyyy-MM-dd");
     }
 
+/*    public static void main(String[] args) {
+        LocalDateTime ldt1= LocalDateTime.now();
+        LocalDateTime ldt2=ldt1.minusDays(-1);
+        LocalDateTime ldt3=ldt1.minusDays(120L);
+        System.out.println(daysPassed(ldt2,ldt1));
+        System.out.println(daysPassed(ldt3,ldt1));
+        System.out.println(hoursPassed(ldt2,ldt1));
+        System.out.println(hoursPassed(ldt3,ldt1));
+        System.out.println(minutesPassed(ldt2,ldt1));
+        System.out.println(minutesPassed(ldt3,ldt1));
+    }*/
+
     public static Object hoursPassed(Object t1, Object t2) {
         return timePassed(t1, t2, "H", 0, "yyyy-MM-dd HH");
     }
@@ -1060,7 +1072,7 @@ public class CustomFunction {
     }
     public static long list2Stamp(List<Integer>list){
         LocalDateTime localDateTime;
-        if(list.size()==6||list.size()==5){
+        if(list.size()>=5&&list.size()<=7){
              localDateTime=LocalDateTime.of(list.get(0),list.get(1),list.get(2),list.get(3),list.get(4),0,0);
         }else if(list.size()==2){
             localDateTime=LocalDateTime.now().withHour(list.get(0)).withMinute(list.get(1)).withSecond(0).withNano(0);

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -3211,11 +3211,11 @@ public class ExcelTabController extends BladeController {
         String recordTime = tableInfo1.getString("recordTime");
 
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
-        try {
+/*        try {用不到
             this.excelTabService.formulaFillData(tableInfoList, Long.parseLong(nodeid), ExecuteType.FAI);
         } catch (Exception e) {
             e.printStackTrace();
-        }
+        }*/
 
         // 保存数据到数据库
         String data= "";

+ 17 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -24,13 +24,14 @@ import java.util.regex.Pattern;
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class ExecutorInit extends FormulaExecutor {
-    public ExecutorInit(TableElementConverter tec) {
+    public  ExecutorInit(TableElementConverter tec) {
         super(tec);
     }
-    private  Function<Long, BaseInfo> baseInfoFc;
-    private  Function<Long, MeterPeriodInfo>  meterPeriodFc;
+    private Function<Long, BaseInfo> baseInfoFc;
+    private Function<Long, MeterPeriodInfo>  meterPeriodFc;
     private Function<Long, List<MeterTree>> meterTreeFc;
-    private Function<Long, MeterPeriodInfo> interimMeterPeriodFc;
+    /*private Function<Long, MeterPeriodInfo> interimMeterPeriodFc;*/
+    private Function<Long,List<MeterPeriodInfo>> interimMeterPeriodAllFc;
 
 
 
@@ -40,6 +41,7 @@ public class ExecutorInit extends FormulaExecutor {
         BaseInfo baseInfo = baseInfoFc.apply(tec.getContractId());
         baseInfo.setTotalAmount(baseInfo.getContractAmount());
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
+        tec.meterInfo.setBaseInfo(baseInfo);
         LinkedHashMap<String, FormData> baseMap =FormulaUtils.toFormDataMap(baseInfo);
         tec.getRepeatKeys().addAll(baseMap.keySet());
         tec.formDataMap.putAll(baseMap);
@@ -48,10 +50,19 @@ public class ExecutorInit extends FormulaExecutor {
             tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             /*计量期*/
-            tec.periodInfo=interimMeterPeriodFc.apply(tec.getReportId());
+            List<MeterPeriodInfo> meterPeriodInfoList = interimMeterPeriodAllFc.apply(tec.getContractId());
+            for(MeterPeriodInfo mpi:meterPeriodInfoList){
+                tec.meterInfo.getMeterPeriodInfoLinkedHashMap().put(mpi.getId(),mpi);
+            }
+            /*tec.periodInfo=interimMeterPeriodFc.apply(tec.getReportId());*/
+            tec.meterInfo.getMeterPeriodInfoLinkedHashMap().values().forEach(e->{
+                if(tec.getReportId().equals(e.getReportId())){
+                    tec.periodInfo=e;
+                }
+            });
             tec.periodInfo.setPeriodName(tec.periodInfo.getPeriodNumber());
             /*计量单元树*/
-            tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
+            tec.meterInfo.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
         }
         tec.setPeriodId(tec.periodInfo.getId());
         String periodNumber = tec.periodInfo.getPeriodNumber();

+ 72 - 35
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -16,6 +16,7 @@ import org.springframework.beans.BeanUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiFunction;
@@ -600,46 +601,82 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
                 totalList.add(sis);
             });
-            LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
-            AtomicInteger loop = new AtomicInteger(chapterGroup.size());
-            chapterGroup.forEach((k,v)->{
-                int extra=loop.getAndDecrement()>0?1:2;
-                /*每章小结或总结等价一行数据*/
-                int dataLength=v.size()+extra;
-                /*每页小结是固定内容,需要每页保留一行*/
-                int dataAreaSize=capacity-1;
-                int pageSize=(int)Math.ceil(dataLength/(double)dataAreaSize);
-                List<List<SubprojectInterimPaymentSummary>> ds = BaseUtils.splitList(v,capacity-1);
-                List<SubprojectInterimPaymentSummary> tmp = new ArrayList<>();
-                for(int n=0;n<pageSize;n++){
-                    List<SubprojectInterimPaymentSummary> currentPageData =ds.get(n);
-                    tmp.addAll(currentPageData);
-                    int m=1;
-                    if(pageSize-n==1){
-                        m+=extra;
-                    }
-                    int placeholderSize = capacity-m-currentPageData.size();
-                    if(placeholderSize>0){
-                        tmp.addAll(Collections.nCopies(placeholderSize,new SubprojectInterimPaymentSummary()));
-                    }
-                    subtotal(new SubprojectInterimPaymentSummary("本页小计"),tmp,currentPageData,tec.getScale());
-                    if(m>1) {
-                        /*本章小结*/
-                        subtotal(new SubprojectInterimPaymentSummary("章合计"),tmp,v,tec.getScale());
-                    }
-                    if(m>2){
-                        /*所有章合计*/
-                        subtotal(new SubprojectInterimPaymentSummary("所有章合计"),tmp,totalList,tec.getScale());
+            if(MeterInfo.MB_ZJ.equals(tec.meterInfo.getConfig())){
+                /*把所有计量期根据打印日期按自然月分类,支付信息按计量期分类*/
+               LinkedHashMap<Long,MeterPeriodInfo> meterPeriodInfoMap = tec.meterInfo.getMeterPeriodInfoLinkedHashMap();
+               LinkedHashMap<Integer,MeterPeriodInfo> monthMeterMap=meterPeriodInfoMap.values().stream().collect(Collectors.toMap(e->e.getFormPrintDate().getMonthValue(),t->t,(v1,v2)->v2,LinkedHashMap::new));
+               /*根据计量期分组*/
+               Map<Long,List<Payment>> paymentGroup=paymentsPeriodEnd.stream().collect(Collectors.groupingBy(Payment::getPeriodId,Collectors.toList()));
+               monthMeterMap.forEach((k,v)->{
+                   for(int i = 1; i<= k; i++){
+                       MeterPeriodInfo tmp = monthMeterMap.get(k);
+
+                   }
+               });
+               totalList.forEach(sis->{
+                   BaseInfo baseInfo =tec.meterInfo.getBaseInfo();
+                   /*单项占合同价的比例*/
+                   sis.setItemPercent(ratioFc.apply(sis.getChangeMoney(),baseInfo.getTotalAmount().toString()));
+                   /*单项计划完成完成比例*/
+                   sis.setItemProgress(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
+                   /*本期占合同金额*/
+                   sis.setCurrentPayPercent(ratioFc.apply(sis.getCurrentPeriodPay(), sis.getChangeMoney()));
+                   /*本期末累计支付金额占合同比*/
+                   sis.setPayPercent(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
+                   /*根据月份来获取payment*/
+                   sis.getFormNumber();
+               });
+            }else{
+                LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
+                AtomicInteger loop = new AtomicInteger(chapterGroup.size());
+                chapterGroup.forEach((k,v)->{
+                    int extra=loop.getAndDecrement()>0?1:2;
+                    /*每章小结或总结等价一行数据*/
+                    int dataLength=v.size()+extra;
+                    /*每页小结是固定内容,需要每页保留一行*/
+                    int dataAreaSize=capacity-1;
+                    int pageSize=(int)Math.ceil(dataLength/(double)dataAreaSize);
+                    List<List<SubprojectInterimPaymentSummary>> ds = BaseUtils.splitList(v,capacity-1);
+                    List<SubprojectInterimPaymentSummary> tmp = new ArrayList<>();
+                    for(int n=0;n<pageSize;n++){
+                        List<SubprojectInterimPaymentSummary> currentPageData =ds.get(n);
+                        tmp.addAll(currentPageData);
+                        int m=1;
+                        if(pageSize-n==1){
+                            m+=extra;
+                        }
+                        int placeholderSize = capacity-m-currentPageData.size();
+                        if(placeholderSize>0){
+                            tmp.addAll(Collections.nCopies(placeholderSize,new SubprojectInterimPaymentSummary()));
+                        }
+                        subtotal(new SubprojectInterimPaymentSummary("本页小计"),tmp,currentPageData,tec.getScale());
+                        if(m>1) {
+                            /*本章小结*/
+                            subtotal(new SubprojectInterimPaymentSummary("章合计"),tmp,v,tec.getScale());
+                        }
+                        if(m>2){
+                            /*所有章合计*/
+                            subtotal(new SubprojectInterimPaymentSummary("所有章合计"),tmp,totalList,tec.getScale());
+                        }
+                        dataList.addAll(tmp);
+                        tmp.clear();
                     }
-                    dataList.addAll(tmp);
-                    tmp.clear();
-                }
-            });
+                });
+            }
             /*内容输出*/
              putOut(SubprojectInterimPaymentSummary.class);
         }
 
 
+        /*从日期获取月份*/
+        Function<String,Integer> date2Int = s->{
+            String[] arr = s.split("\\D+");
+            if(arr.length>=3){
+                return BaseUtils.handleObj2Integer(arr[1]);
+            }
+            return 1;
+        };
+
         public void subtotal(SubprojectInterimPaymentSummary b,  List<SubprojectInterimPaymentSummary> result ,List<SubprojectInterimPaymentSummary> data,Integer scale){
             b.calculate(data,scale);
 
@@ -695,7 +732,7 @@ public class ExecutorMeter extends FormulaExecutor {
             /*根据每一期的s_middle_meter_apply,s_inventory_form_apply 获取对应的计量清单,然后根据清单Id配合s_inventory_form_meter查找计量单元信息*/
             /*s_change_token_inventory每个清单关联的变更令,s_change_token_meter每个计量单元关联的变更令*/
             try {
-                Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.meterTreeMap.get();
+                Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.meterInfo.getMeterTreeMap().get();
                 Optional<TreeNode<MeterTree>> opTreeNode=  treeNodeMap.values().stream().filter(TreeNode::isTop).findAny();
                 if(opTreeNode.isPresent()) {
                     /*计量单元根节点*/

+ 11 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -118,15 +118,14 @@ public class TableElementConverter implements ITableElementConverter {
     public MeterPeriodInfo periodInfo;
     /**计量类型*/
     private MeterType meterType;
-    /**计量单元树*/
-    public CompletableFuture<Map<Long, TreeNode<MeterTree>>> meterTreeMap;
     /**存放计量计算结果*/
     private List<ReportResult> reportResults ;
     /**repeat 公共元素标记:有部分元素是每种表每页都相同的内容*/
     private Set<String> repeatKeys=new HashSet<>();
+    /**用来集中存放计量相关的数据*/
+    public MeterInfo meterInfo = new MeterInfo();
     /**取小数*/
     public Integer scale = 0;
-
     public Integer payRadicScale = 2;
     /*计量属性*/
     /**根据表名获取对应表页对象*/
@@ -151,6 +150,7 @@ public class TableElementConverter implements ITableElementConverter {
          return formDataMap.values().stream().filter(filter).collect(Collectors.toList());
     }
 
+    /*旧质检*/
     public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas, Map<String, Map<String, String>> coordinateMap, CurrentNode wtc, List<NodeTable> tableAll) {
         this.tableInfoList = tableInfoList;
         this.keyMappers = keyMappers;
@@ -370,6 +370,14 @@ public class TableElementConverter implements ITableElementConverter {
     public class BeforeC implements Converter{
         @Override
         public void convert() {
+              /*模版选择*/
+              for(NodeTable nt:tableAll){
+                  if("m_20240222111932_1760504568283660288".equals(nt.getInitTableName())){
+                      meterInfo.setConfig(MeterInfo.MB_ZJ);
+                      break;
+                  }
+              }
+            /*初始化元素单元格*/
               Map<String,List<FormData>> group = formDataList.stream().collect(Collectors.groupingBy(FormData::getTableName));
               for(Map.Entry<String,List<FormData>> entry:group.entrySet()){
                      Map<String,String> keyMap=coordinateMap.getOrDefault(entry.getKey(), new HashMap<>(20));

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaDao.java

@@ -17,6 +17,8 @@ public interface IFormulaDao {
     Function<Long, List<StartPayForm>> getStayPayFormFc();
     /**获取中间计量期*/
     Function<Long, MeterPeriodInfo> getInterimMeterPeriodFc();
+    /**获取所有计量期信息*/
+    Function<Long,List<MeterPeriodInfo>> getInterimMeterPeriodAllFc();
     /**获取支付数据*/
     Function<Long, List<Payment>> getPaymentListFc();
     /**合同段中期支付项*/

+ 25 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -13,22 +13,21 @@ import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IFormulaDao;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.MeterContractInfo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
  * @author yangyj
  * @Date 2023/12/14 16:33
- * @description TODO
+ * @description 计量支付专用数据库取数接口
  */
 @Service
 @RequiredArgsConstructor
@@ -36,12 +35,25 @@ public class FormulaDaoImpl implements IFormulaDao {
     private final IContractInfoService contractInfoService;
     private final IProjectInfoService projectInfoService;
     private final JdbcTemplate jdbcTemplate;
+    public  static DateTimeFormatter chineseDateFm = DateTimeFormatter.ofPattern("yyyy年M月d日", Locale.CHINA);
     @Override
     public Function<Long, BaseInfo> getBaseInfoFc() {
         return contractId->{
             ContractInfo info=  this.contractInfoService.getById(contractId);
             ProjectInfo projectInfo= projectInfoService.getById(info.getPId());
             BaseInfo baseInfo= new BaseInfo();
+            if(info.getPlanStartTime()!=null) {
+                baseInfo.setStartDatePlan(info.getPlanStartTime().format(chineseDateFm));
+            }
+            if(info.getPlanEndTime()!=null) {
+                baseInfo.setEndDatePlan(info.getPlanEndTime().format(chineseDateFm));
+            }
+            if(info.getPlanEndTime()!=null)  {
+                baseInfo.setStartDate(info.getActualStartTime().format(chineseDateFm));
+            }
+            if(info.getPlanEndTime()!=null) {
+                baseInfo.setEndDate(info.getActualEndTime().format(chineseDateFm));
+            }
             List<Map<String,Object>> meterContractList = jdbcTemplate.queryForList("select * from s_meter_contract_info where contract_Id="+contractId);
             if(meterContractList.size()>0){
                 Map<String,Object> map = meterContractList.get(0);
@@ -78,10 +90,6 @@ public class FormulaDaoImpl implements IFormulaDao {
 
     @Override
     public Function<Long, List<Material>> getMaterialFormFc() {
-/*        return id->{
-            String sql="select  b.material_name materialName,b.unit,b.price,a.meter_amount meterAmount,meter_money sum,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id where a.meter_period_id="+id+"  and a.is_deleted=0 and  a.approve_status=2";
-            return  getEntityList(sql,Material.class);
-        };*/
         return contractId->{
             String sql="select  b.material_name materialName,b.unit,a.price,a.meter_amount meterAmount,meter_money sum,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark,c.sort,c.id period_id from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id join s_meter_period c  on a.meter_period_id=c.id where a.contract_id="+contractId+"  and a.is_deleted=0 and  a.approve_status=2";
             return  getEntityList(sql,Material.class);
@@ -105,6 +113,14 @@ public class FormulaDaoImpl implements IFormulaDao {
         };
     }
 
+    @Override
+    public Function<Long, List<MeterPeriodInfo>> getInterimMeterPeriodAllFc() {
+          return contractId->{
+            String sql="select a.id, a.period_number periodNumber,a.sort ,b.print_date formPrintDate ,b.pay_money curTotal,b.id reportId from  s_contract_meter_period a join s_interim_pay_certificate b on a.id=b.contract_period_id where a.is_deleted=0 and b.contract_id="+contractId+" order by a.sort";
+            return   getEntityList(sql,MeterPeriodInfo.class);
+        };
+    }
+
     @Override
     public Function<Long, List<Payment>> getPaymentListFc() {
         return contractId->{

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -2668,7 +2668,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
             return Jsoup.parse(IoUtil.readToString(inputStreamByUrl));
          },(v1,v2)->v2));
+        /*元素绑定单元格信息*/
         Map<String,Map<String,String>> coordinateMap = new HashMap<>();
+        /*电签关键字和坐标*/
         Map<String,Map<String,String>> eSignMaps=new HashMap<>();
         tableList.forEach(nt -> {
             String initTableName =nt.getInitTableName();
@@ -2681,7 +2683,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));
 
-        /*转换器声明*/
+        /*转换器上下文声明*/
         TableElementConverter tec = new TableElementConverter(processFds,coordinateMap,tableList);
         tec.setProjectId(Long.parseLong(contractInfo.getPId()));
         tec.setESignMaps(eSignMaps);
@@ -2699,7 +2701,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         formulaHandleChains.add(init);
         formulaHandleChains.add(new ExecutorSort(tec));
         formulaHandleChains.add(new ExecutorPre(tec));
-        /*特殊公式*/
+        /*计量数据模型计算*/
         ExecutorMeter special = new ExecutorMeter(tec);
         BeanUtils.copyProperties(this.formulaDao,special);
         formulaHandleChains.add(special);
@@ -2713,6 +2715,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     public void settingCoordsExtend( Map<String,Map<String,String>> coordinateMap){
+        /*有些元素无法绑定单元格*/
         if(coordinateMap!=null){
             /*中间计量表*/
             Map<String,String> interimMeterMap = coordinateMap.computeIfAbsent("m_20231212171403_1734501859877453824",k->new HashMap<>());