| | |
| | | package com.se.simu.service; |
| | | |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.mathworks.toolbox.javabuilder.MWCharArray; |
| | | import com.se.simu.config.PropertiesConfig; |
| | | import com.se.simu.domain.dto.ConfigDto; |
| | | import com.se.simu.domain.po.DataPo; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.*; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 内涝求解器服务类 |
| | | * |
| | | * @author WWW |
| | | * @date 2024-09-29 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @SuppressWarnings("ALL") |
| | |
| | | @Resource |
| | | PropertiesConfig config; |
| | | |
| | | /** |
| | | * 创建降雨文件 |
| | | * <p> |
| | | * https://blog.csdn.net/Dark_Drgon/article/details/139739924 |
| | | * C:\Program Files\matlab\R2020a\runtime\win64 |
| | | */ |
| | | static Rainfall _rainfall = null; |
| | | |
| | | public static Rainfall getTainfall() throws Exception { |
| | | if (null == _rainfall) { |
| | | _rainfall = new Rainfall(); |
| | | } |
| | | |
| | | return _rainfall; |
| | | } |
| | | |
| | | public void createRainFile(DataPo data) throws Exception { |
| | | String filePath = config.getInPath() + File.separator + data.getInPath() + File.separator + config.getRaingage(); |
| | | String startTime = StringHelper.YMDHMS_FORMAT.format(data.getStartTime()); |
| | | |
| | | MWCharArray file = new MWCharArray(filePath); |
| | | MWCharArray station = new MWCharArray(config.getRainStation()); |
| | | MWCharArray time = new MWCharArray(startTime); |
| | | //MWCharArray file = new MWCharArray(filePath); |
| | | //MWCharArray station = new MWCharArray(config.getRainStation()); |
| | | //MWCharArray time = new MWCharArray(startTime); |
| | | |
| | | try { |
| | | Rainfall rainfall = new Rainfall(); |
| | | //rainfall('D:\simu\in\RainGage.dat','Tongzhou','2024-09-29 00:00:00',60,0.5,10) |
| | | //Object[] rs = rainfall.rainfall(0, file, station, time, data.getDuration(), 0.5, config.getRainPeriod()); |
| | | List args = new ArrayList<Object>(); |
| | | args.add(filePath); |
| | | args.add(config.getRainStation()); |
| | | args.add(startTime); |
| | | args.add(data.getDuration()); |
| | | args.add(0.5); |
| | | args.add(config.getRainPeriod()); |
| | | Rainfall rainfall = getTainfall(); |
| | | //rainfall('D:\simu\in\RainGage.dat','Tongzhou','2024-09-29 00:00:00',60,0.5,10) |
| | | //Object[] rs = rainfall.rainfall(filePath, config.getRainStation(), startTime, Double.valueOf(data.getDuration()), 0.5, config.getRainPeriod()); |
| | | |
| | | rainfall.rainfall(new ArrayList(), args); |
| | | } finally { |
| | | file.dispose(); |
| | | station.dispose(); |
| | | time.dispose(); |
| | | } |
| | | //rainfall('D:\simu\in\RainGage.dat','Tongzhou','2024-07-01 00:00:00',60,60) |
| | | Object[] rs = rainfall.rainfall(filePath, config.getRainStation(), startTime, Double.valueOf(data.getDuration()), data.getTotal()); |
| | | |
| | | // file.dispose(); |
| | | //station.dispose(); |
| | | //time.dispose(); |
| | | } |
| | | |
| | | public void createConfig(DataPo data) throws IOException { |
| | |
| | | public String callExe(DataPo data) throws Exception { |
| | | String cmd = String.format("%s %d %s", config.getSolverBat(), WebHelper.getCpuCores(), data.getInPath() + ".json"); |
| | | |
| | | return exec(cmd); |
| | | //return exec(cmd); |
| | | return execCmdLine(cmd); |
| | | } |
| | | |
| | | private String exec(String cmd) throws Exception { |
| | |
| | | try { |
| | | // new String[] { "/bin/sh", "-c", cmd } |
| | | process = Runtime.getRuntime().exec(cmd); |
| | | nr = new BufferedReader(new InputStreamReader(process.getInputStream())); |
| | | er = new BufferedReader(new InputStreamReader(process.getErrorStream())); |
| | | |
| | | String errorLine; |
| | | while ((errorLine = er.readLine()) != null) { |
| | | log.warn(errorLine); |
| | | } |
| | | nr = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK")); |
| | | er = new BufferedReader(new InputStreamReader(process.getErrorStream(), "GBK")); |
| | | |
| | | String line; |
| | | StringBuilder sb = new StringBuilder(); |
| | | while ((line = nr.readLine()) != null) { |
| | | sb.append(line); |
| | | log.info(line); |
| | | } |
| | | |
| | | // 等待程序执行结束并输出状态 |
| | | String errorLine; |
| | | while ((errorLine = er.readLine()) != null) { |
| | | log.error(errorLine); |
| | | } |
| | | |
| | | int exitCode = process.waitFor(); |
| | | |
| | | return sb.toString(); |
| | |
| | | } |
| | | } |
| | | |
| | | private String execCmdLine(String cmd) throws IOException, InterruptedException { |
| | | Process process = Runtime.getRuntime().exec(cmd); |
| | | |
| | | new Thread(() -> { |
| | | InputStreamReader ir = null; |
| | | BufferedReader br = null; |
| | | try { |
| | | ir = new InputStreamReader(process.getErrorStream(), "GBK"); |
| | | br = new BufferedReader(ir); |
| | | |
| | | String line; |
| | | while ((line = br.readLine()) != null) { |
| | | log.error(line); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (null != br) br.close(); |
| | | if (null != ir) ir.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }).start(); |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | //new Thread(() -> { |
| | | InputStreamReader ir = null; |
| | | BufferedReader br = null; |
| | | try { |
| | | ir = new InputStreamReader(process.getInputStream(), "GBK"); |
| | | br = new BufferedReader(ir); |
| | | |
| | | String line; |
| | | while ((line = br.readLine()) != null) { |
| | | log.info(line); |
| | | sb.append(line); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (null != br) br.close(); |
| | | if (null != ir) ir.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | //}).start(); |
| | | |
| | | process.waitFor(); |
| | | process.destroy(); |
| | | |
| | | return sb.toString(); |
| | | } |
| | | |
| | | public void copeWaterFiles() { |
| | | // |
| | | } |
| | | |
| | | public void copeDrainFiles() { |
| | | // |
| | | public String copeDrainFiles(DataPo data) throws Exception { |
| | | String time = StringHelper.YMDHMS_FORMAT.format(data.getStartTime()); |
| | | String inPath = config.getInPath() + File.separator + data.getInPath(); |
| | | String sww = inPath + File.separator + ".save" + File.separator + data.getInPath() + ".sww"; |
| | | |
| | | String cmd = config.getSww2tifBat() + " " + sww + " \"" + time + "\" " + data.getEpsg() + " " + inPath; |
| | | |
| | | return exec(cmd); |
| | | } |
| | | public String copeSwwDrainFiles(DataPo data) throws Exception { |
| | | String time = StringHelper.YMDHMS_FORMAT.format(data.getStartTime()); |
| | | String inPath = "H:\\simu\\semout"; |
| | | String sww = "H:\\simu\\semout\\testsem\\.out\\" + "testsem.sww"; |
| | | |
| | | String cmd = config.getSww2tifBat() + " " + sww + " \"" + time + "\" " + data.getEpsg() + " " + inPath; |
| | | |
| | | return exec(cmd); |
| | | } |
| | | } |