Jelajahi Sumber

管道修改BUG

huangxingxing 1 tahun lalu
induk
melakukan
880fcdf7c9

+ 49 - 8
src/main/java/com/miniframe/bisiness/system/D00008Service.java

@@ -1,26 +1,22 @@
 package com.miniframe.bisiness.system;
 
+import com.miniframe.constant.MFConstant;
 import com.miniframe.core.ExecProcessFlow;
 import com.miniframe.core.exception.BusinessException;
 import com.miniframe.core.ext.UtilTools;
 import com.miniframe.disaster.service.LogService;
 import com.miniframe.generate.business.system.model.D00008BaseModel;
 import com.miniframe.model.system.*;
-import com.miniframe.model.system.dao.DAccidentMapper;
-import com.miniframe.model.system.dao.DJobMapper;
-import com.miniframe.model.system.dao.DNodeMapper;
-import com.miniframe.model.system.dao.DNodeValMapper;
+import com.miniframe.model.system.dao.*;
 import com.miniframe.service.impl.FileServiceImpl;
 import com.miniframe.template.TemplateGenerator;
 import com.miniframe.tools.XIDateTimeUtils;
+import com.miniframe.tools.XIFileUtils;
 import com.miniframe.websocket.WebsocketEndPoint;
 import lombok.SneakyThrows;
 import tk.mybatis.mapper.util.StringUtil;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.*;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
@@ -104,6 +100,39 @@ public class D00008Service extends D00008BaseModel implements ExecProcessFlow {
 			exeWater(aid,jid);
 		}
 
+		if(accident.getStype().equals("Gass")){//瓦斯爆炸
+			DGasMapper gasMapper =UtilTools.getBean(DGasMapper.class);
+			DGasSQLBuilder gasSb = new DGasSQLBuilder();
+			DGasSQLBuilder.Criteria gasSc = gasSb.createCriteria();
+			gasSc.andAidEqualTo(aid);
+			List<DGas> gases =gasMapper.selectByExample(gasSb);
+			if(gases.isEmpty()){
+				throw  new BusinessException("EB3000004");
+			}
+			for (DGas gas: gases) {
+				TemplateGenerator.createGasControl(aid,jid,gas.getId(),totaltime,dt,dx,reportstep,interactionstep,cocodes);
+				TemplateGenerator.createGasInit(aid,jid,gas.getId());
+				TemplateGenerator.createGassRunsh(aid,jid,gas.getId(),gas.getBfname());
+				//文件迁移
+				SysFileMapper sysFileMapper = UtilTools.getBean(SysFileMapper.class);
+				SysFile gf = sysFileMapper.selectByPrimaryKey(gas.getGfid());
+				if (gf == null) {
+					throw new BusinessException("EB3100020");
+				}
+				cpFile(XIFileUtils.getRootPathStr() + MFConstant.separator + gf.getFilepath()
+						,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gas.getId() + "/"+gf.getFilename());
+				SysFile bf = sysFileMapper.selectByPrimaryKey(gas.getBfid());
+				if (bf == null) {
+					throw new BusinessException("EB3100021");
+				}
+				cpFile(XIFileUtils.getRootPathStr() + MFConstant.separator + bf.getFilepath()
+						,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gas.getId() + "/"+bf.getFilename());
+				//网格文件
+				//执行文件
+				cpGssExe(TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gas.getId() );
+			}
+
+		}
 	}
 
 	private DJob CreateJob(Integer aid, String totaltime, String dt, String dx, String reportstep, String interactionstep, String acctime) {
@@ -183,6 +212,18 @@ public class D00008Service extends D00008BaseModel implements ExecProcessFlow {
 		}
 	}
 
+	public void cpGssExe(String gassDir) throws IOException {
+		Runtime runtime = Runtime.getRuntime();
+		Process p =null;
+		runtime.exec("cp -f /home/disaster/gas/bin/* "+ gassDir);
+	}
+
+	public void cpFile(String file1Path,String file2Path) throws IOException {
+		Runtime runtime = Runtime.getRuntime();
+		Process p =null;
+		runtime.exec("cp -f "+ file2Path);
+	}
+
 	//异步执行
 	@SneakyThrows
 	public void exeWater(Integer aid,Integer jid) throws Exception{

+ 235 - 86
src/main/java/com/miniframe/template/TemplateGenerator.java

@@ -1,5 +1,6 @@
 package com.miniframe.template;
 
+import com.miniframe.core.exception.BusinessException;
 import com.miniframe.core.ext.UtilTools;
 import com.miniframe.model.system.*;
 import com.miniframe.model.system.dao.*;
@@ -8,6 +9,7 @@ import com.miniframe.tools.XIIniFileUtils;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
+import tk.mybatis.mapper.util.StringUtil;
 
 import java.io.FileWriter;
 import java.io.IOException;
@@ -15,11 +17,10 @@ import java.io.StringWriter;
 import java.util.*;
 
 public class TemplateGenerator {
-    public static final String BPATH="/cephfs/disaster";
+    public static final String BPATH = "/cephfs/disaster";
 
 
-
-    public static void createWaterControl(Integer aid,Integer jid,String totaltime,String dt,String dx,String reportstep,String interactionstep) throws IOException, TemplateException {
+    public static void createWaterControl(Integer aid, Integer jid, String totaltime, String dt, String dx, String reportstep, String interactionstep) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -28,33 +29,33 @@ public class TemplateGenerator {
         // 定义数据模型(Map)
         Map<String, Object> dataModel = new HashMap<>();
         //几何文件路径
-        dataModel.put("geoFilePath", BPATH+"/"+aid+"/"+jid+"/Geometry");
+        dataModel.put("geoFilePath", BPATH + "/" + aid + "/" + jid + "/Geometry");
         //initFile 文件路径
-        dataModel.put("initFilePath", BPATH+"/"+aid+"/"+jid+"/water"+"/"+"water.init");
+        dataModel.put("initFilePath", BPATH + "/" + aid + "/" + jid + "/water" + "/" + "water.init");
 
         //midPath
-        dataModel.put("midPath", BPATH+"/"+aid+"/"+jid+"/water"+"/mid");
+        dataModel.put("midPath", BPATH + "/" + aid + "/" + jid + "/water" + "/mid");
         //monitorPath
-        dataModel.put("monitorPath",BPATH+"/"+aid+"/"+jid+"/monitor.in");
+        dataModel.put("monitorPath", BPATH + "/" + aid + "/" + jid + "/monitor.in");
         //outPath
-        dataModel.put("outPath", BPATH+"/"+aid+"/"+jid+"/water"+"/out");
-        dataModel.put("totaltime",totaltime);
-        dataModel.put("dt",dt);
-        dataModel.put("dx",dx);
-        dataModel.put("reportstep",reportstep);
-        dataModel.put("interactionstep",interactionstep);
-
-        DSourceMapper dsm =UtilTools.getBean(DSourceMapper.class);
-        DSourceSQLBuilder dss= new DSourceSQLBuilder();
+        dataModel.put("outPath", BPATH + "/" + aid + "/" + jid + "/water" + "/out");
+        dataModel.put("totaltime", totaltime);
+        dataModel.put("dt", dt);
+        dataModel.put("dx", dx);
+        dataModel.put("reportstep", reportstep);
+        dataModel.put("interactionstep", interactionstep);
+
+        DSourceMapper dsm = UtilTools.getBean(DSourceMapper.class);
+        DSourceSQLBuilder dss = new DSourceSQLBuilder();
         DSourceSQLBuilder.Criteria dssc = dss.createCriteria();
         dssc.andAidEqualTo(aid);
 //        dssc.andSTypeEqualTo("Fire");
-        List<DSource>  dources =dsm.selectByExample(dss);
+        List<DSource> dources = dsm.selectByExample(dss);
         //waterSourcenum  灾源数量
         dataModel.put("waterSourcenum", dources.size());
         //边界
         DBoundaryMapper dBoundaryMapper = UtilTools.getBean(DBoundaryMapper.class);
-        DBoundarySQLBuilder sb =new DBoundarySQLBuilder();
+        DBoundarySQLBuilder sb = new DBoundarySQLBuilder();
         DBoundarySQLBuilder.Criteria sc = sb.createCriteria();
         sc.andAidEqualTo(aid);
         List<DBoundary> boundaries = dBoundaryMapper.selectByExample(sb);
@@ -67,12 +68,12 @@ public class TemplateGenerator {
         template.process(dataModel, writer);
         mkDirs(aid, jid, "/water");
 
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/"+"/water"+"/water.control");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/" + "/water" + "/water.control");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
 
-    public static void createWaterRunsh(Integer aid,Integer jid) throws IOException, TemplateException {
+    public static void createWaterRunsh(Integer aid, Integer jid) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -81,16 +82,17 @@ public class TemplateGenerator {
         // 定义数据模型(Map)
         Map<String, Object> dataModel = new HashMap<>();
         //几何文件路径
-        dataModel.put("waterControlPath", BPATH+"/"+aid+"/"+jid+"/water"+"/water.control");
+        dataModel.put("waterControlPath", BPATH + "/" + aid + "/" + jid + "/water" + "/water.control");
         // 将数据模型传入模板进行处理
         StringWriter writer = new StringWriter();
         template.process(dataModel, writer);
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/water"+"/"+"runWater.sh");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/water" + "/" + "runWater.sh");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
-    public static void createWaterInit(Integer aid,Integer jid) throws IOException, TemplateException {
-        FireInitVo vo =new FireInitVo();
+
+    public static void createWaterInit(Integer aid, Integer jid) throws IOException, TemplateException {
+        FireInitVo vo = new FireInitVo();
         //TODO 这个版本不需要传感器数据
 //        DNodeValMapper dnvm= UtilTools.getBean(DNodeValMapper.class);
 //        DNodeValSQLBuilder dns = new DNodeValSQLBuilder();
@@ -99,24 +101,24 @@ public class TemplateGenerator {
 //        List<DNodeVal> nodeVals=dnvm.selectByExample(dns);
 //        vo.setNodeVals(nodeVals);
 
-        DSourceMapper dsm =UtilTools.getBean(DSourceMapper.class);
-        DSourceSQLBuilder dss= new DSourceSQLBuilder();
+        DSourceMapper dsm = UtilTools.getBean(DSourceMapper.class);
+        DSourceSQLBuilder dss = new DSourceSQLBuilder();
         DSourceSQLBuilder.Criteria dssc = dss.createCriteria();
         dssc.andAidEqualTo(aid);
 //        dssc.andSTypeEqualTo("Water");
-        List<DSource>  dources =dsm.selectByExample(dss);
+        List<DSource> dources = dsm.selectByExample(dss);
 
 
-        DSourceValMapper dsvm =UtilTools.getBean(DSourceValMapper.class);
-        DSourceValSQLBuilder dsvs =new DSourceValSQLBuilder();
+        DSourceValMapper dsvm = UtilTools.getBean(DSourceValMapper.class);
+        DSourceValSQLBuilder dsvs = new DSourceValSQLBuilder();
 
-        List<DSourceVo>  dourceVos = new ArrayList<>();
-        for (DSource ds:dources) {
+        List<DSourceVo> dourceVos = new ArrayList<>();
+        for (DSource ds : dources) {
             DSourceValSQLBuilder.Criteria dsvc = dsvs.createCriteria();
             dsvc.andSidEqualTo(ds.getId());
             List<DSourceVal> dSourceVals = dsvm.selectByExample(dsvs);
 
-            DSourceVo dsourcevo =new DSourceVo();
+            DSourceVo dsourcevo = new DSourceVo();
             dsourcevo.setDsource(ds);
             dsourcevo.setDsourceVals(dSourceVals);
             dourceVos.add(dsourcevo);
@@ -126,7 +128,7 @@ public class TemplateGenerator {
 
         //边界
         DBoundaryMapper dBoundaryMapper = UtilTools.getBean(DBoundaryMapper.class);
-        DBoundarySQLBuilder sb =new DBoundarySQLBuilder();
+        DBoundarySQLBuilder sb = new DBoundarySQLBuilder();
         DBoundarySQLBuilder.Criteria sc = sb.createCriteria();
         sc.andAidEqualTo(aid);
         List<DBoundary> boundaries = dBoundaryMapper.selectByExample(sb);
@@ -149,7 +151,7 @@ public class TemplateGenerator {
         // 输出结果到控制台或保存为文件
 //        System.out.println(writer.toString());
 
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/water"+"/"+"water.init");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/water" + "/" + "water.init");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
@@ -157,7 +159,7 @@ public class TemplateGenerator {
     /**
      * 生成几何文件
      */
-    public static void createGeometry(Integer aid,Integer jid) throws IOException, TemplateException {
+    public static void createGeometry(Integer aid, Integer jid) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -166,7 +168,7 @@ public class TemplateGenerator {
         // 定义数据模型(Map)
         Map<String, Object> dataModel = new HashMap<>();
 
-        DNodeMapper nodeMapper =UtilTools.getBean(DNodeMapper.class);
+        DNodeMapper nodeMapper = UtilTools.getBean(DNodeMapper.class);
         List<DNode> nodes = nodeMapper.selectAll();
         Collections.sort(nodes, (n1, n2) -> n1.getId().compareTo(n2.getId()));
 
@@ -176,8 +178,8 @@ public class TemplateGenerator {
         //节点
         dataModel.put("nodes", nodes);
 
-        DPipeMapper pipeMapper =UtilTools.getBean(DPipeMapper.class);
-        List<DPipe> pipes =pipeMapper.selectAll();
+        DPipeMapper pipeMapper = UtilTools.getBean(DPipeMapper.class);
+        List<DPipe> pipes = pipeMapper.selectAll();
         Collections.sort(pipes, (n1, n2) -> n1.getId().compareTo(n2.getId()));
         //管道数量
         dataModel.put("pipenum", pipes.size());
@@ -188,7 +190,7 @@ public class TemplateGenerator {
         StringWriter writer = new StringWriter();
         template.process(dataModel, writer);
         mkDirs(aid, jid, "/fire");
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/Geometry");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/Geometry");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
@@ -202,10 +204,21 @@ public class TemplateGenerator {
         XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid + s + "/out");
     }
 
+    private static void mkGassDirs(Integer aid, Integer jid, Integer gid) {
+        String s = "/gas";
+        XIFileUtils.mkdir(BPATH);
+        XIFileUtils.mkdir(BPATH + "/" + aid);
+        XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid);
+        XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid + s);
+        XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid + s + "/" + gid);
+        XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid + s + "/" + gid + "/mid");
+        XIFileUtils.mkdir(BPATH + "/" + aid + "/" + jid + s + "/" + gid + "/out");
+    }
+
     /**
      * 生成监测点文件
      */
-    public static void createMonitor(Integer aid,Integer jid) throws IOException, TemplateException {
+    public static void createMonitor(Integer aid, Integer jid) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -215,7 +228,7 @@ public class TemplateGenerator {
         Map<String, Object> dataModel = new HashMap<>();
 
         DChecknodeMapper checknodeMapper = UtilTools.getBean(DChecknodeMapper.class);
-        List<DChecknode> monitors=checknodeMapper.selectAll();
+        List<DChecknode> monitors = checknodeMapper.selectAll();
         Collections.sort(monitors, (n1, n2) -> n1.getId().compareTo(n2.getId()));
         dataModel.put("monnum", monitors.size());
         //管道
@@ -225,13 +238,14 @@ public class TemplateGenerator {
         StringWriter writer = new StringWriter();
         template.process(dataModel, writer);
         mkDirs(aid, jid, "/fire");
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/monitor.in");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/monitor.in");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
-    public static void createFireControl(Integer aid,Integer jid,String totaltime,
-                                         String dt,String dx,String reportstep,String interactionstep,
-    String cocodes) throws IOException, TemplateException {
+
+    public static void createFireControl(Integer aid, Integer jid, String totaltime,
+                                         String dt, String dx, String reportstep, String interactionstep,
+                                         String cocodes) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -240,67 +254,67 @@ public class TemplateGenerator {
         // 定义数据模型(Map)
         Map<String, Object> dataModel = new HashMap<>();
         //几何文件路径
-        dataModel.put("geoFilePath", BPATH+"/"+aid+"/"+jid+"/Geometry");
+        dataModel.put("geoFilePath", BPATH + "/" + aid + "/" + jid + "/Geometry");
         //fireinit 文件路径
-        dataModel.put("initFilePath", BPATH+"/"+aid+"/"+jid+"/fire"+"/"+"Fire.init");
+        dataModel.put("initFilePath", BPATH + "/" + aid + "/" + jid + "/fire" + "/" + "Fire.init");
         //fireInteractionPath 阀门文件路径
         dataModel.put("fireInteractionPath", "/home/disaster/fire/Fire.interaction");
         //midPath
-        dataModel.put("monitorPath", BPATH+"/"+aid+"/"+jid+"/monitor.in");
+        dataModel.put("monitorPath", BPATH + "/" + aid + "/" + jid + "/monitor.in");
         //midPath
-        dataModel.put("midPath", BPATH+"/"+aid+"/"+jid+"/fire"+"/mid");
+        dataModel.put("midPath", BPATH + "/" + aid + "/" + jid + "/fire" + "/mid");
         //outPath
-        dataModel.put("outPath", BPATH+"/"+aid+"/"+jid+"/fire"+"/out");
-
-        dataModel.put("totaltime",totaltime);
-        dataModel.put("dt",dt);
-        dataModel.put("dx",dx);
-        dataModel.put("reportstep",reportstep);
-        dataModel.put("interactionstep",interactionstep);
+        dataModel.put("outPath", BPATH + "/" + aid + "/" + jid + "/fire" + "/out");
 
+        dataModel.put("totaltime", totaltime);
+        dataModel.put("dt", dt);
+        dataModel.put("dx", dx);
+        dataModel.put("reportstep", reportstep);
+        dataModel.put("interactionstep", interactionstep);
 
 
-        DSourceMapper dsm =UtilTools.getBean(DSourceMapper.class);
-        DSourceSQLBuilder dss= new DSourceSQLBuilder();
+        DSourceMapper dsm = UtilTools.getBean(DSourceMapper.class);
+        DSourceSQLBuilder dss = new DSourceSQLBuilder();
         DSourceSQLBuilder.Criteria dssc = dss.createCriteria();
         dssc.andAidEqualTo(aid);
 //        dssc.andSTypeEqualTo("Fire");
-        List<DSource>  dources =dsm.selectByExample(dss);
+        List<DSource> dources = dsm.selectByExample(dss);
         //fireSourceNum  灾源数量
         dataModel.put("fireSourceNum", dources.size());
         //边界
         DBoundaryMapper dBoundaryMapper = UtilTools.getBean(DBoundaryMapper.class);
-        DBoundarySQLBuilder sb =new DBoundarySQLBuilder();
+        DBoundarySQLBuilder sb = new DBoundarySQLBuilder();
         DBoundarySQLBuilder.Criteria sc = sb.createCriteria();
         sc.andAidEqualTo(aid);
         List<DBoundary> boundaries = dBoundaryMapper.selectByExample(sb);
         //边界数量
         dataModel.put("boundarynum", boundaries.size());
         //物理量
-        String[] codes =cocodes.split(",");
-        List<String> concodeList =new ArrayList<>();
-        for (String concode:codes
-             ) {
+        String[] codes = cocodes.split(",");
+        List<String> concodeList = new ArrayList<>();
+        for (String concode : codes
+        ) {
             concodeList.add(concode);
         }
-        DConMapper conMapper=UtilTools.getBean(DConMapper.class);
-        DConSQLBuilder consb =new DConSQLBuilder();
+        DConMapper conMapper = UtilTools.getBean(DConMapper.class);
+        DConSQLBuilder consb = new DConSQLBuilder();
         DConSQLBuilder.Criteria consc = consb.createCriteria();
         consc.andCodeIn(concodeList);
-        List<DCon> cons =  conMapper.selectByExample(consb);
-        dataModel.put("conNum",cons.size());
-        dataModel.put("cons",cons);
+        List<DCon> cons = conMapper.selectByExample(consb);
+        dataModel.put("conNum", cons.size());
+        dataModel.put("cons", cons);
 
         // 将数据模型传入模板进行处理
         StringWriter writer = new StringWriter();
         template.process(dataModel, writer);
         mkDirs(aid, jid, "/fire");
 
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/"+"/fire"+"/Fire.control");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/" + "/fire" + "/Fire.control");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
-    public static void createFireRunsh(Integer aid,Integer jid) throws IOException, TemplateException {
+
+    public static void createFireRunsh(Integer aid, Integer jid) throws IOException, TemplateException {
         Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
         // 设置模板所在目录
         cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
@@ -309,17 +323,17 @@ public class TemplateGenerator {
         // 定义数据模型(Map)
         Map<String, Object> dataModel = new HashMap<>();
         //几何文件路径
-        dataModel.put("firecontrolPath", BPATH+"/"+aid+"/"+jid+"/fire"+"/Fire.control");
+        dataModel.put("firecontrolPath", BPATH + "/" + aid + "/" + jid + "/fire" + "/Fire.control");
         // 将数据模型传入模板进行处理
         StringWriter writer = new StringWriter();
         template.process(dataModel, writer);
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/fire"+"/"+"runFile.sh");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/fire" + "/" + "runFile.sh");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
 
-    public static void createFireInit(Integer aid,Integer jid) throws IOException, TemplateException {
-        FireInitVo vo =new FireInitVo();
+    public static void createFireInit(Integer aid, Integer jid) throws IOException, TemplateException {
+        FireInitVo vo = new FireInitVo();
 
         //TODO 求解器暂时不需要此数据
 //        DNodeValMapper dnvm= UtilTools.getBean(DNodeValMapper.class);
@@ -329,34 +343,34 @@ public class TemplateGenerator {
 //        List<DNodeVal> nodeVals=dnvm.selectByExample(dns);
 //        vo.setNodeVals(nodeVals);
 
-        DSourceMapper dsm =UtilTools.getBean(DSourceMapper.class);
-        DSourceSQLBuilder dss= new DSourceSQLBuilder();
+        DSourceMapper dsm = UtilTools.getBean(DSourceMapper.class);
+        DSourceSQLBuilder dss = new DSourceSQLBuilder();
         DSourceSQLBuilder.Criteria dssc = dss.createCriteria();
         dssc.andAidEqualTo(aid);
 //        dssc.andSTypeEqualTo("Fire");
-        List<DSource>  dources =dsm.selectByExample(dss);
+        List<DSource> dources = dsm.selectByExample(dss);
 
 
-        DSourceValMapper dsvm =UtilTools.getBean(DSourceValMapper.class);
-        DSourceValSQLBuilder dsvs =new DSourceValSQLBuilder();
+        DSourceValMapper dsvm = UtilTools.getBean(DSourceValMapper.class);
+        DSourceValSQLBuilder dsvs = new DSourceValSQLBuilder();
 
-        List<DSourceVo>  dourceVos = new ArrayList<>();
-        for (DSource ds:dources) {
+        List<DSourceVo> dourceVos = new ArrayList<>();
+        for (DSource ds : dources) {
             DSourceValSQLBuilder.Criteria dsvc = dsvs.createCriteria();
             dsvc.andSidEqualTo(ds.getId());
             List<DSourceVal> dSourceVals = dsvm.selectByExample(dsvs);
 
-            DSourceVo dsourcevo =new DSourceVo();
+            DSourceVo dsourcevo = new DSourceVo();
             dsourcevo.setDsource(ds);
             dsourcevo.setDsourceVals(dSourceVals);
             dourceVos.add(dsourcevo);
             dsvs.clear();
         }
-       vo.setDourceVos(dourceVos);
+        vo.setDourceVos(dourceVos);
 
         //边界
         DBoundaryMapper dBoundaryMapper = UtilTools.getBean(DBoundaryMapper.class);
-        DBoundarySQLBuilder sb =new DBoundarySQLBuilder();
+        DBoundarySQLBuilder sb = new DBoundarySQLBuilder();
         DBoundarySQLBuilder.Criteria sc = sb.createCriteria();
         sc.andAidEqualTo(aid);
         List<DBoundary> boundaries = dBoundaryMapper.selectByExample(sb);
@@ -380,7 +394,7 @@ public class TemplateGenerator {
         // 输出结果到控制台或保存为文件
 //        System.out.println(writer.toString());
 
-        FileWriter fileWriter =new FileWriter(BPATH+"/"+aid+"/"+jid+"/fire"+"/"+"Fire.init");
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/fire" + "/" + "Fire.init");
         fileWriter.write(writer.toString());
         fileWriter.close();
     }
@@ -393,4 +407,139 @@ public class TemplateGenerator {
         System.out.println(myFloat); // 输出: 123.46
         System.out.println(formattedString); // 输出: 123.46
     }
+
+    public static void createGasControl(Integer aid, Integer jid, Integer gid, String totaltime,
+                                        String dt, String dx, String reportstep, String interactionstep,
+                                        String cocodes) throws IOException, TemplateException {
+
+        Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+        // 设置模板所在目录
+        cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+        // 获取模板对象
+        Template template = cfg.getTemplate("mashGasControl.ftl");
+        // 定义数据模型(Map)
+        Map<String, Object> dataModel = new HashMap<>();
+        //几何文件路径
+        dataModel.put("geoFilePath", BPATH + "/" + aid + "/" + jid + "/Geometry");
+        //fireinit 文件路径
+        dataModel.put("initFilePath", BPATH + "/" + aid + "/" + jid + "/gas" + "/" + gid + "/" + "MashGas.init");
+        //midPath
+        dataModel.put("monitorPath", BPATH + "/" + aid + "/" + jid + "/monitor.in");
+        //midPath
+        dataModel.put("midPath", BPATH + "/" + aid + "/" + jid + "/gas" + "/" + gid + "/mid");
+        //outPath
+        dataModel.put("outPath", BPATH + "/" + aid + "/" + jid + "/gas" + "/" + gid + "/out");
+        //CPUS
+        dataModel.put("cups", 1);
+        dataModel.put("totaltime", totaltime);
+        dataModel.put("dt", dt);
+        dataModel.put("dx", dx);
+        dataModel.put("reportstep", reportstep);
+        dataModel.put("interactionstep", interactionstep);
+        //TODO
+        dataModel.put("boundarynum", 3);
+        //TODO
+        dataModel.put("mashgasnumber", 1);
+
+        //fireInteractionPath 阀门文件路径
+        dataModel.put("fireInteractionPath", "/home/disaster/fire/Fire.interaction");
+
+        //物理量
+        if (StringUtil.isEmpty(cocodes)) {
+            dataModel.put("conNum", 0);
+            dataModel.put("cons", new ArrayList<>());
+        } else {
+            String[] codes = cocodes.split(",");
+            List<String> concodeList = new ArrayList<>();
+            for (String concode : codes
+            ) {
+                concodeList.add(concode);
+            }
+            DConMapper conMapper = UtilTools.getBean(DConMapper.class);
+            DConSQLBuilder consb = new DConSQLBuilder();
+            DConSQLBuilder.Criteria consc = consb.createCriteria();
+            consc.andCodeIn(concodeList);
+            List<DCon> cons = conMapper.selectByExample(consb);
+            dataModel.put("conNum", cons.size());
+            dataModel.put("cons", cons);
+        }
+
+        // 将数据模型传入模板进行处理
+        StringWriter writer = new StringWriter();
+        template.process(dataModel, writer);
+        mkGassDirs(aid, jid, gid);
+
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gid + "/MashGas.control");
+        fileWriter.write(writer.toString());
+        fileWriter.close();
+
+    }
+
+
+    public static void createGasInit(Integer aid, Integer jid, Integer gid) throws IOException, TemplateException, BusinessException {
+
+        Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+        // 设置模板所在目录
+        cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+        // 获取模板对象
+        Template template = cfg.getTemplate("mashGasInit.ftl");
+        // 定义数据模型(Map)
+        Map<String, Object> dataModel = new HashMap<>();
+
+        DGasBlastAreaMapper blastMapper = UtilTools.getBean(DGasBlastAreaMapper.class);
+        DGasBlastAreaSQLBuilder blastSb = new DGasBlastAreaSQLBuilder();
+        DGasBlastAreaSQLBuilder.Criteria blastSc = blastSb.createCriteria();
+        blastSc.andGidEqualTo(gid);
+
+        List<DGasBlastArea> blastList = blastMapper.selectByExample(blastSb);
+        if (blastList.isEmpty()) {
+            throw new BusinessException("EB3100023");
+        }
+        //TODO boundaries 没有数据
+        dataModel.put("boundaries", new ArrayList<>());
+        dataModel.put("blastnum", blastList.size());
+        dataModel.put("blastList", blastList);
+        DGasGatherAreaMapper gatherMapper = UtilTools.getBean(DGasGatherAreaMapper.class);
+        DGasGatherAreaSQLBuilder gatherSb = new DGasGatherAreaSQLBuilder();
+        DGasGatherAreaSQLBuilder.Criteria gatherSc = gatherSb.createCriteria();
+        gatherSc.andGidEqualTo(gid);
+        List<DGasGatherArea> gatherList = gatherMapper.selectByExample(gatherSb);
+        if (gatherList.isEmpty()) {
+            throw new BusinessException("EB3100024");
+        }
+        dataModel.put("gathernum", gatherList.size());
+        dataModel.put("gatherList", gatherList);
+
+        DGasMapper gasMapper = UtilTools.getBean(DGasMapper.class);
+        DGas gas = gasMapper.selectByPrimaryKey(gid);
+        dataModel.put("gas", gas);
+        // 将数据模型传入模板进行处理
+        StringWriter writer = new StringWriter();
+        template.process(dataModel, writer);
+        mkGassDirs(aid, jid, gid);
+
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gid + "/MashGas.init");
+        fileWriter.write(writer.toString());
+        fileWriter.close();
+
+    }
+
+    public static void createGassRunsh(Integer aid, Integer jid, Integer gid, String bfname) throws IOException, TemplateException {
+        Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+        // 设置模板所在目录
+        cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+        // 获取模板对象
+        Template template = cfg.getTemplate("mashGasRunsh.ftl");
+        // 定义数据模型(Map)
+        Map<String, Object> dataModel = new HashMap<>();
+        dataModel.put("bfname", bfname);
+        dataModel.put("gascontrol", BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gid + "/MashGas.control");
+        // 将数据模型传入模板进行处理
+        StringWriter writer = new StringWriter();
+        template.process(dataModel, writer);
+        mkGassDirs(aid, jid, gid);
+        FileWriter fileWriter = new FileWriter(BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/" + gid + "/run.sh");
+        fileWriter.write(writer.toString());
+        fileWriter.close();
+    }
 }

+ 21 - 0
src/main/resources/templates/mashGasControl.ftl

@@ -0,0 +1,21 @@
+geoFile : ${geoFilePath}
+initFile : ${initFilePath}
+monitorFile : ${monitorPath}
+midPath : ${midPath}
+outPath : ${outPath}
+CPUS: ${cups}
+3Dtotaltime: 0.0000002
+totaltime: ${totaltime}
+dt: ${dt}
+dx: ${dx}
+report step: ${reportstep}
+Boundary number:${boundarynum}
+MashGas number:${mashgasnumber}
+tecplot : OK
+interactionstep : ${interactionstep}
+interaction file name : ${fireInteractionPath}
+Number Con:${conNum}
+<#list cons as b>
+${b.code},${b.diffcoe}
+</#list>
+#end

+ 61 - 0
src/main/resources/templates/mashGasInit.ftl

@@ -0,0 +1,61 @@
+#odes
+#end
+#boundaries Inlet 
+<#list boundaries as b>
+${b.nname},${b.type},${b.flow},${b.pressure},${b.temperature} ,${b.polcon1} ,${b.polcon2}
+</#list>
+#end 
+#MashGass
+MashGas1,${blastnum},${gathernum}
+<#list blastList as b>
+${b.pname},${b.ssite},${b.esite}
+</#list>
+grdfile,${gas.gfname}
+inpfile,${gas.bfname}
+<#list gatherList as b>
+${b.name},${b.type},${b.gasdensity}
+</#list>
+#end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 51 - 0
src/main/resources/templates/mashGasRunsh.ftl

@@ -0,0 +1,51 @@
+export PATH="/home/disaster/gas/mpich2/bin:$PATH"
+./convert_input --parse=${bfname}
+./couple --proc=1d-3d --input-1d=${gascontrol}
+./convert_input
+./grid_split
+./prepch
+
+mpirun -n 8 ./solver
+./couple --proc=3d-1d --input-1d=${gascontrol}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+