Explorar o código

计量公式/评定表附表

yangyj hai 1 ano
pai
achega
320e0a1ae1

+ 4 - 4
blade-service-api/blade-business-api/src/main/java/org/springblade/business/utils/NumberUtil.java

@@ -455,11 +455,11 @@ public class NumberUtil {
         } else {
             strRMB = strRMB + "圆整";
         }
-        return "人民币(大写):" + strRMB;
+        return  strRMB;
     }
 
-    public static void main(String[] args) {
-        System.out.println(numberToRMB(1254.32));
-    }
+/*    public static void main(String[] args) {
+        System.out.println(numberToRMB(26871254.32));
+    }*/
 
 }

+ 17 - 10
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java

@@ -45,17 +45,24 @@ public class BaseInfo  {
     /**合同段金额*/
     @JSONField(name = "key_7",label="合同段金额",ordinal = 7)
     private BigDecimal contractAmount;
-    /**
-     * 开户银行
-     * */
-    @JSONField(name = "key_8",label="开户银行",ordinal = 8)
-    private String  bankName  ="未设置";
-    /**对公账户*/
-    @JSONField(name = "key_9",label="对公账户",ordinal = 9)
-    private String  bankAccount ="未设置";
-    /**银行账户名称*/
-    @JSONField(name = "key_10",label="银行账户名称",ordinal = 10)
+    /**农工资帐号名称*/
+    @JSONField(name = "key_8",label="农工资帐号名称",ordinal = 8)
+    private String  laborerAccountName  ="未设置";
+    /**农工资开户行名称*/
+    @JSONField(name = "key_9",label="农工资开户行名称",ordinal = 9)
+    private String  laborerBankName ="未设置";
+    /**农工资专户帐号*/
+    @JSONField(name = "key_13",label="农工资专户帐号",ordinal = 9)
+    private String  laborerAccount ="未设置";
+    /**工程款银行账户名称*/
+    @JSONField(name = "key_14",label="工程款银行账户名称",ordinal = 10)
     private String  bankAccountName = "未设置";
+    /**工程款开户行名称*/
+    @JSONField(name = "key_15",label="工程款开户行名称",ordinal = 10)
+    private String  bankName = "未设置";
+    /**工程款收款帐号*/
+    @JSONField(name = "key_16",label="工程款收款帐号",ordinal = 10)
+    private String  bankAccount = "未设置";
     /**合同总金额*/
     @JSONField(name = "key_11",label="合同总金额",ordinal = 11)
     private String  TotalAmount;

+ 7 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InterimPaymentCertificate.java

@@ -41,8 +41,14 @@ public class InterimPaymentCertificate {
     @JSONField(name = "key_8",label="备注",ordinal = 8)
     private String remark;
     /**本次实际支付金额合计*/
-    @JSONField(name = "key_9",label="本次实际支付金额合计",ordinal = 9)
+    @JSONField(name = "key_9",label="本次实际支付金额合计",ordinal = 101)
     private String total;
+    /**农名工工资支付金额*/
+    @JSONField(name = "key_10",label="农名工工资支付金额",ordinal = 102)
+    private String laborerTotal;
+    /**工程款支付金额*/
+    @JSONField(name = "key_11",label="工程款支付金额",ordinal = 103)
+    private String constructionTotal;
     /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
     private Boolean isSummary=false;
 

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

@@ -82,7 +82,7 @@ public class SubInterimMeterPaySummary {
         this.setCompleted(String.valueOf(list.stream().filter(BaseUtils::isNumber).map(Object::toString).mapToInt(Integer::parseInt).sum()));
     }
 
-    /*获取*/
+    /*获取分项工程元素码*/
     public static  String getSubPjFdCode(){
         return TBN+ StringPool.COLON+"key_13";
     }

+ 11 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -2796,6 +2796,17 @@ public class CustomFunction {
       }
 
 
+      /**转成人民币大写形式*/
+      public static List<Object> toRmb(List<Object> arabic ){
+          if(StringUtils.isNotEmpty(arabic)){
+              return arabic.stream().filter(CustomFunction::isNumber).map(e -> StringUtils.obj2Double(e, 2)).filter(Objects::nonNull).map(org.springblade.business.utils.NumberUtil::numberToRMB).collect(Collectors.toList());
+          }
+          return arabic;
+      }
+
+
+
+
 
 
 }

+ 0 - 49
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorCalc.java

@@ -122,55 +122,6 @@ public class ExecutorCalc extends FormulaExecutor {
 
     }
 
-   /**元素数据写入类*/
-    static class MeterElementWriter implements ElementWriter {
-        public  void write(FormData fd, Object data){
-            write(fd,data,false);
-        }
-        public  void write(FormData fd, Object data,Boolean containsNull){
-            if(checkEmpty(fd)){
-                /*无定位信息不写入*/
-                return;
-            }
-            try {
-                /*写入前清空内容*/
-                clear(fd);
-                List<Object> values = toList(data,containsNull);
-                /*计量写入数据无效考虑是否存在表页实体,也就不存在超页的概念,只管按需自动增页写人,任何元素初始化都是一页*/
-                int capacity=fd.getCoordsList().size();
-                List<ElementData> eds=  IntStream.range(0,values.size()).boxed().map(i->{
-                    Coords coords = fd.getCoordsList().get(i%capacity);
-                    return new ElementData(i/capacity,values.get(i),coords.getX(),coords.getY());
-                }).collect(Collectors.toList());
-                fd.setValues(eds);
-                fd.setUpdate(1);
-            }catch (Exception e){
-                e.printStackTrace();
-            }
-        }
-        /*检查写入目标地址是否未空*/
-        public  boolean  checkEmpty(FormData fd){
-            return Func.isEmpty(fd.getCoordsList());
-        }
-        /*写入前需要清空原内容*/
-        public void clear(FormData fd){
-            fd.getValues().forEach(t->t.setValue(null));
-        }
-
-        /*原素数据一律用List集合表示*/
-        public List<Object> toList(Object raw,boolean containsNull){
-            List<Object> values= Optional.ofNullable(raw)
-                    .filter(List.class::isInstance)
-                    .map(list -> (List<Object>) list)
-                    .orElseGet(() -> Collections.singletonList(raw));
-            if(containsNull){
-                return values.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
-            }
-            return values;
-
-        }
-
-    }
 
     interface Calculation {
         void calculate(FormData fd, Function<FormData,List<FormData>> dependenceHandler );

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

@@ -10,6 +10,7 @@ import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.TreeNode;
+import org.springblade.manager.formula.ElementWriter;
 import org.springblade.manager.vo.*;
 import org.springframework.beans.BeanUtils;
 
@@ -35,6 +36,7 @@ public class ExecutorMeter extends FormulaExecutor {
     private Function<Long, List<Payment>> paymentListFc;
     private Function<Long, List<InventoryForm>> inventoryFormFc;
     private Function<Long, List<MeterApply>> meterApplyFc;
+    private ElementWriter elementWriter;
     /*执行链*/
     private List<Special> specialList = new ArrayList<>();
     /**支付章节*/
@@ -89,6 +91,7 @@ public class ExecutorMeter extends FormulaExecutor {
 
     @Override
     public void handle() {
+        this.elementWriter=new MeterElementWriter();
         if(MeterType.MATERIAL.equals(tec.getMeterType())){
             this.specialList.add(new MaterialCalc());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
@@ -221,7 +224,7 @@ public class ExecutorMeter extends FormulaExecutor {
                    for(int i=0;i<this.fds.size();i++){
                        List<Object> dl= groupData.get(i);
                        FormData fd= fds.get(i);
-                       FormulaUtils.write(fd,dl);
+                       elementWriter.write(fd,dl);
                    }
                    /*追加合计*/
                    append(this.sum,this.total);
@@ -249,7 +252,7 @@ public class ExecutorMeter extends FormulaExecutor {
     @Data
     @EqualsAndHashCode(callSuper = true)
     public  class InterimPayCert extends   BaseSpecial<InterimPaymentCertificate> implements Special{
-
+        /*中期支付证书*/
         @Override
         public boolean ready() {
             return true;
@@ -326,6 +329,15 @@ public class ExecutorMeter extends FormulaExecutor {
              }
             /*数据获取end*/
             /*本期实际支付合计计算*/
+             double total=dataList.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(Double::parseDouble).sum();
+             if(total>0){
+                 FormData ft =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9");
+                 put2FormData(ft,total);
+                 FormData laborerFd =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_10");
+                 put2FormData(laborerFd,StringUtils.number2String(total*0.25,2));
+                 FormData constructFd =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_11");
+                 put2FormData(constructFd,StringUtils.number2String(total*0.75,2));
+             }
             fieldDataFcMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(Double::parseDouble).sum()));
             /*内容输出*/
             putOut();
@@ -338,6 +350,7 @@ public class ExecutorMeter extends FormulaExecutor {
     @Data
     @EqualsAndHashCode(callSuper = true)
     public  class InterimSum extends   BaseSpecial<InterimPaymentSummary> implements Special{
+        /*中期支付汇总表*/
         @Override
         public boolean ready() {
             return interimPaymentCertificates.size()>0;
@@ -614,7 +627,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     /*分项数据*/
                      FormData subPjFd = fdm.get(SubInterimMeterPaySummary.getSubPjFdCode());
                      if(subPjFd!=null) {
-                         FormulaUtils.write(subPjFd, this.subProjectName);
+                         put2FormData(subPjFd, this.subProjectName);
                      }
                     /*内容输出*/
                     putOut(SubInterimMeterPaySummary.class);
@@ -827,4 +840,18 @@ public class ExecutorMeter extends FormulaExecutor {
     public ExecutorMeter(TableElementConverter tec) {
         super(tec);
     }
+
+    /*无页码无坐标元素写人*/
+    public static void put2FormData(FormData fd,Object data){
+        if(fd!=null&&data!=null){
+            if(data instanceof List) {
+                List<Object> list = (List<Object>)data;
+                fd.setValues(list.stream().map(ElementData::new).collect(Collectors.toList()));
+            }else{
+                fd.getValues().add(new ElementData(data));
+            }
+        }
+    }
+
+
 }

+ 67 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/MeterElementWriter.java

@@ -0,0 +1,67 @@
+package org.springblade.manager.formula.impl;
+
+import com.mixsmart.utils.StringUtils;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.Coords;
+import org.springblade.manager.dto.ElementData;
+import org.springblade.manager.dto.FormData;
+import org.springblade.manager.formula.ElementWriter;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+/**
+ * @author yangyj
+ * @Date 2024/2/5 15:19
+ * @description 元素数据写入类
+ */
+public class MeterElementWriter implements ElementWriter {
+    @Override
+    public void write(FormData fd, Object data) {
+        write(fd,data,false);
+    }
+
+    @Override
+    public void write(FormData fd, Object data, Boolean containsNull) {
+        try {
+            /*写入前清空内容*/
+            clear(fd);
+            List<Object> values = toList(data,containsNull);
+            /*计量写入数据无效考虑是否存在表页实体,也就不存在超页的概念,只管按需自动增页写人,任何元素初始化都是一页*/
+            int capacity=fd.getCoordsList().size();
+            List<ElementData> eds=  IntStream.range(0,values.size()).boxed().map(i->{
+                Coords coords = fd.getCoordsList().get(i%capacity);
+                return new ElementData(i/capacity,values.get(i),coords.getX(),coords.getY());
+            }).collect(Collectors.toList());
+            fd.setValues(eds);
+            fd.setUpdate(1);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    /*检查写入目标地址是否未空*/
+    public  boolean  checkEmpty(FormData fd){
+        return Func.isEmpty(fd.getCoordsList());
+    }
+    /*写入前需要清空原内容*/
+    public void clear(FormData fd){
+        fd.getValues().forEach(t->t.setValue(null));
+    }
+
+    /*原素数据一律用List集合表示*/
+    public List<Object> toList(Object raw,boolean containsNull){
+        List<Object> values= Optional.ofNullable(raw)
+                .filter(List.class::isInstance)
+                .map(list -> (List<Object>) list)
+                .orElseGet(() -> Collections.singletonList(raw));
+        if(containsNull){
+            return values.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+        }
+        return values;
+
+    }
+}

+ 8 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/SubTable.java

@@ -73,7 +73,7 @@ public class SubTable {
             });
             /*主表的所有项目,附表的输出排序*/
             for(NodeTable nodeTable:mainTableList){
-                List<FormData> tmp=tec.pick(e->nodeTable.getNodeName().equals(e.getTableName())&&e.getCoordsList().size()>1);
+                List<FormData> tmp=tec.pick(e->nodeTable.getInitTableName().equals(e.getTableName())&&e.getCoordsList().size()>1);
                 tmp.sort(Comparator.comparingInt(FormData::getMaxRow));
                 this.mainList.addAll(tmp);
             }
@@ -196,7 +196,10 @@ public class SubTable {
     /*用原有数据初始化*/
     private void initOriginal(){
         List<String> itemName = this.itemName.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
-        List<String> designs = this.design.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
+        List<String> designs=null;
+        if(this.design!=null) {
+             designs = this.design.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
+        }
         List<Object> data = this.data.getRawValue();
         String name = itemName.get(0);
         if(StringUtils.isNotEmpty(name)) {
@@ -207,7 +210,9 @@ public class SubTable {
                 if (StringUtils.isNotEmpty(x) && !x.equals(name) || (i == itemName.size() - 1)) {
                    /* String des =designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining("/"));*/
                     Item item = new Item(name);
-                    item.setDesign(designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()));
+                    if(designs!=null) {
+                        item.setDesign(designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList()));
+                    }
                    /* original.put(name + StringPool.AT + des, new ArrayList<>(data.subList(head*15,  i*ROW_SIZE)));*/
                     item.setData(new ArrayList<>(data.subList(head*15,  i*ROW_SIZE)));
                     original.put(name,item);

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

@@ -1,9 +1,6 @@
 package org.springblade.manager.service;
 
-import lombok.Data;
 import org.springblade.manager.vo.*;
-import org.springframework.beans.BeanUtils;
-
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -25,7 +22,8 @@ public interface IFormulaDao {
     Function<Long,List<MeterTree>>  getMeterTreeFc();
     /**获取中间计量申请*/
     Function<Long,List<MeterApply>>  getMeterApplyFc();
-
+    /**获取清表映射地址*/
+    Function<List<String>, List<Map<String,Object>>>  getTableExcelInfoFc();
 
 
 }

+ 20 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1138,36 +1138,28 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     this.wbsTreeContractMapper.deleteByIds(removeIds);
                     /*this.wbsTreeContractMapper.deleteLogicByIds(removeIds);*/
                 }
-                /*多余的表删除之后需要,裁剪多余表头数据保留全部实测数据然后重新设置增页大小*/
-                for(NodeTable mt:mainTableList) {
-                    tec.getKeyMappers().stream().filter(e -> e.getPkId().equals(mt.getPKeyId())).map(KeyMapper::getCode).forEach(e -> {
-                        FormData target = tec.formDataMap.get(e);
-                        int capacity = target.getCoordsList().size();
-                        List<ElementData> eds = target.getValues();
-                        if (eds.size() > capacity) {
-                            if (capacity > 1) {
-                                /*元素每页单元格数量大于1则重新视为业务数据,重新计算增页*/
-                                target.setAddPages((eds.size() / capacity) - 1);
-                            } else {
-                                /*表头表尾元素只留首页的内容*/
-                                target.setValues(eds.stream().limit(capacity).collect(Collectors.toList()));
-                            }
-                        }
-                        if(target.getAddPages()>0){
-                            /*筛选元素长度超1页的元素*/
-                            inspectionList.add(target);
+            }
+            /*多余的表删除之后需要,裁剪多余表头数据保留全部实测数据然后重新设置增页大小*/
+            for(NodeTable mt:mainTableList) {
+                tec.getKeyMappers().stream().filter(e -> e.getPkId().equals(mt.getPKeyId())).map(KeyMapper::getCode).forEach(e -> {
+                    FormData target = tec.formDataMap.get(e);
+                    int capacity = target.getCoordsList().size();
+                    List<ElementData> eds = target.getValues();
+                    if (eds.size() > capacity) {
+                        if (capacity > 1) {
+                            /*元素每页单元格数量大于1则重新视为业务数据,重新计算增页*/
+                            target.setAddPages((eds.size() / capacity) - 1);
+                        } else {
+                            /*表头表尾元素只留首页的内容*/
+                            target.setValues(eds.stream().limit(capacity).collect(Collectors.toList()));
                         }
-                    });
-                }
+                    }
+                    if(target.getAddPages()>0){
+                        /*筛选元素长度超1页的元素*/
+                        inspectionList.add(target);
+                    }
+                });
             }
-            /*获取所有挂在检验单、评定表里的元素映射关系*/
-/*            tec.getKeyMappers().stream().filter(p -> p.getPkId().equals(main.getPKeyId())).forEach(k -> {
-                *//*筛选元素长度超1页的元素*//*
-                List<FormData> target = tec.formDataMap.values().stream().filter(f -> f.getCode().equals(k.getCode()) && f.getAddPages() > 0).collect(Collectors.toList());
-                if (Func.isNotEmpty(target)) {
-                    inspectionList.addAll(target);
-                }
-            });*/
             if (Func.isNotEmpty(inspectionList)) {
                 /*检查是否存在附表,不存在挂载*/
                 List<NodeTable> subTabList = tec.getTableAll().stream().filter(e -> e.getNodeName().contains("附表")).collect(Collectors.toList());