package com.se.nsl.controller; import com.se.nsl.config.PropertiesConfig; import com.se.nsl.domain.po.DataPo; import com.se.nsl.domain.po.Region; import com.se.nsl.domain.vo.R; import com.se.nsl.helper.GdalHelper; import com.se.nsl.helper.ShpHelper; import com.se.nsl.helper.StringHelper; import com.se.nsl.mapper.RegionMapper; import com.se.nsl.service.*; import io.netty.util.internal.StringUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.axis.utils.StringUtils; import org.gdal.ogr.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @Api(tags = "01-Test") @Slf4j @RestController @RequestMapping("/test") @SuppressWarnings("ALL") public class TestController extends BaseController { @Resource UwService uwService; @Resource TestService testService; @Resource GedbService gedbService; @Resource SimuPoService simuPoService; //@Resource //Hdf5Service hdf5Service; @Resource ResultService resultService; @Resource RegionMapper regionMapper; @Resource PropertiesConfig config; @Resource ResolveService resolveService; @ApiOperation(value = "01.insertRegion <") @GetMapping("/insertRegion") @ApiImplicitParams({ @ApiImplicitParam(name = "fileName", value = "文件名", dataType = "String", paramType = "query", example = "5.beijing.geoJson"), @ApiImplicitParam(name = "type", value = "类型", dataType = "Integer", paramType = "query", example = "1") }) public R insertRegion(String fileName, Integer type) { // 孙胡沟geometry.json,7.nsl_area.geojson,4.10000.geoJson,5.beijing.geoJson String path = "D:\\terrait\\NslServer\\data\\" + fileName; if (!new File(path).exists()) return fail(path + ",文件不存在", null); org.gdal.ogr.Driver driver = ogr.GetDriverByName("GeoJSON"); if (null == driver) return fail("null"); DataSource ds = driver.Open(path); if (null == ds) return fail("null"); List list = new ArrayList<>(); for (int i = 0, c = ds.GetLayerCount(); i < c; i++) { Layer layer = ds.GetLayer(i); for (long j = 0, d = layer.GetFeatureCount(); j <= d; j++) { Feature f = layer.GetFeature(j); if (null == f || null == f.GetGeometryRef()) continue; String wkt = f.GetGeometryRef().ExportToWkt().toUpperCase(); if (!wkt.contains("POLYGON")) continue; // g.GetGeometryType() == ogr.wkbPolygon || g.GetGeometryType() == ogr.wkbMultiPolygon if (!wkt.contains("MULTIPOLYGON")) wkt = wkt.replace("POLYGON (", "MULTIPOLYGON ((") + ")"; list.add(new Region(f.GetFieldAsString("name"), type, wkt)); // type.shortValue() if (path.contains("孙胡沟")) list.add(new Region(f.GetFieldAsString("name"), 3, wkt)); } } ds.delete(); driver.delete(); return success(list.size() > 0 ? regionMapper.inserts(list) : 0); } @ApiOperation(value = "02.testDepthFiles <") @GetMapping("/testDepthFiles") @ApiImplicitParams({ @ApiImplicitParam(name = "oldPath", value = "输入路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago"), @ApiImplicitParam(name = "newPath", value = "开始时间", dataType = "Integer", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), @ApiImplicitParam(name = "year", value = "年", dataType = "Integer", paramType = "query", example = "2025"), @ApiImplicitParam(name = "month", value = "月", dataType = "Integer", paramType = "query", example = "4"), @ApiImplicitParam(name = "day", value = "日", dataType = "Integer", paramType = "query", example = "21") }) public R testDepthFiles(String oldPath, String newPath, Integer year, Integer month, Integer day) { try { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(year - 1900, month - 1, day, 0, 0, 0)); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); for (File file : new File(oldPath).listFiles()) { if (!file.exists() || !file.isDirectory()) continue; File tif = new File(oldPath + "\\" + file.getName() + "\\depth.tif"); if (!tif.exists() || tif.isDirectory()) continue; /*int second = Integer.parseInt(fileName); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR, 0); calendar.add(Calendar.SECOND, second);*/ calendar.add(Calendar.SECOND, 1); String newName = df.format(calendar.getTime()); String newFile = newPath + File.separator + newName + ".tif"; System.out.println(newFile); tif.renameTo(new File(newFile)); file.delete(); } return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "03.testTifFiles <") @GetMapping("/testTifFiles") @ApiImplicitParams({ @ApiImplicitParam(name = "oldPath", value = "输入路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), @ApiImplicitParam(name = "newPath", value = "开始时间", dataType = "Integer", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth2"), @ApiImplicitParam(name = "step", value = "步长", dataType = "Integer", paramType = "query", example = "20") }) public R testTifFiles(String oldPath, String newPath, Integer step) { try { File[] files = new File(oldPath).listFiles(); for (int i = 0, c = files.length; i < c; i += step) { File file = files[i]; if (!file.exists() || !file.isFile() || !file.getName().endsWith(".tif")) continue; String newFile = newPath + File.separator + file.getName(); System.out.println(newFile); file.renameTo(new File(newFile)); //Files.copy(file.toPath(), Paths.get(newFile), StandardCopyOption.REPLACE_EXISTING); file.delete(); } return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "04.testPngList <") @GetMapping("/testPngList") @ApiImplicitParams({ @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "fs24cubic"), @ApiImplicitParam(name = "size", value = "尺寸", dataType = "Integer", paramType = "query", example = "1024") }) public R testPngList(String path, Integer size) { try { if (null == size) size = (Integer) 1024; String newPath = config.getOutPath() + File.separator + path + File.separator + "waters"; String pngPath = config.getOutPath() + File.separator + path + File.separator + "png"; if (!new File(pngPath).exists()) new File(pngPath).mkdirs(); int i = 1; List list = new ArrayList<>(); for (File file : new File(newPath).listFiles()) { if (!file.exists() || file.isFile()) continue; File pngFile = new File(file.getPath() + File.separator + size + "_" + size + ".png"); if (!pngFile.exists() || pngFile.isDirectory()) continue; String pngName = i + ".png"; // String.format("f%06d", i) Files.copy(pngFile.toPath(), Paths.get(pngPath + File.separator + pngName), StandardCopyOption.REPLACE_EXISTING); list.add("file '" + pngName + "'"); System.out.println(list.get(list.size() - 1)); i++; } Path outPath = Paths.get(pngPath + File.separator + "list.txt"); try { Files.write(outPath, list, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "5.testNsl <") @GetMapping("/testNsl") @ApiImplicitParams({ @ApiImplicitParam(name = "inPath", value = "输入路径", dataType = "String", paramType = "query", example = "20250412"), @ApiImplicitParam(name = "startTime", value = "开始时间", dataType = "Integer", paramType = "query", example = "2025-04-12 00:00:00"), @ApiImplicitParam(name = "epsg", value = "坐标系ID", dataType = "Integer", paramType = "query", example = "4548") }) public R testNsl(String inPath, String startTime, Integer epsg) { try { DataPo data = new DataPo(); data.setInPath(inPath); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(startTime)); data.setEpsg(epsg); testService.test(data); return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "09.testCreateNsl <") @GetMapping("/testCreateNsl") @ApiImplicitParams({ @ApiImplicitParam(name = "tifPath", value = "Tif路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago"), @ApiImplicitParam(name = "inPath", value = "输入路径", dataType = "String", paramType = "query", example = "20250425"), @ApiImplicitParam(name = "startTime", value = "开始时间", dataType = "Integer", paramType = "query", example = "2025-04-29 00:00:00"), @ApiImplicitParam(name = "epsg", value = "坐标系ID", dataType = "Integer", paramType = "query", example = "4548") }) public R testCreateNsl(String tifPath, String inPath, String startTime, Integer epsg) { try { DataPo data = new DataPo(); data.setInPath(inPath); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(startTime)); data.setEpsg(epsg); procTifs(tifPath, inPath, data.getStartTime()); testService.test(data); return success("ok"); } catch (Exception ex) { return fail(ex, null); } } private void procTifs(String tifPath, String inPath, Date startTime) { if (StringUtils.isEmpty(tifPath)) return; Calendar calendar = Calendar.getInstance(); //calendar.setTime(new Date(startTime.getYear() - 1900, startTime.getMonth() - 1, startTime.getDay(), 0, 0, 0)); calendar.setTime(startTime); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String newPath = config.getInPath() + File.separator + inPath + File.separator + "depth"; if (!new File(newPath).exists()) new File(newPath).mkdirs(); for (File file : new File(tifPath).listFiles()) { if (!file.exists() || !file.isDirectory()) continue; File tif = new File(tifPath + "\\" + file.getName() + File.separator + "depth.tif"); if (!tif.exists() || tif.isDirectory()) continue; calendar.add(Calendar.SECOND, 1); String newName = df.format(calendar.getTime()); String newFile = newPath + File.separator + newName + ".tif"; System.out.println(newFile); tif.renameTo(new File(newFile)); file.delete(); } } @ApiOperation(value = "11.renametifs <") @GetMapping("/renametifs") @ApiImplicitParams({ @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "D:\\other\\simu\\uwsolver\\chicago\\depth"), @ApiImplicitParam(name = "prefix", value = "前缀", dataType = "Integer", paramType = "query", example = "01250302"), @ApiImplicitParam(name = "newPrefix", value = "新前缀", dataType = "Integer", paramType = "query", example = "20250429") }) public R renametifs(String path, String prefix, String newPrefix) { try { File[] files = new File(path).listFiles(); for (File file : files) { String newName = file.getPath().replace(prefix, newPrefix); file.renameTo(new File(newName)); } return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "10.当前时间 *") @GetMapping("/getTime") public Object getTime() { String rs = resolveService.createRainfallCsv("D:\\360\\zt.csv", "正态分布", 100, 10, 1); rs = resolveService.createRainfallCsv("D:\\360\\pj.csv", "平均分布", 100, 10, 1); rs = resolveService.createRainfallCsv("D:\\360\\bdpj.csv", "波动平均分布", 100, 10, 1); rs = resolveService.createRainfallCsv("D:\\360\\cxss.csv", "持续上升", 100, 10, 1); return (Object) System.currentTimeMillis(); } /*@ApiOperation(value = "12.testCallExe *") @ApiImplicitParams({ @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "20241010095328") }) @GetMapping("/testCallExe") public R testCallExe(String path) { try { DataPo data = new DataPo(); data.setInPath(path); String str = uwService.callExe(data); return success(str); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "13.testResuslt *") @ApiImplicitParams({ @ApiImplicitParam(name = "path", value = "路径", dataType = "String", paramType = "query", example = "20241107092342"), @ApiImplicitParam(name = "time", value = "时间", dataType = "String", paramType = "query", example = "2024-11-07 09:23:42") }) @GetMapping("/testResuslt") public R testResuslt(String path, String time) { try { DataPo data = new DataPo(); data.setEpsg(Integer.valueOf(4548)); data.setInPath(path); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse(time)); resultService.process(data); return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "14.testSww2Tif *") @GetMapping("/testSww2Tif") public R testSww2Tif() { try { DataPo data = new DataPo(); data.setEpsg(Integer.valueOf(4548)); data.setInPath("20241010095328"); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00")); Object rs = uwService.copeDrainFiles(data); return success(rs); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "15.testRainfall *") @GetMapping("/testRainfall") public R testRainfall() { try { DataPo data = new DataPo(); data.setEpsg(Integer.valueOf(4548)); data.setTotal(Double.valueOf(60.0)); data.setDuration(Integer.valueOf(60)); data.setInPath("20241010095328"); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-07-01 00:00:00")); uwService.createRainFile(data); return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "16.testToken *") @GetMapping("/testToken") public R testToken() { try { String token = gedbService.getToken(); return success(token); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "17.testPolygonize *") @GetMapping("/testPolygonize") public R testPolygonize() { try { ShpHelper.test(); return success("ok"); } catch (Exception ex) { return fail(ex, null); } } @ApiOperation(value = "18.testH5 *") @GetMapping("/testH5") public R testH5() { try { DataPo data = new DataPo(); data.setEpsg(Integer.valueOf(4548)); data.setInPath("20241010095328"); data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00")); hdf5Service.test(data); return success("ok"); } catch (Exception ex) { return fail(ex, null); } }*/ }