yangyj 2 лет назад
Родитель
Сommit
23b9fe0f14

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

@@ -429,7 +429,7 @@ public class CustomFunction {
 
 	public static Object dateMax(Object range){
 		if(StringUtils.isNotEmpty(range)){
-			String[] s= Func.toStr(range).replaceAll("[\\[\\]]","").split(",");
+			String[] s= Func.toStr(range).replaceAll("[\\[\\]]","").split(",\\s+");
 			return dateCp(s[0],s[1],false);
 		}
 		return StringPool.EMPTY;

+ 11 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -85,6 +85,9 @@ public class FormulaController {
              fa.setFormula(StringUtils.escapeFormula(f.getFormula()));
              this.service.relyParse(fa);
              if(f.isNewOne()){
+                 if(StringUtils.isEmpty(f.getFormula())){
+                     return R.success("公式脚本为空");
+                 }
                  fa.setId(SnowFlakeUtil.getId());
                  this.service.save(fa);
                  ElementFormulaMapping efm = new ElementFormulaMapping();
@@ -97,6 +100,14 @@ public class FormulaController {
                  /*假如不存在projectId则认为是系统级模版公式,必须同步给所有项目TODO*/
                  return R.data(fa.getId(),"新增成功");
              }else{
+                 if(StringUtils.isEmpty(f.getFormula())){
+                     String[] sql =new String[]{
+                       "delete from m_formula where id ="+f.getId(),
+                       "delete from m_element_formula_mapping where formula_id="+f.getId()
+                     };
+                     this.jdbcTemplate.batchUpdate(sql);
+                     return R.success("公式已删除");
+                 }
                  return R.status(this.service.updateById(fa));
              }
          }

+ 139 - 137
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -3,6 +3,7 @@ package org.springblade.manager.service.impl;
 
 import cn.hutool.core.util.HashUtil;
 import cn.hutool.log.StaticLog;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.jfireel.expression.Expression;
 import com.mixsmart.utils.*;
@@ -81,6 +82,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public static final Pattern POLY = Pattern.compile(POLY_REG);
     public final static String CTI="ContractInfo";
     public final static String PJI="ProjectInfo";
+    /**表单信息*/
+    public final static String TEXT_INFO_MAP="textInfoMap";
 
 
 
@@ -156,15 +159,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             this.tec.getLog().append("无法识别的依赖:").append(missingList.stream().map(e->e.replaceAll("'","")).collect(Collectors.joining(",")));
         }
         /*实测值参数*/
-        List<Map<String,Object>>  textInfoMap= this.jdbcTemplate.queryForList("SELECT b.tab_id pkId, b.col_key ekey,b.col_name val ,c.init_table_name tableName " +
-                "from m_wbs_tree_contract a " +
-                "inner join m_textdict_info b on a.p_key_id=b.tab_id  " +
-                "INNER JOIN m_wbs_tree c on (a.id=c.id or a.old_id=c.id) " +
-                "where a.p_key_id in("+ this.tec.getTableAll().stream().map(AppWbsTreeContractVO::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("tableName")+StringPool.COLON+m.get("ekey")));
-             this.constantMap.put("tmap",tmap);
-         }
+        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(AppWbsTreeContractVO::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()));
+            this.constantMap.put(TEXT_INFO_MAP,tmap);
+        }
         /*检查项目*/
         return this;
     }
@@ -202,89 +202,89 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
         }
     }
-   public void missingFill(List<String> missingList){
-       /*数据池里面没有任何元素匹配和当前依赖匹配*/
-         if(Func.isNotEmpty(missingList)){
-             StaticLog.info("缺失元素{}", String.join(";", missingList));
-             /*1从当前节点其它表格中查找匹配的元素*/
-             List<String> removeList=new ArrayList<>();
-             for(String r:missingList){
-                 String tn = r.substring(0,r.indexOf(StringPool.COLON));
-                 String key =r.substring(r.indexOf(StringPool.COLON)+1);
-                 List<AppWbsTreeContractVO> nodeList = this.tec.getTableAll().stream().filter(e->e.getInitTableName().equals(tn)).collect(Collectors.toList());
-                 if(Func.isNotEmpty(nodeList)){
-                     String tableName = nodeList.get(0).getInitTableName();
-                     try {
-                         if(!this.tec.getCoordinateMap().containsKey(tableName)){
-                             this.tec.getCoordinateMap().put(tableName, getTableCols(nodeList.get(0), null));
-                         }
-                     } catch (FileNotFoundException e) {
-                         e.printStackTrace();
-                     }
-                     List<Map<String,Object>> tableDatas= this.jdbcTemplate.queryForList("select * from "+tableName+" where p_key_id in("+nodeList.stream().map(AppWbsTreeContractVO::getPKeyId).map(StringUtils::handleNull).collect(Collectors.joining(","))+")");
-                     fill(tableDatas,removeList,tn,key);
-                 }
-             }
-             if(Func.isNotEmpty(removeList)){
-                 /*移除已经找到的元素数据*/
-                 missingList.removeIf(removeList::contains);
-             }
-             if(Func.isNotEmpty(missingList)){
-                 /*2从当前节点的兄弟节点中查找匹配的元素*/
-                 CurrentNode currentNode = this.tec.getCurrentNode();
-                 List<Map<String,Object>> tableNamePkIdsMaps= this.jdbcTemplate.queryForList("select c.init_table_name tableName,c.p_key_id pkId from (select b.id from (select * from m_wbs_tree_contract  where p_key_id="+currentNode.getPkId()+") a join  m_wbs_tree_contract b on b.parent_id=a.parent_id where  b.contract_id="+this.tec.getContractId()+" and b.is_deleted=0) k join m_wbs_tree_contract c on c.parent_id = k.id where  c.contract_id="+this.tec.getContractId()+" and c.is_deleted=0 ");
-                 if(Func.isNotEmpty(tableNamePkIdsMaps)){
-                     removeList.clear();
-                     missingList.forEach(miss->{
-                         String tn = miss.substring(0,miss.indexOf(StringPool.COLON));
-                         String key =miss.substring(miss.indexOf(StringPool.COLON)+1);
-                         String targetIds=tableNamePkIdsMaps.stream().filter(m->StringUtils.isEquals(m.get("tableName"),tn)).map(m->m.get("pkId")).map(StringUtils::handleNull).collect(Collectors.joining(","));
-                       if(Func.isNotEmpty(targetIds)){
-                           List<Map<String,Object>> tableDatas= this.jdbcTemplate.queryForList("select * from "+tn+" where p_key_id in ("+targetIds+")");
-                           fill(tableDatas,removeList,tn,key);
-                       }
-                     });
-                 }
-             }
-             if(Func.isNotEmpty(removeList)){
-                 /*移除已经找到的元素数据*/
-                 missingList.removeIf(removeList::contains);
-             }
-         }
-   }
-
-   public void fill(List<Map<String,Object>> tableDatas,List<String> removeList,String tn,String key){
-       if(Func.isNotEmpty(tableDatas)){
-           Map<String,Object> map = new HashMap<>();
-           tableDatas.forEach(m->{
-               for(Map.Entry<String,Object> entry:m.entrySet()){
-                   if(entry.getValue()!=null){
-                       map.merge(entry.getKey(), entry.getValue(), (v1, v2) -> v1 + ";" + v2);
-                   }
-               }
-           });
-           this.tableDataMaps.put(tn,map);
-           String values= StringUtils.handleNull(map.get(key));
-           String r= tn+StringPool.COLON+key;
-           if(StringUtils.isNotEmpty(values)){
-               FormData tmp=createFormDataFast(r,values);
-               if(tmp!=null){
-                   removeList.add(r);
-                   this.formDataMap.put(r,tmp);
-               }
-           }
-       }
-   }
-   public FormData createFormDataFast(String code,String values){
+    public void missingFill(List<String> missingList){
+        /*数据池里面没有任何元素匹配和当前依赖匹配*/
+        if(Func.isNotEmpty(missingList)){
+            StaticLog.info("缺失元素{}", String.join(";", missingList));
+            /*1从当前节点其它表格中查找匹配的元素*/
+            List<String> removeList=new ArrayList<>();
+            for(String r:missingList){
+                String tn = r.substring(0,r.indexOf(StringPool.COLON));
+                String key =r.substring(r.indexOf(StringPool.COLON)+1);
+                List<AppWbsTreeContractVO> nodeList = this.tec.getTableAll().stream().filter(e->e.getInitTableName().equals(tn)).collect(Collectors.toList());
+                if(Func.isNotEmpty(nodeList)){
+                    String tableName = nodeList.get(0).getInitTableName();
+                    try {
+                        if(!this.tec.getCoordinateMap().containsKey(tableName)){
+                            this.tec.getCoordinateMap().put(tableName, getTableCols(nodeList.get(0), null));
+                        }
+                    } catch (FileNotFoundException e) {
+                        e.printStackTrace();
+                    }
+                    List<Map<String,Object>> tableDatas= this.jdbcTemplate.queryForList("select * from "+tableName+" where p_key_id in("+nodeList.stream().map(AppWbsTreeContractVO::getPKeyId).map(StringUtils::handleNull).collect(Collectors.joining(","))+")");
+                    fill(tableDatas,removeList,tn,key);
+                }
+            }
+            if(Func.isNotEmpty(removeList)){
+                /*移除已经找到的元素数据*/
+                missingList.removeIf(removeList::contains);
+            }
+            if(Func.isNotEmpty(missingList)){
+                /*2从当前节点的兄弟节点中查找匹配的元素*/
+                CurrentNode currentNode = this.tec.getCurrentNode();
+                List<Map<String,Object>> tableNamePkIdsMaps= this.jdbcTemplate.queryForList("select c.init_table_name tableName,c.p_key_id pkId from (select b.id from (select * from m_wbs_tree_contract  where p_key_id="+currentNode.getPkId()+") a join  m_wbs_tree_contract b on b.parent_id=a.parent_id where  b.contract_id="+this.tec.getContractId()+" and b.is_deleted=0) k join m_wbs_tree_contract c on c.parent_id = k.id where  c.contract_id="+this.tec.getContractId()+" and c.is_deleted=0 ");
+                if(Func.isNotEmpty(tableNamePkIdsMaps)){
+                    removeList.clear();
+                    missingList.forEach(miss->{
+                        String tn = miss.substring(0,miss.indexOf(StringPool.COLON));
+                        String key =miss.substring(miss.indexOf(StringPool.COLON)+1);
+                        String targetIds=tableNamePkIdsMaps.stream().filter(m->StringUtils.isEquals(m.get("tableName"),tn)).map(m->m.get("pkId")).map(StringUtils::handleNull).collect(Collectors.joining(","));
+                        if(Func.isNotEmpty(targetIds)){
+                            List<Map<String,Object>> tableDatas= this.jdbcTemplate.queryForList("select * from "+tn+" where p_key_id in ("+targetIds+")");
+                            fill(tableDatas,removeList,tn,key);
+                        }
+                    });
+                }
+            }
+            if(Func.isNotEmpty(removeList)){
+                /*移除已经找到的元素数据*/
+                missingList.removeIf(removeList::contains);
+            }
+        }
+    }
+
+    public void fill(List<Map<String,Object>> tableDatas,List<String> removeList,String tn,String key){
+        if(Func.isNotEmpty(tableDatas)){
+            Map<String,Object> map = new HashMap<>();
+            tableDatas.forEach(m->{
+                for(Map.Entry<String,Object> entry:m.entrySet()){
+                    if(entry.getValue()!=null){
+                        map.merge(entry.getKey(), entry.getValue(), (v1, v2) -> v1 + ";" + v2);
+                    }
+                }
+            });
+            this.tableDataMaps.put(tn,map);
+            String values= StringUtils.handleNull(map.get(key));
+            String r= tn+StringPool.COLON+key;
+            if(StringUtils.isNotEmpty(values)){
+                FormData tmp=createFormDataFast(r,values);
+                if(tmp!=null){
+                    removeList.add(r);
+                    this.formDataMap.put(r,tmp);
+                }
+            }
+        }
+    }
+    public FormData createFormDataFast(String code,String values){
         if(StringUtils.isNotEmpty(code,values)){
-         return    new FormData(code, Arrays.stream(values.split("☆")).map(s->{
+            return    new FormData(code, Arrays.stream(values.split("☆")).map(s->{
                 String[] t = s.split("_\\^_");
                 String[] c =t[1].split("_");
                 return  new ElementData(0,0,t[0],Func.toInt(c[1]),Func.toInt(c[0]));
             }).collect(Collectors.toList()), null,StringPool.EMPTY);
         }
         return null;
-   }
+    }
 
     public Map<String, String> getTableCols(AppWbsTreeContractVO wbsTreeContract, String colkey) throws FileNotFoundException {
         Map<String, String> dataMap = new HashMap<>();
@@ -320,9 +320,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     /**引入关键字*/
     public void keyWord(Map<String,Object> constantMap){
-           CustomFunction.KEYWORD_SET.forEach(e->{
-               constantMap.put(e,e);
-           });
+        CustomFunction.KEYWORD_SET.forEach(e->{
+            constantMap.put(e,e);
+        });
     }
 
     /**
@@ -342,13 +342,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if(Func.isNotEmpty(wpsPrivate)){
             total.addAll(wpsPrivate);
         }
+        Map<String,String> logMap =new HashMap<>();
         if(CollectionUtil.isNotEmpty(total)){
             /*同名参数私有覆盖公用*/
             for(WbsParam p:total){
                 result.put(p.getK(),p.getV());
+                logMap.put(p.getK(),p.getName());
             }
         }
-        this.tec.getLog().append("本节点参数情况:").append(result.entrySet().stream().map(p->p.getKey()+":"+p.getValue()).collect(Collectors.joining(";")));
+        this.tec.getLog().append("本节点参数情况:").append(result.entrySet().stream().map(p->logMap.get(p.getKey())+":"+p.getValue()).collect(Collectors.joining(";")));
         /*元素动态绑定*/
         this.formDataMap.values().stream().filter(e->e.getIsCurrentNodeElement()&&e.getFormula()==null).forEach(e->{
             /*执行列表里不存在,且元素的名称和节点参数名称匹配成功*/
@@ -423,9 +425,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     }
                 }
                 if(CHECK_ITEMS.equals(tmp)){
-                   /*获取type=1的检验单或者type=4的监表*/
-                   List<WbsTreeContract> tableList= (List<WbsTreeContract>) this.constantMap.get(TABLE_LIST);
-                   Optional<WbsTreeContract> wop=tableList.stream().filter(e->e.getTableType()==1||e.getTableType()==4).findAny();
+                    /*获取type=1的检验单或者type=4的监表*/
+                    List<WbsTreeContract> tableList= (List<WbsTreeContract>) this.constantMap.get(TABLE_LIST);
+                    Optional<WbsTreeContract> wop=tableList.stream().filter(e->e.getTableType()==1||e.getTableType()==4).findAny();
                     wop.ifPresent(wbsTreeContract -> this.jdbcTemplate.queryForList("select c.e_name name ,c.init_table_name tableName,c.e_key ekey from m_wbs_tree_contract a INNER JOIN m_wbs_tree b on (a.id=b.id or a.old_id=b.id) INNER join m_wbs_form_element c on b.init_table_id=c.f_id where a.id=" + wbsTreeContract.getPKeyId()));
                 }
                 fd.getFormula().setFormula(tmp);
@@ -466,10 +468,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         if(CollectionUtil.isNotEmpty(relyList)){
                             List<FormData>  ele = new ArrayList<>();
                             relyList.forEach(rely->{
-                               FormData formData=  this.tec.getFormDataMap().get(rely);
-                               if(formData!=null&&formData.getValues().stream().anyMatch(Func::isNotEmpty)){
-                                   ele.add(formData);
-                               }
+                                FormData formData=  this.tec.getFormDataMap().get(rely);
+                                if(formData!=null&&formData.getValues().stream().anyMatch(Func::isNotEmpty)){
+                                    ele.add(formData);
+                                }
                             });
                             if(ele.size()<relyList.size()){
                                 this.tec.getLog().append(fd.getEName()).append(fd.getFormula().getFormula().replaceAll("'", "")).append("不满足执行依赖;");
@@ -512,12 +514,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             write(fd,data);
                         }
                     }catch (Exception e){
-                       tec.getLog().append(fd.getEName()).append("计算错误; ");
+                        tec.getLog().append(fd.getEName()).append("计算错误; ");
                     }
 
                 }
-                     /*数量不相等*/
-                    fd.setUpdate(1);
+                /*数量不相等*/
+                fd.setUpdate(1);
             }
         }
         return this;
@@ -565,16 +567,16 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         /*数据格式化*/
         for(FormData fd:this.formDataList){
             if(fd.verify()){
-                    /*保留小数位*/
-                   if(!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isDouble)){
-                       Formula f = fd.getFormula();
-                       Integer scale =f.getScale();
-                       if(scale==null){
-                           scale=2;
-                       }
-                       Integer finalScale = scale;
-                       fd.setValues(fd.getValues().stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList()));
-                   }
+                /*保留小数位*/
+                if(!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isDouble)){
+                    Formula f = fd.getFormula();
+                    Integer scale =f.getScale();
+                    if(scale==null){
+                        scale=2;
+                    }
+                    Integer finalScale = scale;
+                    fd.setValues(fd.getValues().stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2String(e.getValue(),finalScale));}}).collect(Collectors.toList()));
+                }
             }
         }
     }
@@ -604,7 +606,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 entry.getValue().stream().max(Comparator.comparing(KeyMapper::getScope)).ifPresent(set::add);
             }
             if(set.size()>0){
-               return new ArrayList<>(set);
+                return new ArrayList<>(set);
             }
         }
         return Collections.emptyList();
@@ -612,12 +614,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public List<Formula> getFormulaList(List<KeyMapper> keyMapperList) {
-       if(Func.isNotEmpty(keyMapperList)){
-             List<Formula> result = this.listByIds(keyMapperList.stream().map(KeyMapper::getFormulaId).collect(Collectors.toList()));
-             if(Func.isNotEmpty(result)){
-                 return result;
-             }
-       }
+        if(Func.isNotEmpty(keyMapperList)){
+            List<Formula> result = this.listByIds(keyMapperList.stream().map(KeyMapper::getFormulaId).collect(Collectors.toList()));
+            if(Func.isNotEmpty(result)){
+                return result;
+            }
+        }
         return Collections.emptyList();
     }
 
@@ -636,10 +638,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         int min =0;
         List<Object> result = new ArrayList<>();
         try {
-                List<Object>  r= local.stream().map(e-> Expression.parse(e.getFormula()).calculate(e.getCurrentMap())).collect(Collectors.toList());
-                if(CollectionUtil.isNotEmpty(r)&&r.stream().anyMatch(StringUtils::isNotEmpty)){
-                    result.addAll(r);
-                }
+            List<Object>  r= local.stream().map(e-> Expression.parse(e.getFormula()).calculate(e.getCurrentMap())).collect(Collectors.toList());
+            if(CollectionUtil.isNotEmpty(r)&&r.stream().anyMatch(StringUtils::isNotEmpty)){
+                result.addAll(r);
+            }
         }catch (Exception e){
             StaticLog.error("公式:{},执行出错",formula);
         }
@@ -723,11 +725,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         while (m.find()) {
                             Object data=null;
                             if(f.contains("quantity(")){
-                                String s = m.group(1).replace("'","");
-                                Map<String,List<Map<String,Object>>> tmap= (Map<String, List<Map<String, Object>>>) this.constantMap.getOrDefault("tmap",new HashMap<>());
-                                List<Map<String,Object>> tableColKeyVal= tmap.get(s);
+                                String s = m.group(2).split(",")[0].replaceAll("[E\\[\\]']","");
+                                Map<String,List<Map<String,Object>>> textInfoMap= (Map<String, List<Map<String, Object>>>) this.constantMap.getOrDefault(TEXT_INFO_MAP,new HashMap<>());
+                                List<Map<String,Object>> tableColKeyVal= textInfoMap.get(s);
                                 if(Func.isNotEmpty(tableColKeyVal)){
-                                    data = tableColKeyVal.stream().map(map->{RangeInfo rangeInfo=BeanUtil.toBean((Map) map.get("val"), RangeInfo.class);return rangeInfo.getSize();}).collect(Collectors.toList());
+                                    data = tableColKeyVal.stream().map(map-> BeanUtil.toBean(JSON.parseObject(map.get("val").toString()),RangeInfo.class)).map(RangeInfo::getFail).findFirst().orElseGet(String::new);
                                 }else{
                                     /*手动计算*/
                                     System.out.println("");
@@ -739,7 +741,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 for(String k:relyList){
                                     FormData e=this.formDataMap.get(k);
                                     if(e==null){
-                                        this.tec.getLog().append(fd.getEName()).append("缺失依赖:").append(k);
+                                        this.tec.getLog().append(fd.getEName()).append("缺失依赖:").append(k).append(";");
                                         return;
                                     }
                                     E.put(e.getCode(),e.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()));
@@ -792,19 +794,19 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             //Map<String, Object> currentMap = new HashMap<>(this.constantMap);
                             Matcher fm=P.matcher(rep);
                             while (fm.find()){
-                               FormData kf=  this.formDataMap.get(fm.group().replaceAll("'",""));
-                               if(kf!=null&&!kf.empty()){
-                                ElementData ed= kf.getValues().get(0);
-                                 if(ed!=null&&Func.isNotEmpty(ed.getValue())){
-                                     rep= rep.replace("E["+fm.group()+"]",ed.getValue().toString());
-                                     rep="'"+rep+"'";
-                                     f=f.replace(im.group(),rep);
-                                 }else{
-                                    f="";
-                                 }
-                               }else{
+                                FormData kf=  this.formDataMap.get(fm.group().replaceAll("'",""));
+                                if(kf!=null&&!kf.empty()){
+                                    ElementData ed= kf.getValues().get(0);
+                                    if(ed!=null&&Func.isNotEmpty(ed.getValue())){
+                                        rep= rep.replace("E["+fm.group()+"]",ed.getValue().toString());
+                                        rep="'"+rep+"'";
+                                        f=f.replace(im.group(),rep);
+                                    }else{
+                                        f="";
+                                    }
+                                }else{
                                     f="";
-                               }
+                                }
                             }
                         }
                         formula.setFormula(f);