123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package com.lqkj.link.module.zone.service;
- import com.lqkj.link.module.authority.repository.UserInfoRepository;
- import com.lqkj.link.module.zone.domain.ModelCategory;
- import com.lqkj.link.module.zone.domain.ModelInfo;
- import com.lqkj.link.module.zone.repository.ModelCategoryRepository;
- import com.lqkj.link.module.zone.repository.ModelInfoRepository;
- import com.lqkj.link.util.Unzipper;
- import org.apache.commons.compress.archivers.ArchiveException;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.PageRequest;
- import org.springframework.data.domain.Pageable;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.io.File;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- import java.util.stream.Collectors;
- @Service
- public class ResourceService {
- private final ModelCategoryRepository categoryRepository;
- private final ModelInfoRepository infoRepository;
- private final UserInfoRepository userInfoRepository;
- public ResourceService(ModelCategoryRepository categoryRepository, ModelInfoRepository infoRepository, UserInfoRepository userInfoRepository) {
- this.categoryRepository = categoryRepository;
- this.infoRepository = infoRepository;
- this.userInfoRepository = userInfoRepository;
- }
- public Page<ModelCategory> pageQuery(String categoryName, Integer page, Integer pageSize) {
- Pageable pageable = PageRequest.of(page, pageSize);
- Page<ModelCategory> categoryPage = categoryRepository.pageQuery(categoryName, pageable);
- for (ModelCategory category : categoryPage.getContent()) {
- category.setModelCount(infoRepository.countWithCategory(category.getCategoryId()));
- }
- return categoryPage;
- }
- public ModelCategory detail(Integer categoryId) {
- // modelCategory.setModelInfoList(infoRepository.listWithCategory(categoryId));
- return categoryRepository.findById(categoryId).get();
- }
- @Transactional
- public String save(ModelCategory category) throws IOException, ArchiveException {
- if ((category.getCategoryId() != null && categoryRepository.hasSameNameWithoutOne(category.getCategoryName(), category.getCategoryId()))
- || (category.getCategoryId() == null && categoryRepository.hasSameName(category.getCategoryName()))) {
- return "资源名称不能重复!";
- }
- Boolean uploadCompress = category.getUploadCompress();
- category = categoryRepository.save(category);
- String filePath = category.getCompressFilePath();
- if (uploadCompress) {
- infoRepository.deleteWithCategory(category.getCategoryId());
- // Unzipper.unzip("." + filePath, "./upload/resource/" + category.getCategoryId() + "/", false);
- Unzipper.unZipFiles(new File("." + filePath), "./upload/resource/" + category.getCategoryId() + "/");
- Map<String, ModelInfo> modelInfoMap = infoRepository
- .listWithCategory(category.getCategoryId())
- .stream()
- .collect(Collectors.toMap(ModelInfo::getModelName, ModelInfo -> ModelInfo));
- String modelFolderPath = "./upload/resource/" + category.getCategoryId() + "/model";
- File modelFolder = new File(modelFolderPath);
- if (modelFolder.isDirectory()) {
- List<ModelInfo> list = new ArrayList<>();
- File[] models = modelFolder.listFiles();
- assert models != null;
- for (File model : models) {
- if (model.isFile() && model.getName().endsWith(".fbx")) {
- String modelFileName = model.getName();
- String modelPath = "/upload/resource/" + category.getCategoryId() + "/model/";
- if (modelFileName.matches(".*[一-龥]+.*")) {
- // 如果包含中文,重命名
- String newFileName = UUID.randomUUID() + ".fbx";
- modelPath += newFileName;
- boolean rename = model.renameTo(new File("." + modelPath));
- System.out.println(rename);
- // 材质文件也需要重命名
- File oldMaterialFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/model/" + modelFileName.replace(".fbx", ".json"));
- if (oldMaterialFile.exists()) {
- File newMaterialFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/model/" + newFileName.replace(".fbx", ".json"));
- rename = oldMaterialFile.renameTo(newMaterialFile);
- System.out.println(rename);
- }
- // 模型图标也许要重命名
- File oldIconFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/icon/" + modelFileName.replace(".fbx", ".png"));
- if (oldIconFile.exists()) {
- File newIconFile = new File("." + "/upload/resource/" + category.getCategoryId() + "/icon/" + newFileName.replace(".fbx", ".png"));
- rename = oldIconFile.renameTo(newIconFile);
- System.out.println(rename);
- }
- } else {
- modelPath += modelFileName;
- }
- if (!modelInfoMap.containsKey(modelFileName.substring(0, modelFileName.lastIndexOf(".")))) {
- list.add(new ModelInfo(null, category.getCategoryId(), modelFileName.substring(0, modelFileName.lastIndexOf(".")),
- null, null, null, modelPath,
- modelPath.replace("model", "icon").replace("fbx", "png"), null, null));
- } else {
- ModelInfo modelInfo = modelInfoMap.get(modelFileName.substring(0, modelFileName.lastIndexOf(".")));
- modelInfo.setOriginalPath(modelPath);
- modelInfo.setModelIcon(modelPath.replace("model", "icon").replace("fbx", "png"));
- modelInfo.setJsonPath(null);
- modelInfo.setTexturePath(null);
- list.add(modelInfo);
- modelInfoMap.remove(modelFileName.substring(0, modelFileName.lastIndexOf(".")));
- }
- }
- }
- infoRepository.saveAll(list);
- List<Integer> deleteList = modelInfoMap
- .values()
- .stream()
- .map(ModelInfo::getModelId)
- .toList();
- infoRepository.deleteAllByIdInBatch(deleteList);
- }
- }
- // 更新用户资源刷新状态
- userInfoRepository.updateRefreshStatus();
- return null;
- }
- public void deleteModel(Integer modelId) {
- infoRepository.deleteById(modelId);
- }
- @Transactional
- public void deleteCategory(List<Integer> categoryId) {
- categoryRepository.deleteAllByIdInBatch(categoryId);
- // 更新用户资源刷新状态
- userInfoRepository.updateRefreshStatus();
- }
- public List<Map<String, Object>> resourceCategory(String userCode) {
- return categoryRepository.queryWithUserCode(userCode);
- }
- public List<ModelInfo> models(String userCode) {
- return infoRepository.listWitUserCode(userCode);
- }
- public String savePersonal(ModelCategory modelCategory, String userCode) {
- if (modelCategory.getCategoryId() == 0) {
- modelCategory.setCategoryId(null);
- }
- Integer userId = userInfoRepository.findByUserCode(userCode).getUserId();
- if ((modelCategory.getCategoryId() != null && categoryRepository.hasSameNameByUserWithoutOne(modelCategory.getCategoryName(), modelCategory.getCategoryId(), userId))
- || (modelCategory.getCategoryId() == null && categoryRepository.hasSameNameByUser(modelCategory.getCategoryName(), userId))) {
- return "不能与已有文件夹重名!";
- }
- modelCategory.setUserId(userId);
- categoryRepository.save(modelCategory);
- return null;
- }
- public void saveModel(ModelInfo modelInfo) {
- infoRepository.save(modelInfo);
- }
- }
|