ソースを参照

完成raster 模块

wuweihao 5 年 前
コミット
a1771188e1

ファイルの差分が大きいため隠しています
+ 4 - 2
src/main/java/com/fd/constant/Command.java


+ 72 - 39
src/main/java/com/fd/controller/RasterController.java

@@ -6,6 +6,7 @@ import com.fd.constant.TypeCode;
 import com.fd.dto.MyQueue;
 import com.fd.dto.PageDto;
 import com.fd.entity.FileEntity;
+import com.fd.entity.OutputFileEntity;
 import com.fd.server.CmdServer;
 import com.fd.server.FileServer;
 import com.fd.server.RasterServer;
@@ -83,14 +84,16 @@ public class RasterController {
             return new R(50008,MsgCode.E50008);
         }
 
-        return fileServer.uploadRasterBigFile(file, TypeCode.FILE_TYPE_RASTER);
+//        return fileServer.uploadRasterBigFile(file, TypeCode.FILE_TYPE_RASTER);
+        return rasterServer.uploadBigFile(file);
+
     }
 
     @ApiOperation("获取栅格数据列表")
     @PostMapping(value = "list")
     private R list(@RequestBody PageDto param){
         log.info("run list");
-        return fileServer.findByType(TypeCode.FILE_TYPE_RASTER, param);
+        return rasterServer.findByType(TypeCode.FILE_TYPE_RASTER, param);
     }
 
 
@@ -108,10 +111,14 @@ public class RasterController {
     @GetMapping("command/judge/coord/{fileId}/")
     private R cmdJudgeCoord(@PathVariable("fileId") Long fileId) {
         log.info("run cmdJudgeCoord: {}", fileId);
-        FileEntity entity = fileServer.findById(fileId);
+//        FileEntity entity = fileServer.findById(fileId);
+
+
+        OutputFileEntity entity = rasterServer.findById(fileId);
+
 
         String cmd = Command.RASTER_JUDGE_COORD;
-        cmd = cmd.replace("@inputFile", entity.getFileUrl());
+        cmd = cmd.replace("@inputFile", entity.getUploadPath());
         log.info("cmd: {}", cmd);
 
         Integer isJudge = cmdServer.exeCmdRasterJudgeCoord(cmd);
@@ -119,7 +126,7 @@ public class RasterController {
         if (1000 == isJudge){
             log.info("need to transform");
             // 严格坐标转换
-            entity = cmdTansformGdalwarpStrict(fileId);
+            entity = cmdTansformGdalwarpStrict(entity);
         } else if (0 == isJudge){
             log.info("not to transform");
         } else {
@@ -136,7 +143,7 @@ public class RasterController {
     @GetMapping("command/osgeo/{fileId}/")
     private R cmdOsgeo(@PathVariable("fileId") Long fileId) {
         log.info("run cmdOsgeo: {}", fileId);
-        FileEntity entity = fileServer.findById(fileId);
+        OutputFileEntity entity = rasterServer.findById(fileId);
 
         String fileName = StringUtils.substringBeforeLast(entity.getFileName(), ".");
         // fileName_tiles
@@ -147,27 +154,35 @@ public class RasterController {
 
 
         String cmd = Command.RASTER_SLICE_OSGEO;
-        cmd = cmd.replace("@inputFile", entity.getFileUrl());
+        cmd = cmd.replace("@inputFile", entity.getCoordStrictPath());
         cmd = cmd.replace("@outputFile", outFilePath);
         log.info("cmd: {}", cmd);
 
 
-        FileEntity fileEntity = new FileEntity();
-        fileEntity.setFileName(fileName);
-        fileEntity.setFileUrl(INPUT_FILE_PATH + fileName);
-        fileEntity.setCreateTime(new Date());
-        fileEntity.setUpdateTime(new Date());
-        fileEntity.setType(TypeCode.FILE_TYPE_RASTER);
-        // 设个默认经度给前端显示
-        fileEntity.setProgress(1);
-        fileEntity.setStatus(6);
+//        FileEntity fileEntity = new FileEntity();
+//        fileEntity.setFileName(fileName);
+//        fileEntity.setFileUrl(INPUT_FILE_PATH + fileName);
+//        fileEntity.setCreateTime(new Date());
+//        fileEntity.setUpdateTime(new Date());
+//        fileEntity.setType(TypeCode.FILE_TYPE_RASTER);
+//        // 设个默认进度给前端显示
+//        fileEntity.setProgress(1);
+//        fileEntity.setStatus(6);
+//
+//        fileEntity = fileServer.save(fileEntity);
+
+        // 设个默认进度给前端显示
+        entity.setProgress(1);
+        entity.setStatus(6);
+        entity.setUpdateTime(new Date());
+        entity.setSlicePath(outFilePath);
 
-        fileEntity = fileServer.save(fileEntity);
+        entity = rasterServer.save(entity);
 
         // 多线程运行切片
-        new Thread(new RasterSliceThread(cmd, fileEntity)).start();
+        new Thread(new RasterSliceThread(cmd, entity)).start();
 
-        return new R(200, fileEntity) ;
+        return new R(200, entity) ;
     }
 
 
@@ -175,9 +190,9 @@ public class RasterController {
 
         private String cmd;
 
-        private FileEntity entity;
+        private OutputFileEntity entity;
 
-        private RasterSliceThread(String cmd, FileEntity entity){
+        private RasterSliceThread(String cmd, OutputFileEntity entity){
             this.cmd = cmd;
             this.entity = entity;
         }
@@ -188,14 +203,15 @@ public class RasterController {
             Integer integer = cmdServer.exeCmdRasterSlice(cmd, entity);
             if (integer != 0) {
                 log.info("error command exeCmdRasterSlice");
-                // 如果命令运行失败,删除刚才创建的实体类
-                fileServer.deleteById(entity.getId());
+                // 如果命令运行失败,状态改为0
+                entity.setStatus(0);
+                rasterServer.save(entity);
                 return;
             }
 
             // 修改状态, 告诉前端切片完成
             entity.setStatus(5);
-            fileServer.save(entity);
+            rasterServer.save(entity);
             log.warn("end RasterSliceThread");
         }
     }
@@ -204,7 +220,7 @@ public class RasterController {
     @GetMapping("progress/{fileId}/")
     private R getProgress(@PathVariable("fileId") Long fileId) {
         log.info("run getProgress: {}", fileId);
-        FileEntity entity = fileServer.findById(fileId);
+        OutputFileEntity entity = rasterServer.findById(fileId);
         return new R(200, entity);
     }
 
@@ -218,16 +234,26 @@ public class RasterController {
 
 
     // 严格坐标转换
-    private FileEntity cmdTansformGdalwarpStrict(Long fileId){
-        log.info("run cmdTansformGdalwarpStrict: {}", fileId);
-        FileEntity entity = fileServer.findById(fileId);
+    private OutputFileEntity cmdTansformGdalwarpStrict(OutputFileEntity entity){
+        log.info("run cmdTansformGdalwarpStrict");
 
         String fileName = StringUtils.substringBeforeLast(entity.getFileName(), ".");
 
+        String outFileStep1 = OUTPUT_FILE_PATH + "transform";
+        FileUtils.createDir(outFileStep1);
+        outFileStep1 = outFileStep1 + File.separator + entity.getFileName();
+
         String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1;
         String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2;
-        step_1 = step_1.replace("@fileName",fileName);
-        step_2 = step_2.replace("@fileName",fileName);
+        step_1 = step_1.replace("@inputFile", entity.getUploadPath());
+        step_1 = step_1.replace("@outputFile", outFileStep1);
+
+        String outFileStep2 = OUTPUT_FILE_PATH + "transform_strict";
+        FileUtils.createDir(outFileStep2);
+        outFileStep2 = outFileStep2 + File.separator + entity.getFileName();
+
+        step_2 = step_2.replace("@inputFile", outFileStep1);
+        step_2 = step_2.replace("@outputFile", outFileStep2);
         log.info("cmd1: {}", step_1);
         log.info("cmd2: {}", step_2);
 
@@ -238,17 +264,24 @@ public class RasterController {
             return null;
         }
 
-        FileEntity fileEntity = new FileEntity();
-        fileEntity.setFileName(entity.getFileName());
-        fileEntity.setFileUrl(INPUT_FILE_PATH + "transform_strict" + File.separator + entity.getFileName());
-        fileEntity.setCreateTime(new Date());
-        fileEntity.setUpdateTime(new Date());
-        fileEntity.setType(TypeCode.FILE_TYPE_RASTER);
-        fileEntity.setStatus(4);
+        entity.setStatus(4);
+        entity.setUpdateTime(new Date());
+        entity.setCoordGeneralPath(outFileStep1);
+        entity.setCoordStrictPath(outFileStep2);
+
+        entity = rasterServer.save(entity);
 
-        fileEntity = fileServer.save(fileEntity);
+//        FileEntity fileEntity = new FileEntity();
+//        fileEntity.setFileName(entity.getFileName());
+//        fileEntity.setFileUrl(INPUT_FILE_PATH + "transform_strict" + File.separator + entity.getFileName());
+//        fileEntity.setCreateTime(new Date());
+//        fileEntity.setUpdateTime(new Date());
+//        fileEntity.setType(TypeCode.FILE_TYPE_RASTER);
+//        fileEntity.setStatus(4);
+//
+//        fileEntity = fileServer.save(fileEntity);
 
-        return fileEntity;
+        return entity;
     }
 
 }

+ 3 - 0
src/main/java/com/fd/entity/OutputFileEntity.java

@@ -25,6 +25,9 @@ public class OutputFileEntity extends BaseEntity implements Serializable {
     private String fileName; // 文件名称
 
     @Column
+    private String uploadPath; // 上传文件路径
+
+    @Column
     private String unZipPath; // 解压文件路径
 
     @Column

+ 2 - 1
src/main/java/com/fd/server/CmdServer.java

@@ -2,6 +2,7 @@ package com.fd.server;
 
 
 import com.fd.entity.FileEntity;
+import com.fd.entity.OutputFileEntity;
 import com.fd.util.R;
 
 /**
@@ -25,5 +26,5 @@ public interface CmdServer {
 
     Integer exeCmdRasterJudgeCoord(String cmd);
 
-    Integer exeCmdRasterSlice(String cmd, FileEntity entity);
+    Integer exeCmdRasterSlice(String cmd, OutputFileEntity entity);
 }

+ 11 - 0
src/main/java/com/fd/server/RasterServer.java

@@ -1,7 +1,10 @@
 package com.fd.server;
 
 
+import com.fd.dto.PageDto;
+import com.fd.entity.OutputFileEntity;
 import com.fd.util.R;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * Created by Owen on 2019/11/21 0021 15:29
@@ -10,4 +13,12 @@ public interface RasterServer {
 
 
     R moveFileToServer(Long fileId);
+
+    R uploadBigFile(MultipartFile file);
+
+    R findByType(String fileTypeRaster, PageDto param);
+
+    OutputFileEntity findById(Long fileId);
+
+    OutputFileEntity save(OutputFileEntity fileSchedule);
 }

+ 9 - 3
src/main/java/com/fd/server/impl/CmdServerImpl.java

@@ -2,7 +2,9 @@ package com.fd.server.impl;
 
 import com.fd.constant.MsgCode;
 import com.fd.entity.FileEntity;
+import com.fd.entity.OutputFileEntity;
 import com.fd.repository.FileRepository;
+import com.fd.repository.OutputFileRepository;
 import com.fd.server.CmdServer;
 import com.fd.util.R;
 import lombok.extern.log4j.Log4j2;
@@ -29,6 +31,10 @@ public class CmdServerImpl implements CmdServer {
     @Autowired
     private FileRepository fileRepository;
 
+    @Autowired
+    private OutputFileRepository outputFileRepository;
+
+
     @Override
     public R exeCmd(String commandStr) {
         Integer isCmd = exeCmdSingle(commandStr);
@@ -331,7 +337,7 @@ public class CmdServerImpl implements CmdServer {
      * @return
      */
     @Override
-    public Integer exeCmdRasterSlice(String commandStr, FileEntity entity) {
+    public Integer exeCmdRasterSlice(String commandStr, OutputFileEntity entity) {
         log.warn("run exeCmdRasterSlice");
         Integer isCmd = null; // 命令运行结果 1:失败, 0:成功
         try {
@@ -364,13 +370,13 @@ public class CmdServerImpl implements CmdServer {
                     // 100,1000都会当一次
                     if (str.length() == 2) {
                         pre = pre + 5;
-                        System.out.println("pre: " + pre);
+//                        System.out.println("pre: " + pre);
                         log.warn("pre: {}", pre);
                         // 能被2整除的存一下db
                         if (pre % 2 == 0) {
                             entity.setProgress(pre);
                             entity.setUpdateTime(new Date());
-                            fileRepository.save(entity);
+                            outputFileRepository.save(entity);
                         }
                     }
                 }

+ 85 - 0
src/main/java/com/fd/server/impl/RasterServerImpl.java

@@ -2,8 +2,11 @@ package com.fd.server.impl;
 
 import com.fd.constant.MsgCode;
 import com.fd.constant.TypeCode;
+import com.fd.dto.PageDto;
 import com.fd.entity.FileEntity;
+import com.fd.entity.OutputFileEntity;
 import com.fd.repository.FileRepository;
+import com.fd.repository.OutputFileRepository;
 import com.fd.server.RasterServer;
 import com.fd.server.VectorServer;
 import com.fd.util.FileUtils;
@@ -11,6 +14,9 @@ import com.fd.util.R;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -42,6 +48,9 @@ public class RasterServerImpl implements RasterServer {
     @Autowired
     private FileRepository fileRepository;
 
+    @Autowired
+    private OutputFileRepository outputFileRepository;
+
 
     @Override
     public R moveFileToServer(Long fileId) {
@@ -55,4 +64,80 @@ public class RasterServerImpl implements RasterServer {
         FileUtils.base64ToFileWriter(entity.getFileUrl(), MOVE_FILE_TO_SERVER);
         return new R(200, MsgCode.SUCCESS);
     }
+
+    @Override
+    public R uploadBigFile(MultipartFile file) {
+        long start = System.currentTimeMillis();
+        if (file.isEmpty() || file.getSize() <= 0) {
+            log.info("文件为空");
+            return new R(50001, MsgCode.E50001);
+        }
+
+        // 文件名全名
+        String fullFileName = file.getOriginalFilename();
+
+        // 创建目录路径
+        FileUtils.createDir(INPUT_FILE_PATH);
+
+        // 拼接唯一文件名
+        long timeMillis = System.currentTimeMillis();
+//        String fileName = timeMillis + "_" + fullFileName;
+        String fileName = fullFileName;
+
+        // 文件保存路径
+        String filePath = INPUT_FILE_PATH + fileName;
+
+        // 写文件到本地
+
+        try {
+            FileUtils.bigFileWrite(file.getInputStream(), filePath);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        log.info("filePath: {}", filePath);
+
+        // 保存信息到db
+        FileEntity entity = new FileEntity();
+        entity.setFileName(fileName);
+        entity.setFileUrl(filePath);
+        entity.setCreateTime(new Date());
+        entity.setUpdateTime(new Date());
+        entity.setType(TypeCode.FILE_TYPE_RASTER);
+        entity.setStatus(2);
+        fileRepository.save(entity);
+
+        OutputFileEntity outputFile = new OutputFileEntity();
+        outputFile.setUploadId(entity.getId());
+        outputFile.setUploadPath(entity.getFileUrl());
+        outputFile.setFileName(entity.getFileName());
+        outputFile.setStatus(2);
+        outputFile.setType(TypeCode.FILE_TYPE_RASTER);
+        outputFile.setCreateTime(new Date());
+        outputFile.setUpdateTime(new Date());
+
+        outputFile = outputFileRepository.save(outputFile);
+        long end = System.currentTimeMillis();
+        log.info("end uploadBigFile, total time: {} s", (end - start)/1000);
+        return new R(200, outputFile);
+    }
+
+    @Override
+    public R findByType(String fileTypeRaster, PageDto pageDto) {
+        Page<OutputFileEntity> page = outputFileRepository.findByType(fileTypeRaster, PageRequest.of(pageDto.getPageNum(), pageDto.getPageSize(), Sort.by("createTime").descending()));
+        return new R(200, page);
+    }
+
+    @Override
+    public OutputFileEntity findById(Long fileId) {
+        Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
+        if (o.isPresent()) {
+            return o.get();
+        }
+        return null;
+    }
+
+    @Override
+    public OutputFileEntity save(OutputFileEntity fileSchedule) {
+        return outputFileRepository.save(fileSchedule);
+    }
 }