|
@@ -0,0 +1,404 @@
|
|
|
|
+package com.fd.controller;
|
|
|
|
+
|
|
|
|
+import com.fd.Dto.FdageDto;
|
|
|
|
+import com.fd.Dto.PageDto;
|
|
|
|
+import com.fd.Dto.ResourcesJsonDto;
|
|
|
|
+import com.fd.constant.CommandMsg;
|
|
|
|
+import com.fd.constant.ErrorCode;
|
|
|
|
+import com.fd.entity.FileEntity;
|
|
|
|
+import com.fd.entity.ScheduleEntity;
|
|
|
|
+import com.fd.repository.FileRepository;
|
|
|
|
+import com.fd.repository.ScheduleRepository;
|
|
|
|
+import com.fd.result.ResponseResult;
|
|
|
|
+import com.fd.server.CmdServer;
|
|
|
|
+import com.fd.server.FileServer;
|
|
|
|
+import com.fd.server.JsonServer;
|
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
|
+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.web.bind.annotation.*;
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
+
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Optional;
|
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * Created by Owen on 2019/10/25 0025 12:22
|
|
|
|
+ */
|
|
|
|
+@Log4j2
|
|
|
|
+@RestController
|
|
|
|
+@RequestMapping("api/vts")
|
|
|
|
+public class VtsController {
|
|
|
|
+
|
|
|
|
+ @Value("${uploadFile.fdmodelPath}")
|
|
|
|
+ private String fdmodelPath;
|
|
|
|
+
|
|
|
|
+ @Value("${uploadFile.vectorPath}")
|
|
|
|
+ private String vectorPath;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private FileServer fileServer;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private FileRepository fileRepository;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private JsonServer jsonServer;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private CmdServer cmdServer;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ScheduleRepository scheduleRepository;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 多线程共享变量
|
|
|
|
+ // false 表示完成
|
|
|
|
+ private static AtomicBoolean existsSlpk2vts = new AtomicBoolean(false);
|
|
|
|
+
|
|
|
|
+ private static AtomicBoolean existsVts = new AtomicBoolean(false);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 文件列表
|
|
|
|
+ * Sort.by("createTime"),createTime属性名
|
|
|
|
+ */
|
|
|
|
+ @ApiOperation("upload file list")
|
|
|
|
+ @PostMapping("list")
|
|
|
|
+ private ResponseResult list(@RequestBody PageDto param){
|
|
|
|
+ Page<FileEntity> page = fileRepository.findAll(PageRequest.of(param.getPageNum(), param.getPageSize(), Sort.by("createTime").descending()));
|
|
|
|
+ return new ResponseResult(200,page);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @ApiOperation(" delete fileId")
|
|
|
|
+ @GetMapping("delete/{fileId}/")
|
|
|
|
+ private ResponseResult delId(@PathVariable("fileId") Long fileId){
|
|
|
|
+ fileRepository.deleteById(fileId);
|
|
|
|
+ return new ResponseResult(200, "success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 文件上传 到3d model
|
|
|
|
+ * 上传大文件
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @ApiOperation("upload 3D model file")
|
|
|
|
+ @PostMapping(value = "upload/fdModel", consumes = { "multipart/form-data" })
|
|
|
|
+ private ResponseResult upload(@RequestParam("file") MultipartFile file){
|
|
|
|
+ return fileServer.uploadBigFile(file, fdmodelPath);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 文件上传
|
|
|
|
+ * 需要创建目录
|
|
|
|
+ * 不支持大文件上传
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @ApiOperation("upload Vector file")
|
|
|
|
+ @PostMapping(value = "upload/vector/{directoryName}/", consumes = { "multipart/form-data" })
|
|
|
|
+ private ResponseResult uploadVector(@RequestParam("file") MultipartFile file, @PathVariable("directoryName") String directoryName){
|
|
|
|
+ return fileServer.upload2(file, vectorPath+directoryName+"/");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 可能运行1s -- 12h
|
|
|
|
+ * 需要记录进度
|
|
|
|
+ * 可能需要多前程运行
|
|
|
|
+ */
|
|
|
|
+ @ApiOperation("commandSlpk2vts")
|
|
|
|
+ @GetMapping("/command/model/slpk/{fileId}/")
|
|
|
|
+ private ResponseResult commandSlpk2vts(@PathVariable("fileId") Long fileId) {
|
|
|
|
+ log.info("run commandSlpk2vts : {}", fileId);
|
|
|
|
+// String fileName = null;
|
|
|
|
+// try {
|
|
|
|
+// fileName = getFileName(fileId);
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
+// return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+// String cmd = CommandMsg.MODEL_SLPK2VTS;
|
|
|
|
+// cmd = cmd.replaceAll("@fileName", fileName);
|
|
|
|
+// log.info("cmd: {}", cmd);
|
|
|
|
+
|
|
|
|
+// Integer s = cmdServer.exeCmdSlpk2vts(cmd, fileId);
|
|
|
|
+// if (s ==1) {
|
|
|
|
+// log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+// return new ResponseResult(50005, ErrorCode.E50005);
|
|
|
|
+// }
|
|
|
|
+// log.info("cmd run : success");
|
|
|
|
+
|
|
|
|
+ Optional<FileEntity> entity = fileRepository.findById(fileId);
|
|
|
|
+ if (!entity.isPresent()) {
|
|
|
|
+ return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileEntity fileEntity = entity.get();
|
|
|
|
+ String fileName = fileEntity.getFileName();
|
|
|
|
+ fileName = fileName.substring(0, fileName.lastIndexOf("."));
|
|
|
|
+
|
|
|
|
+ String cmd = CommandMsg.MODEL_SLPK2VTS;
|
|
|
|
+ cmd = cmd.replaceAll("@fileName", fileName);
|
|
|
|
+ log.info("cmd: {}", cmd);
|
|
|
|
+ if (existsSlpk2vts.compareAndSet(false, true)) {
|
|
|
|
+ new Thread(new CmdSlpk2vtsThread(cmd, fileId, fileEntity)).start();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new ResponseResult(200, "success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public class CmdSlpk2vtsThread implements Runnable{
|
|
|
|
+
|
|
|
|
+ private String cmd;
|
|
|
|
+
|
|
|
|
+ private Long fileId;
|
|
|
|
+
|
|
|
|
+ private FileEntity fileEntity;
|
|
|
|
+
|
|
|
|
+ public CmdSlpk2vtsThread(String cmd, Long fileId, FileEntity fileEntity) {
|
|
|
|
+ this.cmd = cmd;
|
|
|
|
+ this.fileId = fileId;
|
|
|
|
+ this.fileEntity = fileEntity;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ log.info("run CmdSlpk2vtsThread");
|
|
|
|
+ Integer s = cmdServer.exeCmdSlpk2vts(cmd, fileId);
|
|
|
|
+ if (s == 1) {
|
|
|
|
+ log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+ }
|
|
|
|
+ log.info("cmd run : success");
|
|
|
|
+ fileEntity.setStatus(1); // 1:表示文件执行完成
|
|
|
|
+ fileEntity.setUpdateTime(new Date());
|
|
|
|
+ fileRepository.save(fileEntity);
|
|
|
|
+ // 表示执行完成,释放锁
|
|
|
|
+ existsSlpk2vts.set(false);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 可能运行1s -- 12h
|
|
|
|
+ * 需要记录进度
|
|
|
|
+ * 可能需要多前程运行
|
|
|
|
+ */
|
|
|
|
+ @ApiOperation("commandVts")
|
|
|
|
+ @GetMapping("/command/model/vts/{fileId}/")
|
|
|
|
+ private ResponseResult commandVts(@PathVariable("fileId") Long fileId) {
|
|
|
|
+ log.info("run commandVts");
|
|
|
|
+// String fileName = null;
|
|
|
|
+// try {
|
|
|
|
+// fileName = getFileName(fileId);
|
|
|
|
+// } catch (Exception e) {
|
|
|
|
+// return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// String cmd = CommandMsg.MODEL_VTS;
|
|
|
|
+// cmd = cmd.replaceAll("@fileName", fileName);
|
|
|
|
+// log.info("cmd: {}", cmd);
|
|
|
|
+//
|
|
|
|
+//// Integer s = cmdServer.exeCmdVts(cmd, fileId);
|
|
|
|
+//// if (s ==1) {
|
|
|
|
+//// log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+//// return new ResponseResult(50005, ErrorCode.E50005);
|
|
|
|
+//// }
|
|
|
|
+// log.info("cmd run : success");
|
|
|
|
+
|
|
|
|
+ Optional<FileEntity> entity = fileRepository.findById(fileId);
|
|
|
|
+ if (!entity.isPresent()) {
|
|
|
|
+ return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileEntity fileEntity = entity.get();
|
|
|
|
+ String fileName = fileEntity.getFileName();
|
|
|
|
+ fileName = fileName.substring(0, fileName.lastIndexOf("."));
|
|
|
|
+
|
|
|
|
+ String cmd = CommandMsg.MODEL_VTS;
|
|
|
|
+ cmd = cmd.replaceAll("@fileName", fileName);
|
|
|
|
+ log.info("cmd: {}", cmd);
|
|
|
|
+
|
|
|
|
+ if (existsVts.compareAndSet(false, true)) {
|
|
|
|
+ new Thread(new CmdVtsThread(cmd, fileId, fileEntity)).start();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new ResponseResult(200, "success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public class CmdVtsThread implements Runnable{
|
|
|
|
+
|
|
|
|
+ private String cmd;
|
|
|
|
+
|
|
|
|
+ private Long fileId;
|
|
|
|
+
|
|
|
|
+ private FileEntity fileEntity;
|
|
|
|
+
|
|
|
|
+ public CmdVtsThread(String cmd, Long fileId, FileEntity fileEntity) {
|
|
|
|
+ this.cmd = cmd;
|
|
|
|
+ this.fileId = fileId;
|
|
|
|
+ this.fileEntity = fileEntity;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void run() {
|
|
|
|
+ log.info("run CmdVtsThread");
|
|
|
|
+ Integer s = cmdServer.exeCmdVts(cmd, fileId);
|
|
|
|
+ if (s == 1) {
|
|
|
|
+ log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+ }
|
|
|
|
+ log.info("cmd run : success");
|
|
|
|
+ fileEntity.setStatus(2); // 2:表示VTS命令执行完成
|
|
|
|
+ fileEntity.setUpdateTime(new Date());
|
|
|
|
+ fileRepository.save(fileEntity);
|
|
|
|
+ // 表示执行完成,释放锁
|
|
|
|
+ existsVts.set(false);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @ApiOperation("commandChangeUser")
|
|
|
|
+ @GetMapping("/command/model/changeUser")
|
|
|
|
+ private ResponseResult commandChangeUser() {
|
|
|
|
+ log.info("run commandChangeUser");
|
|
|
|
+
|
|
|
|
+ Integer s = cmdServer.exeCmd(CommandMsg.MODEL_USER);
|
|
|
|
+ if (s ==1) {
|
|
|
|
+ log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+ return new ResponseResult(50005, ErrorCode.E50005);
|
|
|
|
+ }
|
|
|
|
+ log.info("cmd run : success");
|
|
|
|
+
|
|
|
|
+ return new ResponseResult(200, "success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @ApiOperation("commandOgr2ogr")
|
|
|
|
+ @GetMapping("/command/vector/ogr2ogr/{fileId}/")
|
|
|
|
+ private ResponseResult commandOgr2ogr(@PathVariable("fileId") Long fileId) {
|
|
|
|
+ log.info("run commandOgr2ogr");
|
|
|
|
+
|
|
|
|
+ Optional<FileEntity> entity = fileRepository.findById(fileId);
|
|
|
|
+ if (!entity.isPresent()) {
|
|
|
|
+ return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileEntity fileEntity = entity.get();
|
|
|
|
+ String fileUrl = fileEntity.getFileUrl();
|
|
|
|
+ fileUrl = fileUrl.substring(0, fileUrl.lastIndexOf("."));
|
|
|
|
+
|
|
|
|
+ String cmd = CommandMsg.VECTOR_OGR2OGR;
|
|
|
|
+ cmd = cmd.replaceAll("@fileName", fileUrl);
|
|
|
|
+ log.info("cmd: {}", cmd);
|
|
|
|
+
|
|
|
|
+ Integer s = cmdServer.exeCmd(cmd, fileId);
|
|
|
|
+ if (s == 1) {
|
|
|
|
+ log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+ return new ResponseResult(50005, ErrorCode.E50005);
|
|
|
|
+ }
|
|
|
|
+ log.info("cmd run : success");
|
|
|
|
+
|
|
|
|
+ // 文件名
|
|
|
|
+ String fileName = fileEntity.getFileName();
|
|
|
|
+
|
|
|
|
+ // 把生成的文件信息写入数据库
|
|
|
|
+ FileEntity geojson = new FileEntity();
|
|
|
|
+ geojson.setFileName(fileName.replace(".shp",".geojson"));
|
|
|
|
+ geojson.setFileUrl(fileUrl+".geojson");
|
|
|
|
+ geojson.setRecStatus("A");
|
|
|
|
+ geojson.setCreateTime(new Date());
|
|
|
|
+ geojson.setUpdateTime(new Date());
|
|
|
|
+
|
|
|
|
+ geojson = fileRepository.save(geojson);
|
|
|
|
+
|
|
|
|
+ return new ResponseResult(200, geojson);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @ApiOperation("commandTippecanoe ")
|
|
|
|
+ @GetMapping("/command/vector/tippecanoe/{fileId}/")
|
|
|
|
+ private ResponseResult commandTippecanoe(@PathVariable("fileId") Long fileId) {
|
|
|
|
+ log.info("run commandTippecanoe");
|
|
|
|
+
|
|
|
|
+ Optional<FileEntity> entity = fileRepository.findById(fileId);
|
|
|
|
+ if (!entity.isPresent()) {
|
|
|
|
+ return new ResponseResult(50002, ErrorCode.E50002);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileEntity fileEntity = entity.get();
|
|
|
|
+ String fileUrl = fileEntity.getFileUrl();
|
|
|
|
+ fileUrl = fileUrl.substring(0, fileUrl.lastIndexOf("."));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ String cmd = CommandMsg.VECTOR_TIPPECANOE;
|
|
|
|
+ cmd = cmd.replaceAll("@fileName", fileUrl);
|
|
|
|
+ log.info("cmd: {}", cmd);
|
|
|
|
+ Integer s = cmdServer.exeCmd(cmd, fileId);
|
|
|
|
+ if (s ==1) {
|
|
|
|
+ log.info("cmd run: {}", ErrorCode.E50005);
|
|
|
|
+ return new ResponseResult(50005, ErrorCode.E50005);
|
|
|
|
+ }
|
|
|
|
+ log.info("cmd run : success");
|
|
|
|
+
|
|
|
|
+ return new ResponseResult(200, "success");
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * ==================================== base map =================================================
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @ApiOperation("update resources.json")
|
|
|
|
+ @PostMapping("update/resources")
|
|
|
|
+ private ResponseResult updateResources(@RequestBody ResourcesJsonDto param){
|
|
|
|
+ log.info("run updateResources");
|
|
|
|
+ jsonServer.updateResourcesJson(param);
|
|
|
|
+ return new ResponseResult(200,"success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @ApiOperation("update 4dage")
|
|
|
|
+ @PostMapping("update/fdage")
|
|
|
|
+ private ResponseResult updateFdage(@RequestBody FdageDto param){
|
|
|
|
+ log.info("run updateFdage");
|
|
|
|
+ jsonServer.updateFdage(param);
|
|
|
|
+ return new ResponseResult(200,"success");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @ApiOperation("query progress bar; type:vts / slpk")
|
|
|
|
+ @PostMapping("progress/{fileId}/{type}/")
|
|
|
|
+ private ResponseResult queryProgress(@PathVariable("fileId") Long fileId, @PathVariable("type") String type){
|
|
|
|
+ log.info("run queryProgress");
|
|
|
|
+ log.info("fileId: {} , type: {}", fileId, type);
|
|
|
|
+ ScheduleEntity results = scheduleRepository.findByFileIdAndType(fileId, type);
|
|
|
|
+ return new ResponseResult(200, results);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private String getFileName(Long fileId) throws Exception {
|
|
|
|
+ Optional<FileEntity> entity = fileRepository.findById(fileId);
|
|
|
|
+ if (!entity.isPresent()) {
|
|
|
|
+ throw new Exception("ErrorCode.E50002");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ FileEntity fileEntity = entity.get();
|
|
|
|
+ String fileName = fileEntity.getFileName();
|
|
|
|
+ fileName = fileName.substring(0, fileName.lastIndexOf("."));
|
|
|
|
+ return fileName;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|