D00008Service.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. package com.miniframe.bisiness.system;
  2. import com.github.dockerjava.api.async.ResultCallback;
  3. import com.github.dockerjava.api.model.Frame;
  4. import com.miniframe.constant.MFConstant;
  5. import com.miniframe.core.ExecProcessFlow;
  6. import com.miniframe.core.exception.BusinessException;
  7. import com.miniframe.core.ext.UtilTools;
  8. import com.miniframe.disaster.service.LogService;
  9. import com.miniframe.generate.business.system.model.D00008BaseModel;
  10. import com.miniframe.generate.comm.system.D_D10016_CHVALS_RECODE;
  11. import com.miniframe.generate.comm.system.D_D10016_COCODES_RECODE;
  12. import com.miniframe.model.system.*;
  13. import com.miniframe.model.system.dao.*;
  14. import com.miniframe.ptdj.PtDjCgq;
  15. import com.miniframe.ptdj.PtDjResultData;
  16. import com.miniframe.ptdj.PtdjServer;
  17. import com.miniframe.service.impl.FileServiceImpl;
  18. import com.miniframe.solverjob.DockerExe;
  19. import com.miniframe.template.DEscapeVo;
  20. import com.miniframe.template.TemplateGenerator;
  21. import com.miniframe.template.TemplateGenerator2;
  22. import com.miniframe.tools.XIDateTimeUtils;
  23. import com.miniframe.tools.XIFileUtils;
  24. import com.miniframe.tools.baidu.HttpUtil;
  25. import com.miniframe.websocket.WebsocketEndPoint;
  26. import lombok.SneakyThrows;
  27. import tk.mybatis.mapper.util.StringUtil;
  28. import java.io.*;
  29. import java.util.ArrayList;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.concurrent.CompletableFuture;
  33. /**
  34. * 基础系统,“灾情演练”逻辑处理(重新生成不覆盖)。
  35. */
  36. public class D00008Service extends D00008BaseModel implements ExecProcessFlow {
  37. private static final long serialVersionUID = -7051358269847459502L;
  38. /**
  39. * 基础系统,“灾情演练”业务核心处理
  40. */
  41. public void transExecute() throws Exception {
  42. Integer aid =this.getA_d00008().getAid();
  43. /**
  44. * totaltime: 10800 - 模拟时长
  45. * dt: 0.1 - 时间步长
  46. * dx: 10.0 -空间步长
  47. * report step: 60 -输出步长
  48. * interactionstep : 1200 -交互步长
  49. */
  50. String totaltime =this.getA_d00008().getTotaltime();
  51. String dt =this.getA_d00008().getDt();
  52. String dx =this.getA_d00008().getDx();
  53. String reportstep =this.getA_d00008().getReportstep();
  54. String interactionstep =this.getA_d00008().getInteractionstep();
  55. String acctime =this.getA_d00008().getAcctime();
  56. DAccidentMapper accidentDao = UtilTools.getBean(DAccidentMapper.class);
  57. DAccident accident= accidentDao.selectByPrimaryKey(aid);
  58. DJobMapper dJobDao = UtilTools.getBean(DJobMapper.class);
  59. String coids=this.getA_d00008().getCoids();
  60. String cocodes=this.getA_d00008().getCocodes();
  61. DJob job = CreateJob(aid, totaltime, dt, dx,
  62. reportstep, interactionstep, acctime);
  63. if(accident.getStype().equals("Fire")||accident.getStype().equals("Gass")||accident.getStype().equals("Gass1")){
  64. if(StringUtil.isEmpty(coids)||StringUtil.isEmpty(cocodes)){
  65. throw new BusinessException("EB3100013");
  66. }
  67. job.setCoids(coids);
  68. job.setCocodes(cocodes);
  69. }else if(accident.getStype().equals("Water")){
  70. job.setCoids("-1");
  71. job.setCocodes("Height");
  72. }
  73. dJobDao.insertSelective(job);
  74. //获取最新JOB
  75. DJob newJob = getNewJob(aid, dJobDao);
  76. Integer jid =newJob.getId();
  77. //存储最新求解ID
  78. changeAccident(accidentDao, accident, jid);
  79. //创建日志
  80. LogService.createLog(accident);
  81. //获取传感器数据
  82. //TODO: 需要从第三方获取
  83. initDNodeVal(aid,jid);
  84. TemplateGenerator.createMonitor(aid,jid);//生成监测点文件
  85. TemplateGenerator2.createDevice(aid,jid);//创建设备文件
  86. LogService.addLog(accident,"device.ftl配置生成——————————————————成功");
  87. if(accident.getStype().equals("Fire")){
  88. TemplateGenerator2.createGeometry(aid,jid);
  89. TemplateGenerator2.createEscape(aid,jid);
  90. TemplateGenerator2.createFireControl(aid,jid,totaltime,dt,dx,reportstep,interactionstep,cocodes);
  91. LogService.addLog(accident,"fireControl.ftl配置生成——————————————————成功");
  92. TemplateGenerator2.createFireRunsh(aid,jid);
  93. LogService.addLog(accident,"runFile.sh配置生成——————————————————成功");
  94. TemplateGenerator2.createFireInit(aid,jid);
  95. LogService.addLog(accident,"Fire.init配置生成——————————————————成功");
  96. TemplateGenerator2.createFireEsccapeControl(aid,jid);
  97. LogService.addLog(accident,"FireEscape.control配置生成——————————————————成功");
  98. exeFire2(aid,jid);
  99. }
  100. if(accident.getStype().equals("Water")){
  101. // TemplateGenerator.createGeometry(aid,jid);//生成几何文件
  102. TemplateGenerator2.createGeometry(aid,jid);
  103. TemplateGenerator2.createEscape(aid,jid);
  104. TemplateGenerator2.createWaterControl(aid,jid,totaltime,dt,dx,reportstep,interactionstep);
  105. LogService.addLog(accident,"water.control配置生成——————————————————成功");
  106. TemplateGenerator2.createWaterRunsh(aid,jid);
  107. LogService.addLog(accident,"runWater.sh配置生成——————————————————成功");
  108. TemplateGenerator2.createWaterInit(aid,jid);
  109. LogService.addLog(accident,"water.init配置生成——————————————————成功");
  110. TemplateGenerator2.createWaterEsccapeControl(aid,jid);
  111. LogService.addLog(accident,"waterEscape.control配置生成——————————————————成功");
  112. exeWater2(aid,jid);
  113. }
  114. if(accident.getStype().equals("Gass1")) {//瓦斯爆炸一维
  115. TemplateGenerator2.createGeometry(aid,jid);
  116. TemplateGenerator2.createEscape(aid,jid);
  117. TemplateGenerator2.createGassEsccapeControl(aid,jid);
  118. DGasMapper gasMapper =UtilTools.getBean(DGasMapper.class);
  119. DGasSQLBuilder gasSb = new DGasSQLBuilder();
  120. DGasSQLBuilder.Criteria gasSc = gasSb.createCriteria();
  121. gasSc.andAidEqualTo(aid);
  122. List<DGas> gases =gasMapper.selectByExample(gasSb);
  123. if(gases.isEmpty()){
  124. throw new BusinessException("EB3000004");
  125. }
  126. DGas gas =gases.get(0);
  127. /**
  128. * 一维文件生成
  129. */
  130. TemplateGenerator.createGas1Init(aid,jid,gas.getId());
  131. TemplateGenerator.createGass1Runsh(aid,jid);
  132. TemplateGenerator.createGas1Control(aid,jid,totaltime,dt,dx,reportstep,interactionstep,cocodes);
  133. //执行文件
  134. exeGass2(aid,jid);
  135. }
  136. if(accident.getStype().equals("Gass")){//瓦斯爆炸
  137. TemplateGenerator2.createGeometry(aid,jid);
  138. TemplateGenerator2.createEscape(aid,jid);
  139. DGasMapper gasMapper =UtilTools.getBean(DGasMapper.class);
  140. DGasSQLBuilder gasSb = new DGasSQLBuilder();
  141. DGasSQLBuilder.Criteria gasSc = gasSb.createCriteria();
  142. gasSc.andAidEqualTo(aid);
  143. List<DGas> gases =gasMapper.selectByExample(gasSb);
  144. if(gases.isEmpty()){
  145. throw new BusinessException("EB3000004");
  146. }
  147. DGas gas =gases.get(0);
  148. // for (DGas gas: gases) {
  149. TemplateGenerator.createGasControl(aid,jid,totaltime,dt,dx,reportstep,interactionstep,cocodes);
  150. TemplateGenerator.createGasInit(aid,jid,gas.getId());
  151. TemplateGenerator.createGassRunsh(aid,jid);
  152. TemplateGenerator2.createGassEsccapeControl(aid,jid);
  153. //文件迁移
  154. //网格文件
  155. SysFileMapper sysFileMapper = UtilTools.getBean(SysFileMapper.class);
  156. SysFile gf = sysFileMapper.selectByPrimaryKey(gas.getGfid());
  157. if (gf == null) {
  158. throw new BusinessException("EB3100020");
  159. }
  160. cpFile(XIFileUtils.getRootPathStr() + MFConstant.separator + gf.getFilepath()
  161. ,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas"+ "/"+gf.getFilename());
  162. //边界
  163. SysFile bf = sysFileMapper.selectByPrimaryKey(gas.getBfid());
  164. if (bf == null) {
  165. throw new BusinessException("EB3100021");
  166. }
  167. cpFile(XIFileUtils.getRootPathStr() + MFConstant.separator + bf.getFilepath()
  168. ,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/"+bf.getFilename());
  169. cpFile("/home/disaster/gas/bin/gas_mod.Lewis_2"
  170. ,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/gas_mod.Lewis_2");
  171. cpFile("/home/disaster/gas/bin/reac_mod.fluent_CH4_Air_5x1"
  172. ,TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/reac_mod.fluent_CH4_Air_5x1");
  173. //执行文件
  174. exeGass2(aid,jid);
  175. // }
  176. }
  177. }
  178. private DJob CreateJob(Integer aid, String totaltime, String dt, String dx, String reportstep, String interactionstep, String acctime) {
  179. DJob job =new DJob();
  180. job.setAid(aid);
  181. job.setAcctime(acctime);
  182. job.setTotaltime(totaltime);
  183. job.setDt(dt);
  184. job.setDx(dx);
  185. job.setReportstep(reportstep);
  186. job.setInteractionstep(interactionstep);
  187. job.setStarttime(XIDateTimeUtils.getNowStr());
  188. job.setState("0");//未执行
  189. return job;
  190. }
  191. /**
  192. * 任务成功
  193. * @param jid
  194. * @return
  195. */
  196. private void JobSucces(Integer jid) {
  197. System.out.println("JobSucces--------start");
  198. DJobMapper dJobDao= UtilTools.getBean(DJobMapper.class);
  199. DJob job =dJobDao.selectByPrimaryKey(jid);
  200. job.setEndtime(XIDateTimeUtils.getNowStr());
  201. job.setState("1");//完成
  202. dJobDao.updateByPrimaryKey(job);
  203. System.out.println("JobSucces--------end");
  204. }
  205. /**
  206. * 任务失败
  207. * @param jid
  208. * @return
  209. */
  210. private void JobError(Integer jid) {
  211. DJobMapper dJobDao= UtilTools.getBean(DJobMapper.class);
  212. DJob job =dJobDao.selectByPrimaryKey(jid);
  213. job.setEndtime(XIDateTimeUtils.getNowStr());
  214. job.setState("-1");//任务失败
  215. dJobDao.updateByPrimaryKey(job);
  216. }
  217. private DJob getNewJob(Integer aid, DJobMapper dJobDao) {
  218. DJobSQLBuilder jsb = new DJobSQLBuilder();
  219. DJobSQLBuilder.Criteria jsc =jsb.createCriteria();
  220. jsc.andAidEqualTo(aid);
  221. jsb.setOrderByClause("starttime desc");
  222. DJob newJob= dJobDao.selectByExample(jsb).get(0);
  223. return newJob;
  224. }
  225. private void changeAccident(DAccidentMapper accidentDao, DAccident accident, Integer jid) {
  226. accident.setJid(jid);
  227. accidentDao.updateByPrimaryKey(accident);
  228. }
  229. private void initDNodeVal(Integer aid,Integer jid) {
  230. //TODO
  231. try {
  232. PtDjCgq cgq= PtdjServer.getCgq();
  233. List<PtDjResultData> data= cgq.getResult().getData();
  234. DSensorValMapper svDao =UtilTools.getBean(DSensorValMapper.class);
  235. if(data!=null && !data.isEmpty()){
  236. data.forEach(r->{
  237. DSensorVal val =new DSensorVal();
  238. val.setCreateTime(r.getCreate_time());
  239. val.setDataTime(r.getData_time());
  240. val.setMineCode(r.getMine_code());
  241. val.setAid(aid);
  242. val.setJid(jid);
  243. val.setPipes(r.getPipes());
  244. val.setPointCode(r.getPoint_code());
  245. val.setPointLocation(r.getPoint_location());
  246. val.setPointStatus(r.getPoint_status());
  247. val.setPointValue(r.getPoint_value());
  248. val.setSensorType(r.getSensor_type());
  249. val.setSensorTypeName(r.getSensor_type_name());
  250. val.setSite(r.getSite());
  251. val.setValueUnit(r.getValue_unit());
  252. val.setxCoordinate(r.getX_coordinate());
  253. val.setyCoordinate(r.getY_coordinate());
  254. val.setzCoordinate(r.getZ_coordinate());
  255. svDao.insertSelective(val);
  256. });
  257. }
  258. }catch (Exception e){
  259. e.printStackTrace();
  260. }
  261. }
  262. public void cpFile(String file1Path,String file2Path) throws IOException {
  263. Runtime runtime = Runtime.getRuntime();
  264. Process p =null;
  265. String shell ="cp -f "+file1Path+" "+ file2Path;
  266. System.out.println(shell);
  267. runtime.exec(shell);
  268. }
  269. public void saveMonitorValue(Integer aid,Integer jid) throws FileNotFoundException, BusinessException {
  270. DJobMapper dJobDao= UtilTools.getBean(DJobMapper.class);
  271. DJob job =dJobDao.selectByPrimaryKey(jid);
  272. Double stepDNum = Double.valueOf(job.getTotaltime())/Double.valueOf(job.getReportstep());
  273. Integer stepNum =stepDNum.intValue();
  274. DAccidentMapper accidentDao = UtilTools.getBean(DAccidentMapper.class);
  275. DAccident accident= accidentDao.selectByPrimaryKey(aid);
  276. List<DChecknodeVal> nVals =new ArrayList<>();
  277. List<DChecknodeValcode> nValCodes =new ArrayList<>();
  278. for (int step = 1; step <=stepNum ; step++) {
  279. String outPath="";
  280. String fileName ="";
  281. if(accident.getStype().endsWith("Fire")){
  282. outPath= TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/fire/out/monitor/";
  283. fileName ="monitorValue"+step;
  284. }
  285. if(accident.getStype().endsWith("Water")){
  286. outPath=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/water/out/monitor/";
  287. fileName ="monitorValue"+step;
  288. }
  289. if(accident.getStype().endsWith("Gass")){
  290. outPath=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/gas/out/monitor/";
  291. fileName ="monitorValue"+step;
  292. }
  293. if(accident.getStype().endsWith("Gass1")){
  294. outPath=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/gas/out/monitor/";
  295. fileName ="monitorValue"+step;
  296. }
  297. try{
  298. FileReader fileReader = new FileReader(outPath+"/"+fileName);
  299. BufferedReader reader = new BufferedReader(fileReader);
  300. String line;
  301. int linNum =1;
  302. while ((line = reader.readLine()) != null) {
  303. String[] t = line.trim().split(",");
  304. if(linNum==1){
  305. if(nValCodes.isEmpty()){
  306. DChecknodeValcode nValCode = new DChecknodeValcode();
  307. nValCode.setJid(jid);
  308. nValCode.setAid(aid);
  309. nValCode.setValCode1(t.length>1?t[1]:null);
  310. nValCode.setValCode2(t.length>2?t[2]:null);
  311. nValCode.setValCode3(t.length>3?t[3]:null);
  312. nValCode.setValCode4(t.length>4?t[4]:null);
  313. nValCode.setValCode5(t.length>5?t[5]:null);
  314. nValCode.setValCode6(t.length>6?t[6]:null);
  315. nValCodes.add(nValCode);
  316. }
  317. }else {
  318. DChecknodeVal chval=new DChecknodeVal();
  319. chval.setJid(jid);
  320. chval.setAid(aid);
  321. chval.setStep(step);
  322. chval.setChcode(t.length>0?t[0]:"");
  323. chval.setChname(getChnameByChcode(chval.getChcode()));
  324. chval.setV1(t.length>1?t[1]:"0");
  325. chval.setV2(t.length>2?t[2]:"0");
  326. chval.setV3(t.length>3?t[3]:"0");
  327. chval.setV4(t.length>4?t[4]:"0");
  328. chval.setV5(t.length>5?t[5]:"0");
  329. chval.setV6(t.length>6?t[6]:"0");
  330. nVals.add(chval);
  331. }
  332. linNum++;
  333. }
  334. fileReader.close();
  335. reader.close();
  336. }catch (Exception e){
  337. System.out.println(e);
  338. throw new BusinessException("EB3100014");
  339. }
  340. }
  341. DChecknodeValMapper valMapper =UtilTools.getBean(DChecknodeValMapper.class);
  342. DChecknodeValcodeMapper valcodeMapper =UtilTools.getBean(DChecknodeValcodeMapper.class);
  343. for (DChecknodeVal nVal:nVals) {
  344. valMapper.insertSelective(nVal);
  345. }
  346. for (DChecknodeValcode nValCode:nValCodes) {
  347. valcodeMapper.insertSelective(nValCode);
  348. }
  349. }
  350. public static String getChnameByChcode(String chcode) throws BusinessException {
  351. DChecknodeMapper chMapper = UtilTools.getBean(DChecknodeMapper.class);
  352. DChecknodeSQLBuilder sb = new DChecknodeSQLBuilder();
  353. DChecknodeSQLBuilder.Criteria sc =sb.createCriteria();
  354. sc.andChcodeEqualTo(chcode);
  355. List<DChecknode> clist = chMapper.selectByExample(sb);
  356. if(clist.isEmpty()){
  357. return "";
  358. }else{
  359. DChecknode dc =clist.get(0);
  360. return dc.getChname();
  361. }
  362. }
  363. //异步执行
  364. @SneakyThrows
  365. public void exeWater2(Integer aid,Integer jid){
  366. try {
  367. LogService.addLog(aid,jid,"Water","求解——————————————————开始");
  368. DockerExe.stopDocker(aid,"Water");
  369. DockerExe.waterExec(aid, jid, "Water");
  370. }catch (Exception e) {
  371. LogService.addLog(aid,jid,"Water","求解——————————————————失败");
  372. JobError(jid);
  373. e.printStackTrace();
  374. }
  375. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()-> {
  376. try {
  377. DockerExe.getDockerLogs(aid,"Water",new ResultCallback.Adapter<Frame>() {
  378. @Override
  379. public void onNext(Frame frame) {
  380. LogService.addLog(aid,jid,"Water",new String(frame.getPayload()));
  381. System.out.print(new String(frame.getPayload()));
  382. super.onNext(frame);
  383. }
  384. @Override
  385. public void onError(Throwable throwable) {
  386. System.err.println("日志获取失败");
  387. throwable.printStackTrace();
  388. super.onError(throwable);
  389. }
  390. @Override
  391. public void onComplete() {
  392. // LogService.addLog(aid,jid,"Water","求解——————————————————成功");
  393. System.out.println("日志获取完成");
  394. super.onComplete();
  395. }
  396. });
  397. saveMonitorValue(aid,jid);
  398. //路径保存
  399. saveWayValue(aid,jid);
  400. JobSucces(jid);
  401. LogService.addLog(aid,jid,"Water","求解——————————————————成功");
  402. } catch (Exception e) {
  403. LogService.addLog(aid,jid,"Water","求解——————————————————失败");
  404. JobError(jid);
  405. e.printStackTrace();
  406. }
  407. return null;
  408. });
  409. }
  410. //异步执行
  411. @SneakyThrows
  412. public void exeWater(Integer aid,Integer jid) throws Exception{
  413. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()->{
  414. try {
  415. LogService.addLog(aid,jid,"Water","求解——————————————————开始");
  416. // Runtime runtime = Runtime.getRuntime();
  417. // Process p =null;
  418. // p= runtime.exec("sh "+TemplateGenerator.BPATH+"/"+aid+"/"+jid+"/water"+"/"+"runWater.sh");
  419. // InputStream fis = p.getInputStream();
  420. // InputStreamReader isr = new InputStreamReader(fis);
  421. // BufferedReader br = new BufferedReader(isr);
  422. // String line = null;
  423. // while ((line = br.readLine()) != null) {
  424. // LogService.addLog(aid,jid,"Water",line);
  425. // System.out.println(line);
  426. // }
  427. ProcessBuilder processBuilder = new ProcessBuilder("sh",TemplateGenerator.BPATH+"/"+aid+"/"+jid+"/water"+"/"+"runWater.sh");
  428. Process process = processBuilder.start();
  429. processBuilder.redirectErrorStream(true); // 将错误流合并到标准输出流
  430. // 读取命令的输出
  431. BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
  432. String line = null;
  433. while ((line = reader.readLine()) != null) {
  434. LogService.addLog(aid,jid,"Water",line);
  435. System.out.println(line);
  436. }
  437. // 等待命令执行完成
  438. int exitCode = process.waitFor();
  439. System.out.println("\nExited with code: " + exitCode);
  440. saveMonitorValue(aid,jid);
  441. //路径保存
  442. saveWayValue(aid,jid);
  443. JobSucces(jid);
  444. LogService.addLog(aid,jid,"Water","求解——————————————————成功");
  445. } catch (IOException | BusinessException | InterruptedException e) {
  446. LogService.addLog(aid,jid,"Water","求解——————————————————失败");
  447. JobError(jid);
  448. e.printStackTrace();
  449. }
  450. return null;
  451. });
  452. }
  453. //异步执行
  454. @SneakyThrows
  455. public void exeFire2(Integer aid,Integer jid) throws Exception {
  456. try {
  457. LogService.addLog(aid,jid,"Fire","求解——————————————————开始");
  458. DockerExe.stopDocker(aid,"Fire");
  459. DockerExe.fireExec(aid, jid, "Fire");
  460. }catch (Exception e) {
  461. LogService.addLog(aid,jid,"Fire","求解——————————————————失败");
  462. JobError(jid);
  463. e.printStackTrace();
  464. }
  465. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()-> {
  466. try {
  467. DockerExe.getDockerLogs(aid,"Fire",new ResultCallback.Adapter<Frame>() {
  468. @Override
  469. public void onNext(Frame frame) {
  470. LogService.addLog(aid,jid,"Fire",new String(frame.getPayload()));
  471. System.out.print(new String(frame.getPayload()));
  472. super.onNext(frame);
  473. }
  474. @Override
  475. public void onError(Throwable throwable) {
  476. System.err.println("日志获取失败");
  477. throwable.printStackTrace();
  478. super.onError(throwable);
  479. }
  480. @Override
  481. public void onComplete() {
  482. System.out.println("日志获取完成");
  483. super.onComplete();
  484. }
  485. });
  486. //监测点数据保存
  487. saveMonitorValue(aid,jid);
  488. //路径保存
  489. saveWayValue(aid,jid);
  490. LogService.addLog(aid,jid,"Fire","求解——————————————————成功");
  491. JobSucces(jid);
  492. } catch (Exception e) {
  493. LogService.addLog(aid,jid,"Fire","求解——————————————————失败");
  494. JobError(jid);
  495. e.printStackTrace();
  496. }
  497. return null;
  498. });
  499. }
  500. //异步执行
  501. @SneakyThrows
  502. public void exeFire(Integer aid,Integer jid) throws Exception{
  503. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()->{
  504. try {
  505. Runtime runtime = Runtime.getRuntime();
  506. Process p =null;
  507. LogService.addLog(aid,jid,"Fire","求解——————————————————开始");
  508. p= runtime.exec("sh "+TemplateGenerator.BPATH+"/"+
  509. aid+"/"+jid+"/fire"+"/"+"runFile.sh");
  510. InputStream fis = p.getInputStream();
  511. InputStreamReader isr = new InputStreamReader(fis);
  512. BufferedReader br = new BufferedReader(isr);
  513. String line = null;
  514. while ((line = br.readLine()) != null) {
  515. LogService.addLog(aid,jid,"Fire",line);
  516. System.out.println(line);
  517. }
  518. //监测点数据保存
  519. saveMonitorValue(aid,jid);
  520. //路径保存
  521. saveWayValue(aid,jid);
  522. LogService.addLog(aid,jid,"Fire","求解——————————————————成功");
  523. JobSucces(jid);
  524. } catch (IOException | BusinessException e) {
  525. LogService.addLog(aid,jid,"Fire","求解——————————————————失败");
  526. e.printStackTrace();
  527. JobError(jid);
  528. }
  529. return null;
  530. });
  531. }
  532. //异步执行
  533. @SneakyThrows
  534. public void exeGass2(Integer aid, Integer jid) throws Exception{
  535. try {
  536. LogService.addLog(aid,jid,"gass","求解——————————————————开始");
  537. DockerExe.stopDocker(aid,"gass");
  538. DockerExe.fireGass(aid, jid, "gass");
  539. }catch (Exception e) {
  540. LogService.addLog(aid,jid,"gass","求解——————————————————失败");
  541. JobError(jid);
  542. e.printStackTrace();
  543. }
  544. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()-> {
  545. try {
  546. DockerExe.getDockerLogs(aid,"gass",new ResultCallback.Adapter<Frame>() {
  547. @Override
  548. public void onNext(Frame frame) {
  549. LogService.addLog(aid,jid,"gass",new String(frame.getPayload()));
  550. System.out.print(new String(frame.getPayload()));
  551. super.onNext(frame);
  552. }
  553. @Override
  554. public void onError(Throwable throwable) {
  555. System.err.println("日志获取失败");
  556. throwable.printStackTrace();
  557. super.onError(throwable);
  558. }
  559. @Override
  560. public void onComplete() {
  561. System.out.println("日志获取完成");
  562. super.onComplete();
  563. }
  564. });
  565. //监测点数据保存
  566. saveMonitorValue(aid,jid);
  567. //路径保存
  568. saveWayValue(aid,jid);
  569. LogService.addLog(aid,jid,"gass","求解——————————————————成功");
  570. JobSucces(jid);
  571. } catch (Exception e) {
  572. LogService.addLog(aid,jid,"gass","求解——————————————————失败");
  573. JobError(jid);
  574. e.printStackTrace();
  575. }
  576. return null;
  577. });
  578. }
  579. //异步执行
  580. @SneakyThrows
  581. public void exeGass(Integer aid, Integer jid) throws Exception{
  582. CompletableFuture<Void> cf = CompletableFuture.supplyAsync(()->{
  583. try {
  584. Runtime runtime = Runtime.getRuntime();
  585. Process p =null;
  586. LogService.addLog(aid,jid,"gass","求解——————————————————开始");
  587. p= runtime.exec("sh "+TemplateGenerator.BPATH + "/" + aid + "/" + jid + "/" + "/gas" + "/run.sh");
  588. InputStream fis = p.getInputStream();
  589. InputStreamReader isr = new InputStreamReader(fis);
  590. BufferedReader br = new BufferedReader(isr);
  591. String line = null;
  592. while ((line = br.readLine()) != null) {
  593. LogService.addLog(aid,jid,"gass",line);
  594. System.out.println(line);
  595. }
  596. //监测点数据保存
  597. saveMonitorValue(aid,jid);
  598. //路径保存
  599. saveWayValue(aid,jid);
  600. LogService.addLog(aid,jid,"gass","求解——————————————————成功");
  601. JobSucces(jid);
  602. } catch (IOException | BusinessException e) {
  603. LogService.addLog(aid,jid,"gass","求解——————————————————失败");
  604. e.printStackTrace();
  605. JobError(jid);
  606. }
  607. return null;
  608. });
  609. }
  610. public void saveWayValue(Integer aid,Integer jid) throws FileNotFoundException, BusinessException {
  611. DAccidentMapper accidentDao = UtilTools.getBean(DAccidentMapper.class);
  612. DAccident accident= accidentDao.selectByPrimaryKey(aid);
  613. String SafetyFile="";
  614. if(accident.getStype().endsWith("Fire")){
  615. SafetyFile= TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/fire/out/Safety";
  616. }
  617. if(accident.getStype().endsWith("Water")){
  618. SafetyFile=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/water/out/Safety";
  619. }
  620. if(accident.getStype().endsWith("Gass")){
  621. SafetyFile=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/gas/out/Safety";
  622. }
  623. if(accident.getStype().endsWith("Gass1")){
  624. SafetyFile=TemplateGenerator.BPATH+"/"+aid+"/"+accident.getJid()+"/gas/out/Safety";
  625. }
  626. List<DWayResult> wayResults =new ArrayList<>();
  627. List<DWaynodeResult> wayNodeResults =new ArrayList<>();
  628. FileReader fileReader = new FileReader(SafetyFile);
  629. BufferedReader reader = new BufferedReader(fileReader);
  630. /**
  631. * person1,line1,danger,1
  632. * nodes29,987.7211,10.0000,1800.0000
  633. * person1,line2,safety,0
  634. */
  635. String line;
  636. try{
  637. while ((line = reader.readLine()) != null) {
  638. String[] t = line.trim().split(",");
  639. DWayResult result = new DWayResult();
  640. result.setAid(aid);
  641. result.setJid(jid);
  642. result.setPerson(t.length>0?t[0]:"0");
  643. result.setWcode(t.length>1?t[1]:"0");
  644. result.setSafety(t.length>2?t[2]:"0");
  645. result.setFlag(t.length>3?t[3]:"0");
  646. if("平台".equals(accident.getSource())){
  647. DMwayMapper mwDao = UtilTools.getBean(DMwayMapper.class);
  648. Integer mwid = Integer.valueOf(result.getWcode().replace("s",""));
  649. DMway mw = mwDao.selectByPrimaryKey(mwid);
  650. mw.setLevel(result.getFlag());
  651. mwDao.updateByPrimaryKey(mw);
  652. }
  653. int i =0;
  654. if(result.getSafety().equals("danger")||Integer.valueOf(result.getFlag())>0){
  655. while ((line = reader.readLine()) != null) {
  656. i++;
  657. String[] t1 = line.trim().split(",");
  658. DWaynodeResult wnr =new DWaynodeResult();
  659. wnr.setAid(aid);
  660. wnr.setJid(jid);
  661. wnr.setWcode(result.getWcode());
  662. wnr.setNcode(t1.length>0?t1[0]:"0");
  663. wnr.setV1(t1.length>0?t1[1]:"0");
  664. wnr.setV2(t1.length>0?t1[2]:"0");
  665. wnr.setV3(t1.length>0?t1[3]:"0");
  666. wayNodeResults.add(wnr);
  667. if(i==Integer.valueOf(result.getFlag())){
  668. break;
  669. }
  670. }
  671. }
  672. wayResults.add(result);
  673. }
  674. fileReader.close();
  675. reader.close();
  676. }catch (Exception e){
  677. System.out.println(e);
  678. throw new BusinessException("EB3100014");
  679. }
  680. DWayResultMapper rMapper =UtilTools.getBean(DWayResultMapper.class);
  681. for (DWayResult r:wayResults) {
  682. rMapper.insertSelective(r);
  683. }
  684. DWaynodeResultMapper wnrMapper = UtilTools.getBean(DWaynodeResultMapper.class);
  685. for (DWaynodeResult r:wayNodeResults) {
  686. wnrMapper.insertSelective(r);
  687. }
  688. }
  689. /**
  690. *
  691. *
  692. *
  693. *
  694. * 基础系统,“灾情演练”业务前处理
  695. */
  696. public void preTransFlow() throws Exception {
  697. this.validater();
  698. }
  699. /**
  700. * 基础系统,“灾情演练”业务后处理
  701. */
  702. public void afterTransFlow() throws Exception {
  703. }
  704. /**
  705. * 基础系统,“灾情演练”逻辑入口处理方法
  706. */
  707. @SuppressWarnings("rawtypes")
  708. @Override
  709. public Map execute(Map vars) throws Exception {
  710. this.setTransMap(vars);
  711. preTransFlow();// 执行业务开始的规则检查和校验
  712. transExecute();// 执行核心业务段
  713. afterTransFlow();// 执行核心逻辑完成后的收尾逻辑
  714. return this.getTransMap();
  715. }
  716. public static void main(String[] args) throws FileNotFoundException, BusinessException {
  717. String SafetyFile ="D://Safety";
  718. Integer aid=1;
  719. Integer jid =2;
  720. List<DWayResult> wayResults =new ArrayList<>();
  721. List<DWaynodeResult> wayNodeResults =new ArrayList<>();
  722. FileReader fileReader = new FileReader(SafetyFile);
  723. BufferedReader reader = new BufferedReader(fileReader);
  724. /**
  725. * person1,line1,danger,1
  726. * nodes29,987.7211,10.0000,1800.0000
  727. * person1,line2,safety,0
  728. */
  729. String line;
  730. try{
  731. while ((line = reader.readLine()) != null) {
  732. String[] t = line.trim().split(",");
  733. DWayResult result = new DWayResult();
  734. result.setAid(aid);
  735. result.setJid(jid);
  736. result.setPerson(t.length>0?t[0]:"0");
  737. result.setWcode(t.length>1?t[1]:"0");
  738. result.setSafety(t.length>2?t[2]:"0");
  739. result.setFlag(t.length>3?t[3]:"0");
  740. int i =0;
  741. if(result.getSafety().equals("danger")||Integer.valueOf(result.getFlag())>0){
  742. while ((line = reader.readLine()) != null) {
  743. i++;
  744. String[] t1 = line.trim().split(",");
  745. DWaynodeResult wnr =new DWaynodeResult();
  746. wnr.setAid(aid);
  747. wnr.setJid(jid);
  748. wnr.setWcode(result.getWcode());
  749. wnr.setNcode(t1.length>0?t1[0]:"0");
  750. wnr.setV1(t1.length>0?t1[1]:"0");
  751. wnr.setV2(t1.length>0?t1[2]:"0");
  752. wnr.setV3(t1.length>0?t1[3]:"0");
  753. wayNodeResults.add(wnr);
  754. if(i==Integer.valueOf(result.getFlag())){
  755. break;
  756. }
  757. }
  758. }
  759. wayResults.add(result);
  760. }
  761. fileReader.close();
  762. reader.close();
  763. }catch (Exception e){
  764. System.out.println(e);
  765. throw new BusinessException("EB3100014");
  766. }
  767. System.out.println(wayResults);
  768. System.out.println(wayNodeResults);
  769. }
  770. }