ResourceService.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.lqkj.link.module.zone.service;
  2. import com.lqkj.link.module.authority.repository.UserInfoRepository;
  3. import com.lqkj.link.module.zone.domain.ModelCategory;
  4. import com.lqkj.link.module.zone.domain.ModelInfo;
  5. import com.lqkj.link.module.zone.repository.ModelCategoryRepository;
  6. import com.lqkj.link.module.zone.repository.ModelInfoRepository;
  7. import com.lqkj.link.util.Unzipper;
  8. import org.apache.commons.compress.archivers.ArchiveException;
  9. import org.springframework.data.domain.Page;
  10. import org.springframework.data.domain.PageRequest;
  11. import org.springframework.data.domain.Pageable;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.io.File;
  15. import java.io.IOException;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.UUID;
  20. import java.util.stream.Collectors;
  21. @Service
  22. public class ResourceService {
  23. private final ModelCategoryRepository categoryRepository;
  24. private final ModelInfoRepository infoRepository;
  25. private final UserInfoRepository userInfoRepository;
  26. public ResourceService(ModelCategoryRepository categoryRepository, ModelInfoRepository infoRepository, UserInfoRepository userInfoRepository) {
  27. this.categoryRepository = categoryRepository;
  28. this.infoRepository = infoRepository;
  29. this.userInfoRepository = userInfoRepository;
  30. }
  31. public Page<ModelCategory> pageQuery(String categoryName, Integer page, Integer pageSize) {
  32. Pageable pageable = PageRequest.of(page, pageSize);
  33. Page<ModelCategory> categoryPage = categoryRepository.pageQuery(categoryName, pageable);
  34. for (ModelCategory category : categoryPage.getContent()) {
  35. category.setModelCount(infoRepository.countWithCategory(category.getCategoryId()));
  36. }
  37. return categoryPage;
  38. }
  39. public ModelCategory detail(Integer categoryId) {
  40. // modelCategory.setModelInfoList(infoRepository.listWithCategory(categoryId));
  41. return categoryRepository.findById(categoryId).get();
  42. }
  43. @Transactional
  44. public String save(ModelCategory category) throws IOException, ArchiveException {
  45. if ((category.getCategoryId() != null && categoryRepository.hasSameNameWithoutOne(category.getCategoryName(), category.getCategoryId()))
  46. || (category.getCategoryId() == null && categoryRepository.hasSameName(category.getCategoryName()))) {
  47. return "资源名称不能重复!";
  48. }
  49. Boolean uploadCompress = category.getUploadCompress();
  50. category = categoryRepository.save(category);
  51. String filePath = category.getCompressFilePath();
  52. if (uploadCompress) {
  53. infoRepository.deleteWithCategory(category.getCategoryId());
  54. // Unzipper.unzip("." + filePath, "./upload/resource/" + category.getCategoryId() + "/", false);
  55. Unzipper.unZipFiles(new File("." + filePath), "./upload/resource/" + category.getCategoryId() + "/");
  56. Map<String, ModelInfo> modelInfoMap = infoRepository
  57. .listWithCategory(category.getCategoryId())
  58. .stream()
  59. .collect(Collectors.toMap(ModelInfo::getModelName, ModelInfo -> ModelInfo));
  60. String modelFolderPath = "./upload/resource/" + category.getCategoryId() + "/model";
  61. File modelFolder = new File(modelFolderPath);
  62. if (modelFolder.isDirectory()) {
  63. List<ModelInfo> list = new ArrayList<>();
  64. File[] models = modelFolder.listFiles();
  65. assert models != null;
  66. for (File model : models) {
  67. if (model.isFile() && model.getName().endsWith(".fbx")) {
  68. String modelFileName = model.getName();
  69. String modelPath = "/upload/resource/" + category.getCategoryId() + "/model/";
  70. if (modelFileName.matches(".*[一-龥]+.*")) {
  71. // 如果包含中文,重命名
  72. String newFileName = UUID.randomUUID() + ".fbx";
  73. modelPath += newFileName;
  74. boolean rename = model.renameTo(new File("." + modelPath));
  75. System.out.println(rename);
  76. // 材质文件也需要重命名
  77. File oldMaterialFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/model/" + modelFileName.replace(".fbx", ".json"));
  78. if (oldMaterialFile.exists()) {
  79. File newMaterialFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/model/" + newFileName.replace(".fbx", ".json"));
  80. rename = oldMaterialFile.renameTo(newMaterialFile);
  81. System.out.println(rename);
  82. }
  83. // 模型图标也许要重命名
  84. File oldIconFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/icon/" + modelFileName.replace(".fbx", ".png"));
  85. if (oldIconFile.exists()) {
  86. File newIconFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/icon/" + newFileName.replace(".fbx", ".png"));
  87. rename = oldIconFile.renameTo(newIconFile);
  88. System.out.println(rename);
  89. }
  90. } else {
  91. modelPath += modelFileName;
  92. }
  93. if (!modelInfoMap.containsKey(modelFileName.substring(0, modelFileName.lastIndexOf(".")))) {
  94. list.add(new ModelInfo(null, category.getCategoryId(), modelFileName.substring(0, modelFileName.lastIndexOf(".")),
  95. null, null, null, modelPath,
  96. modelPath.replace("model", "icon").replace("fbx", "png"), null, null));
  97. } else {
  98. ModelInfo modelInfo = modelInfoMap.get(modelFileName.substring(0, modelFileName.lastIndexOf(".")));
  99. modelInfo.setOriginalPath(modelPath);
  100. modelInfo.setModelIcon(modelPath.replace("model", "icon").replace("fbx", "png"));
  101. modelInfo.setJsonPath(null);
  102. modelInfo.setTexturePath(null);
  103. list.add(modelInfo);
  104. modelInfoMap.remove(modelFileName.substring(0, modelFileName.lastIndexOf(".")));
  105. }
  106. }
  107. }
  108. infoRepository.saveAll(list);
  109. List<Integer> deleteList = modelInfoMap
  110. .values()
  111. .stream()
  112. .map(ModelInfo::getModelId)
  113. .toList();
  114. infoRepository.deleteAllByIdInBatch(deleteList);
  115. }
  116. }
  117. // 更新用户资源刷新状态
  118. userInfoRepository.updateRefreshStatus();
  119. return null;
  120. }
  121. public void deleteModel(Integer modelId) {
  122. infoRepository.deleteById(modelId);
  123. }
  124. @Transactional
  125. public void deleteCategory(List<Integer> categoryId) {
  126. categoryRepository.deleteAllByIdInBatch(categoryId);
  127. // 更新用户资源刷新状态
  128. userInfoRepository.updateRefreshStatus();
  129. }
  130. public List<Map<String, Object>> resourceCategory(String userCode) {
  131. return categoryRepository.queryWithUserCode(userCode);
  132. }
  133. public List<ModelInfo> models(String userCode) {
  134. return infoRepository.listWitUserCode(userCode);
  135. }
  136. public String savePersonal(ModelCategory modelCategory, String userCode) {
  137. if (modelCategory.getCategoryId() == 0) {
  138. modelCategory.setCategoryId(null);
  139. }
  140. Integer userId = userInfoRepository.findByUserCode(userCode).getUserId();
  141. if ((modelCategory.getCategoryId() != null && categoryRepository.hasSameNameByUserWithoutOne(modelCategory.getCategoryName(), modelCategory.getCategoryId(), userId))
  142. || (modelCategory.getCategoryId() == null && categoryRepository.hasSameNameByUser(modelCategory.getCategoryName(), userId))) {
  143. return "不能与已有文件夹重名!";
  144. }
  145. modelCategory.setUserId(userId);
  146. categoryRepository.save(modelCategory);
  147. return null;
  148. }
  149. public void saveModel(ModelInfo modelInfo) {
  150. infoRepository.save(modelInfo);
  151. }
  152. }