yangyj 2 gadi atpakaļ
vecāks
revīzija
0c0533697e

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormulaBean.java

@@ -30,6 +30,8 @@ public class FormulaBean {
     private Integer outm;
     private Integer scope;
     private Long projectId;
+    private String dev;
+    private Integer ver;
     public Formula toFormula(){
         Formula f= new Formula();
         BeanUtils.copyProperties(this,f);

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/Formula.java

@@ -38,6 +38,8 @@ public class Formula extends BaseEntity {
    private Long paramId;
    /**偏差范围*/
    private String dev;
+   /**版本号*/
+   private  Integer ver;
 
 
    public List<String> getRelyList(){

+ 1 - 20
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java

@@ -34,16 +34,6 @@ public class FormulaClientImpl implements  FormulaClient{
     private final IExcelTabService excelTabService;
     @Override
     public void formulaExecute() {
-        List<FormData> list = new ArrayList<>();
-        list.add(makeFd("FC.tree(trees,WP[snake])","t-f1",""));
-        list.add(makeFd("FC.avg(E[ele852])","ele100","ele852"));
-        list.add(makeFd("","ele852","",0,1,2,3,4,5,6));
-        list.add(makeFd("(E[a]+E[b])/2+E[c]*E[d]","szys","a,b,c,d"));
-        list.add(makeFd("","a","",0,2,2,2,2,2));
-        list.add(makeFd("","b","",0,3,3,6,3,8));
-        list.add(makeFd("","c","",0,5.5,3,7,3,9));
-        list.add(makeFd("","d","",0,10,7,2,5,5));
-        service.execute(list,111111L,22222L,10000L);
     }
 
     @Override
@@ -68,14 +58,5 @@ public class FormulaClientImpl implements  FormulaClient{
         return sb.toString();
     }
 
-    public FormData makeFd(String fs,String code,String rely,Object ...obs){
-        Formula f= new Formula();
-        f.setRely(rely);
-        f.setFormula(fs);
-        List<ElementData> list = new ArrayList<>();
-        if(obs!=null){
-            list= Arrays.stream(obs).map(e->new ElementData(0,0,e)).collect(Collectors.toList());
-        }
-        return new FormData(code, list,f,"");
-    }
+
 }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Container.java

@@ -3,6 +3,7 @@ package org.springblade.manager.formula;
 import lombok.Data;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
@@ -20,4 +21,5 @@ public class Container {
     public   Map<String,Object> constantMap;
     public   List<FormData> formDataList;
     public   Map<Long,Map<String,Object>> crossDataMap;
+    public   TableElementConverter tec;
 }

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

@@ -26,7 +26,7 @@ import java.util.stream.Stream;
 /**
  * @author yangyj
  * @Date 2022/9/1 13:50
- * @description TODO
+ * @description 输入输出转换器
  */
 @Data
 public class TableElementConverter implements ITableElementConverter {
@@ -42,6 +42,7 @@ public class TableElementConverter implements ITableElementConverter {
     List<FormData> fds =new ArrayList<>();
     Map<String,Map<String,String>> coordinateMap;
     Map<String,ElementData> elementDataMap = new HashMap<>();
+    WbsTreeContract one;
 
 
     public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas, Map<String,Map<String,String>> coordinateMap, WbsTreeContract wtc) {
@@ -54,6 +55,7 @@ public class TableElementConverter implements ITableElementConverter {
         if(Func.isNotEmpty(tableInfoList)){
             this.contractId = Long.parseLong(tableInfoList.get(0).getContractId());
         }
+        this.one=wtc;
     }
 
     public TableElementConverter() {

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/FormulaMapper.xml

@@ -24,6 +24,7 @@
         <result column="batch" property="batch"/>
 <!--        <result column="scope" property="scope"/>-->
         <result column="dev" property="dev"/>
+        <result column="ver" property="ver"/>
     </resultMap>
 
 </mapper>

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

@@ -13,11 +13,10 @@ import java.util.List;
  */
 public interface IFormulaService extends BaseService<Formula> {
 
-    void execute(List<FormData> list,Long contractId,Long id,Long primaryKeyId);
     void execute(TableElementConverter tec);
     /**
      * 变量准备*/
-    IFormulaService init(List<FormData> list,Long contractId,Long id,Long primaryKeyId);
+    IFormulaService init();
     /**
      * 依赖排序*/
     IFormulaService sort();

+ 14 - 52
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -22,6 +22,7 @@ import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.Container;
 import org.springblade.manager.formula.FormulaStrategyFactory;
+import org.springblade.manager.formula.ITableElementConverter;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.impl.CompositeDataAccess;
 import org.springblade.manager.formula.impl.TableElementConverter;
@@ -88,24 +89,25 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
      * @Date 2022.08.03 14:03
      **/
     @Override
-    public void execute(List<FormData> list ,Long contractId,Long id ,Long primaryKeyId){
+    public void execute(TableElementConverter tec) {
+        this.env.tec=tec;
         /*初始化变量>>依赖排序>>预处理>>特殊公式>>通用公式执行>>数据格式化*/
-            this.init(list,contractId,id,primaryKeyId)
+        this.init()
                 .sort()
                 .pre()
                 .special()
                 .calculate()
                 .format();
+       // WbsTreeContract one=  this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,tec.getNodeId()));
     }
 
     @Override
-    public void execute(TableElementConverter tec) {
-        WbsTreeContract one=  this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,tec.getNodeId()));
-        this.execute(tec.getFds(),tec.getContractId(),Func.isNotEmpty(one.getOldId())?Long.parseLong(one.getOldId()):one.getParentId(),one.getPKeyId());
-    }
-
-    @Override
-    public IFormulaService init(List<FormData> list,Long contractId,Long id,Long primaryKeyId) {
+    public IFormulaService init() {
+        List<FormData> list =this.env.tec.getFds() ;
+        Long contractId=this.env.tec.getContractId();
+        WbsTreeContract one = this.env.tec.getOne();
+        Long id =Func.isNotEmpty(one.getOldId())?Long.parseLong(one.getOldId()):one.getParentId();
+        Long primaryKeyId=one.getPKeyId();
         this.env.constantMap=new HashMap<>(100);
         this.env.formDataList=list;
         this.env.constantMap.put("contractId",contractId);
@@ -159,6 +161,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             System.out.println("跨节点元素:"+crossNodeFd.stream().map(FormData::getCode).collect(Collectors.joining(",")));
            this.env.formDataList.addAll(crossNodeFd);
         }
+        /*实测值参数*/
+
         /*检查项目*/
         return this;
     }
@@ -428,47 +432,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return CNDMap;
     }
 
-    public  List<ElementData> _slice(Map<String,List<Object>> elementMap,Map<String,Object> constantMap,String formula,Integer groupId){
-        int min =0;
-        List<ElementData> result = new ArrayList<>();
-        try {
-            for(Map.Entry<String,List<Object>> entry:elementMap.entrySet()){
-                List<Object> tmp =  entry.getValue();
-                min = min==0?tmp.size():Math.min(min,tmp.size());
-            }
-            if(min>0){
-                List<LocalVariable>  lvab= new ArrayList<>();
-
-                for(int i=0;i<min;i++){
-                    Map<String, Object> currentMap = new HashMap<>(constantMap);
-                    Map<String,Object> E=getMap(currentMap,"E");
-
-                    for(Map.Entry<String,List<Object>> e:elementMap.entrySet()){
-                        E.put(e.getKey(),e.getValue().get(i));
-                    }
-
-                    lvab.add(new LocalVariable(0,formula,currentMap));
-                }
-                /*并发执行*/
-                List<ElementData>   r= lvab.stream().map(e->{
-                    try {
-                        Object data =Expression.parse(e.getFormula()).calculate(e.getCurrentMap());
-                        return new ElementData(e.getIndex(),groupId,data);
-                    }catch (Exception e2){
-                        e2.printStackTrace();
-                    }
-                    return new ElementData(e.getIndex(),groupId,"");
-                }).collect(Collectors.toList());
-
-                if(CollectionUtil.isNotEmpty(r)){
-                    result.addAll(r);
-                }
-            }
-        }catch (Exception e){
-            StaticLog.error("公式:{},执行出错",formula);
-        }
-        return  result;
-    }
 
     public  List<Object> slice(List<LocalVariable>  local,Map<String,Object> constantMap,String formula){
         int min =0;
@@ -549,12 +512,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 try {
                     if(Func.isNotBlank(f)) {
                         if (f.contains(CustomFunction.CLASS_CALL + "checkpoints(") ||f.contains(CustomFunction.CLASS_CALL + "avg(") || f.contains(CustomFunction.CLASS_CALL + "min(") || f.contains(CustomFunction.CLASS_CALL + "max(") || f.contains(CustomFunction.CLASS_CALL + "sum(")
-                                ||f.contains(CustomFunction.CLASS_CALL+"listAt(")||f.contains(CustomFunction.CLASS_CALL+"join(")||f.contains(CustomFunction.CLASS_CALL+"repeat(")||f.contains(CustomFunction.CLASS_CALL+"removeEmpty(")
+                                ||f.contains(CustomFunction.CLASS_CALL+"quantity(")||f.contains(CustomFunction.CLASS_CALL+"listAt(")||f.contains(CustomFunction.CLASS_CALL+"join(")||f.contains(CustomFunction.CLASS_CALL+"repeat(")||f.contains(CustomFunction.CLASS_CALL+"removeEmpty(")
                         ) {
                             /*聚合*/
                             Matcher m = POLY.matcher(f);
                             while (m.find()) {
-                                //List<String> elementCodes = CustomFunction.parseElementCode(m.group(2));
                                 Map<String, Object> currentMap = new HashMap<>(this.env.constantMap);
                                 List<String> relyList = fd.getFormula().getRelyList();
                                 List<FormData> tmp = this.env.formDataList.stream().filter(e -> relyList.contains(e.getCode())).collect(Collectors.toList());