From 51d12c4cca7c9d4911a0037673bbd2dc210836d0 Mon Sep 17 00:00:00 2001 From: dcb <xgybdcb@163.com> Date: 星期五, 20 六月 2025 10:17:12 +0800 Subject: [PATCH] 根据位置查询Bug修复 --- src/main/java/com/se/nsl/controller/SimuController.java | 1112 +++++++-------------------------------------------------- 1 files changed, 144 insertions(+), 968 deletions(-) diff --git a/src/main/java/com/se/nsl/controller/SimuController.java b/src/main/java/com/se/nsl/controller/SimuController.java index 60f2eb0..fc5389d 100644 --- a/src/main/java/com/se/nsl/controller/SimuController.java +++ b/src/main/java/com/se/nsl/controller/SimuController.java @@ -1,173 +1,62 @@ package com.se.nsl.controller; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.google.common.io.Resources; -import com.se.nsl.config.PropertiesConfig; -import com.se.nsl.domain.dto.GeDb; -import com.se.nsl.domain.dto.GeLayer; -import com.se.nsl.domain.dto.GridDto; -import com.se.nsl.domain.po.DataPo; -import com.se.nsl.domain.po.SimuPo; +import com.se.nsl.domain.po.Simu; +import com.se.nsl.domain.po.SimuData; import com.se.nsl.domain.vo.*; -import com.se.nsl.service.*; -import com.se.nsl.utils.*; -import com.se.nsl.enums.RadioEnums; -import com.se.nsl.enums.SemErrorEnums; -import com.se.nsl.helper.StringHelper; -import com.se.nsl.helper.WebHelper; -import com.se.nsl.mapper.SimuMapper; -import io.swagger.annotations.*; -import lombok.SneakyThrows; +import com.se.nsl.service.RealTimeSimulationService; +import com.se.nsl.service.ResolveService; +import com.se.nsl.service.SimuService; +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.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; +import org.gdal.ogr.Geometry; +import org.gdal.ogr.ogr; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.io.*; -import java.math.BigDecimal; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; +import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.Arrays; +import java.util.List; -@Api(tags = "浠跨湡绠$悊") +@Api(tags = "03锛嶆帹婕旀ā鎷�") @Slf4j @RestController @RequestMapping("/simu") @SuppressWarnings("ALL") public class SimuController extends BaseController { @Resource - UwService uwService; - - @Resource - GedbService gedbService; - - @Resource SimuService simuService; @Resource - SimuFilesService simuFilesService; + ResolveService resolveService; @Resource - PropertiesConfig config; + RealTimeSimulationService rts; - @Resource - SimuMapper simuMapper; - - @Value("${simu-app.filePath}") - private String uploadedFolder; - - @Value("${config.outPath}") - private String outPath; - - @Value("${config.inPath}") - private String inPath; - - - @Resource - ResultService resultService; - - private final List<String> FLOOD_TYPE = new ArrayList<>(Arrays.asList("娌欒", "闃叉按鏉�")); - - @ApiOperation(value = "鍒涘缓") - @PostMapping(value = "/create", produces = "application/json; charset=UTF-8") - public R<Object> create(@RequestBody @ApiParam("鍒涘缓浠跨湡瑙嗗浘绫�") CreateSimuVo vo) { + /** + * 鍒嗛〉鏌ヨ鎺ㄦ紨妯℃嫙 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁伴噺 + * @return 鍒嗛〉鍚庣殑鎺ㄦ紨妯℃嫙 + */ + @ApiOperation(value = "selectPage") + @GetMapping("/selectPage") + public R<Object> selectPage(SimuVo vo, Integer pageNum, Integer pageSize) { try { - if (null == vo.getTotal() || vo.getTotal() < 1 || vo.getTotal() > 1000) { - return fail("闄嶉洦閲忎笉鑳戒负绌猴紝涓斿彇鍊煎湪1~1000涔嬮棿"); - } - if (null == vo.getDuration() || vo.getDuration() < 1 || vo.getDuration() > 10080) { - return fail("浠跨湡鏃堕暱涓嶈兘涓虹┖锛屼笖鍙栧�煎湪1~10080涔嬮棿"); - } - if (null == vo.getMinx() || null == vo.getMiny() || null == vo.getMaxx() || null == vo.getMaxy()) { - return fail("閫夋嫨鑼冨洿涓嶈兘涓虹┖", false); - } - if (null == vo.getPid() || vo.getPid() < 0) { - vo.setPid(0); - } - if (null == vo.getNum() || vo.getNum() < 1) { - vo.setNum(simuService.getMaxId() + 1); - } - if (null == vo.getPid() || vo.getPid() < 0) { - vo.setPid(0); - } - if (null == vo.getStartTime()) { - vo.setStartTime(new Date()); - } - if (vo.getPid() > 0) { - SimuPo pp = simuService.getSimuByPid(vo.getPid()); - if (null == pp) { - return fail("pid涓嶅瓨鍦�"); - } - if (null == vo.getFloodStart() || vo.getFloodStart() < 1 || vo.getFloodStart() > vo.getDuration() * 60) { - return fail("闃叉睕寮�濮嬫椂闂翠笉鑳戒负绌猴紝涓斿彇鍊煎湪1~" + (vo.getDuration() * 60) + "涔嬮棿"); - } - if (null == vo.getFloodEnd() || vo.getFloodEnd() < vo.getFloodStart() || vo.getFloodEnd() > vo.getDuration() * 60) { - return fail("闃叉睕缁撴潫鏃堕棿涓嶈兘涓虹┖锛屼笖鍙栧�煎湪" + vo.getFloodStart() + "~" + (vo.getDuration() * 60) + "涔嬮棿"); - } - if (null == vo.getFloodHeight() || vo.getFloodHeight() < 1 || vo.getFloodHeight() > 2000) { - return fail("闃叉睕楂樺害涓嶈兘涓虹┖锛屼笖鍙栧�煎湪1~2000涔嬮棿"); - } - if (!FLOOD_TYPE.contains(vo.getFloodType())) { - return fail("闃叉睕绫诲瀷涓嶈兘涓虹┖锛屼笖鍙兘鏄矙琚嬪拰闃叉按鏉�"); - } - if (null == vo.getFloodMinx() || null == vo.getFloodMiny() || null == vo.getFloodMaxx() || null == vo.getFloodMaxy()) { - return fail("闃叉睕鑼冨洿涓嶈兘涓虹┖", false); - } - } + if (null == pageNum || pageNum < 1) pageNum = 1; + if (null == pageSize || pageSize < 1) pageSize = 10; + if (pageSize > 1000) pageSize = 1000; - boolean flag = simuService.create(vo); - - return success(flag, flag ? "鎴愬姛" : "澶辫触"); - } catch (Exception ex) { - return fail(ex, null); - } - } - - @ApiOperation(value = "鍒犻櫎") - @ApiImplicitParams({ - @ApiImplicitParam(name = "ids", value = "ID", dataType = "Integer", paramType = "query", allowMultiple = true, example = "0") - }) - @GetMapping(value = "/del") - public R<Object> del(@RequestParam List<Integer> ids) { - try { - if (ids == null || ids.isEmpty()) { - return fail("鏃ュ織ID涓嶈兘涓虹┖", null); - } - - int count = simuService.del(ids); - - return success(count); - } catch (Exception ex) { - return fail(ex, null); - } - } - - @ApiOperation(value = "鑾峰彇") - @GetMapping("/get") - public R<Object> get(@ApiParam("浠跨湡瑙嗗浘绫�") SimuVo vo) { - try { - if (null == vo) { - vo = new SimuVo(); - } - if (null == vo.getPageSize() || vo.getPageSize() < 1) { - vo.setPageSize(10); - } - if (null == vo.getPageIndex() || vo.getPageIndex() < 1) { - vo.setPageIndex(1); - } - - IPage<SimuPo> paged = simuService.get(vo); + IPage<Simu> paged = simuService.selectPage(vo, pageNum, pageSize); if (null == paged) { return success(null, 0); } @@ -178,846 +67,133 @@ } } - @ApiOperation(value = "闄嶆按鑼冨洿鏍¢獙") - @GetMapping("/rangeVerify") - public R<Object> rangeVerify(@RequestParam @ApiParam("鏈�灏廥") double minx, - @RequestParam @ApiParam("鏈�灏弝") double miny, - @RequestParam @ApiParam("鏈�澶") double maxx, - @RequestParam @ApiParam("鏈�澶") double maxy) { - try { - DataPo data = new DataPo(); - data.setMinx(minx); - data.setMiny(miny); - data.setMaxx(maxx); - data.setMaxy(maxy); - data.setEpsg(4326); - - String token = gedbService.getToken(); - GeDb db = gedbService.connectGedb(token, data); - List<GeLayer> layers = gedbService.getLayers(token, db); - boolean result = gedbService.queryBboxCount(token, db, layers); - log.info("result = " + result); - return success(result); - - // return success(gedbService.queryBboxCount(token, db, layers)); - } catch (Exception ex) { - return fail(ex, false); - } - } - /** - * 鏂囦欢鍒涘缓妯℃嫙 - * <p> - * "鐘舵�侊細 - * 0-鍒涘缓浠跨湡浠诲姟锛� - * 1-杩炴帴GEDB搴擄紝 - * 2-涓嬭浇绌洪棿鏁版嵁锛� - * 3-涓嬭浇楂樼▼鏁版嵁锛� - * 4-鐢熸垚闄嶉洦鏂囦欢锛� - * 5-鐢熸垚閰嶇疆鏂囦欢锛� - * 6-妯℃嫙鍐呮稘浠跨湡锛� - * 7-澶勭悊姘翠綅鏂囦欢锛� - * 8-澶勭悊鎺掓按鏂囦欢锛� - * 9-澶勭悊浠跨湡缁撴灉锛� - * 10-瀹屾垚锛�-10-鍑洪敊 + * 鏍规嵁ID鎵归噺鍒犻櫎鎺ㄦ紨妯℃嫙 * - * @param vo VO - * @return {@link R}<{@link Object}> + * @param ids 瑕佸垹闄ょ殑鎺ㄦ紨妯℃嫙ID鍒楄〃 + * @return 鍒犻櫎鎴愬姛鐨勮褰曟暟 */ - @ApiOperation(value = "鏂囦欢鍒涘缓") - @PostMapping(value = "/file_create", produces = "application/json; charset=UTF-8") - public R<Object> fileCreate(@RequestBody @ApiParam("鍒涘缓浠跨湡瑙嗗浘绫�") CreateFilesSimuVo vo) throws IOException { - // 鑾峰彇涓婁紶鏂囦欢璺緞 - String targetDir = uploadedFolder; - log.info("涓婁紶鏂囦欢璺緞锛歿}", targetDir); - // 鑾峰彇鍚勪釜鏂囦欢鐨勫湴鍧� - String floodFile = vo.getFloodFile(); - log.info("鑼冨洿鏂囦欢鍦板潃锛歿}", floodFile); + @ApiOperation(value = "deleteByIds") + @DeleteMapping("/deleteByIds") + public R<Object> deleteByIds(@RequestParam List<Integer> ids) { try { - // 鍒ゆ柇鏄惁缁樺埗鍖哄煙 - if (!StringUtils.isEmpty(vo.getMaxx().toString()) && !Objects.isNull(vo.getMaxx())) { - rangeVerify(vo.getMinx(), vo.getMaxx(), vo.getMiny(), vo.getMaxy()); - log.info("缁樺埗鍖哄煙鑼冨洿楠岃瘉閫氳繃!"); - } else - // 鍒ゆ柇鍦板潃涓嶄负绌� - if (StringUtils.isEmpty(floodFile)) { - return fail("鑼冨洿鏂囦欢鍦板潃涓嶈兘涓虹┖", false); - } else { - // todo: 瑙f瀽鑼冨洿鏂囦欢 鏍规嵁涓嶅悓鐨勭殑鏍煎紡鏂囦欢杩涜涓嶅悓鐨勮В鏋愶紝鑾峰彇闇�瑕佽绠楃殑鑼冨洿鍊� - // 涓婁紶鏍煎紡锛�.shp/.tiff/.img/.geojson - // 閲嶆柊缁檝o璧嬪�� - // 鑾峰彇鏂囦欢鐨勫悗缂�鍚� - String fileName = floodFile.substring(floodFile.lastIndexOf(".")); - // 鍒ゆ柇鍚庣紑鍚嶆槸鍚︿负.shp - if (!fileName.equalsIgnoreCase(".shp")) { - return fail("鑼冨洿鏂囦欢鏍煎紡涓嶆纭�", false); - } else { - // 1 璇诲彇shp鏂囦欢锛岃幏鍙栬寖鍥村�� - JSONObject jsonObject = ShpToolUtils.readShp(floodFile); - // 2 鑾峰彇jsonObject涓殑鑼冨洿鍊� - Double minX = jsonObject.getDouble("minY"); - Double maxX = jsonObject.getDouble("maxY"); - Double minY = jsonObject.getDouble("minX"); - Double maxY = jsonObject.getDouble("maxX"); - // 3 鍒ゆ柇鑼冨洿鍊兼槸鍚︿负绌� - vo.setMinx(jsonObject.getDouble("minY")); - vo.setMaxx(jsonObject.getDouble("maxY")); - vo.setMiny(jsonObject.getDouble("minX")); - vo.setMaxy(jsonObject.getDouble("maxX")); - rangeVerify(minX, maxX, minY, maxY); - } - } - } catch (Exception e) { - log.error("瑙f瀽鑼冨洿鏂囦欢澶辫触"); - if (null == vo.getMinx() || null == vo.getMiny() || null == vo.getMaxx() || null == vo.getMaxy()) { - return fail("瑙f瀽鑼冨洿鏂囦欢澶辫触锛侀�夋嫨鑼冨洿涓嶈兘涓虹┖锛岃閲嶆柊閫夋嫨鏂囦欢锛�", false); - } - } - String stationFile = vo.getStationFile(); - log.info("绔欑偣鏂囦欢shp鍦板潃锛歿}", stationFile); - try { - if (RadioEnums.ACCESS.getCode().equals(vo.getRadio()) && StringUtils.isNotEmpty(stationFile)) { - // 1 璇诲彇shp鏂囦欢锛岃幏鍙栫珯鐐瑰潗鏍囧�� - ShpToolUtils.readShpGetLocal(stationFile); - } - } catch (Exception e) { - log.error("瑙f瀽绔欑偣鏂囦欢shp澶辫触"); - } - // 鍒涘缓琛ㄥ悕 鏃堕棿鎴� - String tableName = "station_rain_" + System.currentTimeMillis(); - try { - //鎺ュ叆澶勭悊 - if (RadioEnums.ACCESS.getCode().equals(vo.getRadio())) { - String stationRainFile = vo.getStationRainFile(); - log.info("绔欑偣闆ㄩ噺CSV鏂囦欢鍦板潃锛歿}", floodFile); - // 鍒ゆ柇鍦板潃涓嶄负绌� - if (StringUtils.isEmpty(stationRainFile)) { - return fail("绔欑偣闆ㄩ噺CSV鏂囦欢鍦板潃涓嶈兘涓虹┖", false); - } - // 1 璇诲彇CSV 鏂囦欢 - CsvToSQLiteUtils.readCsvSaveLocal(stationRainFile, tableName); - // 鑾峰彇浠跨湡鏃堕棿 duration - Integer duration = CsvToSQLiteUtils.getDuration(tableName); - log.info("浠跨湡鏃堕棿 duration = {}", duration); - vo.setDuration(duration); - // 鑾峰彇闄嶉洦鎬婚噺 total - Double total = CsvToSQLiteUtils.getTotal(tableName); - log.info("闄嶉洦鎬婚噺 total = {}", total); - vo.setTotal(total); - } else if (RadioEnums.SIMULATE.getCode().equals(vo.getRadio())) { - if (StringUtils.isEmpty(vo.getStation())) { - return fail("妯℃嫙璁$畻绔欑偣涓嶈兘涓虹┖锛�", false); - } - if (vo.getTotal() == null) { - return fail("妯℃嫙璁$畻闄嶉洦閲忎笉鑳戒负绌猴紒", false); - } - if (vo.getDuration() == null || vo.getDuration() <= 0) { - return fail("妯℃嫙璁$畻璁$畻鏃堕暱涓嶈兘涓虹┖锛�", false); - } - if (vo.getStationLatitude() == null) { - return fail("妯℃嫙璁$畻璁$畻鍧愭爣锛�", false); - } - if (vo.getStationLongitude() == null) { - return fail("妯℃嫙璁$畻璁$畻鍧愭爣锛�", false); - } - double aveTotal = BigDecimal.valueOf(vo.getTotal()).divide(BigDecimal.valueOf(vo.getDuration()), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); - JSONArray jsonArray = new JSONArray(); - LocalDateTime now = LocalDateTime.now(); - DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); - for (int i = 0; i < vo.getDuration(); i++) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("stationName", vo.getStation()); - jsonObject.put("rainfall", aveTotal); - jsonObject.put("longitude", vo.getStationLongitude()); - jsonObject.put("latitude", vo.getStationLatitude()); - LocalDateTime plusMinutes = now.plusMinutes(i); - jsonObject.put("datetime", customFormatter.format(plusMinutes)); - jsonArray.add(jsonObject); - } - CsvToSQLiteUtils.readCsvSaveLocal(jsonArray, tableName); - } else { - return fail("鏃犳晥鐨勬ā鍨嬭绠楁柟寮�", false); - } - } catch (Exception e) { - return fail("闆ㄩ噺澶勭悊澶辫触锛�", false); - } - // TODO: 2024/12/24 鏍规嵁杩欎簺鏂囦欢鐨勫湴鍧�锛岃幏鍙栨枃浠跺唴瀹癸紝鍒涘缓浠跨湡瑙嗗浘 - try { - if (null == vo.getDuration() || vo.getDuration() < 1 || vo.getDuration() > 10080) { - return fail("浠跨湡鏃堕暱涓嶈兘涓虹┖锛屼笖鍙栧�煎湪1~10080涔嬮棿"); - } - if (null == vo.getPid() || vo.getPid() < 0) { - vo.setPid(0); - } - if (null == vo.getNum() || vo.getNum() < 1) { - vo.setNum(simuService.getMaxId() + 1); - } - if (null == vo.getStartTime()) { - vo.setStartTime(new Date()); - } - // 闃叉睕浣滀笟 - if (vo.getPid() > 0) { - SimuPo pp = simuService.getSimuByPid(vo.getPid()); - if (null == pp) { - return fail("pid涓嶅瓨鍦�"); - } - if (null == vo.getFloodStart() || vo.getFloodStart() < 1 || vo.getFloodStart() > vo.getDuration() * 60) { - return fail("闃叉睕寮�濮嬫椂闂翠笉鑳戒负绌猴紝涓斿彇鍊煎湪1~" + (vo.getDuration() * 60) + "涔嬮棿"); - } - if (null == vo.getFloodEnd() || vo.getFloodEnd() < vo.getFloodStart() || vo.getFloodEnd() > vo.getDuration() * 60) { - return fail("闃叉睕缁撴潫鏃堕棿涓嶈兘涓虹┖锛屼笖鍙栧�煎湪" + vo.getFloodStart() + "~" + (vo.getDuration() * 60) + "涔嬮棿"); - } - if (null == vo.getFloodHeight() || vo.getFloodHeight() < 1 || vo.getFloodHeight() > 2000) { - return fail("闃叉睕楂樺害涓嶈兘涓虹┖锛屼笖鍙栧�煎湪1~2000涔嬮棿"); - } - if (!FLOOD_TYPE.contains(vo.getFloodType())) { - return fail("闃叉睕绫诲瀷涓嶈兘涓虹┖锛屼笖鍙兘鏄矙琚嬪拰闃叉按鏉�"); - } - if (null == vo.getFloodMinx() || null == vo.getFloodMiny() || null == vo.getFloodMaxx() || null == vo.getFloodMaxy()) { - return fail("闃叉睕鑼冨洿涓嶈兘涓虹┖", false); - } - } - if (StringUtils.isEmpty(vo.getSemUrl())) { - return fail("sem鏂囦欢鐢熸垚璺緞涓嶈兘涓虹┖锛�", false); - } - List<GridDto> dtos = new ArrayList<>(); - dtos.add(new GridDto(vo.getMiny(), vo.getMaxx())); - dtos.add(new GridDto(vo.getMaxy(), vo.getMaxx())); - dtos.add(new GridDto(vo.getMaxy(), vo.getMinx())); - dtos.add(new GridDto(vo.getMiny(), vo.getMinx())); - String bbox = ""; - //鐢熸垚鐐瑰拰绾跨殑瀹炰綋搴撴ā鍨嬪苟淇濆瓨璺緞 - String name = vo.getSemUrl(); - String token = EntityLibraryUtils.login(); - vo.setPointName(name + "-point"); - vo.setLinkName(name + "-line"); - JSONArray min = ProjectionToGeographicUtil.get4548Point(dtos.get(3).getLon(), dtos.get(3).getLat()); - JSONArray max = ProjectionToGeographicUtil.get4548Point(dtos.get(1).getLon(), dtos.get(1).getLat()); - bbox = bbox + min.getDouble(0) + "," + min.getDouble(1) + "," + max.getDouble(0) + "," + max.getDouble(1); - JSONObject point = getModule("layerQueryPointParams.json"); - String pointUrl = assemble(vo.getPointName(), point.getString("layerid"), bbox, token); - vo.setPointName(pointUrl); - JSONObject link = getModule("layerQueryParams.json"); - String linkUrl = assemble(vo.getLinkName(), link.getString("layerid"), bbox, token); - vo.setLinkName(linkUrl); - SimuPo simu = saveSimu(vo); - //鐢熸垚sem鏂囦欢 - asyncCall(tableName, dtos, vo, token, simu); - - // 寮�濮嬫ā鎷熻绠� - //boolean flag = simuFilesService.createByfiles(vo, token); - return success(simu.getId() != null ? "鎴愬姛" : "澶辫触"); + return success(simuService.deleteByIds(ids)); } catch (Exception ex) { return fail(ex, null); } } - public SimuPo saveSimu(CreateFilesSimuVo vo) { - Date now = new Date(); - String date = StringHelper.YMDHMS2_FORMAT.format(now); - if (StringHelper.isEmpty(vo.getName())) { - vo.setName(date); - } - DataPo data = BeanUtil.copyProperties(vo, DataPo.class); - data.setPath(date, date); - SimuPo simu = new SimuPo(vo.getNum(), vo.getPid(), vo.getName(), JSONUtil.toJsonStr(data), 0, vo.getBak()); - simu.setServiceName(date); - simu.setCreateTime(new Timestamp(now.getTime())); - simu.setSemUrl(vo.getSemUrl()); - simu.setPointUrl(vo.getPointName()); - simu.setLinkUrl(vo.getLinkName()); - simu.setSemUrl(inPath + "\\" + vo.getSemUrl()); - int rows = simuMapper.insert(simu); - return simu; - } - - @ApiOperation(value = "鑾峰彇鐐硅矾寰�") - @GetMapping("/getPointUrl") - public R<String> getPointUrl(@RequestParam("id") Integer id) throws Exception { - SimuPo po = simuService.getSimuById(id); - String token = EntityLibraryUtils.login(); - if (po != null) { - return success(po.getPointUrl().replace("{token}", token)); - } - return success(null); - } - - @ApiOperation(value = "鑾峰彇绾胯矾寰�") - @GetMapping("/getLineUrl") - public R<String> getLineUrl(@RequestParam("id") Integer id) throws Exception { - SimuPo po = simuService.getSimuById(id); - String token = EntityLibraryUtils.login(); - if (po != null) { - return success(po.getLinkUrl().replace("{token}", token)); - } - return success(null); - } - - private void asyncCall(String tableName, List<GridDto> dtos, CreateFilesSimuVo vo, String token, SimuPo simu) { - ExecutorService executor = Executors.newSingleThreadExecutor(); - executor.execute(new Runnable() { - @Override - @SneakyThrows - public void run() { - createSem(tableName, dtos, vo, token, simu); - } - }); - executor.shutdown(); - } - - public void createSem(String tableName, List<GridDto> dtos, CreateFilesSimuVo vo, String token, SimuPo simu) throws Exception { - int code=1; + /** + * 鏂板鎺ㄦ紨妯℃嫙 + * + * @param simu 鎺ㄦ紨妯℃嫙瀵硅薄 + * @return 鏂板鎴愬姛鐨勮褰曟暟 + */ + @ApiOperation(value = "insert") + @PostMapping(value = "/insert", produces = "application/json; charset=UTF-8") + public R<Object> insert(@RequestBody Simu simu) { try { - vo.setSemUrl(inPath + "\\" + vo.getSemUrl()); - boolean ends = vo.getSemUrl().endsWith("\\"); - if (!ends) { - vo.setSemUrl(vo.getSemUrl() + "\\"); + if (StringUtils.isEmpty(simu.getData())) return fail("data涓虹┖"); + + SimuData data = JSON.parseObject(simu.getData(), SimuData.class); + if (null == data) return fail("data鏁版嵁鏍煎紡(JSON)涓嶆纭�"); + if (StringUtils.isEmpty(simu.getGeom())) return fail("geom瀛楃涓蹭笉鏄疻KT鏍煎紡"); + + Geometry geom = Geometry.CreateFromWkt(simu.getGeom()); + if (!(geom.GetGeometryType() == ogr.wkbMultiPolygon || geom.GetGeometryType() == ogr.wkbPolygon)) + return fail("geom瀵硅薄涓嶆槸澶氳竟褰�"); + + int rows = simuService.insert(simu); + System.out.println(String.format("id:%s", simu.getId())); + + if (rows > 0 && (null == data.getRainfalls() || data.getRainfalls().size() < 2)) { + resolveService.createRainfall(simu); + simuService.updateById(simu); } - File file = new File(vo.getSemUrl()); - if (!file.exists()) { - file.mkdirs(); - } - //鍒濆鍖� - update(simu, code, null); - code+=1; - //闄嶉洦鏂囦欢鐢熸垚 - saveZarr(tableName, vo.getSemUrl()); - update(simu, code, null); - code+=1; - //绠$偣鐢熸垚 - pointTosem(dtos, token, vo.getSemUrl()); - update(simu, code, null); - code+=1; - //绠$嚎鐢熸垚 - lineToSem(dtos, token, vo.getSemUrl()); - update(simu, code, null); - code+=1; - //鑼冨洿鐢熸垚 - gridToCityJson(dtos, vo.getSemUrl()); - update(simu, code, null); - code+=1; - //娌虫祦鐢熸垚 - riverToSem(vo.getSemUrl()); - update(simu, code, null); - code+=1; - //鍦熷湴鍒╃敤鐢熸垚 - landuseToSem(vo.getSemUrl()); - update(simu, code, null); - code+=1; - //鍦板舰鐢熸垚 - terrainToSem(dtos, vo.getSemUrl()); - update(simu, 10, null); - code+=1; - //9=璋冪敤姹傝В/10=姹傝В鍒嗘瀽 - } catch (Exception e) { - log.error(e.getMessage(), e); - update(simu, -simu.getStatus(), SemErrorEnums.of(code)); + JSONObject json = new JSONObject(); + json.put("id", simu.getId()); + return success(json); + } catch (Exception ex) { + return fail(ex, null); } - - } - private void update(SimuPo simu, int status, String rs) { - simu.setStatus(status); - if (null != rs) simu.setResult(rs); - simu.setUpdateTime(WebHelper.getCurrentTimestamp()); - - simuMapper.updateById(simu); - } - - public String assemble(String name, String layerid, String bbox, String token) throws Exception { - JSONObject jsonObject = EntityLibraryUtils.createAssemble(name, token); - String packageid = jsonObject.getString("packageid"); - EntityLibraryUtils.addAssemble(layerid, token, packageid, bbox); - JSONObject result = EntityLibraryUtils.submitAssemble(token, packageid); - Random random = new Random(); - int randomNumber = random.nextInt(90000) + 10000; - String url = "http://106.120.22.26:8024/geo-service/package/3d/normal/85257774fdb64e5f99f6778696cad02a/" + packageid + "/" + layerid + "//l0/tileset.json?r=" + randomNumber + "&token={token}"; - return url; - } - - public R<String> saveZarr(String tableName, String semUrl) throws Exception { - List<String> list = CsvToSQLiteUtils.getNameList(tableName); - String path = outPath + "\\"; - String rainfall = "rainfall\\"; - String basePath = path + tableName + "\\" + rainfall; - JSONObject jsonObject = getModule("rainfallmodule.json"); - String startTime = null; - String endTime = null; - for (String src : list - ) { - File directories = new File(basePath); - if (!directories.exists()) { - directories.mkdirs(); - System.out.println("Directories created successfully."); - } else { - System.out.println("Directories already exist."); - } - List<StationRainVo> stationRainVos = CsvToSQLiteUtils.getList(tableName, src); - if (startTime == null) { - startTime = stationRainVos.get(0).getDatetime(); - } - if (endTime == null) { - endTime = stationRainVos.get(stationRainVos.size() - 1).getDatetime(); - } - ZarrUtils.saveZarrRainfall(basePath + src, stationRainVos); - ZarrUtils.saveZarrTime(basePath + src, stationRainVos); - ZipUtils.toZarr(basePath + src, basePath + src + ".zip"); - System.out.println(src + "鐨剒arr鏁版嵁鐢熸垚====================="); - //json鎷艰 - String uuid = "UUID_" + UUID.randomUUID().toString(); - //鎷艰zarr - JSONObject dynamizer = new JSONObject(); - dynamizer.put("url", rainfall.replace("\\", "/") + src + ".zarr"); - dynamizer.put("gmlId", uuid); - jsonObject.getJSONArray("Dynamizers").add(dynamizer); - //鎷艰鍧愭爣 - JSONArray vertice = new JSONArray(); - vertice.add(stationRainVos.get(0).getLongitude()); - vertice.add(stationRainVos.get(0).getLatitude()); - vertice.add(0.0); - jsonObject.getJSONArray("vertices").add(vertice); - //鎷艰鍩虹淇℃伅 - JSONObject cityObject = new JSONObject(); - cityObject.put("type", "+Rainfall"); - JSONObject attribute = new JSONObject(); - attribute.put("name", src); - cityObject.put("attributes", attribute); - JSONArray geometry = new JSONArray(); - JSONObject metry = new JSONObject(); - metry.put("type", "MultiPoint"); - metry.put("lod", 0); - JSONArray boundarie = new JSONArray(); - boundarie.add(jsonObject.getJSONArray("vertices").size() - 1); - metry.put("boundaries", boundarie); - geometry.add(metry); - cityObject.put("geometry", geometry); - jsonObject.getJSONObject("CityObjects").put(uuid, cityObject); - } - File jsonFile = new File(path + tableName + "\\闄嶉洦閲�.json"); - if (jsonFile.exists()) { - jsonFile.createNewFile(); - } - FileWriter fileWriter = new FileWriter(path + tableName + "\\闄嶉洦閲�.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(path + tableName + "\\闄嶉洦閲�.json", semUrl + "raingage.sem"); - getConfigJson(startTime, endTime, semUrl); - return success(semUrl + "raingage.sem"); - } - - public void getConfigJson(String startTime, String endTime, String semUrl) throws Exception { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); - Date start = sdf.parse(startTime); - Date end = sdf.parse(endTime); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); - JSONObject jsonObject = getModule("config.json"); - jsonObject.put("start_datetime", simpleDateFormat.format(start)); - jsonObject.put("end_datetime", simpleDateFormat.format(end)); - FileWriter fileWriter = new FileWriter(semUrl + "\\config.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - } - - public R<String> pointTosem(List<GridDto> dtos, String token, String semUrl) throws Exception { - String path = outPath + "\\point\\"; - String publicKey = EntityLibraryUtils.getPublicKey(); - JSONArray jsonArrayList = EntityLibraryUtils.getPointInfo(dtos, token); - JSONObject jsonObject = getModule("pointmodule.json"); - for (int s = 0; s < jsonArrayList.size(); s++) { - JSONObject pointObject = jsonArrayList.getJSONObject(s); - //鎷艰鍧愭爣 - JSONArray vertice = new JSONArray(); - vertice.add(Double.valueOf(pointObject.getString("lon"))); - vertice.add(Double.valueOf(pointObject.getString("lat"))); - vertice.add(0.0); - jsonObject.getJSONArray("vertices").add(vertice); - //鎷艰鍩虹淇℃伅 - JSONObject cityObject = new JSONObject(); - cityObject.put("type", "+PipePoint"); - JSONObject attribute = new JSONObject(); - attribute.put("缁存姢鏃堕棿", pointObject.get("operatetime")); - attribute.put("缁存姢浜�", pointObject.get("operator")); - attribute.put("鍞竴缂栫爜", pointObject.get("seid")); - attribute.put("ID", pointObject.get("id")); - attribute.put("enti_uuid", pointObject.get("enti_uuid")); - attribute.put("鏍囪瘑鐮�", pointObject.get("bsm")); - attribute.put("绠$嚎绉嶇被", pointObject.get("gxzl")); - attribute.put("鍦伴潰楂樼▼", pointObject.get("dmgc")); - attribute.put("鐗瑰緛", pointObject.get("tz")); - attribute.put("闄勫睘鐗�", pointObject.get("fsw")); - attribute.put("寤虹瓚鐗�", pointObject.get("jzw")); - attribute.put("浜曞簳楂樼▼", pointObject.get("jdgc")); - attribute.put("浜曞簳鍩嬫繁", pointObject.get("jdms")); - attribute.put("浜曡剸鍩嬫繁", pointObject.get("jbms")); - attribute.put("浜曠洊褰㈢姸", pointObject.get("jgxz")); - attribute.put("浜曠洊灏哄", pointObject.get("jgcc")); - attribute.put("浜曠洊鏉愯川", pointObject.get("jgcz")); - attribute.put("浜曠洊鐘舵��", pointObject.get("jgzt")); - attribute.put("浜曡剸鏉愯川", pointObject.get("jbcz")); - attribute.put("浜曡剸灏哄", pointObject.get("jbcc")); - attribute.put("浜曟潗璐�", pointObject.get("jcz")); - attribute.put("浜曞昂瀵�", pointObject.get("jcc")); - attribute.put("浣跨敤鐘跺喌", pointObject.get("syzk")); - attribute.put("lon", Double.valueOf(pointObject.getString("lon"))); - attribute.put("lat", Double.valueOf(pointObject.getString("lat"))); - attribute.put("atti", pointObject.get("atti")); - attribute.put("闆ㄦ按闆嗙粨鐐�", pointObject.get("ysjjd")); - cityObject.put("attributes", attribute); - JSONArray geometry = new JSONArray(); - JSONObject metry = new JSONObject(); - metry.put("type", "MultiPoint"); - metry.put("lod", 0); - JSONArray boundarie = new JSONArray(); - boundarie.add(jsonObject.getJSONArray("vertices").size() - 1); - metry.put("boundaries", boundarie); - geometry.add(metry); - cityObject.put("geometry", geometry); - jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject); - } - long times = System.currentTimeMillis(); - String pointPath = path + times + "\\绠$偣.json"; - File dirFile = new File(path + times); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - FileWriter fileWriter = new FileWriter(pointPath); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(pointPath, semUrl + "node.sem"); - return success(semUrl + "node.sem"); - } - - - public R<String> pointToCityJson(String shpPath) throws Exception { - String path = outPath + "\\point\\"; - List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath); - JSONObject jsonObject = getModule("pointmodule.json"); - for (Map<String, Object> map : list - ) { - //鎷艰鍧愭爣 - JSONArray vertice = new JSONArray(); - vertice.add(map.get("lon")); - vertice.add(map.get("lat")); - vertice.add(0.0); - jsonObject.getJSONArray("vertices").add(vertice); - //鎷艰鍩虹淇℃伅 - JSONObject cityObject = new JSONObject(); - cityObject.put("type", "+PipePoint"); - JSONObject attribute = new JSONObject(); - attribute.put("name", map.get("fsw")); - cityObject.put("attributes", attribute); - JSONArray geometry = new JSONArray(); - JSONObject metry = new JSONObject(); - metry.put("type", "MultiPoint"); - metry.put("lod", 0); - JSONArray boundarie = new JSONArray(); - boundarie.add(jsonObject.getJSONArray("vertices").size() - 1); - metry.put("boundaries", boundarie); - geometry.add(metry); - cityObject.put("geometry", geometry); - jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject); - } - long times = System.currentTimeMillis(); - String pointPath = path + times + "\\绠$偣.json"; - File dirFile = new File(path + times); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - FileWriter fileWriter = new FileWriter(pointPath); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - String filePatn = inPath + "\\tongzhou\\"; - File file = new File(filePatn); - if (!file.exists()) { - file.mkdirs(); - } - SemUtils.cityJsonToSem(pointPath, filePatn + "node.sem"); - return success(filePatn + "node.sem"); - } - - public R<String> lineToSem(List<GridDto> dtos, String token, String semUrl) throws Exception { - String path = outPath + "\\line\\"; - String publicKey = EntityLibraryUtils.getPublicKey(); - JSONArray jsonArrayList = EntityLibraryUtils.getLineInfo(dtos, token); - if (jsonArrayList.size() == 0) { - return fail("璇ュ尯鍩熶笉瀛樺湪绠$嚎锛�"); - } - StringBuffer stringBuffer = new StringBuffer("id in ("); - for (int i = 0; i < jsonArrayList.size(); i++) { - jsonArrayList.getJSONObject(i).getInteger("id"); - stringBuffer.append("'" + jsonArrayList.getJSONObject(i).getInteger("id") + "',"); - } - String sql = stringBuffer.toString(); - sql = sql.substring(0, sql.length() - 1) + ")"; - StringBuffer paramBuffer = new StringBuffer(""); - while (!"".equals(sql)) { - if (sql.length() > 110) { - String item = sql.substring(0, 110); - paramBuffer.append(EntityLibraryUtils.encrypt(item, publicKey) + ","); - sql = sql.replace(item, ""); - } else { - paramBuffer.append(EntityLibraryUtils.encrypt(sql, publicKey) + ","); - sql = ""; - } - } - String src = paramBuffer.toString().substring(0, paramBuffer.length() - 1); - JSONArray arrayDetail = EntityLibraryUtils.getLineDetail(src, token); - JSONObject jsonObject = getModule("linemodule.json"); - for (int i = 0; i < arrayDetail.size(); i++) { - JSONObject detailJSONObject = arrayDetail.getJSONObject(i); - //鎷艰鍩虹淇℃伅 - JSONObject cityObject = new JSONObject(); - cityObject.put("type", "+PipeLine"); - JSONObject attribute = new JSONObject(); - attribute.put("缁存姢鏃堕棿", detailJSONObject.getJSONObject("properties").getLong("operatetime")); - attribute.put("缁存姢浜�", detailJSONObject.getJSONObject("properties").getString("operator")); - attribute.put("鍞竴缂栫爜", detailJSONObject.getJSONObject("properties").get("seid")); - attribute.put("ENTI_UUID", detailJSONObject.getJSONObject("properties").get("enti_uuid")); - attribute.put("ID", detailJSONObject.getJSONObject("properties").get("id")); - attribute.put("lon", detailJSONObject.getJSONObject("properties").get("lon")); - attribute.put("lat", detailJSONObject.getJSONObject("properties").get("lat")); - attribute.put("atti", detailJSONObject.getJSONObject("properties").get("atti")); - attribute.put("绠$嚎绉嶇被", detailJSONObject.getJSONObject("properties").get("gxzl")); - attribute.put("璧风偣鏍囪瘑鐮�", detailJSONObject.getJSONObject("properties").get("qdbsm")); - attribute.put("姝㈢偣鏍囪瘑鐮�", detailJSONObject.getJSONObject("properties").get("zdbsm")); - attribute.put("璧风偣楂樼▼", detailJSONObject.getJSONObject("properties").get("qdgc")); - attribute.put("璧烽珮绋嬬被鍨�", detailJSONObject.getJSONObject("properties").get("qgclx")); - attribute.put("璧风偣鍩嬫繁", detailJSONObject.getJSONObject("properties").get("qdms")); - attribute.put("姝㈢偣楂樼▼", detailJSONObject.getJSONObject("properties").get("zdgc")); - attribute.put("姝㈤珮绋嬬被鍨�", detailJSONObject.getJSONObject("properties").get("zgclx")); - attribute.put("姝㈢偣鍩嬫繁", detailJSONObject.getJSONObject("properties").get("zdms")); - attribute.put("鏉愯川", detailJSONObject.getJSONObject("properties").get("cz")); - attribute.put("鍩嬭鏂瑰紡", detailJSONObject.getJSONObject("properties").get("msfs")); - attribute.put("绠″緞1", detailJSONObject.getJSONObject("properties").get("gja")); - attribute.put("绠″緞2", detailJSONObject.getJSONObject("properties").get("gjb")); - attribute.put("浣跨敤鐘跺喌", detailJSONObject.getJSONObject("properties").get("syzk")); - attribute.put("绠$嚎娈甸暱搴�", detailJSONObject.getJSONObject("properties").get("gxdcd")); - attribute.put("groupID", detailJSONObject.getJSONObject("properties").get("groupid")); - attribute.put("Shape_Length", detailJSONObject.getJSONObject("properties").get("shape_length")); - attribute.put("鏍囪瘑鐮�", detailJSONObject.getJSONObject("properties").get("bsm")); - JSONArray geometry = new JSONArray(); - JSONObject metry = new JSONObject(); - metry.put("type", "MultiLineString"); - metry.put("lod", 0); - JSONArray boundarie = new JSONArray(); - JSONArray array = detailJSONObject.getJSONObject("geometry").getJSONArray("coordinates").getJSONArray(0); - for (int m = 0; m < array.size(); m++) { - JSONArray object = array.getJSONArray(m); - jsonObject.getJSONArray("vertices").add(ProjectionToGeographicUtil.getPoint(object.getDouble(0), object.getDouble(1))); - boundarie.add(jsonObject.getJSONArray("vertices").size() - 1); - } - JSONArray jsonArray = new JSONArray(); - jsonArray.add(boundarie); - metry.put("boundaries", jsonArray); - JSONArray metryArray = new JSONArray(); - metryArray.add(metry); - cityObject.put("geometry", metryArray); - cityObject.put("attributes", attribute); - cityObject.put("attributes", attribute); - geometry.add(metry); - jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject); - } - long times = System.currentTimeMillis(); - String pointPath = path + times + "\\绠$嚎.json"; - File dirFile = new File(path + times); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - FileWriter fileWriter = new FileWriter(pointPath); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(pointPath, semUrl + "link.sem"); - return success(semUrl + "link.sem"); - } - - public R<String> lineToCityJson(String shpPath) throws Exception { - String path = outPath + "\\line\\"; - List<Map<String, Object>> list = ShpReadUtils.readPointShp(shpPath); - JSONObject jsonObject = getModule("linemodule.json"); - for (Map<String, Object> map : list - ) { - //鎷艰鍩虹淇℃伅 - JSONObject cityObject = new JSONObject(); - cityObject.put("type", "+PipeLine"); - JSONObject attribute = new JSONObject(); - attribute.put("name", map.get("msfs")); - JSONArray geometry = new JSONArray(); - JSONObject metry = new JSONObject(); - metry.put("type", "MultiLineString"); - metry.put("lod", 0); - JSONArray boundarie = new JSONArray(); - JSONArray array = JSONObject.parseObject(map.get("the_geom").toString()).getJSONArray("coordinates"); - for (int i = 0; i < array.size(); i++) { - JSONObject object = JSONObject.parseObject(array.get(i).toString()); - jsonObject.getJSONArray("vertices").add(ProjectionToGeographicUtil.getPoint(Double.valueOf(object.get("x").toString()), Double.valueOf(object.get("y").toString()))); - boundarie.add(jsonObject.getJSONArray("vertices").size() - 1); - } - JSONArray jsonArray = new JSONArray(); - jsonArray.add(boundarie); - metry.put("boundaries", jsonArray); - JSONArray metryArray = new JSONArray(); - metryArray.add(metry); - cityObject.put("geometry", metryArray); - cityObject.put("attributes", attribute); - cityObject.put("attributes", attribute); - geometry.add(metry); - jsonObject.getJSONObject("CityObjects").put("UUID_" + UUID.randomUUID().toString(), cityObject); - } - long times = System.currentTimeMillis(); - String pointPath = path + times + "\\绠$嚎.json"; - File dirFile = new File(path + times); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - FileWriter fileWriter = new FileWriter(pointPath); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - String filePatn = inPath + "\\tongzhou\\"; - File file = new File(filePatn); - if (!file.exists()) { - file.mkdirs(); - } - SemUtils.cityJsonToSem(pointPath, filePatn + "link.sem"); - return success(filePatn + "link.sem"); - } - - public R<String> terrainToSem(List<GridDto> dtos, String semUrl) throws Exception { - long times = System.currentTimeMillis(); - String path = outPath + "\\terrain\\" + times + "\\"; - File dirFile = new File(path + "appearance"); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - double minx = 180.0; - double maxx = 0.0; - double miny = 180.0; - double maxy = 0.0; - for (GridDto dto : dtos - ) { - if (dto.getLon() > maxx) { - maxx = dto.getLon(); - } - if (dto.getLon() < minx) { - minx = dto.getLon(); - } - if (dto.getLat() > maxy) { - maxy = dto.getLat(); - } - if (dto.getLat() < miny) { - miny = dto.getLat(); - } - } - JSONArray min = ProjectionToGeographicUtil.get4548Point(minx, miny); - JSONArray max = ProjectionToGeographicUtil.get4548Point(maxx, maxy); - String tifPath = path + "terrain.tif"; - TiffClipper.cropTiffByLatLon(config.getTifPath(), tifPath, min.getDouble(0), min.getDouble(1), max.getDouble(0), max.getDouble(1)); - String pngPath = path + "appearance\\terrain.png"; - TiffToRGBUtil.tifToPng(tifPath, pngPath); - JSONObject jsonObject = getModule("terrainmodule.json"); - JSONArray array=new JSONArray(); - array.add(ProjectionToGeographicUtil.getPointAndHight(dtos.get(0).getLon(),dtos.get(0).getLat())); - array.add(ProjectionToGeographicUtil.getPointAndHight(dtos.get(1).getLon(),dtos.get(1).getLat())); - array.add(ProjectionToGeographicUtil.getPointAndHight(dtos.get(2).getLon(),dtos.get(2).getLat())); - array.add(ProjectionToGeographicUtil.getPointAndHight(dtos.get(3).getLon(),dtos.get(3).getLat())); - //jsonObject.put("vertices", TiffCoordinateExtractorUtil.getCoordinate(tifPath)); - jsonObject.put("vertices", array); - FileWriter fileWriter = new FileWriter(path + "terrain.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(path + "terrain.json", semUrl + "terrain.sem"); - return success(semUrl + "terrain.sem"); - } - - public R<String> terrainToCityJson(String tifPath) throws Exception { - long times = System.currentTimeMillis(); - String path = outPath + "\\terrain\\" + times + "\\"; - File dirFile = new File(path + "appearance"); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - String pngPath = path + "appearance\\terrain.png"; - TiffToRGBUtil.tifToPng(tifPath, pngPath); - JSONObject jsonObject = getModule("terrainmodule.json"); - jsonObject.put("vertices", TiffCoordinateExtractorUtil.getCoordinate(tifPath)); - FileWriter fileWriter = new FileWriter(path + "terrain.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - String filePatn = inPath + "\\tongzhou\\"; - File file = new File(filePatn); - if (!file.exists()) { - file.mkdirs(); - } - SemUtils.cityJsonToSem(path + "terrain.json", filePatn + "terrain.sem"); - return success(filePatn + "terrain.sem"); - } - - public R<String> gridToCityJson(List<GridDto> dtos, String semUrl) throws Exception { - long times = System.currentTimeMillis(); - String path = outPath + "\\grid\\" + times + "\\"; - File dirFile = new File(path); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - JSONObject jsonObject = getModule("grid.json"); - JSONArray array = jsonObject.getJSONArray("vertices"); - for (GridDto dto : dtos - ) { - JSONArray jsonArray = new JSONArray(); - jsonArray.add(dto.getLon()); - jsonArray.add(dto.getLat()); - jsonArray.add(0); - array.add(jsonArray); - } - jsonObject.put("vertices", array); - FileWriter fileWriter = new FileWriter(path + "grid.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(path + "grid.json", semUrl + "grid.sem"); - return success(semUrl + "grid.sem"); - } - - public R<String> riverToSem(String semUrl) throws Exception { - long times = System.currentTimeMillis(); - String path = outPath + "\\river\\" + times + "\\"; - File dirFile = new File(path); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - JSONObject jsonObject = getModule("river.json"); - FileWriter fileWriter = new FileWriter(path + "river.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(path + "river.json", semUrl + "river.sem"); - return success(semUrl + "river.sem"); - } - - public R<String> landuseToSem(String semUrl) throws Exception { - long times = System.currentTimeMillis(); - String path = outPath + "\\landuse\\" + times + "\\"; - File dirFile = new File(path); - if (!dirFile.exists()) { - dirFile.mkdirs(); - } - JSONObject jsonObject = getModule("landuse.json"); - FileWriter fileWriter = new FileWriter(path + "landuse.json"); - fileWriter.write(jsonObject.toJSONString()); - fileWriter.close(); - SemUtils.cityJsonToSem(path + "landuse.json", semUrl + "landuse.sem"); - return success(semUrl + "landuse.sem"); - } - - public JSONObject getModule(String moduleName) { - JSONObject jsonObject = new JSONObject(); + @ApiOperation(value = "start") + @GetMapping(value = "/start", produces = "application/json; charset=UTF-8") + public R<Object> start(Integer id) { try { - URL resource = Resources.getResource(moduleName); - String fileContent = Resources.toString(resource, StandardCharsets.UTF_8); - jsonObject = JSONObject.parseObject(fileContent); - System.out.println(fileContent); - } catch (Exception e) { - e.printStackTrace(); + if (null == id || id < 1) return fail("id涓虹┖"); + + Simu simu = simuService.selectById(id); + if (null == simu) return fail("鏂规鎵句笉鍒�"); + if (StringUtils.isEmpty(simu.getData())) return fail("鏂规鏁版嵁(JSON)涓虹┖"); + + SimuData data = JSON.parseObject(simu.getData(), SimuData.class); + if (null == data) return fail("鏂规鏁版嵁鏍煎紡(JSON)涓嶆纭�"); + + //if (simu.getStatus() != 0) return fail("鏂规姝e湪杩愯鎴栧凡瀹屾垚"); + if (StringUtils.isEmpty(simu.getGeom())) return fail("鏂规鐨勫浘褰负绌�"); + + int rows = resolveService.start(simu); + + return success("ok"); + } catch (Exception ex) { + return fail(ex, null); } - return jsonObject; } + /** + * 淇敼鎺ㄦ紨妯℃嫙 + * + * @param simu 鎺ㄦ紨妯℃嫙瀵硅薄 + * @return 淇敼鎴愬姛鐨勮褰曟暟 + */ + @ApiOperation(value = "updateById") + @PutMapping(value = "/updateById", produces = "application/json; charset=UTF-8") + public R<Object> updateById(@RequestBody Simu simu) { + try { + if (StringUtils.isEmpty(simu.getData())) return fail("data涓虹┖"); + + SimuData data = JSON.parseObject(simu.getData(), SimuData.class); + if (null == data) return fail("data鏁版嵁鏍煎紡(JSON)涓嶆纭�"); + if (StringUtils.isEmpty(simu.getGeom())) return fail("geom瀛楃涓蹭笉鏄疻KT鏍煎紡"); + + Geometry geom = Geometry.CreateFromWkt(simu.getGeom()); + if (!(geom.GetGeometryType() == ogr.wkbMultiPolygon || geom.GetGeometryType() == ogr.wkbPolygon)) + return fail("geom瀵硅薄涓嶆槸澶氳竟褰�"); + + if (null == data.getRainfalls() || data.getRainfalls().size() < 2) resolveService.createRainfall(simu); + + return success(simuService.updateById(simu)); + } catch (Exception ex) { + return fail(ex, null); + } + } + + @ApiOperation(value = "position") + @GetMapping("/position") + public R<Object> queryByPosition(double lon, double lat, Long time, String serviceName) { + if (lon > 180 || lon < -180) { + return clientError("缁忓害鑼冨洿搴旇鍦�-180鍒�180"); + } + if (lat > 90 || lat < -90) { + return clientError("绾害鑼冨洿搴旇鍦�-90鍒�90"); + } + if (serviceName == null || serviceName.trim().isEmpty()) { + return clientError("鏈嶅姟鍚嶄笉鑳戒负绌�"); + } + if (time != null) { + SimuResult result = simuService.queryByPosition(lon, lat, time, serviceName); + if (result == null) { + return notFound("鏈煡鎵惧埌鐩稿叧鏁版嵁"); + } + return success(result, 1); + } else { + List<SimuResult> simuResults = simuService.queryByPosition(lon, lat, serviceName); + if (simuResults.isEmpty()) { + return notFound("鏈煡鎵惧埌鐩稿叧鏁版嵁"); + } + return success(simuResults, simuResults.size()); + } + } } -- Gitblit v1.9.3