RasterServerImpl.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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.MsgCode;
  6. import com.fd.constant.TypeCode;
  7. import com.fd.dto.ConfigJsonDto;
  8. import com.fd.dto.PageDto;
  9. import com.fd.entity.FileEntity;
  10. import com.fd.entity.OutputFileEntity;
  11. import com.fd.repository.FileRepository;
  12. import com.fd.repository.OutputFileRepository;
  13. import com.fd.server.RasterServer;
  14. import com.fd.util.FileUtils;
  15. import com.fd.util.R;
  16. import lombok.extern.log4j.Log4j2;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.data.domain.Page;
  21. import org.springframework.data.domain.PageRequest;
  22. import org.springframework.data.domain.Sort;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.web.multipart.MultipartFile;
  25. import java.io.File;
  26. import java.io.IOException;
  27. import java.util.Date;
  28. import java.util.Optional;
  29. /**
  30. * Created by Owen on 2019/11/21 0021 15:29
  31. */
  32. @Log4j2
  33. @Service
  34. public class RasterServerImpl implements RasterServer {
  35. @Value("${input.file.path.raster}")
  36. private String INPUT_FILE_PATH;
  37. @Value("${output.file.path.raster}")
  38. private String OUTPUT_FILE_PATH;
  39. @Value("${copy.file.path.raster}")
  40. private String MOVE_FILE_TO_SERVER;
  41. // config.json 地址
  42. @Value("${config.path}")
  43. private String CONFIG_JSON_PATH;
  44. // config.json teileset 的相对路径
  45. @Value("${config.tileset}")
  46. private String CONFIG_TILESET;
  47. @Autowired
  48. private FileRepository fileRepository;
  49. @Autowired
  50. private OutputFileRepository outputFileRepository;
  51. @Override
  52. public R deleteById(Long fileId) {
  53. // 删除服务器文件
  54. Optional<OutputFileEntity> e = outputFileRepository.findById(fileId);
  55. if (!e.isPresent()) {
  56. return new R(50002, MsgCode.E50002);
  57. }
  58. OutputFileEntity fileEntity = e.get();
  59. // 文件
  60. // 删除数据库记录
  61. outputFileRepository.deleteById(fileId);
  62. fileRepository.deleteById(fileEntity.getUploadId());
  63. return new R(200, MsgCode.SUCCESS);
  64. }
  65. @Override
  66. public R moveFileToServer(Long fileId, ConfigJsonDto param) {
  67. Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
  68. if (!o.isPresent()) {
  69. log.info("id:{} 不存在", fileId);
  70. return new R(50002, MsgCode.E50002);
  71. }
  72. // 把数据移动到指定服务位置
  73. OutputFileEntity entity = o.get();
  74. FileUtils.createDir(MOVE_FILE_TO_SERVER);
  75. try {
  76. org.apache.commons.io.FileUtils.copyDirectoryToDirectory(new File(entity.getSlicePath()), new File(MOVE_FILE_TO_SERVER));
  77. } catch (IOException e) {
  78. e.printStackTrace();
  79. return new R(51004, MsgCode.E51004, e);
  80. }
  81. // 修改前端的config.json 文件
  82. String lastName = StringUtils.substringAfterLast(entity.getSlicePath(), "/");
  83. log.info("lastName: {}", lastName);
  84. writeJsonFile(param, lastName);
  85. // 成功,更新状态
  86. entity.setStatus(8);
  87. outputFileRepository.save(entity);
  88. return new R(200, MsgCode.SUCCESS);
  89. }
  90. @Override
  91. public R uploadBigFile(MultipartFile file) {
  92. long start = System.currentTimeMillis();
  93. if (file.isEmpty() || file.getSize() <= 0) {
  94. log.info("文件为空");
  95. return new R(50001, MsgCode.E50001);
  96. }
  97. // 文件名全名
  98. String fullFileName = file.getOriginalFilename();
  99. // 创建目录路径
  100. FileUtils.createDir(INPUT_FILE_PATH);
  101. // 拼接唯一文件名
  102. long timeMillis = System.currentTimeMillis();
  103. // String fileName = timeMillis + "_" + fullFileName;
  104. String fileName = fullFileName;
  105. // 文件保存路径
  106. String filePath = INPUT_FILE_PATH + fileName;
  107. // 写文件到本地
  108. try {
  109. FileUtils.bigFileWrite(file.getInputStream(), filePath);
  110. } catch (IOException e) {
  111. e.printStackTrace();
  112. }
  113. log.info("filePath: {}", filePath);
  114. // 保存信息到db
  115. FileEntity entity = new FileEntity();
  116. entity.setFileName(fileName);
  117. entity.setFileUrl(filePath);
  118. entity.setCreateTime(new Date());
  119. entity.setUpdateTime(new Date());
  120. entity.setType(TypeCode.FILE_TYPE_RASTER);
  121. entity.setStatus(2);
  122. fileRepository.save(entity);
  123. OutputFileEntity outputFile = new OutputFileEntity();
  124. outputFile.setUploadId(entity.getId());
  125. outputFile.setUploadPath(entity.getFileUrl());
  126. outputFile.setFileName(entity.getFileName());
  127. outputFile.setStatus(2);
  128. outputFile.setType(TypeCode.FILE_TYPE_RASTER);
  129. outputFile.setCreateTime(new Date());
  130. outputFile.setUpdateTime(new Date());
  131. outputFile = outputFileRepository.save(outputFile);
  132. long end = System.currentTimeMillis();
  133. log.info("end uploadBigFile, total time: {} s", (end - start)/1000);
  134. return new R(200, outputFile);
  135. }
  136. @Override
  137. public R findByType(String fileTypeRaster, PageDto pageDto) {
  138. Page<OutputFileEntity> page = outputFileRepository.findByType(fileTypeRaster, PageRequest.of(pageDto.getPageNum(), pageDto.getPageSize(), Sort.by("createTime").descending()));
  139. return new R(200, page);
  140. }
  141. @Override
  142. public OutputFileEntity findById(Long fileId) {
  143. Optional<OutputFileEntity> o = outputFileRepository.findById(fileId);
  144. if (o.isPresent()) {
  145. return o.get();
  146. }
  147. return null;
  148. }
  149. @Override
  150. public FileEntity findByFileName(String fileName) {
  151. return fileRepository.findByFileName(fileName);
  152. }
  153. @Override
  154. public OutputFileEntity save(OutputFileEntity fileSchedule) {
  155. return outputFileRepository.save(fileSchedule);
  156. }
  157. private void writeJsonFile(ConfigJsonDto param, String lastName) {
  158. String s = FileUtils.readFile(CONFIG_JSON_PATH);
  159. JSONObject original = JSON.parseObject(s);
  160. log.info("original: {}", s);
  161. JSONArray layers = JSON.parseArray(original.getString("layers"));
  162. JSONObject subJson = new JSONObject();
  163. long cu = System.currentTimeMillis();
  164. subJson.put("name", "raster_" + cu); // 需要唯一
  165. subJson.put("text", param.getText());
  166. subJson.put("type", "imagery"); // raster 就用这个类型
  167. subJson.put("checked", false);
  168. subJson.put("show", true);
  169. subJson.put("url", "../data/" + lastName);
  170. layers.add(subJson);
  171. original.put("layers", layers);
  172. log.info("original update: {}", original.toJSONString());
  173. try {
  174. FileUtils.fileWriter(JSON.toJSONString(original), CONFIG_JSON_PATH);
  175. } catch (IOException e) {
  176. e.printStackTrace();
  177. }
  178. }
  179. }