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);
|
}
|
}
|