From 9db8d773af4f886cf0652b0ce303631a90692a50 Mon Sep 17 00:00:00 2001 From: wuww <252740454@qq.com> Date: 星期日, 04 五月 2025 14:28:24 +0800 Subject: [PATCH] 调用UW的Bat --- src/main/java/com/se/nsl/service/UwService.java | 4 src/main/java/com/se/nsl/service/ResolveService.java | 89 +++++++++++++++++++++ data/init.sql | 3 src/main/java/com/se/nsl/domain/vo/ConfigVo.java | 112 ++++++++++++++++++++++++++++ 4 files changed, 203 insertions(+), 5 deletions(-) diff --git a/data/init.sql b/data/init.sql index 56fe366..bf89871 100644 --- a/data/init.sql +++ b/data/init.sql @@ -46,7 +46,8 @@ -- insert into nsl.simu (name, service_name, type, area_type, area_name, status, geom) values ('棰勬祴妯℃嫙-0416', '20250416100000', 1, 1, '澶у叴鍖�', 0, ST_GeomFromText('MULTIPOLYGON(((116.666748 39.639859,116.659403 39.626287,116.665956 39.654698,116.666748 39.639859)))')); select id,name,service_name,type,area_type,area_name,status,result,create_time,update_time,bak,data,st_astext(geom) from nsl.simu where id > 0 order by id desc; --- update nsl.simu set status = 0, area_name = '鎴垮北鍖�', data = '{"startTime":"2025-05-01 11:10:54","type":3,"total":50,"duration":6,"intensity":70,"history":"XX骞�50mm闄嶉洦"}' where id = 24; +-- update nsl.simu set status=0,area_name='鎴垮北鍖�',result=null,data = '{"startTime":"2025-05-01 11:10:54","type":3,"total":50,"duration":6,"intensity":70,"history":"XX骞�50mm闄嶉洦"}' where id = 17; +-- {"startTime":"2025-05-01 10:51:33","type":3,"total":1025,"duration":96,"intensity":78.5,"rainfalls":[{"time":"2023-07-29 22:00:00","intensity":"2","total":"2"},{"time":"2023-07-29 23:00:00","intensity":"2","total":"4"},{"time":"2023-07-30 00:00:00","intensity":"3.5","total":"7.5"},{"time":"2023-07-30 01:00:00","intensity":"2.5","total":"10"},{"time":"2023-07-30 02:00:00","intensity":"2","total":"244.5"},{"time":"2023-07-30 03:00:00","intensity":"3.5","total":"339.5"},{"time":"2023-07-30 04:00:00","intensity":"6","total":"345.5"},{"time":"2023-07-30 05:00:00","intensity":"10.5","total":"356"},{"time":"2023-07-30 06:00:00","intensity":"4.5","total":"360.5"},{"time":"2023-07-30 07:00:00","intensity":"5.5","total":"366"},{"time":"2023-07-30 08:00:00","intensity":"13","total":"379"},{"time":"2023-07-30 09:00:00","intensity":"17","total":"396"},{"time":"2023-07-30 10:00:00","intensity":"15.5","total":"25.5"},{"time":"2023-07-30 11:00:00","intensity":"17.5","total":"43"},{"time":"2023-07-30 12:00:00","intensity":"16","total":"59"},{"time":"2023-07-30 13:00:00","intensity":"18.5","total":"77.5"},{"time":"2023-07-30 14:00:00","intensity":"13","total":"90.5"},{"time":"2023-07-30 15:00:00","intensity":"23.5","total":"114"},{"time":"2023-07-30 16:00:00","intensity":"28.5","total":"142.5"},{"time":"2023-07-30 17:00:00","intensity":"24.5","total":"167"},{"time":"2023-07-30 18:00:00","intensity":"43","total":"210"},{"time":"2023-07-30 19:00:00","intensity":"32.5","total":"242.5"},{"time":"2023-07-30 20:00:00","intensity":"49.5","total":"294"},{"time":"2023-07-30 21:00:00","intensity":"18.5","total":"312.5"},{"time":"2023-07-30 22:00:00","intensity":"8","total":"320.5"},{"time":"2023-07-30 23:00:00","intensity":"15.5","total":"336"},{"time":"2023-07-31 00:00:00","intensity":"12.5","total":"408.5"},{"time":"2023-07-31 01:00:00","intensity":"15","total":"423.5"},{"time":"2023-07-31 02:00:00","intensity":"4","total":"537"},{"time":"2023-07-31 03:00:00","intensity":"12","total":"647"},{"time":"2023-07-31 04:00:00","intensity":"5","total":"652"},{"time":"2023-07-31 05:00:00","intensity":"36.5","total":"688.5"},{"time":"2023-07-31 06:00:00","intensity":"18","total":"706.5"},{"time":"2023-07-31 07:00:00","intensity":"26","total":"732.5"},{"time":"2023-07-31 08:00:00","intensity":"38","total":"770.5"},{"time":"2023-07-31 09:00:00","intensity":"39.5","total":"810"},{"time":"2023-07-31 10:00:00","intensity":"38","total":"461.5"},{"time":"2023-07-31 11:00:00","intensity":"27","total":"488.5"},{"time":"2023-07-31 12:00:00","intensity":"5.5","total":"494"},{"time":"2023-07-31 13:00:00","intensity":"2.5","total":"496.5"},{"time":"2023-07-31 14:00:00","intensity":"4","total":"500.5"},{"time":"2023-07-31 15:00:00","intensity":"8","total":"508.5"},{"time":"2023-07-31 16:00:00","intensity":"8.5","total":"517"},{"time":"2023-07-31 17:00:00","intensity":"0.5","total":"517.5"},{"time":"2023-07-31 18:00:00","intensity":"10","total":"527.5"},{"time":"2023-07-31 19:00:00","intensity":"5.5","total":"533"},{"time":"2023-07-31 20:00:00","intensity":"20.5","total":"557.5"},{"time":"2023-07-31 21:00:00","intensity":"25","total":"582.5"},{"time":"2023-07-31 22:00:00","intensity":"25.5","total":"608"},{"time":"2023-07-31 23:00:00","intensity":"27","total":"635"},{"time":"2023-08-01 00:00:00","intensity":"78.5","total":"888.5"},{"time":"2023-08-01 01:00:00","intensity":"32.5","total":"921"},{"time":"2023-08-01 02:00:00","intensity":"9.5","total":"956.5"},{"time":"2023-08-01 03:00:00","intensity":"6.5","total":"981.5"},{"time":"2023-08-01 04:00:00","intensity":"22.5","total":"1004"},{"time":"2023-08-01 05:00:00","intensity":"1","total":"1005"},{"time":"2023-08-01 06:00:00","intensity":"0","total":"1005"},{"time":"2023-08-01 07:00:00","intensity":"8","total":"1013"},{"time":"2023-08-01 08:00:00","intensity":"6","total":"1019"},{"time":"2023-08-01 09:00:00","intensity":"5.5","total":"1024.5"},{"time":"2023-08-01 10:00:00","intensity":"3","total":"924"},{"time":"2023-08-01 11:00:00","intensity":"5.5","total":"929.5"},{"time":"2023-08-01 12:00:00","intensity":"8.5","total":"938"},{"time":"2023-08-01 13:00:00","intensity":"8","total":"946"},{"time":"2023-08-01 14:00:00","intensity":"0.5","total":"946.5"},{"time":"2023-08-01 16:00:00","intensity":"0","total":"946.5"},{"time":"2023-08-01 18:00:00","intensity":"0.5","total":"947"},{"time":"2023-08-01 20:00:00","intensity":"17","total":"973.5"},{"time":"2023-08-01 21:00:00","intensity":"1","total":"974.5"},{"time":"2023-08-01 22:00:00","intensity":"0.5","total":"975"},{"time":"2023-08-02 00:00:00","intensity":"0","total":"1024.5"},{"time":"2023-08-02 02:00:00","intensity":"0","total":"1025"},{"time":"2023-08-02 03:00:00","intensity":"0.5","total":"1025.5"},{"time":"2023-08-02 04:00:00","intensity":"0","total":"1025.5"},{"time":"2023-08-02 06:00:00","intensity":"0","total":"1025.5"},{"time":"2023-08-02 08:00:00","intensity":"0","total":"1025.5"},{"time":"2023-08-02 12:00:00","intensity":"0","total":"1024.5"},{"time":"2023-08-02 14:00:00","intensity":"0","total":"1024.5"},{"time":"2023-08-02 15:00:00","intensity":"0.5","total":"1025"},{"time":"2023-08-02 18:00:00","intensity":"0","total":"1025"},{"time":"2023-08-02 20:00:00","intensity":"0","total":"1025"},{"time":"2023-08-02 22:00:00","intensity":"0","total":"1025"}]} ---------------------------------------------- 2.鎺ㄦ紨鍖哄煙 -- drop table if exists nsl.region; create table nsl.region ( diff --git a/src/main/java/com/se/nsl/domain/vo/ConfigVo.java b/src/main/java/com/se/nsl/domain/vo/ConfigVo.java index 4054306..c945a9e 100644 --- a/src/main/java/com/se/nsl/domain/vo/ConfigVo.java +++ b/src/main/java/com/se/nsl/domain/vo/ConfigVo.java @@ -58,4 +58,116 @@ save_frames = frames; save_interval = duration / frames; } + + public List<Object> getTerrain() { + return terrain; + } + + public void setTerrain(List<Object> terrain) { + this.terrain = terrain; + } + + public List<Object> getLanduse() { + return landuse; + } + + public void setLanduse(List<Object> landuse) { + this.landuse = landuse; + } + + public List<Object> getStation() { + return station; + } + + public void setStation(List<Object> station) { + this.station = station; + } + + public Integer getkSt() { + return kSt; + } + + public void setkSt(Integer kSt) { + this.kSt = kSt; + } + + public String getRaingage() { + return raingage; + } + + public void setRaingage(String raingage) { + this.raingage = raingage; + } + + public String getInfiltration() { + return infiltration; + } + + public void setInfiltration(String infiltration) { + this.infiltration = infiltration; + } + + public Integer getDuration() { + return duration; + } + + public void setDuration(Integer duration) { + this.duration = duration; + } + + public Boolean getSave_state() { + return save_state; + } + + public void setSave_state(Boolean save_state) { + this.save_state = save_state; + } + + public List<String> getSave_variables() { + return save_variables; + } + + public void setSave_variables(List<String> save_variables) { + this.save_variables = save_variables; + } + + public Integer getSave_interval() { + return save_interval; + } + + public void setSave_interval(Integer save_interval) { + this.save_interval = save_interval; + } + + public Integer getSave_frames() { + return save_frames; + } + + public void setSave_frames(Integer save_frames) { + this.save_frames = save_frames; + } + + public Integer getSave_start() { + return save_start; + } + + public void setSave_start(Integer save_start) { + this.save_start = save_start; + } + + public Double getDt() { + return dt; + } + + public void setDt(Double dt) { + this.dt = dt; + } + + public Boolean getVariable_dt() { + return variable_dt; + } + + public void setVariable_dt(Boolean variable_dt) { + this.variable_dt = variable_dt; + } } diff --git a/src/main/java/com/se/nsl/service/ResolveService.java b/src/main/java/com/se/nsl/service/ResolveService.java index 0c7d47a..fd7425a 100644 --- a/src/main/java/com/se/nsl/service/ResolveService.java +++ b/src/main/java/com/se/nsl/service/ResolveService.java @@ -1,20 +1,31 @@ package com.se.nsl.service; +import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.se.nsl.config.PropertiesConfig; import com.se.nsl.domain.po.DataPo; import com.se.nsl.domain.po.Simu; import com.se.nsl.domain.po.SimuData; +import com.se.nsl.domain.vo.ConfigVo; +import com.se.nsl.helper.ComHelper; import com.se.nsl.helper.StringHelper; import com.se.nsl.helper.WebHelper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.gdal.ogr.Geometry; import org.gdal.ogr.ogr; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.sql.Timestamp; import java.util.Date; import java.util.concurrent.ExecutorService; @@ -29,6 +40,8 @@ @Resource PropertiesConfig config; + @Autowired + private UwService uwService; public int start(Simu simu) { Date now = new Date(); @@ -77,7 +90,10 @@ try { DataPo data = JSONUtil.toBean(simu.getData(), DataPo.class); - update(simu, 1, null); + update(simu, 1, "寮�濮�"); + + initArgs(data); + String rs = callUwSolver(data); //gedbService.copeVectors(token, data, db); //update(simu, 3, null); @@ -101,7 +117,76 @@ simuService.updateById(simu); } - private void initArgs(){ + /** + * 鍒濆鍖栧弬鏁� + */ + private void initArgs(DataPo data) throws IOException { + String inPath = config.getInPath() + File.separator + data.getInPath(); + createDir(inPath); + createDir(inPath + File.separator + "depth"); + createDir(inPath + File.separator + "velocity"); + createDir(config.getOutPath() + File.separator + data.getOutPath()); + // 涓存椂澶嶅埗楂樼▼tif锛屼互鍚庨渶瑕佽嚜琛屽垏鍓� + File uwBat = new File(config.getUwSolverBat()); + String sourceTif = uwBat.getParent() + File.separator + "data" + File.separator + "Hillzone.tif"; + String targetTif = inPath + File.separator + config.getDemFile(); + Files.copy(Paths.get(sourceTif), Paths.get(targetTif), StandardCopyOption.REPLACE_EXISTING); + } + + private void createDir(String path) { + File f = new File(path); + if (f.exists() && f.isDirectory()) { + FileUtil.del(f); + } + f.mkdirs(); + } + + /** + * 璋冪敤UWSolver + */ + private String callUwSolver(DataPo data) throws Exception { + File uwBat = new File(config.getUwSolverBat()); + + ConfigVo vo = new ConfigVo(data.getDuration(), config.getSaveFrames()); + //String configFile = uwBat.getParent() + File.separator + data.getInPath() + ".json"; + String configFile = config.getInPath() + File.separator + data.getInPath() + File.separator + data.getInPath() + ".json"; + ComHelper.writeJson(configFile, JSON.toJSONString(vo)); + + String cmd = String.format("%s %s", config.getUwSolverBat(), configFile); + + return callBat(cmd); + } + + private String callZarr2tif(DataPo data) throws Exception { + String cmd = ""; + + return callBat(cmd); + } + + private String callBat(String cmd) { + try { + ProcessBuilder pb = new ProcessBuilder("cmd", "/c", cmd); + pb.redirectErrorStream(true); // 鍚堝苟閿欒娴佸埌鏍囧噯杈撳嚭 + + Process process = pb.start(); + process.getOutputStream().close(); + + /*StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"))) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + sb.append(line); + } + }*/ + + int exitCode = process.waitFor(); + + return "ok"; // sb.toString(); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; + } } } diff --git a/src/main/java/com/se/nsl/service/UwService.java b/src/main/java/com/se/nsl/service/UwService.java index 6787a78..e581665 100644 --- a/src/main/java/com/se/nsl/service/UwService.java +++ b/src/main/java/com/se/nsl/service/UwService.java @@ -71,7 +71,7 @@ return execCmdLine(cmd); } - private String exec(String cmd) throws Exception { + public String exec(String cmd) throws Exception { Process process = null; BufferedReader nr = null; BufferedReader er = null; @@ -125,7 +125,7 @@ } } - private String execCmdLine(String cmd) throws IOException, InterruptedException { + public String execCmdLine(String cmd) throws IOException, InterruptedException { Process process = Runtime.getRuntime().exec(cmd); new Thread(() -> { -- Gitblit v1.9.3