Parcourir la source

处理好多线程跟服务注入问题

wuweihao il y a 5 ans
Parent
commit
f71c85015b

+ 60 - 52
src/main/java/com/fd/controller/ModelController.java

@@ -10,6 +10,7 @@ import com.fd.entity.FileEntity;
 import com.fd.entity.OutputFileEntity;
 import com.fd.server.ModelServer;
 import com.fd.server.impl.ModelServerImpl;
+import com.fd.thread.AsyncTask;
 import com.fd.util.FileUtils;
 import com.fd.util.R;
 import com.fd.util.RegexUtils;
@@ -17,6 +18,7 @@ import com.fd.util.SpringContext;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.*;
@@ -39,15 +41,21 @@ import java.util.concurrent.TimeUnit;
 @RestController
 public class ModelController {
 
-//    @Value("${input.file.path.model}")
-//    private String INPUT_FILE_PATH;
+    @Value("${input.file.path.model}")
+    private String INPUT_FILE_PATH;
+
+    @Value("${output.file.path.model}")
+    private String OUTPUT_FILE_PATH;
+
+//    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/model/";
 //
-//    @Value("${output.file.path.model}")
-//    private String OUTPUT_FILE_PATH;
+//    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/model/";
 
-    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/model/";
+    @Autowired
+    private AsyncTask asyncTask;
 
-    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/model/";
+    @Autowired
+    private ModelServer modelServer;
 
 
     /**
@@ -70,7 +78,7 @@ public class ModelController {
     private R checkFileName(@PathVariable("fileName") String fileName) {
         log.info("run checkFileName {}",fileName);
 
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
 
         // 文件是否包含中文字符
         if (RegexUtils.regexChinese(fileName)) {
@@ -94,7 +102,7 @@ public class ModelController {
     private R upload(@RequestParam("file") MultipartFile file) {
         log.info("run upload");
 
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
 
         // 文件名全名
         String fileName = file.getOriginalFilename();
@@ -122,7 +130,7 @@ public class ModelController {
     private R fileUnzip(@PathVariable("fileId") Long fileId) {
         log.info("run fileUnzip: {}", fileId);
 
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
         OutputFileEntity entity = modelServer.findById(fileId);
 
         String outputPath = OUTPUT_FILE_PATH + "unzip";
@@ -149,7 +157,7 @@ public class ModelController {
     @ApiOperation("获取3D模型数据列表")
     @PostMapping(value = "list")
     private R list(@RequestBody PageDto param) {
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
         return modelServer.findByType(TypeCode.FILE_TYPE_MODEL, param);
     }
 
@@ -159,7 +167,7 @@ public class ModelController {
     @GetMapping("delete/{fileId}/")
     private R deleteFile(@PathVariable("fileId") Long fileId) {
         log.info("run deleteFile: {}", fileId);
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
         OutputFileEntity entity = modelServer.findById(fileId);
         entity.setResStatus(1);
         modelServer.save(entity);
@@ -168,17 +176,17 @@ public class ModelController {
         fileEntity.setResStatus(1);
         modelServer.saveInputFile(fileEntity);
 
-        runDeleteThread(fileId, modelServer);
+        asyncTask.modelDelete(fileId, modelServer);
         return new R(200, MsgCode.SUCCESS);
     }
 
 
-    @Async("taskExecutor")
-    public void runDeleteThread(Long fileId, ModelServer modelServerv) {
-        log.info("run runDeleteThread");
-        modelServerv.deleteById(fileId);
-        log.info("end runDeleteThread id : {}", fileId);
-    }
+//    @Async("taskExecutor")
+//    public void runDeleteThread(Long fileId, ModelServer modelServerv) {
+//        log.info("run runDeleteThread");
+//        modelServerv.deleteById(fileId);
+//        log.info("end runDeleteThread id : {}", fileId);
+//    }
 
 
 
@@ -186,7 +194,7 @@ public class ModelController {
     @GetMapping("command/osgb/{fileId}/")
     private R cmdModelSlice(@PathVariable("fileId") Long fileId) {
         log.info("run cmdModelSlice: {}", fileId);
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
         OutputFileEntity entity = modelServer.findById(fileId);
 
 
@@ -224,7 +232,7 @@ public class ModelController {
         entity.setSlicePath(outputPath);
 
         entity = modelServer.save(entity);
-            sliceThread(modelQueue, modelServer);
+            asyncTask.modelSlice(modelQueue, modelServer);
             return new R(200, entity);
         }
         // 入队失败
@@ -232,44 +240,44 @@ public class ModelController {
 
     }
 
-    @Async("taskExecutor")
-    public void sliceThread(BlockingQueue<MyQueue> queue, ModelServer modelServer){
-        try {
-            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
-            if (data != null) {
-                log.warn("run ModelSliceConsumerThread");
-                log.info("cmd: {}", data.getStr());
-                Integer integer = modelServer.cmdSlice(data.getStr());
-                OutputFileEntity entity = data.getOutputFile();
-
-                if (integer != 0) {
-                    log.info("error command sliceThread");
-                    // 如果命令运行失败,删除刚才创建的实体类
-                    // o:代表切片失败
-                    entity.setStatus(0);
-                    entity.setUpdateTime(new Date());
-                    modelServer.save(entity);
-                    return;
-                }
-
-                entity.setStatus(5);
-                entity.setUpdateTime(new Date());
-                modelServer.save(entity);
-                log.warn("end ModelSliceConsumerThread");
-            }
-        } catch (Exception e) {
-            Thread.currentThread().interrupt();
-            e.printStackTrace();
-        }
-
-    }
+//    @Async("taskExecutor")
+//    public void sliceThread(BlockingQueue<MyQueue> queue, ModelServer modelServer){
+//        try {
+//            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+//            if (data != null) {
+//                log.warn("run ModelSliceConsumerThread");
+//                log.info("cmd: {}", data.getStr());
+//                Integer integer = modelServer.cmdSlice(data.getStr());
+//                OutputFileEntity entity = data.getOutputFile();
+//
+//                if (integer != 0) {
+//                    log.info("error command sliceThread");
+//                    // 如果命令运行失败,删除刚才创建的实体类
+//                    // o:代表切片失败
+//                    entity.setStatus(0);
+//                    entity.setUpdateTime(new Date());
+//                    modelServer.save(entity);
+//                    return;
+//                }
+//
+//                entity.setStatus(5);
+//                entity.setUpdateTime(new Date());
+//                modelServer.save(entity);
+//                log.warn("end ModelSliceConsumerThread");
+//            }
+//        } catch (Exception e) {
+//            Thread.currentThread().interrupt();
+//            e.printStackTrace();
+//        }
+//
+//    }
 
 
     @ApiOperation("移动数据到服务器上")
     @PostMapping("move/{fileId}/")
     private R moveFile(@PathVariable("fileId") Long fileId, @RequestBody ConfigJsonDto param) {
         log.info("run moveFile: {}", fileId);
-        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
+//        ModelServer modelServer = SpringContext.getBean(ModelServerImpl.class);
         return modelServer.moveFileToServer(fileId, param);
     }
 

+ 193 - 182
src/main/java/com/fd/controller/RasterController.java

@@ -14,6 +14,7 @@ import com.fd.server.CmdServer;
 import com.fd.server.RasterServer;
 import com.fd.server.impl.CmdServerImpl;
 import com.fd.server.impl.RasterServerImpl;
+import com.fd.thread.AsyncTask;
 import com.fd.util.FileUtils;
 import com.fd.util.R;
 import com.fd.util.RegexUtils;
@@ -21,6 +22,7 @@ import com.fd.util.SpringContext;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.*;
@@ -44,15 +46,21 @@ import java.util.concurrent.TimeUnit;
 @RestController
 public class RasterController {
 
-//    @Value("${input.file.path.raster}")
-//    private String INPUT_FILE_PATH;
-//
-//    @Value("${output.file.path.raster}")
-//    private String OUTPUT_FILE_PATH;
+    @Value("${input.file.path.raster}")
+    private String INPUT_FILE_PATH;
+
+    @Value("${output.file.path.raster}")
+    private String OUTPUT_FILE_PATH;
 
-    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/raster/";
+    @Autowired
+    private AsyncTask asyncTask;
 
-    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/raster/";
+    @Autowired
+    private RasterServer rasterServer;
+
+//    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/raster/";
+//
+//    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/raster/";
 
 
     private static BlockingQueue<MyQueue> sliceQueue = new LinkedBlockingQueue<MyQueue>(2);
@@ -67,7 +75,7 @@ public class RasterController {
     private R checkFileName(@PathVariable("fileName") String fileName) {
         log.info("run checkFileName: {}",fileName);
 
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
 
 
         // 文件是否包含中文字符
@@ -97,7 +105,7 @@ public class RasterController {
         log.info("coord: {}", Arrays.toString(coord));
         String strCoord = Arrays.toString(coord);
 
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
 
         // 文件名全名
         String fileName = file.getOriginalFilename();
@@ -166,7 +174,7 @@ public class RasterController {
     @ApiOperation("获取栅格数据列表")
     @PostMapping(value = "list")
     private R list(@RequestBody PageDto param){
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
         return rasterServer.findByType(TypeCode.FILE_TYPE_RASTER, param);
     }
 
@@ -176,7 +184,7 @@ public class RasterController {
     @GetMapping("delete/{fileId}/")
     private R deleteFile(@PathVariable("fileId") Long fileId) {
         log.info("run deleteFile: {}", fileId);
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
 
         OutputFileEntity entity = rasterServer.findById(fileId);
         entity.setResStatus(1);
@@ -186,18 +194,19 @@ public class RasterController {
         fileEntity.setResStatus(1);
         rasterServer.saveInputFile(fileEntity);
 
-        runDeleteThread(fileId, rasterServer);
+//        runDeleteThread(fileId, rasterServer);
+        asyncTask.rasterDelete(fileId, rasterServer);
 
         log.info("delete raster id: {}", fileId);
         return new R(200, MsgCode.SUCCESS);
     }
 
-    @Async("taskExecutor")
-    public void runDeleteThread(Long fileId, RasterServer rasterServer) {
-        log.info("run RasterDeleteThread");
-        rasterServer.deleteById(fileId);
-        log.info("end RasterDeleteThread: {}", fileId);
-    }
+//    @Async("taskExecutor")
+//    public void runDeleteThread(Long fileId, RasterServer rasterServer) {
+//        log.info("run RasterDeleteThread");
+//        rasterServer.deleteById(fileId);
+//        log.info("end RasterDeleteThread: {}", fileId);
+//    }
 
 
 
@@ -206,7 +215,7 @@ public class RasterController {
     private R cmdJudgeCoord(@PathVariable("fileId") Long fileId) {
         log.info("run cmdJudgeCoord: {}", fileId);
 
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
 
         OutputFileEntity entity = rasterServer.findById(fileId);
 
@@ -238,61 +247,62 @@ public class RasterController {
             log.info("coord entity: {}",entity);
             log.info("coord producer update time: {}", entity.getUpdateTime());
 
-            judgeCoordConsumerThread(coordQueue, rasterServer);
+//            judgeCoordConsumerThread(coordQueue, rasterServer);
+            asyncTask.rasterJudgeCoordConsumerThread(coordQueue, rasterServer, OUTPUT_FILE_PATH);
 
             return new R(200, entity);
         }
         return new R(52000, MsgCode.E52000);
     }
 
-    @Async("taskExecutor")
-    public void judgeCoordConsumerThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer){
-        MyQueue data = null;
-        try {
-            data = queue.poll(3, TimeUnit.SECONDS);
-
-            if (data != null) {
-                log.warn("run JudgeCoordConsumerThread");
-
-                // 先让它等一秒
-                log.info("start time: {}", new Date());
-                Thread.sleep(2000);
-                log.info("end time: {}", new Date());
-
-                OutputFileEntity  entity = data.getOutputFile();
-
-                log.info("CoordType: {}", entity.getCoordType());
-
-                if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())){
-                    log.info("need to transform");
-                    // 严格坐标转换
-                    entity = cmdTansformGdalwarpStrict(entity, rasterServer);
-                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())){
-                    log.info("not to transform");
-                    // 4:未切片
-                    entity.setStatus(4);
-                    // 不需要转,就把上传文件路径复制到严格坐标路径上
-                    entity.setCoordStrictPath(entity.getUploadPath());
-                    entity.setUpdateTime(new Date());
-                    entity = rasterServer.save(entity);
-                    log.info("coord Consumer update time: {}", entity.getUpdateTime());
-                    log.info("JudgeCoordConsumerThread update entity: {}", entity);
-                } else {
-                    log.info("error exeCmd");
-                    entity.setStatus(0);
-                    entity.setUpdateTime(new Date());
-                    rasterServer.save(entity);
-                }
-                log.warn("end JudgeCoordConsumerThread id: {}", entity.getId());
-
-            }
-
-        } catch (Exception e) {
-            Thread.currentThread().interrupt();
-            e.printStackTrace();
-        }
-
-    }
+//    @Async("taskExecutor")
+//    public void judgeCoordConsumerThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer){
+//        MyQueue data = null;
+//        try {
+//            data = queue.poll(3, TimeUnit.SECONDS);
+//
+//            if (data != null) {
+//                log.warn("run JudgeCoordConsumerThread");
+//
+//                // 先让它等一秒
+//                log.info("start time: {}", new Date());
+//                Thread.sleep(2000);
+//                log.info("end time: {}", new Date());
+//
+//                OutputFileEntity  entity = data.getOutputFile();
+//
+//                log.info("CoordType: {}", entity.getCoordType());
+//
+//                if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())){
+//                    log.info("need to transform");
+//                    // 严格坐标转换
+//                    entity = cmdTansformGdalwarpStrict(entity, rasterServer);
+//                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())){
+//                    log.info("not to transform");
+//                    // 4:未切片
+//                    entity.setStatus(4);
+//                    // 不需要转,就把上传文件路径复制到严格坐标路径上
+//                    entity.setCoordStrictPath(entity.getUploadPath());
+//                    entity.setUpdateTime(new Date());
+//                    entity = rasterServer.save(entity);
+//                    log.info("coord Consumer update time: {}", entity.getUpdateTime());
+//                    log.info("JudgeCoordConsumerThread update entity: {}", entity);
+//                } else {
+//                    log.info("error exeCmd");
+//                    entity.setStatus(0);
+//                    entity.setUpdateTime(new Date());
+//                    rasterServer.save(entity);
+//                }
+//                log.warn("end JudgeCoordConsumerThread id: {}", entity.getId());
+//
+//            }
+//
+//        } catch (Exception e) {
+//            Thread.currentThread().interrupt();
+//            e.printStackTrace();
+//        }
+//
+//    }
 
 
     @ApiOperation("栅格数据切片命令")
@@ -306,7 +316,7 @@ public class RasterController {
         if (!RegexUtils.regexInt(layerMax)){
             return new R(50010, MsgCode.E50010) ;
         }
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
 //        CmdServer cmdServer = SpringContext.getBean(CmdServerImpl.class);
 
         OutputFileEntity entity = rasterServer.findById(fileId);
@@ -350,43 +360,44 @@ public class RasterController {
 
             entity = rasterServer.save(entity);
 
-            sliceThread(sliceQueue, rasterServer);
+//            sliceThread(sliceQueue, rasterServer);
+            asyncTask.rasterSliceThread(sliceQueue, rasterServer);
 
             return new R(200, entity) ;
         }
         return new R(52000, MsgCode.E52000);
     }
 
-    @Async("taskExecutor")
-    public void sliceThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer) {
-        try {
-            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
-            if (data != null) {
-                log.warn("run SliceConsumerThread");
-                OutputFileEntity  entity = data.getOutputFile();
-                log.info("raster cmd: {}", data.getStr());
-                Integer integer = rasterServer.cmdSlice(data.getStr(), entity);
-                if (integer != 0) {
-                    log.info("error command exeCmdRasterSlice");
-                    // 如果命令运行失败,状态改为0
-                    entity.setStatus(0);
-                    entity.setUpdateTime(new Date());
-                    rasterServer.save(entity);
-                    return;
-                }
-                // 切片完成,修改完成状态
-                entity.setStatus(5);
-                entity.setUpdateTime(new Date());
-                rasterServer.save(entity);
-                log.warn("end SliceConsumerThread");
-            }
-        } catch (Exception e) {
-            Thread.currentThread().interrupt();
-            e.printStackTrace();
-        }
-
-
-    }
+//    @Async("taskExecutor")
+//    public void sliceThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer) {
+//        try {
+//            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+//            if (data != null) {
+//                log.warn("run SliceConsumerThread");
+//                OutputFileEntity  entity = data.getOutputFile();
+//                log.info("raster cmd: {}", data.getStr());
+//                Integer integer = rasterServer.cmdSlice(data.getStr(), entity);
+//                if (integer != 0) {
+//                    log.info("error command exeCmdRasterSlice");
+//                    // 如果命令运行失败,状态改为0
+//                    entity.setStatus(0);
+//                    entity.setUpdateTime(new Date());
+//                    rasterServer.save(entity);
+//                    return;
+//                }
+//                // 切片完成,修改完成状态
+//                entity.setStatus(5);
+//                entity.setUpdateTime(new Date());
+//                rasterServer.save(entity);
+//                log.warn("end SliceConsumerThread");
+//            }
+//        } catch (Exception e) {
+//            Thread.currentThread().interrupt();
+//            e.printStackTrace();
+//        }
+//
+//
+//    }
 
 
 
@@ -394,7 +405,7 @@ public class RasterController {
     @ApiOperation("栅格数据进度查询")
     @GetMapping("progress/{fileId}/")
     private R getProgress(@PathVariable("fileId") Long fileId) {
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
         OutputFileEntity entity = rasterServer.findById(fileId);
         return new R(200, entity);
     }
@@ -404,92 +415,92 @@ public class RasterController {
     @PostMapping("move/{fileId}/")
     private R moveFile(@PathVariable("fileId") Long fileId, @RequestBody ConfigJsonDto param) {
         log.info("run moveFile: {}", fileId);
-        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
+//        RasterServer rasterServer = SpringContext.getBean(RasterServerImpl.class);
         return rasterServer.moveFileToServer(fileId, param);
     }
 
 
 
-    /**
-     * 严格坐标转换
-     */
-    private OutputFileEntity cmdTansformGdalwarpStrict(OutputFileEntity entity, RasterServer rasterServer){
-        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 coord = entity.getCoord();
-        log.info("convert coord: {}", coord);
-        JSONArray array = JSON.parseArray(coord);
-
-        String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1;
-        step_1 = step_1.replace("@inputFile", entity.getUploadPath());
-        step_1 = step_1.replace("@outputFile", outFileStep1);
-
-
-        // 3位数坐标
-        if (array.size() == 3) {
-            step_1 = step_1.replace("@x", array.getString(0));
-            step_1 = step_1.replace("@y", array.getString(1));
-            step_1 = step_1.replace("@z", array.getString(2));
-            step_1 = step_1.replace("@rx","0");
-            step_1 = step_1.replace("@ry","0");
-            step_1 = step_1.replace("@rz","0");
-
-            // 坐标为空时
-        } else if (array.size() == 0) {
-            step_1 = step_1.replace("@x","0");
-            step_1 = step_1.replace("@y","0");
-            step_1 = step_1.replace("@z","0");
-            step_1 = step_1.replace("@rx","0");
-            step_1 = step_1.replace("@ry","0");
-            step_1 = step_1.replace("@rz","0");
-
-            // 6位数坐标
-        }else  {
-            step_1 = step_1.replace("@x", array.getString(0));
-            step_1 = step_1.replace("@y", array.getString(1));
-            step_1 = step_1.replace("@z", array.getString(2));
-            step_1 = step_1.replace("@rx",array.getString(3));
-            step_1 = step_1.replace("@ry",array.getString(4));
-            step_1 = step_1.replace("@rz",array.getString(5));
-        }
-
-
-        String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2;
-
-
-        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);
-
-        Integer integer = rasterServer.exeCmd(step_1, step_2);
-
-        if (integer != 0) {
-            log.info("error command transform");
-            return null;
-        }
-
-        entity.setStatus(4);
-        entity.setUpdateTime(new Date());
-        entity.setCoordGeneralPath(outFileStep1);
-        entity.setCoordStrictPath(outFileStep2);
-
-        entity = rasterServer.save(entity);
-
-        return entity;
-    }
+//    /**
+//     * 严格坐标转换
+//     */
+//    private OutputFileEntity cmdTansformGdalwarpStrict(OutputFileEntity entity, RasterServer rasterServer){
+//        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 coord = entity.getCoord();
+//        log.info("convert coord: {}", coord);
+//        JSONArray array = JSON.parseArray(coord);
+//
+//        String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1;
+//        step_1 = step_1.replace("@inputFile", entity.getUploadPath());
+//        step_1 = step_1.replace("@outputFile", outFileStep1);
+//
+//
+//        // 3位数坐标
+//        if (array.size() == 3) {
+//            step_1 = step_1.replace("@x", array.getString(0));
+//            step_1 = step_1.replace("@y", array.getString(1));
+//            step_1 = step_1.replace("@z", array.getString(2));
+//            step_1 = step_1.replace("@rx","0");
+//            step_1 = step_1.replace("@ry","0");
+//            step_1 = step_1.replace("@rz","0");
+//
+//            // 坐标为空时
+//        } else if (array.size() == 0) {
+//            step_1 = step_1.replace("@x","0");
+//            step_1 = step_1.replace("@y","0");
+//            step_1 = step_1.replace("@z","0");
+//            step_1 = step_1.replace("@rx","0");
+//            step_1 = step_1.replace("@ry","0");
+//            step_1 = step_1.replace("@rz","0");
+//
+//            // 6位数坐标
+//        }else  {
+//            step_1 = step_1.replace("@x", array.getString(0));
+//            step_1 = step_1.replace("@y", array.getString(1));
+//            step_1 = step_1.replace("@z", array.getString(2));
+//            step_1 = step_1.replace("@rx",array.getString(3));
+//            step_1 = step_1.replace("@ry",array.getString(4));
+//            step_1 = step_1.replace("@rz",array.getString(5));
+//        }
+//
+//
+//        String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2;
+//
+//
+//        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);
+//
+//        Integer integer = rasterServer.exeCmd(step_1, step_2);
+//
+//        if (integer != 0) {
+//            log.info("error command transform");
+//            return null;
+//        }
+//
+//        entity.setStatus(4);
+//        entity.setUpdateTime(new Date());
+//        entity.setCoordGeneralPath(outFileStep1);
+//        entity.setCoordStrictPath(outFileStep2);
+//
+//        entity = rasterServer.save(entity);
+//
+//        return entity;
+//    }
 
 
 }

+ 194 - 369
src/main/java/com/fd/controller/VectorController.java

@@ -15,6 +15,7 @@ import com.fd.entity.StyleEntity;
 import com.fd.server.CmdServer;
 import com.fd.server.VectorServer;
 import com.fd.server.impl.VectorServerImpl;
+import com.fd.thread.AsyncTask;
 import com.fd.util.FileUtils;
 import com.fd.util.R;
 import com.fd.util.RegexUtils;
@@ -48,20 +49,26 @@ import java.util.concurrent.TimeUnit;
 @RestController
 public class VectorController {
 
-//    @Value("${input.file.path.vector}")
-    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/vector/";
+////    @Value("${input.file.path.vector}")
+//    private static String INPUT_FILE_PATH = "/root/gis/cesium/input/vector/";
+//
+////    @Value("${output.file.path.vector}")
+//    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/vector/";
 
-//    @Value("${output.file.path.vector}")
-    private static String OUTPUT_FILE_PATH = "/root/gis/cesium/output/vector/";
+    @Value("${input.file.path.vector}")
+    private String INPUT_FILE_PATH;
 
+    @Value("${output.file.path.vector}")
+    private String OUTPUT_FILE_PATH;
 
 
 
-//    @Autowired
-//    private VectorServer vectorServer;
-//
-//    @Autowired
-//    private CmdServer cmdServer;
+
+    @Autowired
+    private VectorServer vectorServer;
+
+    @Autowired
+    private AsyncTask asyncTask;
 
     /**
      * 需要坐标转换
@@ -121,7 +128,7 @@ public class VectorController {
         if (RegexUtils.regexChinese(directoryName)) {
             return new R(51005, MsgCode.E51005);
         }
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         List<FileEntity> directory = vectorServer.findByDirectory(directoryName);
         if (directory.size() > 0) {
             return new R(51006, MsgCode.E51006);
@@ -204,7 +211,7 @@ public class VectorController {
     @ApiOperation("获取矢量数据列表")
     @PostMapping(value = "list")
     private R list(@RequestBody PageDto param) {
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         return vectorServer.findByType(TypeCode.FILE_TYPE_VECTOR, param);
     }
 
@@ -218,7 +225,7 @@ public class VectorController {
     @GetMapping("delete/{fileId}/")
     private R deleteFile(@PathVariable("fileId") Long fileId) {
         log.info("run deleteFile: {}", fileId);
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         OutputFileEntity entity = vectorServer.findById(fileId);
         entity.setResStatus(1);
         vectorServer.save(entity);
@@ -228,39 +235,26 @@ public class VectorController {
         fileEntity = vectorServer.saveInputFile(fileEntity);
 
 //        new Thread(new DeleteThread(fileId)).start();
-        deleteThread(fileId, vectorServer);
-        log.info("delete vector id");
+//        deleteThread(fileId, vectorServer);
+        asyncTask.vectorDelete(fileId, vectorServer);
+        log.info("end delete vector id");
         return new R(200, MsgCode.SUCCESS);
     }
 
-    @Async("taskExecutor")
-    public void deleteThread(Long fileId, VectorServer vectorServer){
-        log.info("run deleteThread");
-        vectorServer.deleteById(fileId);
-        log.info("end deleteThread id : {}", fileId);
-    }
-
-//    public class DeleteThread implements Runnable{
-//
-//        private Long fileId;
-//
-//        public DeleteThread(Long fileId){
-//            this.fileId = fileId;
-//        }
-//
-//        @Override
-//        public void run() {
-//            log.info("run DeleteThread");
-//            vectorServer.deleteById(fileId);
-//            log.info("end DeleteThread: {}", fileId);
-//        }
+//    @Async("taskExecutor")
+//    public void deleteThread(Long fileId, VectorServer vectorServer){
+//        log.info("run deleteThread");
+//        vectorServer.deleteById(fileId);
+//        log.info("end deleteThread id : {}", fileId);
 //    }
 
+
+
     @ApiOperation("矢量数据判断坐标")
     @GetMapping("command/judge/coord/{fileId}/")
     private R cmdJudgeCoord(@PathVariable("fileId") Long fileId) {
         log.info("run cmdJudgeCoord: {}", fileId);
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
 
         OutputFileEntity entity = vectorServer.findById(fileId);
 
@@ -294,7 +288,8 @@ public class VectorController {
             entity.setStatus(9);
             entity = vectorServer.save(entity);
 
-            convertCoordThread(vectorCoordQueue, vectorServer);
+//            convertCoordThread(vectorCoordQueue, vectorServer);
+            asyncTask.vectorConvertCoordThread(vectorCoordQueue, vectorServer, OUTPUT_FILE_PATH);
 
             return new R(200, entity);
         }
@@ -304,219 +299,88 @@ public class VectorController {
     }
 
 
-    /**
-     * 坐标判断消费队列
-     * 矢量数据转坐标只转一次就成功了。
-     * 所以转换的成功的路径都放到strictCoordTransform 路径
-     * 文件都放transform 目录
-     */
-    @Async("taskExecutor")
-    public void convertCoordThread (BlockingQueue<MyQueue> queue, VectorServer vectorServer){
-        try {
-            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
-            if (data != null) {
-                log.info("run convertCoordThread 出队");
-                Thread.sleep(2000);
-                OutputFileEntity entity = data.getOutputFile();
-                // 坐标处理
-                String coord = entity.getCoord();
-                log.info("convert coord: {}", coord);
-                JSONArray arrayCoord = JSON.parseArray(coord);
-
-
-                // 转换坐标 普通坐标转换
-                if (TypeCode.COORD_SYSTEM_2000.equals(entity.getCoordType())) {
-                    // 普通坐标转换
-                    log.info("need to general transform");
-                    if (arrayCoord.size() == 0) {
-                        // 没有坐标参数,执行普通坐标转换(ogrinfo)
-                        log.info("run generalCoordTransform");
-                        entity = generalCoordTransform(entity, Command.VECTOR_TRANSFORM_GENERAL, vectorServer);
-
-                    } else {
-                        // 有坐标参数,执行严格坐标转换(CGCS2000转wgs80)
-                        log.info("run strictCoordTransform");
-                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS80, vectorServer);
-                    }
-
-                } else if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())) {
-
-                    // 严格坐标转换 (西安80转wgs84),需要参数
-                    log.info("need to strict transform, CoordType: {}", entity.getCoordType());
-                    if (arrayCoord.size() == 0) {
-                        log.info("error: {}", MsgCode.E50009);
-                        entity.setStatus(7);
-                        entity.setUpdateTime(new Date());
-                        vectorServer.save(entity);
-                    } else {
-                        log.info("run strictCoordTransform");
-                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS84, vectorServer);
-                    }
-
-                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())) {
-                    // 不转换坐标 把文件信息移动到CoordStrictPath 这路径下
-                    log.info("not to transform");
-
-                    entity.setCoordStrictPath(entity.getUploadPath());
-                    entity.setUpdateTime(new Date());
-                    entity.setStatus(3);
-                    entity.setCoordType(TypeCode.COORD_WGS84);
-                    vectorServer.save(entity);
-                } else {
-                    log.info("error exeCmd");
-                    entity.setStatus(7);
-                    entity.setUpdateTime(new Date());
-                    vectorServer.save(entity);
-                }
-                log.info("end convertCoordThread id: {}", entity.getId());
-            }
-        } catch (Exception e) {
-            Thread.currentThread().interrupt();
-            log.error("error vector consume queue VectorJudgeCoordConsumerThread: {}", e);
-            throw new RuntimeException(e);
-
-
-        }
-    }
-
-    /**
-     * 坐标判断消费队列
-     * <p>
-     * 矢量数据转坐标只转一次就成功了。
-     * 所以转换的成功的路径都放到strictCoordTransform 路径
-     * 文件都放transform 目录
-     */
-//    public class VectorJudgeCoordConsumerThread implements Runnable {
+//    /**
+//     * 坐标判断消费队列
+//     * 矢量数据转坐标只转一次就成功了。
+//     * 所以转换的成功的路径都放到strictCoordTransform 路径
+//     * 文件都放transform 目录
+//     */
+//    @Async("taskExecutor")
+//    public void convertCoordThread (BlockingQueue<MyQueue> queue, VectorServer vectorServer){
+//        try {
+//            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+//            if (data != null) {
+//                log.info("run convertCoordThread 出队");
+//                Thread.sleep(2000);
+//                OutputFileEntity entity = data.getOutputFile();
+//                // 坐标处理
+//                String coord = entity.getCoord();
+//                log.info("convert coord: {}", coord);
+//                JSONArray arrayCoord = JSON.parseArray(coord);
 //
-//        private BlockingQueue<MyQueue> queue;
 //
-//        private boolean isRun = true;
+//                // 转换坐标 普通坐标转换
+//                if (TypeCode.COORD_SYSTEM_2000.equals(entity.getCoordType())) {
+//                    // 普通坐标转换
+//                    log.info("need to general transform");
+//                    if (arrayCoord.size() == 0) {
+//                        // 没有坐标参数,执行普通坐标转换(ogrinfo)
+//                        log.info("run generalCoordTransform");
+//                        entity = generalCoordTransform(entity, Command.VECTOR_TRANSFORM_GENERAL, vectorServer);
 //
-//        public VectorJudgeCoordConsumerThread(BlockingQueue<MyQueue> queue) {
-//            this.queue = queue;
-//        }
-//
-//        @Override
-//        public void run() {
-//            while (true) {
-//                try {
-//                    MyQueue data = queue.poll(2, TimeUnit.SECONDS);
-//                    if (data != null) {
-//                        log.info("run VectorJudgeCoordConsumerThread 出队");
-//                        Thread.sleep(2000);
-//                        OutputFileEntity entity = data.getOutputFile();
-//                        // 坐标处理
-//                        String coord = entity.getCoord();
-//                        log.info("convert coord: {}", coord);
-//                        JSONArray arrayCoord = JSON.parseArray(coord);
-//
-//
-//                        // 转换坐标 普通坐标转换
-//                        if (TypeCode.COORD_SYSTEM_2000.equals(entity.getCoordType())) {
-//                            // 普通坐标转换
-//                            log.info("need to general transform");
-//                            if (arrayCoord.size() == 0) {
-//                                // 没有坐标参数,执行普通坐标转换(ogrinfo)
-//                                log.info("run generalCoordTransform");
-//                                entity = generalCoordTransform(entity, Command.VECTOR_TRANSFORM_GENERAL);
-//
-//                            } else {
-//                                // 有坐标参数,执行严格坐标转换(CGCS2000转wgs80)
-//                                log.info("run strictCoordTransform");
-//                                entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS80);
-//                            }
-//
-//                        } else if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())) {
-//
-//                            // 严格坐标转换 (西安80转wgs84),需要参数
-//                            log.info("need to strict transform, CoordType: {}", entity.getCoordType());
-//                            if (arrayCoord.size() == 0) {
-//                                log.info("error: {}", MsgCode.E50009);
-//                                entity.setStatus(7);
-//                                entity.setUpdateTime(new Date());
-//                                vectorServer.save(entity);
-//                            } else {
-//                                log.info("run strictCoordTransform");
-//                                entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS84);
-//                            }
+//                    } else {
+//                        // 有坐标参数,执行严格坐标转换(CGCS2000转wgs80)
+//                        log.info("run strictCoordTransform");
+//                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS80, vectorServer);
+//                    }
 //
-//                        } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())) {
-//                            // 不转换坐标 把文件信息移动到CoordStrictPath 这路径下
-//                            log.info("not to transform");
+//                } else if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())) {
 //
-//                            entity.setCoordStrictPath(entity.getUploadPath());
-//                            entity.setUpdateTime(new Date());
-//                            entity.setStatus(3);
-//                            entity.setCoordType(TypeCode.COORD_WGS84);
-//                            vectorServer.save(entity);
-//                        } else {
-//                            log.info("error exeCmd");
-//                            entity.setStatus(7);
-//                            entity.setUpdateTime(new Date());
-//                            vectorServer.save(entity);
-//                        }
-//                        log.info("end VectorJudgeCoordConsumerThread ");
+//                    // 严格坐标转换 (西安80转wgs84),需要参数
+//                    log.info("need to strict transform, CoordType: {}", entity.getCoordType());
+//                    if (arrayCoord.size() == 0) {
+//                        log.info("error: {}", MsgCode.E50009);
+//                        entity.setStatus(7);
+//                        entity.setUpdateTime(new Date());
+//                        vectorServer.save(entity);
+//                    } else {
+//                        log.info("run strictCoordTransform");
+//                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS84, vectorServer);
 //                    }
-//                } catch (Exception e) {
-//                    Thread.currentThread().interrupt();
-//                    log.error("error vector consume queue VectorJudgeCoordConsumerThread: {}", e);
-//                    throw new RuntimeException(e);
 //
+//                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())) {
+//                    // 不转换坐标 把文件信息移动到CoordStrictPath 这路径下
+//                    log.info("not to transform");
 //
+//                    entity.setCoordStrictPath(entity.getUploadPath());
+//                    entity.setUpdateTime(new Date());
+//                    entity.setStatus(3);
+//                    entity.setCoordType(TypeCode.COORD_WGS84);
+//                    vectorServer.save(entity);
+//                } else {
+//                    log.info("error exeCmd");
+//                    entity.setStatus(7);
+//                    entity.setUpdateTime(new Date());
+//                    vectorServer.save(entity);
 //                }
+//                log.info("end convertCoordThread id: {}", entity.getId());
 //            }
-//        }
-//    }
-
-
-//    public class VectorSliceThread implements Runnable {
-//
-//        private BlockingQueue<MyQueue> queue;
-//
-//        public VectorSliceThread(BlockingQueue<MyQueue> queue) {
-//            this.queue = queue;
-//        }
-//
-//        @Override
-//        public void run() {
+//        } catch (Exception e) {
+//            Thread.currentThread().interrupt();
+//            log.error("error vector consume queue VectorJudgeCoordConsumerThread: {}", e);
+//            throw new RuntimeException(e);
 //
-//            while (true) {
-//                try {
-//                    MyQueue data = queue.poll(4, TimeUnit.SECONDS);
-//                    if (data != null) {
-//                        log.warn("run SliceVectorThread");
 //
-//                        OutputFileEntity entity = data.getOutputFile();
-//                        log.info("slice cmd: {}", data.getStr());
-//                        Integer integer =  vectorServer.cmdSlice(data.getStr(), entity);
-//                        if (integer != 0) {
-//                            log.info("error command exeCmdVectorSlice");
-//                            // 如果命令运行失败,状态改为0
-//                            entity.setStatus(0);
-//                            entity.setUpdateTime(new Date());
-//                            vectorServer.save(entity);
-//                            return;
-//                        }
-//                        // 切片完成,修改完成状态
-//                        entity.setStatus(5);
-//                        entity.setUpdateTime(new Date());
-//                        vectorServer.save(entity);
-//                        log.warn("end SliceVectorThread");
-//                    }
-//                } catch (Exception e) {
-//                    Thread.currentThread().interrupt();
-//                    log.error("error  consume queue vector SliceConsumerThread: {}", e);
-//                    e.printStackTrace();
-//                }
-//            }
 //        }
 //    }
 
+
+
     @ApiOperation("矢量数据转geojson")
     @GetMapping("command/geojson/{fileId}/")
     private R cmdGeojson(@PathVariable("fileId") Long fileId) {
         log.info("run cmdGeojson: {}", fileId);
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         OutputFileEntity entity = vectorServer.findById(fileId);
 
         String fileName = StringUtils.substringBefore(entity.getFileName(), ".");
@@ -556,7 +420,7 @@ public class VectorController {
     private R cmdSlice(@PathVariable("fileId") Long fileId, @PathVariable("layerMin") String layerMin, @PathVariable("layerMax") String layerMax) {
         log.info("run cmdSlice: {}", fileId);
 
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
 
         if (!RegexUtils.regexInt(layerMin)) {
             return new R(50010, MsgCode.E50010);
@@ -578,15 +442,6 @@ public class VectorController {
         log.info("cmd: {}", cmd);
 
 
-//        entity.setSlicePath(outPath);
-//        entity.setUpdateTime(new Date());
-//        // 6:切片中
-//        entity.setStatus(6);
-//        entity.setLayerMin(Integer.valueOf(layerMin));
-//        entity.setLayerMax(Integer.valueOf(layerMax));
-//        entity = vectorServer.save(entity);
-
-
         // 把数据放入队列中
         MyQueue data = new MyQueue();
         data.setOutputFile(entity);
@@ -609,7 +464,8 @@ public class VectorController {
             entity.setLayerMax(Integer.valueOf(layerMax));
             entity = vectorServer.save(entity);
 
-            sliceThread(vectorSliceQueue, vectorServer);
+//            sliceThread(vectorSliceQueue, vectorServer);
+            asyncTask.vectorSliceThread(vectorSliceQueue, vectorServer);
 
             return new R(200, entity);
         }
@@ -617,41 +473,41 @@ public class VectorController {
     }
 
 
-    private void sliceThread(BlockingQueue<MyQueue> queue, VectorServer vectorServer){
-        try {
-            MyQueue data = queue.poll(4, TimeUnit.SECONDS);
-            if (data != null) {
-                log.warn("run SliceVectorThread");
-
-                OutputFileEntity entity = data.getOutputFile();
-                log.info("slice cmd: {}", data.getStr());
-                Integer integer =  vectorServer.cmdSlice(data.getStr(), entity);
-                if (integer != 0) {
-                    log.info("error command exeCmdVectorSlice");
-                    // 如果命令运行失败,状态改为0
-                    entity.setStatus(0);
-                    entity.setUpdateTime(new Date());
-                    vectorServer.save(entity);
-                    return;
-                }
-                // 切片完成,修改完成状态
-                entity.setStatus(5);
-                entity.setUpdateTime(new Date());
-                vectorServer.save(entity);
-                log.warn("end SliceVectorThread");
-            }
-        } catch (Exception e) {
-            Thread.currentThread().interrupt();
-            log.error("error  consume queue vector SliceConsumerThread: {}", e);
-            e.printStackTrace();
-        }
-    }
+//    private void sliceThread(BlockingQueue<MyQueue> queue, VectorServer vectorServer){
+//        try {
+//            MyQueue data = queue.poll(4, TimeUnit.SECONDS);
+//            if (data != null) {
+//                log.warn("run SliceVectorThread");
+//
+//                OutputFileEntity entity = data.getOutputFile();
+//                log.info("slice cmd: {}", data.getStr());
+//                Integer integer =  vectorServer.cmdSlice(data.getStr(), entity);
+//                if (integer != 0) {
+//                    log.info("error command exeCmdVectorSlice");
+//                    // 如果命令运行失败,状态改为0
+//                    entity.setStatus(0);
+//                    entity.setUpdateTime(new Date());
+//                    vectorServer.save(entity);
+//                    return;
+//                }
+//                // 切片完成,修改完成状态
+//                entity.setStatus(5);
+//                entity.setUpdateTime(new Date());
+//                vectorServer.save(entity);
+//                log.warn("end SliceVectorThread");
+//            }
+//        } catch (Exception e) {
+//            Thread.currentThread().interrupt();
+//            log.error("error  consume queue vector SliceConsumerThread: {}", e);
+//            e.printStackTrace();
+//        }
+//    }
 
 
     @ApiOperation("矢量数据进度查询")
     @GetMapping("progress/{fileId}/")
     private R getProgress(@PathVariable("fileId") Long fileId) {
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         OutputFileEntity entity = vectorServer.findById(fileId);
         return new R(200, entity);
     }
@@ -660,48 +516,17 @@ public class VectorController {
     @PostMapping("move/{fileId}/")
     private R moveFile(@PathVariable("fileId") Long fileId, @RequestBody ConfigJsonDto param) {
         log.info("run moveFile: {}", fileId);
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         return vectorServer.moveFileToServer(fileId, param);
     }
 
-//    @ApiOperation("移动数据到服务器上")
-//    @PostMapping("move/{fileId}/")
-//    private R moveFile(@PathVariable("fileId") Long fileId, @RequestBody ConfigJsonDto param) {
-//        log.info("run moveFile: {}", fileId);
-//
-//        OutputFileEntity entity = vectorServer.findById(fileId);
-//        entity.setUpdateTime(new Date());
-//        // 发布中
-//        entity.setStatus(13);
-//        entity = vectorServer.save(entity);
-//
-//        new Thread(new MoveVectorThread(fileId, param)).start();
-//
-//        return new R(200, entity);
-//    }
-
-//    public class MoveVectorThread implements Runnable{
-//
-//        private Long fileId;
-//        private ConfigJsonDto param;
-//        public MoveVectorThread(Long fileId, ConfigJsonDto param){
-//            this.fileId = fileId;
-//            this.param = param;
-//        }
-//
-//        @Override
-//        public void run() {
-//            log.info("run MoveVectorThread");
-//            vectorServer.moveFileToServer(fileId, param);
-//        }
-//    }
 
 
     @ApiOperation("保存样式")
     @PostMapping("style/save/")
     private R saveStyle(@RequestBody StyleDto param) {
         log.info("run saveStyle");
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         return vectorServer.editStyle(param);
     }
 
@@ -709,73 +534,73 @@ public class VectorController {
     @GetMapping("style/get/{fileId}/")
     private R getStyle(@PathVariable("fileId") Long fileId) {
         log.info("run getStyle: {}", fileId);
-        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
+//        VectorServer vectorServer = SpringContext.getBean(VectorServerImpl.class);
         return vectorServer.getStyle(fileId);
     }
 
 
-    /**
-     * 普通坐标转换
-     */
-    private OutputFileEntity generalCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer) {
-
-        String directory = createDirectory(entity);
-        directory = directory + File.separator + entity.getFileName();
-
-        cmd = cmd.replace("@inputFile", entity.getUploadPath());
-        cmd = cmd.replace("@outputFile", directory);
-        log.info("cmd: {}", cmd);
-        return runCmd(cmd, entity, null, directory, vectorServer);
-    }
-
-
-    // 严格坐标转换
-    private OutputFileEntity strictCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer) {
-
-        String directory = createDirectory(entity);
-        directory = directory + File.separator + entity.getFileName();
-        String coord = entity.getCoord();
-        coord = coord.replace("[", "");
-        coord = coord.replace("]", "");
-        // 去空格
-        coord = StringUtils.deleteWhitespace(coord);
-
-        cmd = cmd.replace("@coord", coord);
-        cmd = cmd.replace("@inputFile", entity.getUploadPath());
-        cmd = cmd.replace("@outputFile", directory);
-        log.info("cmd: {}", cmd);
-
-        return runCmd(cmd, entity, null, directory, vectorServer);
-    }
-
-    // 创建目录
-    private String createDirectory(OutputFileEntity entity) {
-        String directory = OUTPUT_FILE_PATH + "transform" + File.separator + entity.getDirectory();
-        FileUtils.createDir(directory);
-        return directory;
-    }
-
-    // 执行命令,创建对象, 坐标转换使用
-    private OutputFileEntity runCmd(String cmd, OutputFileEntity entity, String generalPath, String strictPath, VectorServer vectorServer) {
-        Integer integer = vectorServer.exeCmd(cmd);
-        // 转换坐标失败, 修改状态
-        if (integer != 0) {
-            entity.setUpdateTime(new Date());
-            entity.setStatus(7);
-            entity = vectorServer.save(entity);
-            return null;
-        }
-
-        entity.setFileName(entity.getFileName());
-        entity.setCoordGeneralPath(generalPath);
-        entity.setCoordStrictPath(strictPath);
-        entity.setUpdateTime(new Date());
-        entity.setStatus(3);
-
-        entity = vectorServer.save(entity);
-
-        return entity;
-
-    }
+//    /**
+//     * 普通坐标转换
+//     */
+//    private OutputFileEntity generalCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer) {
+//
+//        String directory = createDirectory(entity);
+//        directory = directory + File.separator + entity.getFileName();
+//
+//        cmd = cmd.replace("@inputFile", entity.getUploadPath());
+//        cmd = cmd.replace("@outputFile", directory);
+//        log.info("cmd: {}", cmd);
+//        return runCmd(cmd, entity, null, directory, vectorServer);
+//    }
+//
+//
+//    // 严格坐标转换
+//    private OutputFileEntity strictCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer) {
+//
+//        String directory = createDirectory(entity);
+//        directory = directory + File.separator + entity.getFileName();
+//        String coord = entity.getCoord();
+//        coord = coord.replace("[", "");
+//        coord = coord.replace("]", "");
+//        // 去空格
+//        coord = StringUtils.deleteWhitespace(coord);
+//
+//        cmd = cmd.replace("@coord", coord);
+//        cmd = cmd.replace("@inputFile", entity.getUploadPath());
+//        cmd = cmd.replace("@outputFile", directory);
+//        log.info("cmd: {}", cmd);
+//
+//        return runCmd(cmd, entity, null, directory, vectorServer);
+//    }
+//
+//    // 创建目录
+//    private String createDirectory(OutputFileEntity entity) {
+//        String directory = OUTPUT_FILE_PATH + "transform" + File.separator + entity.getDirectory();
+//        FileUtils.createDir(directory);
+//        return directory;
+//    }
+//
+//    // 执行命令,创建对象, 坐标转换使用
+//    private OutputFileEntity runCmd(String cmd, OutputFileEntity entity, String generalPath, String strictPath, VectorServer vectorServer) {
+//        Integer integer = vectorServer.exeCmd(cmd);
+//        // 转换坐标失败, 修改状态
+//        if (integer != 0) {
+//            entity.setUpdateTime(new Date());
+//            entity.setStatus(7);
+//            entity = vectorServer.save(entity);
+//            return null;
+//        }
+//
+//        entity.setFileName(entity.getFileName());
+//        entity.setCoordGeneralPath(generalPath);
+//        entity.setCoordStrictPath(strictPath);
+//        entity.setUpdateTime(new Date());
+//        entity.setStatus(3);
+//
+//        entity = vectorServer.save(entity);
+//
+//        return entity;
+//
+//    }
 
 }

+ 422 - 0
src/main/java/com/fd/thread/AsyncTask.java

@@ -0,0 +1,422 @@
+package com.fd.thread;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.fd.constant.Command;
+import com.fd.constant.MsgCode;
+import com.fd.constant.TypeCode;
+import com.fd.dto.MyQueue;
+import com.fd.entity.OutputFileEntity;
+import com.fd.server.ModelServer;
+import com.fd.server.RasterServer;
+import com.fd.server.VectorServer;
+import com.fd.util.FileUtils;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by Owen on 2019/12/11 0011 10:49
+ */
+@Log4j2
+@Component
+public class AsyncTask {
+
+    @Async("taskExecutor")
+    public void modelDelete(Long id, ModelServer modelServer){
+        log.info("run modelDelete");
+        modelServer.deleteById(id);
+        log.info("end modelDelete id: {}", id);
+    }
+
+
+    @Async("taskExecutor")
+    public void rasterDelete(Long fileId, RasterServer rasterServer) {
+        log.info("run RasterDeleteThread");
+        rasterServer.deleteById(fileId);
+        log.info("end RasterDeleteThread: {}", fileId);
+    }
+
+    @Async("taskExecutor")
+    public void vectorDelete(Long fileId, VectorServer vectorServer){
+        log.info("run vectorDelete");
+        vectorServer.deleteById(fileId);
+        log.info("end vectorDelete id : {}", fileId);
+    }
+
+    @Async("taskExecutor")
+    public void modelSlice(BlockingQueue<MyQueue> queue, ModelServer modelServer){
+        try {
+            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+            if (data != null) {
+                log.warn("run ModelSliceConsumerThread");
+                log.info("cmd: {}", data.getStr());
+                Integer integer = modelServer.cmdSlice(data.getStr());
+                OutputFileEntity entity = data.getOutputFile();
+
+                if (integer != 0) {
+                    log.info("error command sliceThread");
+                    // 如果命令运行失败,删除刚才创建的实体类
+                    // o:代表切片失败
+                    entity.setStatus(0);
+                    entity.setUpdateTime(new Date());
+                    modelServer.save(entity);
+                    return;
+                }
+
+                entity.setStatus(5);
+                entity.setUpdateTime(new Date());
+                modelServer.save(entity);
+                log.warn("end ModelSliceConsumerThread id {}", entity.getId());
+            }
+        } catch (Exception e) {
+            Thread.currentThread().interrupt();
+            e.printStackTrace();
+        }
+
+    }
+
+
+    @Async("taskExecutor")
+    public void rasterSliceThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer) {
+        try {
+            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+            if (data != null) {
+                log.warn("run rasterSliceThread");
+                OutputFileEntity  entity = data.getOutputFile();
+                log.info("raster cmd: {}", data.getStr());
+                Integer integer = rasterServer.cmdSlice(data.getStr(), entity);
+                if (integer != 0) {
+                    log.info("error command exeCmdRasterSlice");
+                    // 如果命令运行失败,状态改为0
+                    entity.setStatus(0);
+                    entity.setUpdateTime(new Date());
+                    rasterServer.save(entity);
+                    return;
+                }
+                // 切片完成,修改完成状态
+                entity.setStatus(5);
+                entity.setUpdateTime(new Date());
+                rasterServer.save(entity);
+                log.warn("end rasterSliceThread id: {}", entity.getId());
+            }
+        } catch (Exception e) {
+            Thread.currentThread().interrupt();
+            e.printStackTrace();
+        }
+
+
+    }
+
+    @Async("taskExecutor")
+    public void vectorSliceThread(BlockingQueue<MyQueue> queue, VectorServer vectorServer){
+        try {
+            MyQueue data = queue.poll(4, TimeUnit.SECONDS);
+            if (data != null) {
+                log.warn("run vectorSliceThread");
+
+                OutputFileEntity entity = data.getOutputFile();
+                log.info("slice cmd: {}", data.getStr());
+                Integer integer =  vectorServer.cmdSlice(data.getStr(), entity);
+                if (integer != 0) {
+                    log.info("error command exeCmdVectorSlice");
+                    // 如果命令运行失败,状态改为0
+                    entity.setStatus(0);
+                    entity.setUpdateTime(new Date());
+                    vectorServer.save(entity);
+                    return;
+                }
+                // 切片完成,修改完成状态
+                entity.setStatus(5);
+                entity.setUpdateTime(new Date());
+                vectorServer.save(entity);
+                log.warn("end vectorSliceThread id: {}", entity.getId());
+            }
+        } catch (Exception e) {
+            Thread.currentThread().interrupt();
+            log.error("error  consume queue vector SliceConsumerThread: {}", e);
+            e.printStackTrace();
+        }
+    }
+
+
+
+    @Async("taskExecutor")
+    public void rasterJudgeCoordConsumerThread(BlockingQueue<MyQueue> queue, RasterServer rasterServer, String baseOutputPath){
+        MyQueue data = null;
+        try {
+            data = queue.poll(3, TimeUnit.SECONDS);
+
+            if (data != null) {
+                log.warn("run rasterJudgeCoordConsumerThread");
+
+                // 先让它等一秒
+                log.info("start time: {}", new Date());
+                Thread.sleep(2000);
+                log.info("end time: {}", new Date());
+
+                OutputFileEntity  entity = data.getOutputFile();
+
+                log.info("CoordType: {}", entity.getCoordType());
+
+                if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())){
+                    log.info("need to transform");
+                    // 严格坐标转换
+                    entity = cmdTansformGdalwarpStrict(entity, rasterServer, baseOutputPath);
+                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())){
+                    log.info("not to transform");
+                    // 4:未切片
+                    entity.setStatus(4);
+                    // 不需要转,就把上传文件路径复制到严格坐标路径上
+                    entity.setCoordStrictPath(entity.getUploadPath());
+                    entity.setUpdateTime(new Date());
+                    entity = rasterServer.save(entity);
+                    log.info("coord Consumer update time: {}", entity.getUpdateTime());
+                    log.info("JudgeCoordConsumerThread update entity: {}", entity);
+                } else {
+                    log.info("error exeCmd");
+                    entity.setStatus(0);
+                    entity.setUpdateTime(new Date());
+                    rasterServer.save(entity);
+                }
+                log.warn("end rasterJudgeCoordConsumerThread id: {}", entity.getId());
+
+            }
+
+        } catch (Exception e) {
+            Thread.currentThread().interrupt();
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 坐标判断消费队列
+     * 矢量数据转坐标只转一次就成功了。
+     * 所以转换的成功的路径都放到strictCoordTransform 路径
+     * 文件都放transform 目录
+     */
+    @Async("taskExecutor")
+    public void vectorConvertCoordThread (BlockingQueue<MyQueue> queue, VectorServer vectorServer, String baseOutputPath){
+        try {
+            MyQueue data = queue.poll(2, TimeUnit.SECONDS);
+            if (data != null) {
+                log.info("run convertCoordThread 出队");
+                Thread.sleep(2000);
+                OutputFileEntity entity = data.getOutputFile();
+                // 坐标处理
+                String coord = entity.getCoord();
+                log.info("convert coord: {}", coord);
+                JSONArray arrayCoord = JSON.parseArray(coord);
+
+
+                // 转换坐标 普通坐标转换
+                if (TypeCode.COORD_SYSTEM_2000.equals(entity.getCoordType())) {
+                    // 普通坐标转换
+                    log.info("need to general transform");
+                    if (arrayCoord.size() == 0) {
+                        // 没有坐标参数,执行普通坐标转换(ogrinfo)
+                        log.info("run generalCoordTransform");
+                        entity = generalCoordTransform(entity, Command.VECTOR_TRANSFORM_GENERAL, vectorServer, baseOutputPath);
+
+                    } else {
+                        // 有坐标参数,执行严格坐标转换(CGCS2000转wgs80)
+                        log.info("run strictCoordTransform");
+                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS80, vectorServer, baseOutputPath);
+                    }
+
+                } else if (TypeCode.COORD_XIAN_1980.equals(entity.getCoordType())) {
+
+                    // 严格坐标转换 (西安80转wgs84),需要参数
+                    log.info("need to strict transform, CoordType: {}", entity.getCoordType());
+                    if (arrayCoord.size() == 0) {
+                        log.info("error: {}", MsgCode.E50009);
+                        entity.setStatus(7);
+                        entity.setUpdateTime(new Date());
+                        vectorServer.save(entity);
+                    } else {
+                        log.info("run strictCoordTransform");
+                        entity = strictCoordTransform(entity, Command.VECTOR_TRANSFORM_STRICT_WGS84, vectorServer, baseOutputPath);
+                    }
+
+                } else if (TypeCode.COORD_WGS84.equals(entity.getCoordType())) {
+                    // 不转换坐标 把文件信息移动到CoordStrictPath 这路径下
+                    log.info("not to transform");
+
+                    entity.setCoordStrictPath(entity.getUploadPath());
+                    entity.setUpdateTime(new Date());
+                    entity.setStatus(3);
+                    entity.setCoordType(TypeCode.COORD_WGS84);
+                    vectorServer.save(entity);
+                } else {
+                    log.info("error exeCmd");
+                    entity.setStatus(7);
+                    entity.setUpdateTime(new Date());
+                    vectorServer.save(entity);
+                }
+                log.info("end convertCoordThread id: {}", entity.getId());
+            }
+        } catch (Exception e) {
+            Thread.currentThread().interrupt();
+            log.error("error vector consume queue VectorJudgeCoordConsumerThread: {}", e);
+            throw new RuntimeException(e);
+
+
+        }
+    }
+
+
+    /**
+     * raster 严格坐标转换
+     */
+    private OutputFileEntity cmdTansformGdalwarpStrict(OutputFileEntity entity, RasterServer rasterServer, String baseOutputPath){
+        log.info("run cmdTansformGdalwarpStrict");
+
+        String OUTPUT_FILE_PATH = baseOutputPath;
+
+        String fileName = StringUtils.substringBeforeLast(entity.getFileName(), ".");
+
+        String outFileStep1 = OUTPUT_FILE_PATH + "transform";
+        FileUtils.createDir(outFileStep1);
+        outFileStep1 = outFileStep1 + File.separator + entity.getFileName();
+
+        // 坐标处理
+        String coord = entity.getCoord();
+        log.info("convert coord: {}", coord);
+        JSONArray array = JSON.parseArray(coord);
+
+        String step_1 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_1;
+        step_1 = step_1.replace("@inputFile", entity.getUploadPath());
+        step_1 = step_1.replace("@outputFile", outFileStep1);
+
+
+        // 3位数坐标
+        if (array.size() == 3) {
+            step_1 = step_1.replace("@x", array.getString(0));
+            step_1 = step_1.replace("@y", array.getString(1));
+            step_1 = step_1.replace("@z", array.getString(2));
+            step_1 = step_1.replace("@rx","0");
+            step_1 = step_1.replace("@ry","0");
+            step_1 = step_1.replace("@rz","0");
+
+            // 坐标为空时
+        } else if (array.size() == 0) {
+            step_1 = step_1.replace("@x","0");
+            step_1 = step_1.replace("@y","0");
+            step_1 = step_1.replace("@z","0");
+            step_1 = step_1.replace("@rx","0");
+            step_1 = step_1.replace("@ry","0");
+            step_1 = step_1.replace("@rz","0");
+
+            // 6位数坐标
+        }else  {
+            step_1 = step_1.replace("@x", array.getString(0));
+            step_1 = step_1.replace("@y", array.getString(1));
+            step_1 = step_1.replace("@z", array.getString(2));
+            step_1 = step_1.replace("@rx",array.getString(3));
+            step_1 = step_1.replace("@ry",array.getString(4));
+            step_1 = step_1.replace("@rz",array.getString(5));
+        }
+
+
+        String step_2 = Command.RASTER_TRANSFORM_GDALWARP_STRICT_2;
+
+
+        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);
+
+        Integer integer = rasterServer.exeCmd(step_1, step_2);
+
+        if (integer != 0) {
+            log.info("error command transform");
+            return null;
+        }
+
+        entity.setStatus(4);
+        entity.setUpdateTime(new Date());
+        entity.setCoordGeneralPath(outFileStep1);
+        entity.setCoordStrictPath(outFileStep2);
+
+        entity = rasterServer.save(entity);
+
+        return entity;
+    }
+
+    /**
+     * 普通坐标转换
+     */
+    private OutputFileEntity generalCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer, String baseOutputPath) {
+
+        String directory = createDirectory(entity, baseOutputPath);
+        directory = directory + File.separator + entity.getFileName();
+
+        cmd = cmd.replace("@inputFile", entity.getUploadPath());
+        cmd = cmd.replace("@outputFile", directory);
+        log.info("cmd: {}", cmd);
+        return runCmd(cmd, entity, null, directory, vectorServer);
+    }
+
+
+    // 严格坐标转换
+    private OutputFileEntity strictCoordTransform(OutputFileEntity entity, String cmd, VectorServer vectorServer, String baseOutputPath) {
+
+        String directory = createDirectory(entity, baseOutputPath);
+        directory = directory + File.separator + entity.getFileName();
+        String coord = entity.getCoord();
+        coord = coord.replace("[", "");
+        coord = coord.replace("]", "");
+        // 去空格
+        coord = StringUtils.deleteWhitespace(coord);
+
+        cmd = cmd.replace("@coord", coord);
+        cmd = cmd.replace("@inputFile", entity.getUploadPath());
+        cmd = cmd.replace("@outputFile", directory);
+        log.info("cmd: {}", cmd);
+
+        return runCmd(cmd, entity, null, directory, vectorServer);
+    }
+
+    // 创建目录
+    private String createDirectory(OutputFileEntity entity, String baseOutputPath) {
+        String OUTPUT_FILE_PATH = baseOutputPath;
+        String directory = OUTPUT_FILE_PATH + "transform" + File.separator + entity.getDirectory();
+        FileUtils.createDir(directory);
+        return directory;
+    }
+
+    // 执行命令,创建对象, 坐标转换使用
+    private OutputFileEntity runCmd(String cmd, OutputFileEntity entity, String generalPath, String strictPath, VectorServer vectorServer) {
+        Integer integer = vectorServer.exeCmd(cmd);
+        // 转换坐标失败, 修改状态
+        if (integer != 0) {
+            entity.setUpdateTime(new Date());
+            entity.setStatus(7);
+            entity = vectorServer.save(entity);
+            return null;
+        }
+
+        entity.setFileName(entity.getFileName());
+        entity.setCoordGeneralPath(generalPath);
+        entity.setCoordStrictPath(strictPath);
+        entity.setUpdateTime(new Date());
+        entity.setStatus(3);
+
+        entity = vectorServer.save(entity);
+
+        return entity;
+
+    }
+
+}

+ 0 - 69
src/main/java/com/fd/thread/SliceVectorThread.java

@@ -1,69 +0,0 @@
-//package com.fd.thread;
-//
-//import com.fd.dto.MyQueue;
-//import com.fd.entity.OutputFileEntity;
-//import com.fd.server.CmdServer;
-//import com.fd.server.VectorServer;
-//import lombok.extern.log4j.Log4j2;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.scheduling.annotation.Async;
-//
-//import java.util.Date;
-//import java.util.concurrent.BlockingQueue;
-//import java.util.concurrent.TimeUnit;
-//
-///**
-// * Created by Owen on 2019/12/6 0006 11:27
-// *
-// * 矢量数据切片多线程处理
-// */
-//@Log4j2
-//public class SliceVectorThread {
-//
-//    @Autowired
-//    private VectorServer vectorServer;
-//
-//    @Autowired
-//    private CmdServer cmdServer;
-//
-//    private BlockingQueue<MyQueue> queue;
-//
-//    public SliceVectorThread(BlockingQueue<MyQueue> queue){
-//        this.queue = queue;
-//    }
-//
-//    @Async("taskExecutor")
-//    public void run(){
-//        log.warn("run SliceVectorThread");
-//
-//        while (true) {
-//            try {
-//                MyQueue data = queue.poll(2, TimeUnit.SECONDS);
-//                if (data != null) {
-//                    log.info("vector consume data:" + data.toString());
-//
-//                    OutputFileEntity entity = data.getOutputFile();
-//
-//                    Integer integer = cmdServer.exeCmdInt(data.getStr());
-//                    if (integer != 0) {
-//                        log.info("error command exeCmdVectorSlice");
-//                        // 如果命令运行失败,状态改为0
-//                        entity.setStatus(0);
-//                        entity.setUpdateTime(new Date());
-//                        vectorServer.save(entity);
-//                        return;
-//                    }
-//                    // 切片完成,修改完成状态
-//                    entity.setStatus(5);
-//                    entity.setUpdateTime(new Date());
-//                    entity = vectorServer.save(entity);
-//                    log.info("entity: {}", entity.toString());
-//                }
-//
-//            } catch (Exception e) {
-//                log.error("error  consume queue vector SliceConsumerThread: {}", e);
-//                e.printStackTrace();
-//            }
-//        }
-//    }
-//}