src/main/java/com/se/simu/controller/SimuController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/domain/vo/CreateFilesSimuVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/enums/RadioEnums.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/service/Impl/ProjectRelatedServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/EntityLibraryUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/se/simu/controller/SimuController.java
@@ -11,6 +11,7 @@ import com.se.simu.domain.po.DataPo; import com.se.simu.domain.po.SimuPo; import com.se.simu.domain.vo.*; import com.se.simu.enums.RadioEnums; import com.se.simu.service.*; import com.se.simu.utils.*; import io.swagger.annotations.*; @@ -24,10 +25,13 @@ import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -231,6 +235,9 @@ if (StringUtils.isEmpty(floodFile)) { return fail("èå´æä»¶å°åä¸è½ä¸ºç©º", false); } else { // todo: è§£æèå´æä»¶ æ ¹æ®ä¸åççæ ¼å¼æä»¶è¿è¡ä¸åçè§£æï¼è·åéè¦è®¡ç®çèå´å¼ // ä¸ä¼ æ ¼å¼ï¼.shp/.tiff/.img/.geojson // éæ°ç»voèµå¼ // è·åæä»¶çåç¼å String fileName = floodFile.substring(floodFile.lastIndexOf(".")); // 夿åç¼åæ¯å¦ä¸º.shp @@ -252,54 +259,79 @@ rangeVerify(minX, maxX, minY, maxY); } } // todo: è§£æèå´æä»¶ æ ¹æ®ä¸åççæ ¼å¼æä»¶è¿è¡ä¸åçè§£æï¼è·åéè¦è®¡ç®çèå´å¼ // ä¸ä¼ æ ¼å¼ï¼.shp/.tiff/.img/.geojson // éæ°ç»voèµå¼ } catch (Exception e) { log.error("è§£æèå´æä»¶å¤±è´¥"); if (null == vo.getMinx() || null == vo.getMiny() || null == vo.getMaxx() || null == vo.getMaxy()) { return fail("è§£æèå´æä»¶å¤±è´¥ï¼éæ©èå´ä¸è½ä¸ºç©ºï¼è¯·éæ°éæ©æä»¶ï¼", false); } } JSONArray jsonArray = new JSONArray(); String stationFile = vo.getStationFile(); log.info("ç«ç¹æä»¶shpå°åï¼{}", stationFile); try { // 夿å°åä¸ä¸ºç©º if (StringUtils.isEmpty(stationFile)) { return fail("ç«ç¹æä»¶shpå°åä¸è½ä¸ºç©º", false); if (RadioEnums.ACCESS.getCode().equals(vo.getRadio()) && StringUtils.isNotEmpty(stationFile)) { // 1 读åshpæä»¶ï¼è·åç«ç¹åæ å¼ ShpToolUtils.readShpGetLocal(stationFile); } // 1 读åshpæä»¶ï¼è·åç«ç¹åæ å¼ jsonArray = ShpToolUtils.readShpGetLocal(stationFile); System.out.println("jsonArray = " + jsonArray); } catch (Exception e) { log.error("è§£æç«ç¹æä»¶shp失败"); } String stationRainFile = vo.getStationRainFile(); log.info("ç«ç¹é¨éCSVæä»¶å°åï¼{}", floodFile); JSONArray array = new JSONArray(); // åå»ºè¡¨å æ¶é´æ³ String tableName = "station_rain_" + System.currentTimeMillis(); try { // 夿å°åä¸ä¸ºç©º if (StringUtils.isEmpty(stationRainFile)) { return fail("ç«ç¹é¨éCSVæä»¶å°åä¸è½ä¸ºç©º", false); //æ¥å ¥å¤ç 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); } // 1 读åCSV æä»¶ array = 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); } catch (Exception e) { log.error("è§£æç«ç¹é¨éCSVæä»¶å¤±è´¥"); return fail("é¨éå¤ç失败ï¼", false); } // TODO: 2024/12/24 æ ¹æ®è¿äºæä»¶çå°åï¼è·åæä»¶å 容ï¼å建仿çè§å¾ try { @@ -356,22 +388,22 @@ @ApiOperation(value = "è·åç¹è·¯å¾") @GetMapping("/getPointUrl") public R<String> getPointUrl(@RequestParam("id") Integer id) throws Exception{ 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(po.getPointUrl().replace("{token}", token)); } return success(null); } @ApiOperation(value = "è·å线路å¾") @GetMapping("/getLineUrl") public R<String> getLineUrl(@RequestParam("id") Integer id) throws Exception{ 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(po.getLinkUrl().replace("{token}", token)); } return success(null); } src/main/java/com/se/simu/domain/vo/CreateFilesSimuVo.java
@@ -94,4 +94,16 @@ @ApiModelProperty("线çæè·¯å¾") private String linkName; @ApiModelProperty("模åè®¡ç®æ¹å¼ï¼1=模æï¼2=æ¥å ¥") private String radio; @ApiModelProperty("ç«ç¹åç§°") private String station; @ApiModelProperty("ç«ç¹ç»åº¦") private Double stationLongitude; @ApiModelProperty("ç«ç¹çº¬åº¦") private Double stationLatitude; } src/main/java/com/se/simu/enums/RadioEnums.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package com.se.simu.enums; public enum RadioEnums { SIMULATE("1", "模æ"), ACCESS("2", "æ¥å ¥"); private String code; private String name; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } RadioEnums(String code, String name) { this.code = code; this.name = name; } } src/main/java/com/se/simu/service/Impl/ProjectRelatedServiceImpl.java
@@ -12,6 +12,7 @@ import com.se.simu.helper.CaffeineHelper; import com.se.simu.service.ProjectRelatedService; import com.se.simu.utils.CustomWebClient; import com.se.simu.utils.EntityLibraryUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -308,12 +309,13 @@ if (!isExists) { token = (String) CaffeineHelper.get(CacheConstants.USER_CACHE_KEY + "entity_db_token"); } else { // è·åtoken LoginParams loginParams = new LoginParams(); loginParams.setUserid("admin"); loginParams.setPassword("admin"); loginEntity(loginParams); token = (String) CaffeineHelper.get(CacheConstants.USER_CACHE_KEY + "entity_db_token"); try { token = EntityLibraryUtils.login(); CaffeineHelper.remove(CacheConstants.USER_CACHE_KEY + "entity_db_token"); CaffeineHelper.put(CacheConstants.USER_CACHE_KEY + "entity_db_token", token); }catch (Exception e){ return "ç»å½å¤±è´¥ï¼"; } } log.info("token = " + token); // æ·»å formåæ° @@ -323,7 +325,7 @@ params.put("containCount", true); params.put("count", Objects.nonNull(entityTypeInfo.getCount()) ? entityTypeInfo.getCount() : 20); params.put("dbid", Objects.nonNull(entityTypeInfo.getDbid()) ? entityTypeInfo.getDbid() : "85257774fdb64e5f99f6778696cad02a"); params.put("layerid", Objects.nonNull(entityTypeInfo.getLayerid()) ? entityTypeInfo.getLayerid() : "f6ff4412-4886-4c4b-83f7-13de24ee8353"); params.put("layerid", Objects.nonNull(entityTypeInfo.getLayerid()) ? entityTypeInfo.getLayerid() : "8208c5be-adc1-4e7b-b952-37362e0bef32"); params.put("like", ""); params.put("querytype", "entity"); src/main/java/com/se/simu/utils/CsvToSQLiteUtils.java
@@ -157,6 +157,35 @@ } } /** * 读å CSV ä¿åæ¬å° * * @param array æ°æ® * @param tableName 表åç§° */ public static void readCsvSaveLocal(JSONArray array, String tableName) { // 1. å建SQLiteæ°æ®åºè¿æ¥ try (Connection conn = DriverManager.getConnection("jdbc:sqlite:rainfall.db")) { if (conn != null) { // 2. å建表ï¼å¦æä¸åå¨ï¼ createTableIfNotExists(conn, tableName); // 3. 设置SQLiteè¿æ¥çå符ç¼ç 为UTF-8 try (Statement stmt = conn.createStatement()) { // 设置SQLiteç¼ç 为UTF-8 stmt.execute("PRAGMA encoding = 'UTF-8';"); } // 4. å¼å§äºå¡ conn.setAutoCommit(false); // 5. 读åCSVæä»¶å¹¶æå ¥æ°æ® readCsvAndInsertDatas(array, conn, tableName); // 6. æäº¤äºå¡ conn.commit(); System.out.println("æ°æ®æåæå ¥å°SQLiteæ°æ®åºï¼"); } } catch (SQLException e) { System.err.println("SQLiteè¿æ¥å¤±è´¥: " + e.getMessage()); } } /** * 读å CSV ä¿åæ¬å° @@ -190,6 +219,41 @@ return array; } private static void readCsvAndInsertDatas(JSONArray array, Connection conn, String tableName) { String insertDataSql = "INSERT INTO " + tableName + " (station_name, rainfall, longitude, latitude, datetime) VALUES (?, ?, ?, ?, ?);"; try (PreparedStatement pstmt = conn.prepareStatement(insertDataSql)) { // æ¹éå¤§å° int batchSize = 1000; int count = 0; for (int i = 0; i < array.size(); i++) { JSONObject object = array.getJSONObject(i); // è·åæ¯ä¸åçæ°æ® String stationName = object.getString("stationName"); double rainfall = object.getDouble("rainfall"); double longitude = object.getDouble("longitude"); double latitude = object.getDouble("latitude"); String datetime = object.getString("datetime"); // 设置æå ¥æ°æ®çåæ° pstmt.setString(1, stationName); pstmt.setDouble(2, rainfall); pstmt.setDouble(3, longitude); pstmt.setDouble(4, latitude); pstmt.setString(5, datetime); // æ·»å å°æ¹å¤ç pstmt.addBatch(); count++; // æ¯batchSizeæ¡æ°æ®æ§è¡ä¸æ¬¡æ¹éæå ¥ if (count % batchSize == 0) { pstmt.executeBatch(); } } // æ§è¡å©ä½çæ¹éæå ¥ pstmt.executeBatch(); } catch (SQLException e) { System.err.println("æ¹éæå ¥æ°æ®æ¶åºé: " + e.getMessage()); } } private static JSONArray readCsvAndInsertDatas(String csvFilePath, Connection conn, String tableName) { // ä½¿ç¨ Apache Commons CSV 读åCSVæä»¶ src/main/java/com/se/simu/utils/EntityLibraryUtils.java
@@ -17,6 +17,7 @@ import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.time.LocalDateTime; import java.util.List; /**