Browse Source

公式相关:G8G10

yangyj 2 năm trước cách đây
mục cha
commit
78502c78fd

+ 26 - 3
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java

@@ -2,6 +2,7 @@ package com.jfireel.expression.node.impl;
 
 import com.jfireel.expression.token.Operator;
 import com.jfireel.expression.util.number.SubtractUtil;
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
 
 import java.math.BigDecimal;
@@ -15,20 +16,42 @@ public class MinusNode extends OperatorResultNode {
 	@Override
 	public Object calculate(Map<String, Object> variables) {
 		Object leftValue = leftOperand.calculate(variables);
+		Object rightValue = rightOperand.calculate(variables);
+		String reg="[0-9.]+(\\*[0-9.]+)*";
+        if(StringUtils.handleNull(leftValue).matches(reg)&&StringUtils.handleNull(rightValue).matches(reg)){
+        	return CustomFunction.dXd(rightValue,leftValue);
+		}
 		if(leftValue instanceof String && StringUtils.isNumber(leftValue)) {
 			leftValue = new BigDecimal(leftValue.toString());
 		}
-		if (leftValue instanceof Number == false) {
+		if (!(leftValue instanceof Number)) {
 			return null;
 		}
-		Object rightValue = rightOperand.calculate(variables);
 		if(rightValue instanceof String && StringUtils.isNumber(rightValue)) {
 			rightValue = new BigDecimal(rightValue.toString());
 		}
-		if (rightValue instanceof Number == false) {
+		if (!(rightValue instanceof Number)) {
 			return null;
 		}
 		return SubtractUtil.calculate((Number) leftValue, (Number) rightValue);
 	}
 
+//	public Object calculateOld(Map<String, Object> variables) {
+//		Object leftValue = leftOperand.calculate(variables);
+//		if(leftValue instanceof String && StringUtils.isNumber(leftValue)) {
+//			leftValue = new BigDecimal(leftValue.toString());
+//		}
+//		if (!(leftValue instanceof Number)) {
+//			return null;
+//		}
+//		Object rightValue = rightOperand.calculate(variables);
+//		if(rightValue instanceof String && StringUtils.isNumber(rightValue)) {
+//			rightValue = new BigDecimal(rightValue.toString());
+//		}
+//		if (!(rightValue instanceof Number)) {
+//			return null;
+//		}
+//		return SubtractUtil.calculate((Number) leftValue, (Number) rightValue);
+//	}
+
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/util/number/SubtractUtil.java

@@ -63,7 +63,7 @@ public class SubtractUtil {
 	private static Object calculate(BigDecimal a, BigDecimal b) {
 		int aScale = new BigDecimal(a.toString()).scale();
 		int bScale = new BigDecimal(b.toString()).scale();
-		return a.subtract(b).setScale(aScale > bScale ? aScale : bScale, BigDecimal.ROUND_HALF_UP);
+		return a.subtract(b).setScale(Math.max(aScale, bScale), BigDecimal.ROUND_HALF_UP);
 	}
 	
 	public static Object calculate(Number a, Number b) {

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

@@ -436,7 +436,7 @@ public class CustomFunction {
 
 	public static Object dateMin(Object range){
 		if(StringUtils.isNotEmpty(range)){
-			String[] s= Func.toStr(range).replaceAll("[[|]]","").split(",");
+			String[] s= Func.toStr(range).replaceAll("[|]","").split(",");
 			return dateCp(s[0],s[1],true);
 		}
 		return StringPool.EMPTY;
@@ -2797,8 +2797,12 @@ public class CustomFunction {
 	}
 
 	public static void main(String[] args) {
-		String s="边坡或仰坡坡度_不大于设计_尺量:每洞口检查10处_实测";
-		System.out.println(s.split("[((].+[))]|_")[0]);
+	     Map<String,Object> map =new HashMap<>();
+	     map.put("A","13.3*13.6");
+		map.put("B","13.5*13.5");
+		Expression.parse("A-B").calculate(map);
+		System.out.println();
+
 	}
 
 

+ 9 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -162,28 +162,19 @@ public class FormulaController {
     public R<FormulaBean> detail(FormulaBean f) {
         if(f.getElementId()!=null){
             StringBuilder sb = new StringBuilder("select b.* from m_element_formula_mapping a INNER JOIN m_formula b on a.formula_id=b.id where a.element_id="+f.getElementId()+" and b.is_deleted=0 and a.scope ="+f.getScope());
-            if(Func.isNotEmpty(f.getNodeId())){
-                sb.append(" and a.node_id=").append(f.getNodeId());
-            }
-            if(Func.isNotEmpty(f.getProjectId())){
-                sb.append(" and a.project_id=").append(f.getProjectId());
-            }
+           if(StringUtils.isEquals(0,f.getScale())){
+               if(Func.isNotEmpty(f.getNodeId())){
+                   sb.append(" and a.node_id=").append(f.getNodeId());
+               }
+               if(Func.isNotEmpty(f.getProjectId())){
+                   sb.append(" and a.project_id=").append(f.getProjectId());
+               }
+           }
             List<Map<String,Object>> listMap = this.jdbcTemplate.queryForList(sb.toString());
             if(Func.isNotEmpty(listMap)){
                 Map<String,Object> map =listMap.get(0);
                 String rely = StringUtils.handleNull(map.get("rely"));
                 FormulaBean fb=BeanUtil.toBean(map,FormulaBean.class);
-//                if(StringUtils.isNotEmpty(rely)){
-//                    String[] relyArr = rely.split(StringPool.COMMA);
-//                   List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
-//                           "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id  " +
-//                           "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
-//                           " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining(StringPool.COMMA,"'","'"))+")");
-//                   if(ListUtils.isNotEmpty(mapList)){
-//                       fb.setDict(mapList.stream().filter(e-> Arrays.stream(relyArr).anyMatch(c->StringUtils.isEquals(e.get("ekey"),c))).collect(Collectors.toMap(e->StringUtils.handleNull(e.get("ekey")), e->e)));
-//                   }
-//
-//                }
                 fb.setDict(this.service.getElementInfoByCodes(rely));
                 return R.data(fb);
             }
@@ -349,7 +340,7 @@ public class FormulaController {
              Map<String,Object> result = new LinkedHashMap<>();
              String  key=fo.getKey().replaceAll("__[\\d_]+","");
               ContractInfo contract = this.contractInfoService.getById(fo.getContractId());
-              List<KeyMapper> kms =  this.service.getKeyMapperList(Collections.singletonList(fo.getPkeyId()),contract.getPId());
+              List<KeyMapper> kms =  this.service.getKeyMapperList(Collections.singletonList(fo.getPkeyId()),contract.getPId(),"");
               KeyMapper keyMapper=null;
               if(Func.isNotEmpty(kms)){
                 Optional<KeyMapper> optionalKeyMapper=  kms.stream().filter(e->StringUtils.isEquals(e.getField(),key)).findFirst();

+ 19 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -1,8 +1,11 @@
 package org.springblade.manager.formula;
 
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.formula.impl.TableElementConverter;
+
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -16,7 +19,7 @@ import static org.springblade.manager.formula.TurnPoint.*;
 public interface ITurnPointCalculator {
 
 
-     static List<Object> create( List<Map<String,Object>> data, LinkedHashMap<String,String> configMap){
+     static List<Object> create( List<Map<String,Object>> data, LinkedHashMap<String,String> configMap,Map<String,Object> g8){
         if(Func.isNotEmpty(data)&&configMap!=null){
                 LevelInfo levelInfo = new LevelInfo();
                 List<TurnPoint> tmp =new ArrayList<>();
@@ -24,6 +27,8 @@ public interface ITurnPointCalculator {
                     Map<String,Object>dm = data.get(i);
                     Map<String,Object> dataMap = new HashMap<>(configMap.size()*2);
                     TurnPoint tp = new TurnPoint(levelInfo,dataMap);
+                    /*V判断*/
+                    tp.setVertical(StringUtils.isEquals(1,dm.get("vertical")));
                     for(Map.Entry<String,String> kv:configMap.entrySet()){
                         String key =kv.getKey();
                         String field =kv.getValue();
@@ -86,6 +91,8 @@ 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()){
@@ -197,5 +204,16 @@ 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()));
+     }
 
 }

+ 11 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -67,6 +67,9 @@ public class TurnPoint {
 
     private Map<String,Object> dataMap;
 
+    /**垂直方向*/
+    private Boolean vertical;
+
 
     public TurnPoint(LevelInfo levelInfo, Map<String, Object> dataMap) {
         this.levelInfo = levelInfo;
@@ -76,6 +79,7 @@ public class TurnPoint {
     public TurnPoint() {
     }
 
+
     public String getName() {
         return name;
     }
@@ -334,4 +338,11 @@ public class TurnPoint {
         return StringUtils.isEquals(CE,this.type);
   }
 
+    public Boolean getVertical() {
+        return vertical;
+    }
+
+    public void setVertical(Boolean vertical) {
+        this.vertical = vertical;
+    }
 }

+ 11 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -1,26 +1,22 @@
 package org.springblade.manager.formula.impl;
 
 import com.jfireel.expression.Expression;
-import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import org.springblade.business.feign.MileageClient;
-import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.FormulaStrategy;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.Mileage;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -75,7 +71,6 @@ public class FormulaMileage implements FormulaStrategy {
                 mileage.setValue(0, ed.stringValue());
                 Long pkeyId=tableInfoIds.get(ed.getIndex());
                 String findStr="OP['"+cur.getTableName()+"']['"+pkeyId+"@"+cur.getKey()+"__"+ed.getY()+"_"+ed.getX()+"']['TF']";
-                String flag=StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap()));
                 mileage.setVertical(StringUtils.isEquals(1,StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap()))));
                 row.put(line0.getCode(), ed);
                 for (int j = 1; j < relyList.size(); j++) {
@@ -90,14 +85,13 @@ public class FormulaMileage implements FormulaStrategy {
 
                 }
                 mileageList.add(mileage);
-
             }
+
         }
         if(Func.isNotEmpty(mileageList)){
               List<String>  zhpw =mileageList.stream().filter(Mileage::isChecked).map(Mileage::getZhPw).collect(Collectors.toList());
             Map<String,String[]> coordinateMap  =  mileageClient.mileage2Coordinate(zhpw,Func.toLong(tec.getConstantMap().get("contractId")));
             /*G10缓存对象*/
-            tec.getConstantMap().put("G10",new Object());
             if(coordinateMap.size()>0){
                 mileageList.forEach(m->{
                     String[] coordinate = coordinateMap.get(m.getZhPw());
@@ -118,7 +112,7 @@ public class FormulaMileage implements FormulaStrategy {
                     }
                 });
                 data.forEach(e->{e.setUpdate(1);e.setFinished(Boolean.TRUE);});
-
+                forG10(mileageList,tec);
             }
 
         }
@@ -126,7 +120,14 @@ public class FormulaMileage implements FormulaStrategy {
     }
     public static final Pattern MILE_P = Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\).MILE\\()([^,]+),([^,]+)(?=,)");
 
-
+    public void forG10(List<Mileage> data,TableElementConverter tec){
+          if(Func.isNotEmpty(data)){
+              Map<String,Object> g10 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G10", k->new HashMap<>());
+              g10.put("dx",data.stream().map(Mileage::getDx).collect(Collectors.toList()));
+              g10.put("dxnv",data.stream().filter(e->!e.getVertical()).map(Mileage::getDx).collect(Collectors.toList()));
+              g10.put("dxv",data.stream().filter(Mileage::getVertical).map(Mileage::getDx).collect(Collectors.toList()));
+          }
+    }
 
     public void write( LinkedHashMap<String,ElementData> row,List<Object>data,List<String> keys,List<String> scale3){
               if(ListUtils.isNotEmpty(data)){

+ 12 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.formula.impl;
 
 import cn.hutool.core.util.ReUtil;
+import com.jfireel.expression.Expression;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
@@ -8,8 +9,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
-import org.springblade.manager.formula.FormulaStrategy;
-import org.springblade.manager.formula.ITurnPointCalculator;
+import org.springblade.manager.formula.*;
 import org.springframework.stereotype.Component;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -60,6 +60,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
             for(int i=0;i<KEYS.size();i++){
                 configMap.put(KEYS.get(i),this.args.get(i));
             }
+            List<Long> tableInfoIds= tec.getKeyMappers().stream().filter(k->k.getTableName().equals(cur.getTableName())).map(KeyMapper::getPkId).distinct().collect(Collectors.toList());
             while (cda.hasNext()) {
                 LinkedHashMap<String, ElementData> map = cda.next();
                 if(!map.get(configMap.get(KEYS.get(0))).isEmpty()){
@@ -67,25 +68,28 @@ public class FormulaTurnPoint implements FormulaStrategy {
                     KEYS.forEach(k->{
                         ElementData ed = map.get(c(k));
                         tmp.put(configMap.get(k),ed.stringValue());
+                        /*V判断*/
+                        if(CD.equals(k)){
+                            Long pkeyId=tableInfoIds.get(ed.getIndex());
+                            String findStr="OP['"+cur.getTableName()+"']['"+pkeyId+"@"+cur.getKey()+"__"+ed.getY()+"_"+ed.getX()+"']['TF']";
+                            tmp.put("vertical",StringUtils.handleNull(Expression.parse(findStr).calculate(tec.getConstantMap())));
+                        }
+
                     });
                     tableData.add(tmp);
                 }
             }
-           List<Object> data= ITurnPointCalculator.create(tableData,configMap);
+            Map<String,Object> g8 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G8", k->new HashMap<>());
+           List<Object> data= ITurnPointCalculator.create(tableData,configMap,g8);
             if(Func.isNotEmpty(data)){
                 AtomicInteger ai = new AtomicInteger();
                 Map<Integer,List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e->ai.getAndAdd(1)%configMap.size()));
                 ai.set(0);
                 dataSourceMap.forEach((k,v)->{
                     List<Object> dl =dataMap.get(ai.getAndIncrement());
-//                    List<ElementData> list = v.getValues();
                     v.setUpdate(1);
                     v.setFinished(Boolean.TRUE);
                     FormulaUtils.write(v,dl);
-//                    for(int n=0;n<dl.size();n++){
-//                        ElementData ed = list.get(n);
-//                        ed.setValue(dl.get(n));
-//                    }
                 });
             }
 

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

@@ -34,6 +34,6 @@ public interface IFormulaService extends BaseService<Formula> {
     void format();
 
     List<Formula> getFormulaList(List<KeyMapper> keyMapperList);
-    List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId);
+    List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId,String nodeId);
     Map<String,Object> getElementInfoByCodes(String codes);
 }

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

@@ -343,7 +343,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
             List<AppWbsTreeContractVO> tableAll = wbsTreeContractService.searchNodeAllTable(nodeId.toString(), "1", tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId());
             StopWatch stopWatch = new StopWatch();
-            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId());
+            List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(),String.valueOf(nodeId));
             if (Func.isNotEmpty(keyMappers)) {
                 Map<String, Map<String, String>> coordinateMap = new HashMap<>(keyMappers.size() * 2);
                 keyMappers.forEach(e -> {

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

@@ -46,6 +46,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final IContractInfoService contractInfoService;
     private final IProjectInfoService projectInfoService;
     private final IWbsTreeContractService wbsTreeContractService;
+    private final IWbsTreePrivateService wbsTreePrivateService;
+    private final IElementFormulaMappingService elementFormulaMappingService;
+    private final IWbsTreeService wbsTreeService;
     private final JdbcTemplate jdbcTemplate;
     private final IFormulaOptionService formulaOptionService;
     /**  private final Container env;*/
@@ -647,7 +650,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
     @Override
-    public List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId) {
+    public List<KeyMapper> getKeyMapperList(List<Long> ids,String projectId,String nodeId) {
         /*表名,pkeyId,元素名,元素id 映射对象*/
         String pkIds=ids.stream().map(String::valueOf).collect(Collectors.joining(","));
         List<Map<String,Object>> listMap = this.jdbcTemplate.queryForList(" select a.init_table_name as tableName,a.p_key_id as pkId ,c.e_key as field,c.e_name as eName,c.id  as fieldId   " +
@@ -675,6 +678,40 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     }
                 });
             }
+            /*节点参数公式*/
+            if(StringUtils.isNotEmpty(nodeId)){
+                /*存在工序节点id则检查节点参数*/
+                WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,nodeId));
+                if(wtc!=null){
+                    List<WbsParam> total = new ArrayList<>();
+                    WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getId,wtc.getId()).eq(WbsTreePrivate::getProjectId,wtc.getProjectId()).eq(WbsTreePrivate::getWbsId,wtc.getWbsId()));
+                    if(wtp!=null){
+                        List<WbsParam> wpsPrivate = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,wtp.getPKeyId()));
+                        if(Func.isEmpty(wpsPrivate)){
+                            WbsTree wt = this.wbsTreeService.getOne(Wrappers.<WbsTree>lambdaQuery().and(e->e.eq(WbsTree::getId,wtc.getId()).or().eq(WbsTree::getId,wtc.getOldId())));
+                            if(wt!=null){
+                                List<WbsParam> wpsPublic = this.wpService.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getNodeId,wt.getId()));
+                                if(Func.isNotEmpty(wpsPublic)){
+                                    total.addAll(wpsPublic);
+                                }
+                            }
+                        }else{
+                            total.addAll(wpsPrivate);
+                        }
+                    }
+                    if(Func.isNotEmpty(total)){
+                      List<ElementFormulaMapping> mappingList =  this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().in(ElementFormulaMapping::getParamId,total.stream().map(WbsParam::getId).collect(Collectors.toList())));
+                      if(Func.isNotEmpty(mappingList)){
+                          list.forEach(e->{
+                              mappingList.stream().filter(m->StringUtils.isEquals(m.getElementId(),e.getFieldId())).findAny().ifPresent(d->{
+                                  e.setFormulaId(d.getFormulaId());
+                              });
+                          });
+
+                      }
+                    }
+                }
+            }
             if(list.size()>0){
                 return list;
             }
@@ -867,8 +904,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                              FormData dataFd=this.formDataMap.get(codeList.get(0));
                              FormData designFd=this.formDataMap.get(codeList.get(1));
                              if(dataFd!=null&&designFd!=null){
-                                 List<Object>  result =  CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),designFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),formula.getDev(),1 );
-                                 data=result.get(1);
+                                 if(designFd.getValues().size()>0){
+                                     /*多少个设计值暂时默认全部合格,满足绝大部分结果*/
+                                     data=dataFd.getValues().size();
+                                 }else{
+                                     List<Object>  result =  CustomFunction.b445check(dataFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),designFd.getValues().stream().map(ElementData::getValue).collect(Collectors.toList()),formula.getDev(),1 );
+                                     data=result.get(1);
+                                 }
                              }
                          }