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