RasterServerImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. package com.fd.server.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.fd.constant.Command;
  6. import com.fd.constant.MsgCode;
  7. import com.fd.constant.TypeCode;
  8. import com.fd.dto.ConfigJsonDto;
  9. import com.fd.dto.PageDto;
  10. import com.fd.entity.FileEntity;
  11. //import com.fd.entity.LayerEntity;
  12. import com.fd.entity.OutputFileEntity;
  13. import com.fd.entity.StyleEntity;
  14. import com.fd.repository.FileRepository;
  15. //import com.fd.repository.LayerRepository;
  16. import com.fd.repository.OutputFileRepository;
  17. import com.fd.repository.StyleRepository;
  18. import com.fd.server.CmdServer;
  19. import com.fd.server.RasterServer;
  20. import com.fd.util.FileUtils;
  21. import com.fd.util.R;
  22. import lombok.extern.log4j.Log4j2;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.beans.factory.annotation.Value;
  26. import org.springframework.data.domain.Page;
  27. import org.springframework.data.domain.PageRequest;
  28. import org.springframework.data.domain.Sort;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.web.multipart.MultipartFile;
  31. import java.io.File;
  32. import java.io.IOException;
  33. import java.util.Date;
  34. import java.util.List;
  35. import java.util.Optional;
  36. /**
  37. * Created by Owen on 2019/11/21 0021 15:29
  38. */
  39. @Log4j2
  40. @Service
  41. public class RasterServerImpl implements RasterServer {
  42. @Value("${input.file.path.raster}")
  43. private String INPUT_FILE_PATH;
  44. @Value("${output.file.path.raster}")
  45. private String OUTPUT_FILE_PATH;
  46. @Value("${copy.file.path.raster}")
  47. private String MOVE_FILE_TO_SERVER;
  48. // config.json 地址
  49. @Value("${config.path}")
  50. private String CONFIG_JSON_PATH;
  51. // config.json teileset 的相对路径
  52. @Value("${config.tileset}")
  53. private String CONFIG_TILESET;
  54. @Autowired
  55. private FileRepository fileRepository;
  56. @Autowired
  57. private OutputFileRepository outputFileRepository;
  58. @Autowired
  59. private CmdServer cmdServer;
  60. @Autowired
  61. private StyleRepository styleRepository;
  62. @Override
  63. public R deleteById(Long fileId) {
  64. // 删除服务器文件
  65. // 删除服务器文件
  66. Optional<OutputFileEntity> e = outputFileRepository.findById(fileId);
  67. if (!e.isPresent()) {
  68. return new R(50002, MsgCode.E50002);
  69. }
  70. OutputFileEntity fileEntity = e.get();
  71. // 删除配置文件config.json制定行
  72. StyleEntity styleEntity = styleRepository.findByOutputFileIdTop(fileId);
  73. if (styleEntity != null) {
  74. deleteRowConfigJson(styleEntity);
  75. }
  76. // 删除数据库记录
  77. outputFileRepository.deleteById(fileId);
  78. fileRepository.deleteById(fileEntity.getUploadId());
  79. styleRepository.deleteByOutputFileId(fileId);
  80. // 文件
  81. if (fileEntity.getUploadPath() != null) {
  82. FileUtils.delFolder(fileEntity.getUploadPath());
  83. }
  84. if (fileEntity.getCoordGeneralPath() != null) {
  85. FileUtils.delFolder(fileEntity.getCoordGeneralPath());
  86. }
  87. if (fileEntity.getUnZipPath() != null) {
  88. FileUtils.delFolder(fileEntity.getUnZipPath());
  89. }
  90. if (fileEntity.getGeojsonPath() != null) {
  91. FileUtils.delFolder(fileEntity.getGeojsonPath());
  92. }
  93. if (fileEntity.getCoordStrictPath() != null) {
  94. FileUtils.delFolder(fileEntity.getCoordStrictPath());
  95. }
  96. if (fileEntity.getSlicePath() != null) {
  97. FileUtils.delFolder(fileEntity.getSlicePath());
  98. }
  99. return new R(200, MsgCode.SUCCESS);
  100. }
  101. /**
  102. * 删除指定行的config.json 数据
  103. */
  104. private void deleteRowConfigJson(StyleEntity entity) {
  105. String s = FileUtils.readFile(CONFIG_JSON_PATH);
  106. JSONObject original = JSON.parseObject(s);
  107. log.info("original: {}", s);
  108. JSONArray layers = JSON.parseArray(original.getString("layers"));
  109. for (int i = 0; i < layers.size(); i++) {
  110. JSONObject o = (JSONObject) layers.get(i);
  111. if (o.getString("name").equals(entity.getName())) {
  112. // 删除对象
  113. layers.remove(i);
  114. }
  115. }
  116. // 更新json
  117. original.put("layers", layers);
  118. log.info("original update: {}", original.toJSONString());
  119. // 更新config.json
  120. try {
  121. FileUtils.fileWriter(JSON.toJSONString(original), CONFIG_JSON_PATH);
  122. } catch (IOException e) {
  123. e.printStackTrace();
  124. }
  125. }
  126. // @Override
  127. // public R moveFileToServer(Long fileId, ConfigJsonDto param) {
  128. // Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
  129. // if (!o.isPresent()) {
  130. // log.info("id:{} 不存在", fileId);
  131. // return new R(50002, MsgCode.E50002);
  132. // }
  133. //
  134. // // 把数据移动到指定服务位置
  135. // OutputFileEntity entity = o.get();
  136. // FileUtils.createDir(MOVE_FILE_TO_SERVER);
  137. //
  138. // try {
  139. // org.apache.commons.io.FileUtils.copyDirectoryToDirectory(new File(entity.getSlicePath()), new File(MOVE_FILE_TO_SERVER));
  140. // // 修改前端的config.json 文件
  141. // String lastName = StringUtils.substringAfterLast(entity.getSlicePath(), "/");
  142. // log.info("lastName: {}", lastName);
  143. // writeJsonFile(param, lastName, entity);
  144. //
  145. // //修改linux 文件权限
  146. // String cmd = Command.CMD_CHOMD_755;
  147. // String slice = MOVE_FILE_TO_SERVER + lastName;
  148. // cmd = cmd.replace("@path", slice);
  149. // log.info("cmd: {}", cmd);
  150. // cmdServer.exeCmdInt(cmd);
  151. //
  152. // // 成功,更新状态
  153. // entity.setStatus(8);
  154. // entity.setUpdateTime(new Date());
  155. // outputFileRepository.save(entity);
  156. // return new R(200, MsgCode.SUCCESS);
  157. // } catch (IOException e) {
  158. //
  159. // entity.setStatus(10);
  160. // entity.setUpdateTime(new Date());
  161. // outputFileRepository.save(entity);
  162. // e.printStackTrace();
  163. // return new R(51004, MsgCode.E51004, e);
  164. // }
  165. // }
  166. @Override
  167. public R moveFileToServer(Long fileId, ConfigJsonDto param) {
  168. Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
  169. if (!o.isPresent()) {
  170. log.info("id:{} 不存在", fileId);
  171. return new R(50002, MsgCode.E50002);
  172. }
  173. // 把数据移动到指定服务位置
  174. OutputFileEntity entity = o.get();
  175. // FileUtils.createDir(MOVE_FILE_TO_SERVER);
  176. try {
  177. // org.apache.commons.io.FileUtils.copyDirectoryToDirectory(new File(entity.getSlicePath()), new File(MOVE_FILE_TO_SERVER));
  178. // 修改前端的config.json 文件
  179. String lastName = StringUtils.substringAfterLast(entity.getSlicePath(), "/");
  180. log.info("lastName: {}", lastName);
  181. writeJsonFile(param, lastName, entity);
  182. //修改linux 文件权限
  183. // String cmd = Command.CMD_CHOMD_755;
  184. // String slice = MOVE_FILE_TO_SERVER + lastName;
  185. // cmd = cmd.replace("@path", slice);
  186. // log.info("cmd: {}", cmd);
  187. // cmdServer.exeCmdInt(cmd);
  188. // 成功,更新状态
  189. entity.setStatus(8);
  190. entity.setUpdateTime(new Date());
  191. outputFileRepository.save(entity);
  192. return new R(200, MsgCode.SUCCESS);
  193. } catch (Exception e) {
  194. entity.setStatus(10);
  195. entity.setUpdateTime(new Date());
  196. outputFileRepository.save(entity);
  197. e.printStackTrace();
  198. return new R(51004, MsgCode.E51004, e);
  199. }
  200. }
  201. @Override
  202. public R uploadBigFile(MultipartFile file, String strCoord) {
  203. long start = System.currentTimeMillis();
  204. if (file.isEmpty() || file.getSize() <= 0) {
  205. log.info("文件为空");
  206. return new R(50001, MsgCode.E50001);
  207. }
  208. // 文件名全名
  209. String fullFileName = file.getOriginalFilename();
  210. // 创建目录路径
  211. FileUtils.createDir(INPUT_FILE_PATH);
  212. // 拼接唯一文件名
  213. long timeMillis = System.currentTimeMillis();
  214. // String fileName = timeMillis + "_" + fullFileName;
  215. String fileName = fullFileName;
  216. // 文件保存路径
  217. String filePath = INPUT_FILE_PATH + fileName;
  218. // 写文件到本地
  219. try {
  220. FileUtils.bigFileWrite(file.getInputStream(), filePath);
  221. } catch (IOException e) {
  222. e.printStackTrace();
  223. }
  224. log.info("filePath: {}", filePath);
  225. // 保存信息到db
  226. FileEntity entity = new FileEntity();
  227. entity.setFileName(fileName);
  228. entity.setFileUrl(filePath);
  229. entity.setCreateTime(new Date());
  230. entity.setUpdateTime(new Date());
  231. entity.setType(TypeCode.FILE_TYPE_RASTER);
  232. entity.setCoord(strCoord);
  233. entity.setStatus(2);
  234. entity.setResStatus(0);
  235. fileRepository.save(entity);
  236. OutputFileEntity outputFile = new OutputFileEntity();
  237. outputFile.setUploadId(entity.getId());
  238. outputFile.setUploadPath(entity.getFileUrl());
  239. outputFile.setFileName(entity.getFileName());
  240. outputFile.setStatus(2);
  241. outputFile.setResStatus(0);
  242. outputFile.setCoord(strCoord);
  243. outputFile.setType(TypeCode.FILE_TYPE_RASTER);
  244. outputFile.setCreateTime(new Date());
  245. outputFile.setUpdateTime(new Date());
  246. outputFile = outputFileRepository.save(outputFile);
  247. long end = System.currentTimeMillis();
  248. log.info("end uploadBigFile, total time: {} s", (end - start)/1000);
  249. return new R(200, outputFile);
  250. }
  251. // @Override
  252. // public R findByType(String fileTypeRaster, PageDto pageDto) {
  253. // Page<OutputFileEntity> page = outputFileRepository.findByType(fileTypeRaster, PageRequest.of(pageDto.getPageNum(), pageDto.getPageSize(), Sort.by("createTime").descending()));
  254. // return new R(200, page);
  255. // }
  256. @Override
  257. public R findByType(String fileTypeRaster, PageDto pageDto) {
  258. Page<OutputFileEntity> page = outputFileRepository.findByTypeAndResStatus(fileTypeRaster, 0, PageRequest.of(pageDto.getPageNum(), pageDto.getPageSize(), Sort.by("createTime").descending()));
  259. return new R(200, page);
  260. }
  261. @Override
  262. public OutputFileEntity findById(Long fileId) {
  263. Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
  264. if (o.isPresent()) {
  265. return o.get();
  266. }
  267. return null;
  268. }
  269. @Override
  270. public List<FileEntity> findByFileName(String fileName) {
  271. // return fileRepository.findByFileNameAndType(fileName, TypeCode.FILE_TYPE_RASTER);
  272. return fileRepository.findByFileNameAndTypeAndResStatus(fileName, TypeCode.FILE_TYPE_RASTER, 0);
  273. }
  274. @Override
  275. public OutputFileEntity save(OutputFileEntity fileSchedule) {
  276. return outputFileRepository.save(fileSchedule);
  277. }
  278. @Override
  279. public FileEntity findByInputFileId(Long fileId) {
  280. Optional<FileEntity> o = fileRepository.findById(fileId);
  281. if (o.isPresent()) {
  282. return o.get();
  283. }
  284. return null;
  285. }
  286. @Override
  287. public FileEntity saveInputFile(FileEntity fileEntity) {
  288. return fileRepository.save(fileEntity);
  289. }
  290. private void writeJsonFile(ConfigJsonDto param, String lastName, OutputFileEntity entity) {
  291. String s = FileUtils.readFile(CONFIG_JSON_PATH);
  292. StyleEntity styleEntity = styleRepository.findByOutputFileIdTop(entity.getId());
  293. if (styleEntity == null) {
  294. styleEntity = new StyleEntity();
  295. styleEntity.setOutputFileId(entity.getId());
  296. styleEntity.setCreateTime(new Date());
  297. styleEntity.setResStatus(0);
  298. }
  299. JSONObject original = JSON.parseObject(s);
  300. log.info("original: {}", s);
  301. JSONArray layers = JSON.parseArray(original.getString("layers"));
  302. JSONObject subJson = new JSONObject();
  303. long cu = System.currentTimeMillis();
  304. // 需要唯一
  305. String name = "raster_" + cu;
  306. subJson.put("name", name);
  307. subJson.put("text", param.getText());
  308. // raster 就用这个类型
  309. subJson.put("type", "imagery");
  310. subJson.put("checked", false);
  311. subJson.put("show", true);
  312. String slicePath = entity.getSlicePath();
  313. slicePath = slicePath.replace("/root/gis/cesium", "");
  314. subJson.put("url", slicePath);
  315. layers.add(subJson);
  316. original.put("layers", layers);
  317. log.info("original update: {}", original.toJSONString());
  318. try {
  319. FileUtils.fileWriter(JSON.toJSONString(original), CONFIG_JSON_PATH);
  320. // 将图层信息保存到db
  321. // 前端需要layer信息
  322. styleEntity.setLayer(subJson.toJSONString());
  323. styleEntity.setUpdateTime(new Date());
  324. styleEntity.setName(name);
  325. styleRepository.save(styleEntity);
  326. } catch (IOException e) {
  327. e.printStackTrace();
  328. }
  329. }
  330. }