From b4e7ea95934ccf139e569a009f7bf53827b109f0 Mon Sep 17 00:00:00 2001
From: xingjinshuang <xingjs@qq.com>
Date: 星期二, 24 十二月 2024 16:22:08 +0800
Subject: [PATCH] @xingjs@20241224@添加解析CSV文件相关实体类、方法;添加文件上传配置;添加开发文件上传相关工具类

---
 src/main/java/com/se/simu/controller/SimuController.java |  241 +++++++++++++++++++++++++++++++----------------
 1 files changed, 159 insertions(+), 82 deletions(-)

diff --git a/src/main/java/com/se/simu/controller/SimuController.java b/src/main/java/com/se/simu/controller/SimuController.java
index f0c40b4..00c08ac 100644
--- a/src/main/java/com/se/simu/controller/SimuController.java
+++ b/src/main/java/com/se/simu/controller/SimuController.java
@@ -1,7 +1,7 @@
 package com.se.simu.controller;
 
-import cn.hutool.json.JSONArray;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.se.simu.config.PropertiesConfig;
 import com.se.simu.domain.dto.GeDb;
 import com.se.simu.domain.dto.GeLayer;
 import com.se.simu.domain.po.DataPo;
@@ -9,27 +9,27 @@
 import com.se.simu.domain.vo.CreateSimuVo;
 import com.se.simu.domain.vo.R;
 import com.se.simu.domain.vo.SimuVo;
-import com.se.simu.helper.StringHelper;
-import com.se.simu.service.GedbService;
-import com.se.simu.service.ResultService;
-import com.se.simu.service.SimuService;
-import com.se.simu.service.UwService;
+import com.se.simu.service.*;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
 
-/**
- * 浠跨湡绠$悊
- *
- * @author WWW
- * @date   2024-09-18
- */
 @Api(tags = "浠跨湡绠$悊")
 @Slf4j
 @RestController
@@ -46,6 +46,12 @@
     SimuService simuService;
 
     @Resource
+    SimuFilesService simuFilesService;
+
+    @Resource
+    PropertiesConfig config;
+
+    @Resource
     ResultService resultService;
 
     private final List<String> FLOOD_TYPE = new ArrayList<>(Arrays.asList("娌欒", "闃叉按鏉�"));
@@ -57,17 +63,14 @@
             if (null == vo.getTotal() || vo.getTotal() < 1 || vo.getTotal() > 1000) {
                 return fail("闄嶉洦閲忎笉鑳戒负绌猴紝涓斿彇鍊煎湪1~1000涔嬮棿");
             }
-            if (null == vo.getDuration() || vo.getDuration() < 1 || vo.getDuration() > 120) {
-                return fail("浠跨湡鏃堕暱涓嶈兘涓虹┖锛屼笖鍙栧�煎湪1~120涔嬮棿");
+            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 (StringHelper.isEmpty(vo.getName())) {
-                vo.setName(StringHelper.YMDHMS2_FORMAT.format(new Date()));
             }
             if (null == vo.getNum() || vo.getNum() < 1) {
                 vo.setNum(simuService.getMaxId() + 1);
@@ -152,71 +155,12 @@
         }
     }
 
-    @ApiOperation(value = "褰撳墠鏃堕棿 *")
-    @GetMapping("/getTime")
-    public Object getTime() {
-        return System.currentTimeMillis();
-    }
-
-    @ApiOperation(value = "testCallExe *")
-    @GetMapping("/testCallExe")
-    public R<Object> testCallExe() {
-        try {
-            DataPo data = new DataPo();
-            data.setInPath("20241010095328");
-
-            String str = uwService.callExe(data);
-
-            return success(str);
-        } catch (Exception ex) {
-            return fail(ex, null);
-        }
-    }
-
-    @ApiOperation(value = "testResuslt *")
-    @GetMapping("/testResuslt")
-    public R<Object> testResuslt() {
-        try {
-            DataPo data = new DataPo();
-            data.setEpsg(4548);
-            data.setInPath("20241010095328");
-            data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00"));
-
-            resultService.process(data);
-
-            return success("ok");
-        } catch (Exception ex) {
-            return fail(ex, null);
-        }
-    }
-
-    @ApiOperation(value = "testSww2Tif *")
-    @GetMapping("/testSww2Tif")
-    public R<Object> testSww2Tif() {
-        try {
-            DataPo data = new DataPo();
-            data.setEpsg(4548);
-            data.setInPath("20241010095328");
-            data.setStartTime(StringHelper.YMDHMS_FORMAT.parse("2024-09-30 00:00:00"));
-
-            Object rs = uwService.copeDrainFiles(data);
-
-            return success(rs);
-        } catch (Exception ex) {
-            return fail(ex, null);
-        }
-    }
-
-
-    /**
-     * 浣跨敤绌洪棿鑼冨洿鏌ヨ 绠$偣,绠$嚎,寤虹瓚鐗� 3涓浘灞傦紝涓旀瘡涓浘灞傜殑鏁伴噺澶т簬0锛岃繑鍥� true銆�
-     */
     @ApiOperation(value = "闄嶆按鑼冨洿鏍¢獙")
-    @GetMapping("/rangeVerif")
-    public R<Object> rangeVerif(@RequestParam @ApiParam("鏈�灏廥")  Double minx,
-                                @RequestParam @ApiParam("鏈�灏弝")  Double miny,
-                                @RequestParam @ApiParam("鏈�澶")  Double maxx,
-                                @RequestParam @ApiParam("鏈�澶")  Double maxy) {
+    @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);
@@ -224,12 +168,145 @@
             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);
-            return success(gedbService.queryBboxCount(token,db, layers));
+
+            return success(gedbService.queryBboxCount(token, db, layers));
+        } catch (Exception ex) {
+            return fail(ex, false);
+        }
+    }
+
+    @ApiOperation("test-涓婁紶澶氫釜鏂囦欢")
+    @ApiImplicitParam(name = "schemeName", value = "鏂规鍚嶇О", required = true, dataType = "String", paramType = "query", example = "edf243d3-3bec-4c51-9930-1ba862d9b5a3", dataTypeClass = String.class)
+    @PostMapping("/uploadMultipleFiles")
+    public ResponseEntity<String> uploadMultipleFiles(List<MultipartFile> files, @RequestParam("schemeName") String schemeName) throws IOException {
+        // 涓婁紶鏂囦欢璺緞
+        String targetDir = Paths.get(config.getOutPath(), schemeName).toString();
+        log.info("鐩爣鐩綍: {}", targetDir);
+        createDirectoriesIfNotExists(targetDir);
+        List<CompletableFuture<Void>> uploadTasks = files.stream()
+                .map(file -> CompletableFuture.runAsync(() -> {
+                    try {
+                        file.transferTo(Paths.get(targetDir, file.getOriginalFilename()));
+                    } catch (IOException e) {
+                        log.error("鏂囦欢涓婁紶澶辫触", e);
+                        throw new RuntimeException("鏂囦欢涓婁紶澶辫触");
+                    }
+                }))
+                .collect(Collectors.toList());
+
+        CompletableFuture<Void> allUploadTasks = CompletableFuture.allOf(uploadTasks.toArray(new CompletableFuture[0]));
+
+        try {
+            allUploadTasks.get();
+            return ResponseEntity.ok("鎵�鏈夋枃浠朵笂浼犳垚鍔�");
+        } catch (InterruptedException | ExecutionException e) {
+            log.error("鏂囦欢涓婁紶澶辫触", e);
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("鏂囦欢涓婁紶澶辫触");
+        }
+    }
+
+
+    /**
+     * @param targetDir 鐩爣鐩綍
+     * @throws IOException
+     */
+    private void createDirectoriesIfNotExists(String targetDir) throws IOException {
+        Path path = Paths.get(targetDir);
+        if (!Files.exists(path)) {
+            Files.createDirectories(path);
+        }
+    }
+
+    /**
+     * 鏂囦欢鍒涘缓妯℃嫙
+     *
+     * @param vo VO
+     * @return {@link R}<{@link Object}>
+     */
+    @ApiOperation(value = "鏂囦欢鍒涘缓")
+    @PostMapping(value = "/file_create", produces = "application/json; charset=UTF-8")
+    public R<Object> fileCreate(List<MultipartFile> files,@RequestBody @ApiParam("鍒涘缓浠跨湡瑙嗗浘绫�") CreateSimuVo vo) throws IOException {
+        // 涓婁紶鏂囦欢璺緞
+        String targetDir = Paths.get(config.getOutPath(), "files").toString();
+        log.info("鐩爣鐩綍: {}", targetDir);
+        createDirectoriesIfNotExists(targetDir);
+        List<CompletableFuture<Void>> uploadTasks = files.stream()
+                .map(file -> CompletableFuture.runAsync(() -> {
+                    try {
+                        file.transferTo(Paths.get(targetDir, file.getOriginalFilename()));
+                    } catch (IOException e) {
+                        log.error("鏂囦欢涓婁紶澶辫触", e);
+                        throw new RuntimeException("鏂囦欢涓婁紶澶辫触");
+                    }
+                }))
+                .collect(Collectors.toList());
+        CompletableFuture<Void> allUploadTasks = CompletableFuture.allOf(uploadTasks.toArray(new CompletableFuture[0]));
+        try {
+            allUploadTasks.get();
+            log.info("鏂囦欢涓婁紶鎴愬姛");
+        } catch (InterruptedException | ExecutionException e) {
+            log.error("鏂囦欢涓婁紶澶辫触", e);
+        }
+
+        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);
+                }
+            }
+            boolean flag = simuFilesService.createByfiles(vo);
+            return success(flag, flag ? "鎴愬姛" : "澶辫触");
         } catch (Exception ex) {
             return fail(ex, null);
         }
     }
+
+
+
+
+
+
+
+
 }

--
Gitblit v1.9.3