RasterServerImpl.java 6.6 KB

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