Kaynağa Gözat

mathfunc 自建变量

huangxingxing 3 ay önce
ebeveyn
işleme
9ee10c0120
22 değiştirilmiş dosya ile 594 ekleme ve 86 silme
  1. 4 4
      modelsrc/com/miniframe/model/mdo/MdoProjectVariate.java
  2. 10 20
      modelsrc/com/miniframe/model/mdo/MdoProjectVariateSQLBuilder.java
  3. 59 0
      modelsrc/com/miniframe/model/mdo/dao/MdoMapper.java
  4. 1 1
      modelsrc/com/miniframe/model/mdo/dbconfig/MapperConfig-mdo.xml
  5. 1 1
      modelsrc/com/miniframe/model/system/dbconfig/MapperConfig-system.xml
  6. 4 11
      src/main/java/com/miniframe/bisiness/mdo/MDO0039Service.java
  7. 4 17
      src/main/java/com/miniframe/bisiness/mdo/MDO0053Service.java
  8. 4 4
      src/main/java/com/miniframe/mdo/component/CstCom.java
  9. 2 2
      src/main/java/com/miniframe/mdo/component/FfdCom.java
  10. 2 2
      src/main/java/com/miniframe/mdo/component/TacsCom.java
  11. 21 0
      src/main/java/com/miniframe/mdo/utils/MdoUidUtils.java
  12. 242 0
      src/main/java/com/miniframe/modo/temp/TemplateGenerator.java
  13. 0 11
      src/main/java/com/miniframe/modo/temp/problem/WorkflowVo.java
  14. 13 0
      src/main/java/com/miniframe/modo/temp/workflow/AdflowVo.java
  15. 13 0
      src/main/java/com/miniframe/modo/temp/workflow/FsiflowVo.java
  16. 13 0
      src/main/java/com/miniframe/modo/temp/workflow/MathFuncflowVo.java
  17. 25 0
      src/main/java/com/miniframe/modo/temp/workflow/ParaVo.java
  18. 18 0
      src/main/java/com/miniframe/modo/temp/workflow/WorkflowVo.java
  19. 13 0
      src/main/java/com/miniframe/modo/temp/workflow/XfoilflowVo.java
  20. 115 0
      src/main/resources/templates/workflow_t.ftl
  21. 29 12
      src/test/java/com/miniframe/MdoTest.java
  22. 1 1
      src/test/java/com/miniframe/MybatisTest.java

+ 4 - 4
modelsrc/com/miniframe/model/mdo/MdoProjectVariate.java

@@ -55,7 +55,7 @@ public class MdoProjectVariate extends MiniserviceBaseModel implements Serializa
     /**
      * 组件类型
      */
-    private String comtype;
+    private Integer comtype;
 
     private static final long serialVersionUID = 1L;
 
@@ -226,7 +226,7 @@ public class MdoProjectVariate extends MiniserviceBaseModel implements Serializa
      *
      * @return comtype - 组件类型
      */
-    public String getComtype() {
+    public Integer getComtype() {
         return comtype;
     }
 
@@ -235,7 +235,7 @@ public class MdoProjectVariate extends MiniserviceBaseModel implements Serializa
      *
      * @param comtype 组件类型
      */
-    public void setComtype(String comtype) {
-        this.comtype = comtype == null ? null : comtype.trim();
+    public void setComtype(Integer comtype) {
+        this.comtype = comtype;
     }
 }

+ 10 - 20
modelsrc/com/miniframe/model/mdo/MdoProjectVariateSQLBuilder.java

@@ -744,62 +744,52 @@ public class MdoProjectVariateSQLBuilder {
             return (Criteria) this;
         }
 
-        public Criteria andComtypeEqualTo(String value) {
+        public Criteria andComtypeEqualTo(Integer value) {
             addCriterion("comtype =", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeNotEqualTo(String value) {
+        public Criteria andComtypeNotEqualTo(Integer value) {
             addCriterion("comtype <>", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeGreaterThan(String value) {
+        public Criteria andComtypeGreaterThan(Integer value) {
             addCriterion("comtype >", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeGreaterThanOrEqualTo(String value) {
+        public Criteria andComtypeGreaterThanOrEqualTo(Integer value) {
             addCriterion("comtype >=", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeLessThan(String value) {
+        public Criteria andComtypeLessThan(Integer value) {
             addCriterion("comtype <", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeLessThanOrEqualTo(String value) {
+        public Criteria andComtypeLessThanOrEqualTo(Integer value) {
             addCriterion("comtype <=", value, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeLike(String value) {
-            addCriterion("comtype like", value, "comtype");
-            return (Criteria) this;
-        }
-
-        public Criteria andComtypeNotLike(String value) {
-            addCriterion("comtype not like", value, "comtype");
-            return (Criteria) this;
-        }
-
-        public Criteria andComtypeIn(List<String> values) {
+        public Criteria andComtypeIn(List<Integer> values) {
             addCriterion("comtype in", values, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeNotIn(List<String> values) {
+        public Criteria andComtypeNotIn(List<Integer> values) {
             addCriterion("comtype not in", values, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeBetween(String value1, String value2) {
+        public Criteria andComtypeBetween(Integer value1, Integer value2) {
             addCriterion("comtype between", value1, value2, "comtype");
             return (Criteria) this;
         }
 
-        public Criteria andComtypeNotBetween(String value1, String value2) {
+        public Criteria andComtypeNotBetween(Integer value1, Integer value2) {
             addCriterion("comtype not between", value1, value2, "comtype");
             return (Criteria) this;
         }

+ 59 - 0
modelsrc/com/miniframe/model/mdo/dao/MdoMapper.java

@@ -0,0 +1,59 @@
+package com.miniframe.model.mdo.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.List;
+
+public interface MdoMapper extends Mapper {
+    /**
+     *  fsi 输入参数查询 FFD,TACS,ADFLOW
+     * @param pid
+     * @return
+     */
+    @Select("select DISTINCT uid from mdo_project_variate where pid =#{pid} and comtype in(2,3,5)")
+    public List<String> selectFsiVuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_constraint where pid =#{pid} and comtype in(2,3,5)")
+    public List<String> selectFsiCuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_objfun where pid =#{pid} and comtype in(2,3,5)")
+    public List<String> selectFsiOuids(String pid );
+
+
+    /**
+     *  xfoil 输入参数查询 CST,XFOIL
+     * @param pid
+     * @return
+     */
+    @Select("select DISTINCT uid from mdo_project_variate where pid =#{pid} and comtype in(0,1)")
+    public List<String> selectXfoilVuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_constraint where pid =#{pid} and comtype in(0,1)")
+    public List<String> selectXfoilCuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_objfun where pid =#{pid} and comtype in(0,1)")
+    public List<String> selectXfoilOuids(String pid );
+
+    /**
+     *  adflow 输入参数查询 FFD,ADFLOW
+     * @param pid
+     * @return
+     */
+    @Select("select DISTINCT uid from mdo_project_variate where pid =#{pid} and comtype in(2,3)")
+    public List<String> selectAdflowVuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_constraint where pid =#{pid} and comtype in(2,3)")
+    public List<String> selectAdflowCuids(String pid );
+    @Select("select DISTINCT uid from mdo_project_objfun where pid =#{pid} and comtype in(2,3)")
+    public List<String> selectAdflowOuids(String pid );
+
+    /**
+     * 查询所有 out param
+     * @param pid
+     * @return
+     */
+    @Select("select DISTINCT uid from mdo_project_constraint where pid  =#{pid} " +
+            "UNION " +
+            "select DISTINCT uid from mdo_project_objfun where pid  =#{pid} ")
+    public List<String> selectAllOutUid(String pid);
+
+
+
+}

+ 1 - 1
modelsrc/com/miniframe/model/mdo/dbconfig/MapperConfig-mdo.xml

@@ -5,7 +5,7 @@
     This file is generated by MyBatis Generator.
     This file is the shell of a Mapper Config file - in many cases you will need to add
       to this file before it is usable by MyBatis.
-    This file was generated on Wed May 14 16:46:03 CST 2025.
+    This file was generated on Wed May 21 14:32:57 CST 2025.
   -->
   <mappers>
     <mapper resource="com/miniframe/model/mdo/xml/MdoProjectMapper.xml" />

+ 1 - 1
modelsrc/com/miniframe/model/system/dbconfig/MapperConfig-system.xml

@@ -5,7 +5,7 @@
     This file is generated by MyBatis Generator.
     This file is the shell of a Mapper Config file - in many cases you will need to add
       to this file before it is usable by MyBatis.
-    This file was generated on Wed May 14 16:46:05 CST 2025.
+    This file was generated on Wed May 21 14:32:58 CST 2025.
   -->
   <mappers>
     <mapper resource="com/miniframe/model/system/xml/SysAppcodeMapper.xml" />

+ 4 - 11
src/main/java/com/miniframe/bisiness/mdo/MDO0039Service.java

@@ -2,12 +2,10 @@ package com.miniframe.bisiness.mdo;
 
 import java.io.*;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.github.dockerjava.api.async.ResultCallback;
 import com.github.dockerjava.api.model.Frame;
 import com.miniframe.core.ExecProcessFlow;
@@ -17,20 +15,15 @@ import com.miniframe.generate.business.mdo.model.MDO0039BaseModel;
 import com.miniframe.mdo.service.LogService;
 import com.miniframe.model.mdo.*;
 import com.miniframe.model.mdo.dao.MdoProComvalMapper;
-import com.miniframe.model.mdo.dao.MdoProPythonMapper;
 import com.miniframe.model.mdo.dao.MdoProjectMapper;
 import com.miniframe.modo.temp.TemplateGenerator;
 import com.miniframe.modo.temp.cpacs.CpacsVo;
 import com.miniframe.modo.temp.problem.ProblemVo;
 import com.miniframe.modo.temp.problem.Solver;
-import com.miniframe.modo.temp.problem.WorkflowVo;
+import com.miniframe.modo.temp.workflow.WorkflowVo;
 import com.miniframe.tools.XIFileUtils;
-import com.miniframe.tools.XiJsonUtil;
 import com.miniframe.tools.docker.DockerExe;
 import com.miniframe.tools.file.*;
-import com.sun.media.sound.AiffFileReader;
-import freemarker.template.Configuration;
-import freemarker.template.Template;
 import lombok.SneakyThrows;
 import tk.mybatis.mapper.util.StringUtil;
 
@@ -80,7 +73,7 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 
 		if(cspvo!=null&&cspvo.getXfoil()!=null&&cspvo.getFsi()==null){//workflow 求解器
 			//创建workflow
-			String workflowPath =TemplateGenerator.createcWorkflowXml(pid,wvo);
+			String workflowPath =TemplateGenerator.createcWorkflowXmlT(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
 			Solver solver =new Solver();
 			solver.setWorkflowPath(workflowPath);
@@ -95,7 +88,7 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 			run2(pid);
 		}else if(cspvo!=null&&cspvo.getAdflow()!=null&&cspvo.getFsi()==null){ //adflow 求解器
 			//创建adflow
-			String workflowPath =TemplateGenerator.createcWorkflowXml2(pid,wvo);
+			String workflowPath =TemplateGenerator.createcWorkflowXmlT(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
 			Solver solver =new Solver();
 			solver.setWorkflowPath(workflowPath);
@@ -120,7 +113,7 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 			run3(pid);
 		}else if(cspvo!=null&&cspvo.getAdflow()!=null&&cspvo.getFsi()!=null){ //气弹 求解器
 			//创建adflow
-			String workflowPath =TemplateGenerator.createcWorkflowXml3(pid,wvo);
+			String workflowPath =TemplateGenerator.createcWorkflowXmlT(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
 			Solver solver =new Solver();
 			solver.setWorkflowPath(workflowPath);

+ 4 - 17
src/main/java/com/miniframe/bisiness/mdo/MDO0053Service.java

@@ -6,6 +6,7 @@ import com.miniframe.core.ExecProcessFlow;
 import com.miniframe.core.ext.UtilTools;
 import com.miniframe.generate.appcode.ComType;
 import com.miniframe.generate.business.mdo.model.MDO0053BaseModel;
+import com.miniframe.mdo.utils.MdoUidUtils;
 import com.miniframe.model.mdo.*;
 import com.miniframe.model.mdo.dao.MdoProInoutParaMapper;
 import com.miniframe.model.mdo.dao.MdoProjectConstraintMapper;
@@ -85,7 +86,7 @@ public class MDO0053Service extends MDO0053BaseModel implements ExecProcessFlow
 				c.setComid(comid);
 				c.setComtype(comtype);
 				c.setParaid(p.getId());
-				c.setUid(getUidByComTyeAndPcode(comtype.toString(),p.getCode()));
+				c.setUid(MdoUidUtils.getUidByComTyeAndPcode(comtype.toString(),p.getCode()));
 				c.setPid(p.getPid());
 				c.setCon("1");
 				c.setLower("None");
@@ -101,7 +102,7 @@ public class MDO0053Service extends MDO0053BaseModel implements ExecProcessFlow
 				f.setComid(comid);
 				f.setComtype(comtype);
 				f.setParaid(p.getId());
-				f.setUid(getUidByComTyeAndPcode(comtype.toString(),p.getCode()));
+				f.setUid(MdoUidUtils.getUidByComTyeAndPcode(comtype.toString(),p.getCode()));
 				f.setPid(p.getPid());
 				f.setOptdir("1");//最小
 				f.setWeight("0");
@@ -110,21 +111,7 @@ public class MDO0053Service extends MDO0053BaseModel implements ExecProcessFlow
 		}
 	}
 
-	public static String getUidByComTyeAndPcode(String comtype,String pcode){
-		if(comtype.equals(ComType.XFOIL.getIndex())){
-			return "/CPACS/toolspecific/CFD/XFOIL/evalFuncs/"+pcode;
-		}
-		if(comtype.equals(ComType.ADFLOW.getIndex())){
-			return "/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/"+pcode;
-		}
-		if(comtype.equals(ComType.TACS.getIndex())){
-			return "/cpacs/toolspecific/CSD/TACS/evalFuncs/"+pcode;
-		}
-		if(comtype.equals(ComType.MathFunc.getIndex())){
-			return "/cpacs/toolspecific/mathematical/mathFunc/"+pcode;
-		}
-		return "";
-	}
+
 
 
 	/**

+ 4 - 4
src/main/java/com/miniframe/mdo/component/CstCom.java

@@ -22,7 +22,7 @@ public class CstCom {
         MdoProjectVariateSQLBuilder  varsb= new MdoProjectVariateSQLBuilder();
         MdoProjectVariateSQLBuilder.Criteria varsc = varsb.createCriteria();
         varsc.andComidEqualTo(cst.getId());
-        varsc.andComtypeEqualTo(ComType.CST.getIndex());
+        varsc.andComtypeEqualTo(Integer.valueOf(ComType.CST.getIndex()));
         List< MdoProjectVariate> vars = varDao.selectByExample(varsb);
         List<String> lowerbstr =new ArrayList<>();
         List<String> upperbstr =new ArrayList<>();
@@ -55,7 +55,7 @@ public class CstCom {
         for (int i =0;i<lbs.length;i++) {
             MdoProjectVariate var =new MdoProjectVariate();
             var.setComid(cst.getId());
-            var.setComtype(ComType.CST.getIndex());
+            var.setComtype(Integer.valueOf(ComType.CST.getIndex()));
             var.setId(UtilTools.getUUid());
             var.setReference(lbs[i]);
             var.setPid(cst.getPid());
@@ -69,7 +69,7 @@ public class CstCom {
         for (int i =0;i<ubs.length;i++) {
             MdoProjectVariate var =new MdoProjectVariate();
             var.setComid(cst.getId());
-            var.setComtype(ComType.CST.getIndex());
+            var.setComtype(Integer.valueOf(ComType.CST.getIndex()));
             var.setId(UtilTools.getUUid());
             var.setReference(ubs[i]);
             var.setPid(cst.getPid());
@@ -85,7 +85,7 @@ public class CstCom {
         MdoProjectVariateSQLBuilder  varsb= new MdoProjectVariateSQLBuilder();
         MdoProjectVariateSQLBuilder.Criteria varsc = varsb.createCriteria();
         varsc.andComidEqualTo(cst.getId());
-        varsc.andComtypeEqualTo(ComType.CST.getIndex());
+        varsc.andComtypeEqualTo(Integer.valueOf(ComType.CST.getIndex()));
         varDao.deleteByExample(varsb);
     }
 

+ 2 - 2
src/main/java/com/miniframe/mdo/component/FfdCom.java

@@ -28,7 +28,7 @@ public class FfdCom {
         for (int i =0;i<vs.length;i++) {
             MdoProjectVariate var =new MdoProjectVariate();
             var.setComid(ffd.getId());
-            var.setComtype(ComType.FFD.getIndex());
+            var.setComtype(Integer.valueOf(ComType.FFD.getIndex()));
             var.setId(UtilTools.getUUid());
             var.setReference(vs[i]);
             var.setPid(ffd.getPid());
@@ -45,7 +45,7 @@ public class FfdCom {
         MdoProjectVariateSQLBuilder  varsb= new MdoProjectVariateSQLBuilder();
         MdoProjectVariateSQLBuilder.Criteria varsc = varsb.createCriteria();
         varsc.andComidEqualTo(ffd.getId());
-        varsc.andComtypeEqualTo(ComType.FFD.getIndex());
+        varsc.andComtypeEqualTo(Integer.valueOf(ComType.FFD.getIndex()));
         varDao.deleteByExample(varsb);
     }
 

+ 2 - 2
src/main/java/com/miniframe/mdo/component/TacsCom.java

@@ -24,7 +24,7 @@ public class TacsCom {
         for (int i =0;i<vs.length;i++) {
             MdoProjectVariate var =new MdoProjectVariate();
             var.setComid(tacs.getId());
-            var.setComtype(ComType.TACS.getIndex());
+            var.setComtype(Integer.valueOf(ComType.TACS.getIndex()));
             var.setId(UtilTools.getUUid());
             var.setReference(vs[i]);
             var.setPid(tacs.getPid());
@@ -41,7 +41,7 @@ public class TacsCom {
         MdoProjectVariateSQLBuilder  varsb= new MdoProjectVariateSQLBuilder();
         MdoProjectVariateSQLBuilder.Criteria varsc = varsb.createCriteria();
         varsc.andComidEqualTo(tacs.getId());
-        varsc.andComtypeEqualTo(ComType.TACS.getIndex());
+        varsc.andComtypeEqualTo(Integer.valueOf(ComType.TACS.getIndex()));
         varDao.deleteByExample(varsb);
     }
 

+ 21 - 0
src/main/java/com/miniframe/mdo/utils/MdoUidUtils.java

@@ -0,0 +1,21 @@
+package com.miniframe.mdo.utils;
+
+import com.miniframe.generate.appcode.ComType;
+
+public class MdoUidUtils {
+    public static String getUidByComTyeAndPcode(String comtype,String pcode){
+        if(comtype.equals(ComType.XFOIL.getIndex())){
+            return "/CPACS/toolspecific/CFD/XFOIL/evalFuncs/"+pcode;
+        }
+        if(comtype.equals(ComType.ADFLOW.getIndex())){
+            return "/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/"+pcode;
+        }
+        if(comtype.equals(ComType.TACS.getIndex())){
+            return "/cpacs/toolspecific/CSD/TACS/evalFuncs/"+pcode;
+        }
+        if(comtype.equals(ComType.MathFunc.getIndex())){
+            return "/cpacs/toolspecific/mathematical/mathFunc/"+pcode;
+        }
+        return "";
+    }
+}

+ 242 - 0
src/main/java/com/miniframe/modo/temp/TemplateGenerator.java

@@ -1,11 +1,14 @@
 package com.miniframe.modo.temp;
 
 import com.miniframe.core.ext.UtilTools;
+import com.miniframe.generate.appcode.ComType;
 import com.miniframe.mdo.service.LogService;
+import com.miniframe.mdo.utils.MdoUidUtils;
 import com.miniframe.model.mdo.*;
 import com.miniframe.model.mdo.dao.*;
 import com.miniframe.modo.temp.cpacs.*;
 import com.miniframe.modo.temp.problem.*;
+import com.miniframe.modo.temp.workflow.*;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
@@ -147,6 +150,8 @@ public class TemplateGenerator {
         WorkflowVo vo = new WorkflowVo();
         MdoProXfoil xfoil = findXfoil(pid);
         MdoProAdflow adflow = findAdflow(pid);
+        MdoProFsi fsi= findFsi(pid);
+        MdoProMathfunc mathfunc = findMashfunc(pid);
         //不用生成
         if(xfoil==null&& adflow==null){
             return null;
@@ -155,8 +160,216 @@ public class TemplateGenerator {
         header.setName(pid);
         header.setTimestamp(new Date());
         vo.setHeader(header);
+        List<String> executeOrders =new ArrayList<>();
+
+
+        if(fsi!=null){
+            FsiflowVo fsivo = new FsiflowVo();
+            fsivo.setUid("aeroelastic");
+            fsivo.setName("pyAeroelasticADJ");
+            List<String> inUids = findFsiInUids(pid);
+            fsivo.setInUids(inUids);
+            List<String> outUids= findFsiOutUid(pid);
+            fsivo.setOutUids(outUids);
+            vo.setFsivo(fsivo);
+            executeOrders.add(fsivo.getUid());
+        }else if(xfoil!=null){
+            XfoilflowVo xfoilvo = new XfoilflowVo();
+            xfoilvo.setUid("xfoil");
+            xfoilvo.setName("pyXFoil");
+            List<String> inUids = findXfoilInUids(pid);
+            xfoilvo.setInUids(inUids);
+            List<String> outUids= findXfoilOutUid(pid);
+            xfoilvo.setOutUids(outUids);
+            vo.setXfoilvo(xfoilvo);
+            executeOrders.add(xfoilvo.getUid());
+        }else if(adflow!=null){
+            AdflowVo adflowVo = new AdflowVo();
+            adflowVo.setUid("ADflow");
+            adflowVo.setName("pyADflow");
+            List<String> inUids = findAdflowInUids(pid);
+            adflowVo.setInUids(inUids);
+            List<String> outUids= findAdflowOutUid(pid);
+            adflowVo.setOutUids(outUids);
+            vo.setAdflowvo(adflowVo);
+            executeOrders.add(adflowVo.getUid());
+        }
+        if(mathfunc!=null){
+            MathFuncflowVo mathfuncflowvo = new MathFuncflowVo();
+            mathfuncflowvo.setUid("mathFunc1");
+            mathfuncflowvo.setName("MathFunc");
+            mathfuncflowvo.setInUids(findMathFuncInParaVos(pid,mathfunc));
+            mathfuncflowvo.setOutUids(findMathFuncOutParaVos(pid,mathfunc));
+            vo.setMathfuncflowvo(mathfuncflowvo);
+            executeOrders.add(mathfuncflowvo.getUid());
+        }
+        vo.setExecuteorders(executeOrders);
+        List<ParaVo> paravos = getAllParaVos(pid);
+        vo.setParavos(paravos);
         return vo;
     }
+
+    private static List<ParaVo> getAllParaVos(String pid) {
+        List<ParaVo> paravos =new ArrayList<>();
+        List<String> allUid = findAllOutUids(pid);
+        for (String uid:allUid) {
+            ParaVo pvo =new ParaVo();
+            pvo.setUid(uid);
+            pvo.setLable(uid.substring(uid.lastIndexOf("/")+1,uid.length()));
+            paravos.add(pvo);
+        }
+        paravos.addAll(findMathFuncInMySelfParaVos(pid));//自建 MathFunc in
+        //in param
+        List<ParaVo> inPlist = getInParaVos(pid);
+        paravos.addAll(inPlist);
+        return paravos;
+    }
+
+    private static List<ParaVo> getInParaVos(String pid) {
+        MdoProjectVariateMapper vDao =UtilTools.getBean(MdoProjectVariateMapper.class);
+        MdoProjectVariateSQLBuilder vsb = new MdoProjectVariateSQLBuilder();
+        vsb.createCriteria().andPidEqualTo(pid);
+        List<MdoProjectVariate> vList =vDao.selectByExample(vsb);
+        Set<ParaVo> inParas = new HashSet<>();
+        for (MdoProjectVariate v:vList) {
+            ParaVo p= new ParaVo();
+            p.setLable(v.getName());
+            p.setUid(v.getUid());
+            inParas.add(p);
+        }
+        List<ParaVo> inPlist = new ArrayList<>(inParas);
+        return inPlist;
+    }
+
+    private static List<ParaVo> findMathFuncInMySelfParaVos(String pid) {
+        List<ParaVo> inParaVos = new ArrayList<>();
+        MdoProInoutParaMapper dao = UtilTools.getBean(MdoProInoutParaMapper.class);
+        MdoProInoutParaSQLBuilder sb = new MdoProInoutParaSQLBuilder();
+        MdoProInoutParaSQLBuilder.Criteria sc = sb.createCriteria();
+        sc.andPidEqualTo(pid);
+        sc.andComtypeEqualTo(Integer.valueOf(ComType.MathFunc.getIndex()));
+        sc.andFlagEqualTo(1);//启用
+        sc.andTypeEqualTo(1);//输入参数
+        sc.andFcomidIsNull();//自建
+        List<MdoProInoutPara> paras = dao.selectByExample(sb);
+        for (MdoProInoutPara para:paras) {
+            ParaVo vo = new ParaVo();
+            String uid ;
+            uid =MdoUidUtils.getUidByComTyeAndPcode(para.getComtype().toString(),para.getCode());
+            vo.setUid(uid);
+            vo.setLable(para.getName());
+            inParaVos.add(vo);
+        }
+        return inParaVos;
+    }
+    private static List<String> findAllOutUids(String pid) {
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> uids = mDao.selectAllOutUid(pid);
+        return uids;
+    }
+    private static List<ParaVo> findMathFuncOutParaVos(String pid,MdoProMathfunc mathfunc) {
+        List<ParaVo> outParaVos = new ArrayList<>();
+        MdoProInoutParaMapper dao = UtilTools.getBean(MdoProInoutParaMapper.class);
+        MdoProInoutParaSQLBuilder sb = new MdoProInoutParaSQLBuilder();
+        MdoProInoutParaSQLBuilder.Criteria sc = sb.createCriteria();
+        sc.andPidEqualTo(pid);
+        sc.andComtypeEqualTo(Integer.valueOf(ComType.MathFunc.getIndex()));
+        sc.andFlagEqualTo(1);//启用
+        sc.andTypeEqualTo(2);//输出参数
+        sc.andFatheridEqualTo(mathfunc.getId());
+        List<MdoProInoutPara> paras = dao.selectByExample(sb);
+        for (MdoProInoutPara para:paras) {
+            ParaVo vo = new ParaVo();
+            String uid ;
+            if(para.getFcomtype()!=null){//来源
+                uid =MdoUidUtils.getUidByComTyeAndPcode(para.getFcomtype().toString(),para.getCode());
+            }else{
+                uid =MdoUidUtils.getUidByComTyeAndPcode(para.getComtype().toString(),para.getCode());
+            }
+            vo.setUid(uid);
+            String[] pythons = mathfunc.getEquation().split("\n");
+            for (String py:pythons) {
+                if(py.startsWith(para.getCode()+"=")){
+                    vo.setLable(py.replace(para.getCode()+"=",""));
+                }
+            }
+            outParaVos.add(vo);
+        }
+        return  outParaVos;
+    }
+    private static List<ParaVo> findMathFuncInParaVos(String pid,MdoProMathfunc mathfunc) {
+        List<ParaVo> inParaVos = new ArrayList<>();
+        MdoProInoutParaMapper dao = UtilTools.getBean(MdoProInoutParaMapper.class);
+        MdoProInoutParaSQLBuilder sb = new MdoProInoutParaSQLBuilder();
+        MdoProInoutParaSQLBuilder.Criteria sc = sb.createCriteria();
+        sc.andPidEqualTo(pid);
+        sc.andComtypeEqualTo(Integer.valueOf(ComType.MathFunc.getIndex()));
+        sc.andFlagEqualTo(1);//启用
+        sc.andTypeEqualTo(1);//输入参数
+        sc.andFatheridEqualTo(mathfunc.getId());
+        List<MdoProInoutPara> paras = dao.selectByExample(sb);
+        for (MdoProInoutPara para:paras) {
+            ParaVo vo = new ParaVo();
+            String uid ;
+            if(para.getFcomtype()!=null){//来源
+                uid =MdoUidUtils.getUidByComTyeAndPcode(para.getFcomtype().toString(),para.getCode());
+            }else{
+                uid =MdoUidUtils.getUidByComTyeAndPcode(para.getComtype().toString(),para.getCode());
+            }
+            vo.setUid(uid);
+            vo.setLable(para.getName());
+            inParaVos.add(vo);
+        }
+        return  inParaVos;
+    }
+
+
+    private static List<String> findAdflowOutUid(String pid) {
+        List<String> outUids = new ArrayList<>();
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> cuids = mDao.selectAdflowCuids(pid);
+        List<String> ouids = mDao.selectAdflowOuids(pid);
+        outUids.addAll(cuids);
+        outUids.addAll(ouids);
+        return  outUids;
+    }
+
+    private static List<String> findAdflowInUids(String pid) {
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> vuids = mDao.selectAdflowVuids(pid);
+        return vuids;
+    }
+    private static List<String> findXfoilOutUid(String pid) {
+        List<String> outUids = new ArrayList<>();
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> cuids = mDao.selectXfoilCuids(pid);
+        List<String> ouids = mDao.selectXfoilOuids(pid);
+        outUids.addAll(cuids);
+        outUids.addAll(ouids);
+        return  outUids;
+    }
+
+    private static List<String> findXfoilInUids(String pid) {
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> vuids = mDao.selectXfoilVuids(pid);
+        return vuids;
+    }
+    private static List<String> findFsiOutUid(String pid) {
+        List<String> outUids = new ArrayList<>();
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> cuids = mDao.selectFsiCuids(pid);
+        List<String> ouids = mDao.selectFsiOuids(pid);
+        outUids.addAll(cuids);
+        outUids.addAll(ouids);
+        return  outUids;
+    }
+
+    private static List<String> findFsiInUids(String pid) {
+        MdoMapper mDao = UtilTools.getBean(MdoMapper.class);
+        List<String> vuids = mDao.selectFsiVuids(pid);
+        return vuids;
+    }
+
     public static CpacsVo getCpacsVo(String pid) {
         CpacsVo vo = new CpacsVo();
         HeaderVo header =new HeaderVo();
@@ -499,6 +712,35 @@ public class TemplateGenerator {
             return null;
         }
     }
+    /**
+     * @return
+     */
+    public static String createcWorkflowXmlT(String pid,WorkflowVo vo){
+        try {
+            if(vo ==null){
+                return null;
+            }
+            Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+            // 设置模板所在目录
+            cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+            // 获取模板对象
+            Template template = cfg.getTemplate("workflow_t.ftl");
+            // 定义数据模型(Map)
+            Map<String, Object> dataModel = new HashMap<>();
+
+            dataModel.put("vo",vo);
+            //dataModel.put("geoFilePath", BPATH + "/" + aid + "/" + jid + "/Geometry");
+            // 将数据模型传入模板进行处理
+            StringWriter writer = new StringWriter();
+            template.process(dataModel, writer);
+            FileWriter fileWriter = new FileWriter(LogService.BPATH + "/" + pid + "/in/workflow.xml");
+            fileWriter.write(writer.toString());
+            fileWriter.close();
+            return  LogService.BPATH + "/" + pid + "/in/workflow.xml";
+        }catch (Exception e){
+            return null;
+        }
+    }
 
 
 

+ 0 - 11
src/main/java/com/miniframe/modo/temp/problem/WorkflowVo.java

@@ -1,11 +0,0 @@
-package com.miniframe.modo.temp.problem;
-
-import com.miniframe.model.mdo.MdoProMathfunc;
-import lombok.Data;
-
-@Data
-public class WorkflowVo {
-    private HeaderVo header;
-    private MdoProMathfunc func;
-
-}

+ 13 - 0
src/main/java/com/miniframe/modo/temp/workflow/AdflowVo.java

@@ -0,0 +1,13 @@
+package com.miniframe.modo.temp.workflow;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AdflowVo {
+    private String uid;
+    private String name;
+    private List<String> inUids;
+    private List<String> outUids;
+}

+ 13 - 0
src/main/java/com/miniframe/modo/temp/workflow/FsiflowVo.java

@@ -0,0 +1,13 @@
+package com.miniframe.modo.temp.workflow;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FsiflowVo {
+    private String uid;
+    private String name;
+    private List<String> inUids;
+    private List<String> outUids;
+}

+ 13 - 0
src/main/java/com/miniframe/modo/temp/workflow/MathFuncflowVo.java

@@ -0,0 +1,13 @@
+package com.miniframe.modo.temp.workflow;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MathFuncflowVo {
+    private String uid;
+    private String name;
+    private List<ParaVo> inUids;
+    private List<ParaVo> outUids;
+}

+ 25 - 0
src/main/java/com/miniframe/modo/temp/workflow/ParaVo.java

@@ -0,0 +1,25 @@
+package com.miniframe.modo.temp.workflow;
+
+import lombok.Data;
+
+import java.util.Objects;
+
+@Data
+public class ParaVo {
+    private String uid;
+    private String lable;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ParaVo paraVo = (ParaVo) o;
+        return Objects.equals(uid, paraVo.uid) &&
+                Objects.equals(lable, paraVo.lable);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(uid, lable);
+    }
+}

+ 18 - 0
src/main/java/com/miniframe/modo/temp/workflow/WorkflowVo.java

@@ -0,0 +1,18 @@
+package com.miniframe.modo.temp.workflow;
+
+import com.miniframe.model.mdo.MdoProMathfunc;
+import com.miniframe.modo.temp.problem.HeaderVo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WorkflowVo {
+    private HeaderVo header;
+    private FsiflowVo fsivo;
+    private XfoilflowVo xfoilvo;
+    private AdflowVo adflowvo;
+    private MathFuncflowVo mathfuncflowvo;
+    private List<String> executeorders;
+    private List<ParaVo> paravos;
+}

+ 13 - 0
src/main/java/com/miniframe/modo/temp/workflow/XfoilflowVo.java

@@ -0,0 +1,13 @@
+package com.miniframe.modo.temp.workflow;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class XfoilflowVo {
+    private String uid;
+    private String name;
+    private List<String> inUids;
+    private List<String> outUids;
+}

+ 115 - 0
src/main/resources/templates/workflow_t.ftl

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<opcs>
+    <header>
+        <name>${vo.header.name}</name>
+        <creator>SurroMDAO</creator>
+        <timestamp>${vo.header.timestamp}</timestamp>
+        <version>0.1</version>
+        <opcsVersion>1.0</opcsVersion>
+    </header>
+    <schema>
+        <solvers>
+         <#if vo.xfoilvo??>
+            <component uID="${vo.xfoilvo.uid}">
+                <name>${vo.xfoilvo.name}</name>
+                <#list vo.xfoilvo.inUids as puid>
+                <input>
+                    <parameterUID>${puid}</parameterUID>
+                </input>
+               </#list>
+                <#list vo.xfoilvo.outUids as puid>
+                <output>
+                    <parameterUID>${puid}</parameterUID>
+                </output>
+                </#list>
+                <execute tpye="component">execute</execute>
+            </component>
+        <#else>
+        </#if>
+        <#if vo.adflowvo??>
+            <component uID="${vo.adflowvo.uid}">
+                <name>${vo.adflowvo.name}</name>
+                <#list vo.adflowvo.inUids as puid>
+                <input>
+                    <parameterUID>${puid}</parameterUID>
+                </input>
+               </#list>
+                <#list vo.adflowvo.outUids as puid>
+                <output>
+                    <parameterUID>${puid}</parameterUID>
+                </output>
+                </#list>
+                <execute tpye="component">execute</execute>
+            </component>
+        <#else>
+        </#if>
+       <#if vo.adflowvo??>
+            <component uID="${vo.adflowvo.uid}">
+                <name>${vo.adflowvo.name}</name>
+                <#list vo.adflowvo.inUids as puid>
+                <input>
+                    <parameterUID>${puid}</parameterUID>
+                </input>
+               </#list>
+                <#list vo.adflowvo.outUids as puid>
+                <output>
+                    <parameterUID>${puid}</parameterUID>
+                </output>
+                </#list>
+                <execute tpye="component">execute</execute>
+            </component>
+        <#else>
+        </#if>
+       <#if vo.fsivo??>
+            <component uID="${vo.fsivo.uid}">
+                <name>${vo.fsivo.name}</name>
+                <#list vo.fsivo.inUids as puid>
+                <input>
+                    <parameterUID>${puid}</parameterUID>
+                </input>
+               </#list>
+                <#list vo.fsivo.outUids as puid>
+                <output>
+                    <parameterUID>${puid}</parameterUID>
+                </output>
+                </#list>
+                <execute tpye="component">execute</execute>
+            </component>
+        <#else>
+        </#if>
+         <#if vo.mathfuncflowvo??>
+            <component uID="${vo.mathfuncflowvo.uid}">
+                <name>${vo.mathfuncflowvo.name}</name>
+                <#list vo.mathfuncflowvo.inUids as para>
+                <input>
+                    <parameterUID>${para.uid}</parameterUID>
+                    <equationLabel>${para.lable}</equationLabel>
+                </input>
+               </#list>
+                <#list vo.mathfuncflowvo.outUids as para>
+                <output>
+                    <parameterUID>${para.uid}</parameterUID>
+                    <equation language="Python">${para.lable}</equation>
+                </output>
+                </#list>
+                <execute tpye='component'>MathFunc</execute>
+            </component>
+        <#else>
+        </#if>
+        </solvers>
+        <executeOrder>
+        <#list vo.executeorders as eo>
+            <componentUID position="${eo_index+1}">${eo}</componentUID>
+         </#list>
+        </executeOrder>
+        <segments>
+        </segments>
+        <parameters>
+         <#list vo.paravos as para>
+            <parameter uID="${para.uid}">
+                <label>${para.lable}</label>
+            </parameter>
+         </#list>
+        </parameters>
+    </schema>
+</opcs>

+ 29 - 12
src/test/java/com/miniframe/MdoTest.java

@@ -3,10 +3,14 @@ package com.miniframe;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.gson.JsonObject;
 import com.miniframe.core.ext.UtilTools;
+import com.miniframe.mdo.service.LogService;
 import com.miniframe.model.mdo.MdoProject;
 import com.miniframe.model.mdo.dao.MdoProjectMapper;
 import com.miniframe.model.system.SysUser;
+import com.miniframe.modo.temp.TemplateGenerator;
+import com.miniframe.modo.temp.workflow.WorkflowVo;
 import com.miniframe.tools.XIDateTimeUtils;
+import com.miniframe.tools.XIFileUtils;
 import com.miniframe.tools.XiJsonUtil;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,18 +18,31 @@ import org.springframework.boot.test.context.SpringBootTest;
 
 @SpringBootTest(classes = Application.class)
 public class MdoTest {
-    @Autowired
-    MdoProjectMapper mapper ;
-
+//    @Autowired
+//    MdoProjectMapper mapper ;
+//
+//    @Test
+//    void saveProject() throws JsonProcessingException {
+//        MdoProject p = new MdoProject();
+//        p.setId(UtilTools.getUUid());
+//        p.setCreateTime(XIDateTimeUtils.getNowDate());
+//        SysUser user = new SysUser();
+//        user.setId(UtilTools.getUUid());
+//        user.setNickname("css");
+//        p.setFlow(XiJsonUtil.objectToJson(user));
+//        mapper.insert(p);
+//    }
     @Test
-    void saveProject() throws JsonProcessingException {
-        MdoProject p = new MdoProject();
-        p.setId(UtilTools.getUUid());
-        p.setCreateTime(XIDateTimeUtils.getNowDate());
-        SysUser user = new SysUser();
-        user.setId(UtilTools.getUUid());
-        user.setNickname("css");
-        p.setFlow(XiJsonUtil.objectToJson(user));
-        mapper.insert(p);
+    void  workFlowTest(){
+        //创建文件路径
+        String pid = "da769fe9d55b4a4bbad18b80e24892f5";
+        XIFileUtils.mkdir(LogService.BPATH);
+        XIFileUtils.mkdir(LogService.BPATH+"/"+pid);
+        XIFileUtils.mkdir(LogService.BPATH+"/"+pid+"/in");
+        XIFileUtils.mkdir(LogService.BPATH+"/"+pid+"/out");
+        WorkflowVo vo =TemplateGenerator.getWorkflowVo(pid);
+        TemplateGenerator.createcWorkflowXmlT(pid,vo);
     }
+
+
 }

+ 1 - 1
src/test/java/com/miniframe/MybatisTest.java

@@ -3,6 +3,7 @@ package com.miniframe;
 import com.miniframe.core.SearchExecProcess;
 import com.miniframe.core.ext.UtilTools;
 import com.miniframe.mappers.system.dao.ExtSystemMapper;
+import com.miniframe.model.mdo.dao.MdoMapper;
 import com.miniframe.model.system.SysUser;
 import com.miniframe.model.system.SysUserSQLBuilder;
 import com.miniframe.model.system.dao.SysUserMapper;
@@ -28,7 +29,6 @@ public class MybatisTest {
     @Autowired
     MessageSource messageSource;
 
-
     @Test
     void test() throws ClassNotFoundException, IOException {