package com.se.simu.service; import cn.hutool.json.JSONUtil; import com.se.simu.config.PropertiesConfig; import com.se.simu.domain.dto.ConfigDto; import com.se.simu.domain.po.DataPo; import com.se.simu.helper.StringHelper; import com.se.simu.helper.WebHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import com.se.simu.Rainfall; import javax.annotation.Resource; import java.io.*; @Slf4j @Service @SuppressWarnings("ALL") public class UwService { @Resource PropertiesConfig config; 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); 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('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 { ConfigDto dto = new ConfigDto(); dto.setProperties(data.getInPath(), data.getStartTime(), data.getDuration(), config); String json = JSONUtil.toJsonPrettyStr(dto); String filePath = config.getInPath() + File.separator + data.getInPath() + ".json"; FileWriter fw = new FileWriter(filePath); BufferedWriter bw = new BufferedWriter(fw); bw.write(json); bw.close(); fw.close(); } 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 execCmdLine(cmd); } private String exec(String cmd) throws Exception { Process process = null; BufferedReader nr = null; BufferedReader er = null; try { // new String[] { "/bin/sh", "-c", cmd } process = Runtime.getRuntime().exec(cmd); 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(); } catch (Exception ex) { throw ex; } finally { closeReader(er); closeReader(nr); closeProcess(process); } } private static void closeReader(Reader reader) { if (null != reader) { try { reader.close(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } } private static void closeProcess(Process process) { if (null != process) { try { process.destroy(); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } } 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 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); } }