瀏覽代碼

计量公式

yangyj 1 年之前
父節點
當前提交
f0fce8c01c

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

@@ -49,13 +49,13 @@ public class BaseInfo  {
      * 开户银行
      * */
     @JSONField(name = "key_8",label="开户银行",ordinal = 8)
-    private String  bankName;
+    private String  bankName  ="未设置";
     /**对公账户*/
     @JSONField(name = "key_9",label="对公账户",ordinal = 9)
-    private String  bankAccount;
+    private String  bankAccount ="未设置";
     /**银行账户名称*/
     @JSONField(name = "key_10",label="银行账户名称",ordinal = 10)
-    private String  bankAccountName;
+    private String  bankAccountName = "未设置";
     /**合同总金额*/
     @JSONField(name = "key_11",label="合同总金额",ordinal = 11)
     private String  TotalAmount;

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

@@ -30,7 +30,7 @@ public class Material {
     @JSONField(name = "key_5",label="数量",ordinal = 5)
     private String meterAmount;
     @JSONField(name = "key_6",label="材料合计价格",ordinal = 6)
-    private String sum;
+    private String sum="0";
     @JSONField(name = "key_7",label="预付款比例",ordinal = 7)
     private String ratio;
     @JSONField(name = "key_8",label="材料预付款",ordinal = 8)

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

@@ -16,6 +16,8 @@ public class ReportResult {
     private String url;
     /**表编号*/
     private String initTableName;
+    /**表名*/
+    private String name;
     /**每一页的数据,格式{y_x:val,y1_x1:val1...}{...}...*/
     private List<Map<String,Object>> data;
 }

+ 27 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -338,7 +338,7 @@ public class FormulaUtils {
         }
     }
 
-
+/*把模型类转换成共识配置选项*/
     public static List<WbsFormElementVO> toElementVos(Class<?> clazz)  {
         List<WbsFormElementVO> vos =new ArrayList<>();
         try {
@@ -361,6 +361,32 @@ public class FormulaUtils {
         return vos;
     }
 
+    public static <T> Map<String,FormData> toFormDataMap(T bean){
+        Map<String,FormData> result = new HashMap<>();
+        if(bean!=null){
+            try {
+                @SuppressWarnings("unchecked")
+                Map<String,String> map= JSON.parseObject(JSON.toJSONString(bean),Map.class);
+                Class<?> clazz=bean.getClass();
+                String TBN = (String)  clazz.getField("TBN").get(null);
+                for (Field field : clazz.getDeclaredFields()) {
+                    JSONField jf = field.getAnnotation(JSONField.class);
+                    if (jf != null) {
+                      FormData fd = new FormData();
+                      fd.setCode(TBN+ StringPool.COLON +jf.name());
+                      fd.setEName(jf.label());
+                      fd.getValues().add(new ElementData(0,0,map.get(fd.getKey()),0,0));
+                      fd.getCoordsList().add(new Coords("0","0"));
+                        result.put(fd.getCode(),fd);
+                    }
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+        }
+        return result;
+    }
 
 
     /**从元素名称中解析项目名称,细化项目匹配用*/

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

@@ -61,6 +61,7 @@ public class ExecutorCalc extends FormulaExecutor {
                                     ele.add(formData);
                                 }
                             });
+                            /*并不是所有依赖都用FormData表示*/
                             if(ele.size()<relyList.size()){
                                 tec.getLog().put(FormulaLog.RELY,fd.getCode()+"@"+fd.getEName()+"@"+fd.getFormula().getFormula().replaceAll("'", ""));
                                 continue;

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

@@ -1,8 +1,9 @@
 package org.springblade.manager.formula.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.mixsmart.utils.FormulaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.MeterPeriodInfo;
@@ -29,9 +30,11 @@ public class ExecutorInit extends FormulaExecutor {
         /*加载合同数据*/
         BaseInfo baseInfo = this.baseInfoFc.apply(tec.getContractId());
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
+        tec.formDataMap.putAll(FormulaUtils.toFormDataMap(baseInfo));
         /*加载计量期信息*/
         MeterPeriodInfo meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
-        tec.getConstantMap().put(MeterPeriodInfo.TBN, meterPeriod);
+        tec.formDataMap.putAll(FormulaUtils.toFormDataMap(meterPeriod));
+        tec.getConstantMap().put(MeterPeriodInfo.TBN,meterPeriod);
     }
 
 

+ 0 - 44
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSort.java

@@ -62,53 +62,9 @@ public class ExecutorSort extends FormulaExecutor {
             /*初始化排序值,每个点间隔1000,方便插入*/
             AtomicInteger sort = new AtomicInteger();
             tec.formDataList.forEach(e -> e.setSort(sort.getAndAdd(1000)));
-            /*收集汇总阶段执行的公式*/
-            if(!tec.isNew) {
-                summaryPre(tec);
-            }
         }catch (Exception e){
             e.printStackTrace();
         }
     }
-    public void summaryPre(TableElementConverter tec){
-        tec.formDataList.stream().filter(FormData::executable).filter(e-> StringUtils.isEquals("CKI",e.getFormula().getNumber())||StringUtils.isEquals("CKD",e.getFormula().getNumber())).forEach(t->tec.summary.add(t));
-        tec.formDataList.removeAll(tec.summary);
-        /*监表的处理*/
-        Optional<NodeTable> aop=tec.getTableAll().stream().filter(e->e.getTableType().equals(4)).findAny();
-        if(aop.isPresent()){
-            /*存在监表,则需要收集检查项目和检查时间等元素*/
-            List<String> wop=tec.getTableAll().stream().filter(e->e.getTableType().equals(1)&&!e.getNodeName().contains("附表")).map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-            if(wop.size()>0){
-                /*存在检验表*/
-                tec.getKeyMappers().stream().filter(e->wop.contains(e.getTableName())&&tec.formDataMap.containsKey(e.getCode())).forEach(k->{
-                    /*包含的单元格超过三个就算实测项目部分实测值元素只有一个单元格,拼接写入全部数据*/
-                    /*k.getEName().contains("实测值")&&k.getEName().contains("偏差值")*/
-                    FormData ft=tec.formDataMap.get(k.getCode());
-                    if(ft.getCoordsList().size()>5||(k.getEName().contains("实测值")&&!k.getEName().contains("设计值")&&!k.getEName().contains("合格率"))){
-                        tec.checkItems.add(ft);
-                    }else if(k.getEName().contains("检验日期")){
-                        tec.checkDate.add(ft);
-                    }
-                });
-            }else{
-                /*不存在检验表的的情况则获取记录表*/
-                List<String> recordTable=tec.getTableAll().stream().filter(e->StringUtils.isEquals(2,e.getTableType())).map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-                tec.getKeyMappers().stream().filter(k->recordTable.contains(k.getTableName())).map(k->k.getCode()+"@"+k.getEName()).distinct().forEach(k->{
-                    String[] ka=k.split("@");
-                    if(ka[1].contains("实测值")){
-                        tec.checkItems.add(tec.formDataMap.get(ka[0]));
-                    }else if(ka[1].contains("日期")||ka[1].contains("年月日")){
-                        tec.checkDate.add(tec.formDataMap.get(ka[0]));
-                    }
-                });
-
-            }
-        }
-        if(tec.checkItems.size()>0){
-            /*排序*/
-            List<String> iniTableNames=tec.getTableAll().stream().map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-            tec.checkItems= tec.checkItems.stream().sorted(Comparator.comparingInt((FormData i)->iniTableNames.indexOf(i.getTableName())).thenComparingInt(FormData::getMaxRow)).collect(Collectors.toList());
-        }
 
-    }
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -449,6 +449,7 @@ public class TableElementConverter implements ITableElementConverter {
                    ReportResult rt = new ReportResult();
                    rt.setUrl(report.getHtmlUrl());
                    rt.setInitTableName(report.getInitTableName());
+                   rt.setName(report.getNodeName());
                    reportResults.add(rt);
                    List<FormData> fds =group.get(report.getInitTableName());
                    if(fds.size()>0){

+ 6 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -51,13 +51,16 @@ public class FormulaDaoImpl implements IFormulaDao {
     public Function<Long,MeterPeriodInfo> getMeterPeriod(){
         return id-> {
            List<MeterPeriodInfo> beans = this.jdbcTemplate.query("select period_number periodNumber,period_name periodName,form_print_date formPrintDate from s_meter_period where id= "+id, new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
-
             if(beans.size()>0){
                 MeterPeriodInfo bean = beans.get(0);
                 List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList("select sum(b.current_amount) currentAmount from s_meter_period a join s_meter_period b on (a.contract_id=b.contract_id and a.type=b.type) where a.id="+id+" and b.id<>"+id);
                 if(listMap.size()>0) {
-                    bean.setPreTotal(StringUtils.number2String(listMap.get(0).get("currentAmount").toString(),2));
+                    String str=StringUtils.handleNull(listMap.get(0).get("currentAmount"));
+                    if(StringUtils.isNumber(str)) {
+                        bean.setPreTotal(StringUtils.number2String(str, 2));
+                    }
                 }
+                return bean;
             }
             return new MeterPeriodInfo();
         };
@@ -66,7 +69,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<Material>> getMaterialForm() {
         return id->{
-            List<Map<String,Object>> mapList = this.jdbcTemplate.queryForList("select  b.material_name name,b.unit,b.price,a.meter_amount amount,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");
+            List<Map<String,Object>> mapList = this.jdbcTemplate.queryForList("select  b.material_name name,b.unit,b.price,a.meter_amount amount,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");
             if(Func.isNotEmpty(mapList)){
                return mapList.stream().map(m->BeanUtil.toBean(m,Material.class)).collect(Collectors.toList());
             }

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

@@ -2537,11 +2537,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         Map<String,String> parent=  this.getSqlOne("select id,wbs_id wbsId,CONCAT(ancestors,',',id) path from  m_wbs_tree_private a  where a.node_name=? and a.project_id=?",Map.class,tabArr[type],contractInfo.getPId());
         List<NodeTable> tableList=  this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl  from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",contractInfo.getPId(),parent.get("wbsId"));
         Map<String,Map<String,String>> coordinateMap=tableList.stream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
-        List<FormData> processFds = this.createFormDataByTableName(String.join(",", ""));
+        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.setContractId(contractInfo.getId());
+        tec.setPeriodId(periodId);
+        tec.setLog(new FormulaLog());
         tec.before();
         List<FormulaHandleChain> formulaHandleChains = new ArrayList<>();
         ExecutorInit init= new ExecutorInit(tec);

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

@@ -727,7 +727,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.wbs_id=" + wbsTree.getWbsId() + " and b.scope=" + scopeA;
             } else if (com.mixsmart.utils.StringUtils.isEquals(type, 0)) {
                 treePrivate = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, id));
-                sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id join m_wbs_tree_private c on c.parent_id=b.node_id where a.id in(" + elementIds + ") and c.project_id=" + treePrivate.getProjectId() + " and b.scope=" + scopeA;
+                sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id join m_wbs_tree_private c on (c.parent_id=b.node_id and c.project_id=b.project_id) where a.id in(" + elementIds + ") and c.project_id=" + treePrivate.getProjectId() + " and b.scope=" + scopeA;
             } else {
                 sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.scope=" + scopeA;
             }