huangxingxing 5 hónapja
szülő
commit
80e4e07e40

+ 29 - 3
src/main/java/com/miniframe/bisiness/mdo/MDO0039Service.java

@@ -76,10 +76,11 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 		WorkflowVo wvo = TemplateGenerator.getWorkflowVo(pid);
 		//创建cpace
 		String cpacsPath =TemplateGenerator.createcCpacsXml(pid,cspvo);
-		//创建workflow
-		String workflowPath =TemplateGenerator.createcWorkflowXml(pid,wvo);
 
-		if(cpacsPath!=null&&workflowPath!=null){
+
+		if(cspvo.getXfoil()!=null){//workflow 求解器
+			//创建workflow
+			String workflowPath =TemplateGenerator.createcWorkflowXml(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
 			Solver solver =new Solver();
 			solver.setWorkflowPath(workflowPath);
@@ -92,6 +93,31 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 			//创建run.py
 			TemplateGenerator.createRunpy2(pid);
 			run2(pid);
+		}else if(cspvo.getAdflow()!=null){ //adflow 求解器
+			//创建adflow
+			String workflowPath =TemplateGenerator.createcWorkflowXml2(pid,wvo);
+			List<Solver> solvers =new ArrayList<>();
+			Solver solver =new Solver();
+			solver.setWorkflowPath(workflowPath);
+			solver.setCpacsPath(cpacsPath);
+			solvers.add(solver);
+			provo.setSolvers(solvers);
+			//文件迁移
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic");
+			String xyzfid=cspvo.getFfd().getFid();
+			String gid =cspvo.getAdflow().getFid();
+			String xyzFile = XIFileUtils.getRootPathStr()+"/"+XIFileUtils.getFileUrl(xyzfid);
+			String gfile = XIFileUtils.getRootPathStr()+"/"+XIFileUtils.getFileUrl(gid);
+			XIFileUtils.fileCopy(xyzFile,LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic/"+cspvo.getFfd().getFname());
+			XIFileUtils.fileCopy(gfile,LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic/"+cspvo.getAdflow().getGridfile());
+			//创建problem.xml
+			TemplateGenerator.createProblemXml(pid,provo);
+			//创建run.py
+			TemplateGenerator.createRunpy2(pid);
+//			run2(pid);
 		}else{
 			if(StringUtil.isEmpty(pro.getStype())){
 				throw new BusinessException("MDO000011");

+ 5 - 2
src/main/java/com/miniframe/bisiness/mdo/MDO0044Service.java

@@ -7,6 +7,7 @@ import com.miniframe.bisiness.mdo.service.ProFfdCstService;
 import com.miniframe.core.ExecProcessFlow;
 import com.miniframe.core.ext.UtilTools;
 import com.miniframe.generate.business.mdo.model.MDO0044BaseModel;
+import com.miniframe.mdo.component.FfdCom;
 import com.miniframe.model.mdo.MdoProFfd;
 import com.miniframe.model.mdo.MdoProFfdSQLBuilder;
 import com.miniframe.model.mdo.dao.MdoProFfdMapper;
@@ -37,8 +38,9 @@ public class MDO0044Service extends MDO0044BaseModel implements ExecProcessFlow
 		MdoProFfdSQLBuilder ffdsb = new MdoProFfdSQLBuilder();
 		ffdsb.createCriteria().andPidEqualTo(pid);
 		List<MdoProFfd> ffdList = ffdDao.selectByExample(ffdsb);
+		MdoProFfd  f;
 		if(ffdList !=null && !ffdList.isEmpty()) {//修改
-			MdoProFfd  f =ffdList.get(0);
+			f =ffdList.get(0);
 			f.setPid(pid);
 			f.setFid(fid);
 			f.setFname(fname);
@@ -50,7 +52,7 @@ public class MDO0044Service extends MDO0044BaseModel implements ExecProcessFlow
 			f.setChecked(checked);
 			ffdDao.updateByPrimaryKey(f);
 		}else{
-			MdoProFfd  f =new MdoProFfd();
+			f =new MdoProFfd();
 			f.setId(UtilTools.getUUid());
 			f.setPid(pid);
 			f.setFid(fid);
@@ -64,6 +66,7 @@ public class MDO0044Service extends MDO0044BaseModel implements ExecProcessFlow
 			ffdDao.insert(f);
 		}
 		ProFfdCstService.delCst(pid);
+		FfdCom.saveVarByFfd(f);
 	}
 	
 	/**

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

@@ -0,0 +1,52 @@
+package com.miniframe.mdo.component;
+
+import com.miniframe.core.ext.UtilTools;
+import com.miniframe.generate.appcode.ComType;
+import com.miniframe.model.mdo.MdoProCst;
+import com.miniframe.model.mdo.MdoProFfd;
+import com.miniframe.model.mdo.MdoProjectVariate;
+import com.miniframe.model.mdo.MdoProjectVariateSQLBuilder;
+import com.miniframe.model.mdo.dao.MdoProCstMapper;
+import com.miniframe.model.mdo.dao.MdoProjectVariateMapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FfdCom {
+
+    /**
+     * 更新Var
+     * @param ffd
+     * @throws Exception
+     */
+    public static void saveVarByFfd(MdoProFfd ffd) throws Exception {
+        //删除该组件历史数据
+        deleVarByFfd(ffd);
+        String vars =ffd.getVars();
+        MdoProjectVariateMapper varDao = UtilTools.getBean(MdoProjectVariateMapper.class);
+        String[] vs =vars.split(",");
+        for (int i =0;i<vs.length;i++) {
+            MdoProjectVariate var =new MdoProjectVariate();
+            var.setComid(ffd.getId());
+            var.setComtype(ComType.FFD.getIndex());
+            var.setId(UtilTools.getUUid());
+            var.setReference(vs[i]);
+            var.setPid(ffd.getPid());
+            var.setLower("-0.01");
+            var.setUpper("0.01");
+            var.setName("localFFD");
+            var.setUid("/cpacs/toolspecific/FFD/vars/sample");
+            varDao.insert(var);
+        }
+
+    }
+    private static void deleVarByFfd(MdoProFfd ffd) {
+        MdoProjectVariateMapper varDao = UtilTools.getBean(MdoProjectVariateMapper.class);
+        MdoProjectVariateSQLBuilder  varsb= new MdoProjectVariateSQLBuilder();
+        MdoProjectVariateSQLBuilder.Criteria varsc = varsb.createCriteria();
+        varsc.andComidEqualTo(ffd.getId());
+        varsc.andComtypeEqualTo(ComType.FFD.getIndex());
+        varDao.deleteByExample(varsb);
+    }
+
+}

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

@@ -293,6 +293,37 @@ public class TemplateGenerator {
         }
         return xfoil;
     }
+    /**
+     * TODO 创建 workflowXml
+     * @return
+     */
+    public static String createcWorkflowXml2(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("workflow2.ftl");
+            // 定义数据模型(Map)
+            Map<String, Object> dataModel = new HashMap<>();
+//            CpacsVo vo = getCpacsVo(pid);
+
+            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;
+        }
+    }
 
     /**
      * TODO 创建 workflowXml

+ 11 - 0
src/main/java/com/miniframe/tools/XIFileUtils.java

@@ -9,6 +9,7 @@ import com.miniframe.generate.appcode.FileType;
 import com.miniframe.model.system.SysFile;
 import com.miniframe.model.system.dao.SysFileMapper;
 import com.miniframe.spring.properties.MFMiniCoreProperties;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
@@ -41,6 +42,16 @@ public class XIFileUtils {
 
 
 
+    }
+    public static void  fileCopy(String sourcePath ,String destinationPath){
+        File sourceFile = new File(sourcePath);
+        File destinationFile = new File(destinationPath);
+        try {
+            FileUtils.copyFile(sourceFile, destinationFile); // 拷贝文件到目标位置,如果目标文件已存在,会被覆盖。
+            System.out.println("文件拷贝成功!");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
     }
 
     public static void main(String[] args) throws BusinessException {

+ 81 - 0
src/main/resources/templates/workflow2.ftl

@@ -0,0 +1,81 @@
+<?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>
+                <component uID="ADflow">
+                    <name>pyADflow</name>
+                    <input>
+                        <parameterUID>/cpacs/toolspecific/FFD/vars/sample</parameterUID>
+                    </input>
+                    <output>
+                        <parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cd</parameterUID>
+                    </output>
+                    <output>
+                        <parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cl</parameterUID>
+                    </output>
+                    <output>
+                        <parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cmz</parameterUID>
+                    </output>
+                    <execute tpye="component">execute</execute>
+                </component>
+            </solvers>
+            <executeOrder>
+                <componentUID position="1">ADflow</componentUID>
+            </executeOrder>
+            <segments>
+                <process>
+                    <segment uID="Seg0">
+                        <fromComponentUID>Project</fromComponentUID>
+                        <toComponentUID>optimizer3</toComponentUID>
+                    </segment>
+                    <segment uID="Seg1">
+                        <fromComponentUID>optimizer3</fromComponentUID>
+                        <toComponentUID>FFD</toComponentUID>
+                    </segment>
+                    <segment uID="Seg2">
+                        <fromComponentUID>FFD</fromComponentUID>
+                        <toComponentUID>ADflow</toComponentUID>
+                    </segment>
+                    <segment uID="Seg3">
+                        <fromComponentUID>ADflow</fromComponentUID>
+                        <toComponentUID>optimizer3</toComponentUID>
+                    </segment>
+                </process>
+                <data>
+                    <segment uID="Seg0">
+                        <fromComponentUID>optimizer3</fromComponentUID>
+                        <toComponentUID>FFD</toComponentUID>
+                    </segment>
+                    <segment uID="Seg1">
+                        <fromComponentUID>FFD</fromComponentUID>
+                        <toComponentUID>ADflow</toComponentUID>
+                    </segment>
+                    <segment uID="Seg2">
+                        <fromComponentUID>ADflow</fromComponentUID>
+                        <toComponentUID>optimizer3</toComponentUID>
+                    </segment>
+                </data>
+            </segments>
+            <parameters>
+                <parameter uID="/cpacs/toolspecific/FFD/vars/sample">
+                    <label>localFFD</label>
+                </parameter>
+                <parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cd">
+                    <label>cd</label>
+                </parameter>
+                <parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cl">
+                    <label>cl</label>
+                </parameter>
+                <parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cmz">
+                    <label>cmz</label>
+                </parameter>
+            </parameters>
+        </schema>
+</opcs>