Browse Source

公式相关:G8衍生公式,试验执行问题

yangyj 2 years ago
parent
commit
1aa428984b

+ 2 - 25
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -20,7 +20,7 @@ import static org.springblade.manager.formula.TurnPoint.*;
 public interface ITurnPointCalculator {
 
 
-    static List<Object> create(List<Map<String, Object>> data, LinkedHashMap<String, String> configMap, Map<String, Object> g8) {
+    static List<TurnPoint> create(List<Map<String, Object>> data, LinkedHashMap<String, String> configMap) {
         if (Func.isNotEmpty(data) && configMap != null) {
             LevelInfo levelInfo = new LevelInfo();
             List<TurnPoint> tmp = new ArrayList<>();
@@ -107,16 +107,7 @@ public interface ITurnPointCalculator {
             }
             List<TurnPoint> result = fill(tmp);
             if (ListUtils.isNotEmpty(result)) {
-                /*V判断*/
-                forG8(result, g8);
-                return result.stream().map(TurnPoint::getDataMap).flatMap(m -> {
-                    List<String> list = new ArrayList<>();
-                    for (String key : configMap.keySet()) {
-                        key = key.trim();
-                        list.add(StringUtils.handleNull(m.get(key)));
-                    }
-                    return list.stream();
-                }).collect(Collectors.toList());
+                return  result;
             }
         }
         return Collections.emptyList();
@@ -222,19 +213,5 @@ public interface ITurnPointCalculator {
         return Collections.emptyList();
     }
 
-    static void forG8(List<TurnPoint> data, Map<String, Object> g8) {
-        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()));
-        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()));
-    }
 
 }

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -183,7 +183,9 @@ public class TurnPoint {
     public String getDx() {
         return dx;
     }
-
+    public String getDxX1000() {
+        return StringUtils.number2StringZero(StringUtils.isNotEmpty(getDx()) ? getDx0L() * 1000 : "", 0);
+    }
     public Double getDx0L() {
         return Double.parseDouble(dx);
     }

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

@@ -2,6 +2,7 @@ package org.springblade.manager.formula.impl;
 
 import cn.hutool.core.util.ReUtil;
 import com.jfireel.expression.Expression;
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
@@ -87,7 +88,17 @@ public class FormulaTurnPoint implements FormulaStrategy {
             }
             @SuppressWarnings("unchecked")
             Map<String, Object> g8 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G8", k -> new HashMap<>());
-            List<Object> data = ITurnPointCalculator.create(tableData, configMap, g8);
+            List<TurnPoint> result = ITurnPointCalculator.create(tableData, configMap);
+            /*V判断*/
+            forG8(result, g8,tec);
+            List<Object> data= result.stream().map(TurnPoint::getDataMap).flatMap(m -> {
+                List<String> list = new ArrayList<>();
+                for (String key : configMap.keySet()) {
+                    key = key.trim();
+                    list.add(StringUtils.handleNull(m.get(key)));
+                }
+                return list.stream();
+            }).collect(Collectors.toList());
             if (Func.isNotEmpty(data)) {
                 AtomicInteger ai = new AtomicInteger();
                 Map<Integer, List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e -> ai.getAndAdd(1) % configMap.size()));
@@ -102,7 +113,67 @@ public class FormulaTurnPoint implements FormulaStrategy {
 
         }
     }
+    private void forG8(List<TurnPoint> data, Map<String, Object> g8,TableElementConverter tec) {
+        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()));
+        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*/
+        c8103( data,nodeTableList, tec);
+    }
 
+    public void c8103(List<TurnPoint> data,List<NodeTable> nodeTableList,TableElementConverter tec){
+        nodeTableList.stream().filter(e->e.getInitTableName().equals("m_20220928163111_1575040410223378432")).findFirst().ifPresent(t->{
+            List<FormData> fds= tec.formDataMap.values().stream().filter(k->k.getTableName().equals("m_20220928163111_1575040410223378432")&&k.getCoordsList().size()>1).collect(Collectors.toList());
+            /*[{"key":"#2","m":"垫石编号"},{"key":"#3","m":"顶面高程设计"},{"key":"#4","m":"顶面高程实测"},{"key":"#5","m":"顶面高程偏差"},{"key":"#6","m":"顶面四角高差实测"}]*/
+            FormData dsbh=null,dmgcsj=null, dmgcsc=null,dmgcpc=null,sjgcsc=null;
+            for(FormData u:fds){
+                if(u.getEName().equals("垫石编号")){
+                    dsbh=u;
+                }else  if(u.getEName().contains("顶面高程")&&u.getEName().contains("设计")){
+                    dmgcsj=u;
+                }else  if(u.getEName().contains("顶面高程")&&u.getEName().contains("实测")){
+                    dmgcsc=u;
+                }else  if(u.getEName().contains("顶面高程")&&u.getEName().contains("偏差")){
+                    dmgcpc=u;
+                }
+                else  if(u.getEName().contains("四角高差")&&u.getEName().contains("实测")){
+                    sjgcsc=u;
+                }
+            }
+            int n=0;
+            List<Object> tmpList= new ArrayList<>();
+            data.stream().filter(v->TurnPoint.CE.equals(v.getType())).forEach(v->{
+                tmpList.add(v.getName());
+                if(v.getName().matches("[\\d]+")){
+                    tmpList.addAll(Collections.nCopies(3,""));
+                    tmpList.add(v.getDx());
+                }else{
+                    tmpList.add(v.getSj());
+                    tmpList.add(v.getSc());
+                    tmpList.add(v.getDxX1000());
+                    tmpList.add("");
+                }
+            });
+            if(tmpList.size()>0){
+                FormData[] fda= new FormData[]{dsbh,dmgcsj,dmgcsc,dmgcpc,sjgcsc};
+                Map<Integer,List<Object>> group=tmpList.stream().collect(Collectors.groupingBy(e->tmpList.indexOf(e)/fda.length));
+                for(int i=0;i<fda.length;i++){
+                    FormData fd= fda[i];
+                    FormulaUtils.write(fd,group.get(i),true);
+                }
+            }
+        });
+    }
 
     private String c(String name) {
         if (Func.isNotEmpty(name) && Func.isNotEmpty(this.args)) {

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

@@ -115,7 +115,7 @@ public class TableElementConverter implements ITableElementConverter {
 
 
     public Boolean isPresent() {
-        return BaseUtils.isNotNull(this.keyMappers, this.formulas, this.nodeId, this.contractId);
+        return BaseUtils.isNotNull(this.keyMappers, this.formulas, this.nodeId);
     }
 
 

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -347,6 +347,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     CurrentNode currentNode = null;
                     Long pKeyId = null;
                     Long contractId=null;
+                    Long projectId=null;
                     if (type.equals(ExecuteType.INSPECTION)) {
                         WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, nodeId));
                         pKeyId = wtc.getPKeyId();
@@ -356,12 +357,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, nodeId));
                         pKeyId = wtp.getPKeyId();
                         currentNode = createCurrentNode(wtp);
+                        projectId=Long.parseLong(wtp.getProjectId());
                     }
                     if (currentNode != null) {
                         TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
                         tec.setExecuteType(type);
                         tec.setLog(log);
                         tec.setContractId(contractId);
+                        tec.setProjectId(projectId);
                         if (tec.isPresent()) {
                             tec.before();
                             this.formulaService.execute(tec);

+ 148 - 131
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -114,33 +114,33 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public IFormulaService init() {
         /*基础数据*/
         baseData();
-        /*依赖加载*/
-        checkingMissingList();
-        /*实测值参数*/
-        textInfo();
-        /*公式参数*/
-        option();
-        /*评定表*/
-        assessmentForm();
+        if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
+            /*依赖加载*/
+            checkingMissingList();
+            /*实测值参数*/
+            textInfo();
+            /*公式参数*/
+            option();
+            /*评定表*/
+            assessmentForm();
+        }
         return this;
     }
 
     public  void option(){
-        FormulaOption formulaOption = this.formulaOptionService.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId,tec.getCurrentNode().getRelateId()).eq(FormulaOption::getContractId,tec.getContractId()));
-        if(formulaOption!=null){
-            tec.constantMap.put(FMOT,JSON.parseObject(formulaOption.getVal(),LinkedHashMap.class));
-        }
+            FormulaOption formulaOption = this.formulaOptionService.getOne(Wrappers.<FormulaOption>lambdaQuery().eq(FormulaOption::getParentId, tec.getCurrentNode().getRelateId()).eq(FormulaOption::getContractId, tec.getContractId()));
+            if (formulaOption != null) {
+                tec.constantMap.put(FMOT, JSON.parseObject(formulaOption.getVal(), LinkedHashMap.class));
+            }
     }
 
     public void textInfo(){
-        if(ExecuteType.INSPECTION.equals(tec.getExecuteType())){
             List<Map<String,Object>>  textInfoMap= this.jdbcTemplate.queryForList("SELECT b.tab_id pkId,b.col_name val ,CONCAT(a.init_table_name,':',b.col_key)code from m_wbs_tree_contract a inner join m_textdict_info b on a.p_key_id=b.tab_id   " +
                     "where a.p_key_id in("+this.tec.getTableAll().stream().map(NodeTable::getPKeyId).map(Func::toStr).collect(Collectors.joining(","))+") and b.type=8 ");
             if(Func.isNotEmpty(textInfoMap)){
                 Map<String,List<Map<String,Object>>> tmap = textInfoMap.stream().collect(Collectors.groupingBy(m->m.get("code").toString()));
                 tec.constantMap.put(TEXT_INFO_MAP,tmap);
             }
-        }
     }
 
     public void baseData(){
@@ -148,26 +148,27 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         CurrentNode one=this.tec.getCurrentNode();
         tec.formDataList=list;
         keyWord(tec.constantMap);
-        ContractInfo info =this.contractInfoService.getById(tec.getContractId());
-        ProjectInfo pji=this.projectInfoService.getById(info.getPId());
-        tec.setProjectId(pji.getId());
+     /*   ContractInfo info =this.contractInfoService.getById(tec.getContractId());
+        ProjectInfo pji=this.projectInfoService.getById(tec.getProjectId());*/
         /*wbs节点链*/
-        List<WbsTreeContract> nodes = wpService.chain(tec.getContractId(),one.getId(),one.getPkId(),null);
-        if(Func.isEmpty(nodes)){
-            nodes=wpService.chain(tec.getContractId(),one.getRelateId(),one.getPkId(),null);
-        }
-        if(Func.isEmpty(nodes)){
-            this.tec.getLog().append("【WBS信息缺失】");
+        if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
+            List<WbsTreeContract> nodes = wpService.chain(tec.getContractId(), one.getId(), one.getPkId(), null);
+            if (Func.isEmpty(nodes)) {
+                nodes = wpService.chain(tec.getContractId(), one.getRelateId(), one.getPkId(), null);
+            }
+            if (Func.isEmpty(nodes)) {
+                this.tec.getLog().append("【WBS信息缺失】");
+            }
+            tec.constantMap.put(CHAIN,nodes.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
+            /*节点参数*/
+            tec.constantMap.put(WP,getWpMap(one));
+            /*表格名称*/
+            List<AppWbsTreeContractVO> tableList =wbsTreeContractService.searchNodeAllTable(one.getPkId().toString(), "1", tec.getContractId().toString(),tec.getProjectId().toString());
+            tec.constantMap.put(TABLE_LIST,tableList);
+            /*通过判断元素名称来确定,加入汇总公式延后执行*/
+            /*tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));*/
+            tec.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
         }
-        tec.constantMap.put(CHAIN,nodes.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
-        /*节点参数*/
-        tec.constantMap.put(WP,getWpMap(one));
-        /*表格名称*/
-        List<AppWbsTreeContractVO> tableList =wbsTreeContractService.searchNodeAllTable(one.getPkId().toString(), "1", tec.getContractId().toString(),info.getPId());
-        tec.constantMap.put(TABLE_LIST,tableList);
-        /*通过判断元素名称来确定,加入汇总公式延后执行*/
-        /*tec.constantMap.put("tableNames",tableList.stream().filter(e->StringUtils.isEquals(e.getIsBussShow(),1)).map(WbsTreeContract::getNodeName).collect(Collectors.toList()));*/
-        tec.constantMap.put("tableNames",tableList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList()));
     }
 
 
@@ -231,6 +232,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
     /**评定表处理*/
     public void assessmentForm(){
+        if(!ExecuteType.INSPECTION.equals(tec.getExecuteType())){
+                return;
+        }
         try {
             if (tec.getTableAll().stream().anyMatch(e -> StringUtils.isEquals(e.getTableType(), 5))) {
                 /*评定节点*/
@@ -647,18 +651,22 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public IFormulaService calculate() {
-        /*天气*/
-        weather();
+        if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
+            /*天气*/
+            weather();
+        }
         /*通用计算*/
         generalCalc();
-       /*汇总信息处理*/
-        summaryCalc();
-       /*附表的处理*/
-        forSubTb();
+        if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
+            /*汇总信息处理*/
+             summaryCalc();
+            /*附表的处理*/
+            forSubTb();
+        }
         return this;
     }
 
-
+    /*天气信息获取*/
     private void weather(){
           List<String> dateList=new ArrayList<>();
           tec.formDataList.forEach(e->{
@@ -676,7 +684,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                }
           });
            if(dateList.size()>0){
-              List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList(" select DATE(b.create_time) ds,b.weather from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id=1530020611913850882 and DATE(b.create_time) in('"+ String.join(",", dateList) +"')");
+              List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList(" select DATE(b.create_time) ds,b.weather from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id="+tec.getContractId()+" and DATE(b.create_time) in('"+ String.join(",", dateList) +"')");
               Map<String,String> map= new HashMap<>();
                listMap.forEach(m->{
                    map.put(Func.toStr(m.get("ds")),Func.toStr(m.get("weather")));
@@ -1664,7 +1672,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         return new HashMap<>();
     }
 
-    public R getBussDataInfo(Long pkeyId,int type) {
+    public R getBussDataInfo(Long pkeyId, int type) {
 
         Map<String, Object> reData = new HashMap<>();
 
@@ -1682,7 +1690,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         String tabName = wbsTreeContract.getInitTableName();
         String isExitSql = " select * from information_schema.TABLES where TABLE_NAME='" + tabName + "'";
         List<Map<String, Object>> tabList = jdbcTemplate.queryForList(isExitSql);
-        if (tabList == null || tabList.size() <= 0) {
+        if (tabList.size() <= 0) {
             return R.fail("无实体表对应");
         }
 
@@ -1692,96 +1700,99 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         // 匹配关联
         try {
             File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
-            String htmlString = IoUtil.readToString(new FileInputStream(file1));
-            Document doc = Jsoup.parse(htmlString);
-
-            // 解析
-            // 模糊匹配
-            Elements dwtitle = doc.select("el-input[placeholder~=.*承包单位]");
-            Elements sgtitle = doc.select("el-input[placeholder~=^施工单位]");
-            Elements sgtitle1 = doc.select("el-input[placeholder=安装单位]");
-            sgtitle.addAll(sgtitle1);
-
-            Elements htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
-            Elements htdtitle1 = doc.select("el-input[placeholder~=合同名称.*]");
-            htdtitle.addAll(htdtitle1);
-
-            Elements jltitle = doc.select("el-input[placeholder~=监理单位.*]");
-
-            Elements bhtitle = doc.select("el-input[placeholder~=^编号]");
-            Elements bhtitle1 = doc.select("el-input[placeholder~=合同编号.*]");
-            bhtitle.addAll(bhtitle1);
-
-
-            Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
-
-
-            // Elements title = doc.select("el-input[placeholder~=^编号]");
-
-            /**
-             * 承包单位 承包单位、施工单位:引用施工单位名称 ,
-             * 监理单位:引用监理单位名称
-             * 合同段、所属建设项目(合同段):引用合同段编号
-             *
-             * 施工单位:施工单位 和 安装单位
-             *
-             */
-            ContractInfo contractInfo = contractInfoService.getById(wbsTreeContract.getContractId());
-            // 施工单位名称
-            if (dwtitle.size() >= 1) {
-                int y = Integer.parseInt(dwtitle.attr("trindex"));
-                if (y <= 10) {
-                    reData.put(dwtitle.attr("keyName"), contractInfo.getConstructionUnitName());
-                }
+            if (file1.exists()) {
+
+                String htmlString = IoUtil.readToString(new FileInputStream(file1));
+                Document doc = Jsoup.parse(htmlString);
+
+                // 解析
+                // 模糊匹配
+                Elements dwtitle = doc.select("el-input[placeholder~=.*承包单位]");
+                Elements sgtitle = doc.select("el-input[placeholder~=^施工单位]");
+                Elements sgtitle1 = doc.select("el-input[placeholder=安装单位]");
+                sgtitle.addAll(sgtitle1);
+
+                Elements htdtitle = doc.select("el-input[placeholder~=.*合同段.*]");
+                Elements htdtitle1 = doc.select("el-input[placeholder~=合同名称.*]");
+                htdtitle.addAll(htdtitle1);
+
+                Elements jltitle = doc.select("el-input[placeholder~=监理单位.*]");
+
+                Elements bhtitle = doc.select("el-input[placeholder~=^编号]");
+                Elements bhtitle1 = doc.select("el-input[placeholder~=合同编号.*]");
+                bhtitle.addAll(bhtitle1);
+
+
+                Elements xmtitle = doc.select("el-input[placeholder~=^项目名称]");
+
+
+                // Elements title = doc.select("el-input[placeholder~=^编号]");
+
+                /**
+                 * 承包单位 承包单位、施工单位:引用施工单位名称 ,
+                 * 监理单位:引用监理单位名称
+                 * 合同段、所属建设项目(合同段):引用合同段编号
+                 *
+                 * 施工单位:施工单位 和 安装单位
+                 *
+                 */
+                ContractInfo contractInfo = contractInfoService.getById(wbsTreeContract.getContractId());
+                // 施工单位名称
+                if (dwtitle.size() >= 1) {
+                    int y = Integer.parseInt(dwtitle.attr("trindex"));
+                    if (y <= 10) {
+                        reData.put(dwtitle.attr("keyName"), contractInfo.getConstructionUnitName());
+                    }
 
-            }
-            if (sgtitle.size() >= 1) {
-                int y = Integer.parseInt(sgtitle.attr("trindex"));
-                if (y <= 10) {
-                    reData.put(sgtitle.attr("keyName"), contractInfo.getConstructionUnitName());
                 }
-            }
+                if (sgtitle.size() >= 1) {
+                    int y = Integer.parseInt(sgtitle.attr("trindex"));
+                    if (y <= 10) {
+                        reData.put(sgtitle.attr("keyName"), contractInfo.getConstructionUnitName());
+                    }
+                }
 
-            // 合同段名称
-            if (htdtitle.size() >= 1) {
-                for (Element element : htdtitle) {
-                    int trindex = Integer.parseInt(element.attr("trindex"));
-                    if (trindex <= 8) {
-                        reData.put(element.attr("keyName"), contractInfo.getContractNumber());
+                // 合同段名称
+                if (htdtitle.size() >= 1) {
+                    for (Element element : htdtitle) {
+                        int trindex = Integer.parseInt(element.attr("trindex"));
+                        if (trindex <= 8) {
+                            reData.put(element.attr("keyName"), contractInfo.getContractNumber());
+                        }
                     }
                 }
-            }
-            // 监理单位名称
-            if (jltitle.size() >= 1) {
+                // 监理单位名称
+                if (jltitle.size() >= 1) {
 
-                for (Element element : jltitle) {
-                    int trindex = Integer.parseInt(element.attr("trindex"));
-                    if (trindex <= 10) {
-                        reData.put(element.attr("keyName"), contractInfo.getSupervisionUnitName());
+                    for (Element element : jltitle) {
+                        int trindex = Integer.parseInt(element.attr("trindex"));
+                        if (trindex <= 10) {
+                            reData.put(element.attr("keyName"), contractInfo.getSupervisionUnitName());
+                        }
                     }
                 }
-            }
-            //获取父节点划分编号
-            WbsTreeContract node = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                    .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
-                    .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId()));
-            // 编号
-            if (bhtitle.size() >= 1 && contractInfo.getIsReferenceNumber() == 1) {
-                for (Element element : bhtitle) {
-                    int trindex = Integer.parseInt(element.attr("trindex"));
-                    if (trindex <= 10) {
-                        reData.put(element.attr("keyName"), node.getPartitionCode() == null ? "" : node.getPartitionCode());
+                //获取父节点划分编号
+                WbsTreeContract node = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
+                        .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
+                        .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId()));
+                // 编号
+                if (bhtitle.size() >= 1 && contractInfo.getIsReferenceNumber() == 1) {
+                    for (Element element : bhtitle) {
+                        int trindex = Integer.parseInt(element.attr("trindex"));
+                        if (trindex <= 10) {
+                            reData.put(element.attr("keyName"), node.getPartitionCode() == null ? "" : node.getPartitionCode());
+                        }
                     }
                 }
-            }
 
-            // 项目名称
-            if (xmtitle.size() >= 1) {
-                for (Element element : xmtitle) {
-                    int trindex = Integer.parseInt(element.attr("trindex"));
-                    if (trindex <= 6) {
-                        ProjectInfo projectInfo = projectInfoService.getById(wbsTreeContract.getProjectId());
-                        reData.put(element.attr("keyName"), projectInfo.getProjectName());
+                // 项目名称
+                if (xmtitle.size() >= 1) {
+                    for (Element element : xmtitle) {
+                        int trindex = Integer.parseInt(element.attr("trindex"));
+                        if (trindex <= 6) {
+                            ProjectInfo projectInfo = projectInfoService.getById(wbsTreeContract.getProjectId());
+                            reData.put(element.attr("keyName"), projectInfo.getProjectName());
+                        }
                     }
                 }
             }
@@ -1789,13 +1800,13 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
             e.printStackTrace();
         }
 
-        if (dataIn != null && dataIn.size() >= 1) {
+        if (dataIn.size() >= 1) {
             Map<String, Object> mysqlData = dataIn.get(0);
             for (String key : mysqlData.keySet()) {
                 String tabVal = mysqlData.get(key) + "";
                 // 时间段处理
                 if (org.apache.commons.lang.StringUtils.isNotEmpty(tabVal) && tabVal.indexOf("null") < 0) {
-                    if (tabVal.indexOf("T") >= 0 && tabVal.indexOf(".000Z]") >= 0) {
+                    if (tabVal.contains("T") && tabVal.contains(".000Z]")) {
                         String[] tabData = tabVal.split("_\\^_");
 
                         if (reData.containsKey("pickerKey")) {
@@ -1814,9 +1825,9 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                         if (org.apache.commons.lang.StringUtils.isNotEmpty(tabData[0])) {
                             reData.put(key + "__" + tabData[1], sql);
                         }
-                    } else if (tabVal.indexOf("T") >= 0 && tabVal.indexOf(".000Z") >= 0) { //时间
+                    } else if (tabVal.contains("T") && tabVal.contains(".000Z")) { //时间
                         // 时间和字符串合作
-                        if (tabVal.indexOf("☆") >= 0) {
+                        if (tabVal.contains("☆")) {
                             String[] mysql = tabVal.split("☆");
                             for (String data : mysql) {
                                 String[] tabData = data.split("_\\^_");
@@ -1830,7 +1841,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                                 reData.put(key + "__" + tabData[1], tabData[0]);
                             }
                         }
-                    } else if (tabVal.indexOf("☆") >= 0) {
+                    } else if (tabVal.contains("☆")) {
                         String[] mysql = tabVal.split("☆");
                         for (String data : mysql) {
                             String[] tabData = data.split("_\\^_");
@@ -1838,10 +1849,16 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                                 reData.put(key + "__" + tabData[1], tabData[0]);
                             }
                         }
-                    } else if (tabVal.indexOf("_^_") >= 0) {
+                    } else if (tabVal.contains("_^_")) {
                         String[] tabData = tabVal.split("_\\^_");
                         if (org.apache.commons.lang.StringUtils.isNotEmpty(tabData[0])) {
-                            reData.put(key + "__" + tabData[1], tabData[0]);
+                            if (tabVal.contains("[") && tabVal.contains("年")) {
+                                String[] strings = org.apache.commons.lang.StringUtils.strip(tabData[0], "[]").split(",");
+
+                                reData.put(key + "__" + tabData[1], strings);
+                            } else {
+                                reData.put(key + "__" + tabData[1], tabData[0]);
+                            }
                         }
                     } else {
                         reData.put(key, tabVal);
@@ -1866,7 +1883,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         }
 
         // 移除Id 和 p_key_id
-        if(type==0){
+        if (type == 0) {
             reData.remove("id");
             reData.remove("p_key_id");
             reData.remove("classify");
@@ -1874,8 +1891,8 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
             reData.remove("pkeyId");
             reData.remove("projectId");
         }
-        if(type==1){
-            reData.put("pkeyId",reData.get("p_key_id"));
+        if (type == 1) {
+            reData.put("pkeyId", reData.get("p_key_id"));
         }
         reData.put("tabGroupId", wbsTreeContract.getTabGroupId());
         return R.data(reData);