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.*; /** * 内涝求解器服务类 * * @author WWW * @date 2024-09-29 */ @Slf4j @Service @SuppressWarnings("ALL") public class UwService { @Resource PropertiesConfig config; 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()); Rainfall rainfall = new Rainfall(); rainfall.rainfall(filePath, config.getRainStation(), startTime, data.getDuration(), 0.5, config.getRainPeriod()); } 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); } 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())); er = new BufferedReader(new InputStreamReader(process.getErrorStream())); String errorLine; while ((errorLine = er.readLine()) != null) { log.warn(errorLine); } String line; StringBuilder sb = new StringBuilder(); while ((line = nr.readLine()) != null) { sb.append(line); } // 等待程序执行结束并输出状态 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); } } } public void copeWaterFiles() { // } public void copeDrainFiles() { // } }