|
@@ -1,10 +1,17 @@
|
|
|
package com.ruoyi.project.VRdemo.service.impl;
|
|
|
|
|
|
+import java.io.File;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
+import com.ruoyi.common.constant.Constants;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.framework.config.RuoYiConfig;
|
|
|
+import com.ruoyi.project.VRdemo.domain.NoteNationData;
|
|
|
import com.ruoyi.project.VRdemo.domain.RegionDevelop;
|
|
|
+import com.ruoyi.project.VRdemo.domain.StudyData;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.ruoyi.project.VRdemo.mapper.RegionDevelopMapper;
|
|
@@ -60,6 +67,44 @@ public class RegionDevelopServiceImpl implements IRegionDevelopService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 导入数据
|
|
|
+ *
|
|
|
+ * @param dataList 数据列表
|
|
|
+ * @param updateSupport 是否更新
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String importData(List<RegionDevelop> dataList, boolean updateSupport) {
|
|
|
+ BulkImportService<RegionDevelop> importService = new BulkImportService<RegionDevelop>() {
|
|
|
+ @Override
|
|
|
+ protected Long checkExistingItem(RegionDevelop item) {
|
|
|
+ RegionDevelop RegionDevelop = regionDevelopMapper.selectRegionDevelopByTitle(item.getTitle());
|
|
|
+ return RegionDevelop == null ? 0L : RegionDevelop.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected boolean updateItem(RegionDevelop item, Long id) {
|
|
|
+ item.setId(id);
|
|
|
+ item.setUpdateBy(SecurityUtils.getLoginUser().getUsername());
|
|
|
+ item.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ return regionDevelopMapper.updateRegionDevelop(item) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected boolean executeBatch(List<RegionDevelop> batchDataList) {
|
|
|
+ return regionDevelopMapper.insertRegionDevelopDataList(batchDataList) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected String getItemTitle(RegionDevelop item) {
|
|
|
+ return item.getTitle();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ return importService.importData(dataList, updateSupport);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 修改东南亚地区发展报告
|
|
|
*
|
|
|
* @param regionDevelop 东南亚地区发展报告
|
|
@@ -93,41 +138,179 @@ public class RegionDevelopServiceImpl implements IRegionDevelopService {
|
|
|
return regionDevelopMapper.deleteRegionDevelopById(id);
|
|
|
}
|
|
|
|
|
|
+ // 从文件路径中获取文件扩展名
|
|
|
+ private String getFileExtensionFromPath(String filePath) {
|
|
|
+ int dotIndex = filePath.lastIndexOf(".");
|
|
|
+ if (dotIndex >= 0 && dotIndex < filePath.length() - 1) {
|
|
|
+ return filePath.substring(dotIndex + 1).toLowerCase();
|
|
|
+ }
|
|
|
+ System.out.println("10." + dotIndex);
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据文件路径和指定的文件夹名称获取子文件夹路径
|
|
|
+ private String getSubFolderPath(String filePath, String folderName) {
|
|
|
+ int index = filePath.lastIndexOf(File.separator + folderName + File.separator);
|
|
|
+ if (index != -1) {
|
|
|
+ return filePath.substring(0, index);
|
|
|
+ }
|
|
|
+ return filePath;
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除
|
|
|
+ public boolean deleteFile(Long ids) {
|
|
|
+ // 根据ID查询文件信息
|
|
|
+ RegionDevelop file = regionDevelopMapper.selectRegionDevelopById(ids);
|
|
|
+ System.out.println("4." + file);
|
|
|
+ if (file == null) {
|
|
|
+ return false; // 文件不存在,删除失败
|
|
|
+ }
|
|
|
+
|
|
|
+ String oldPath = file.getPath();
|
|
|
+ Long count = file.getCount();
|
|
|
+
|
|
|
+ if (oldPath != null) {
|
|
|
+ String filePath = RuoYiConfig.getUploadPath();
|
|
|
+
|
|
|
+ //由于在RuoYiConfig.getUploadPath()中带有upload导致文件搜索失败,所以去除
|
|
|
+ String keyword = "/upload";
|
|
|
+ int endIndex = filePath.indexOf(keyword);
|
|
|
+ if (endIndex != -1) {
|
|
|
+ filePath = filePath.substring(0, (filePath.length()-7));
|
|
|
+ }
|
|
|
+
|
|
|
+ String deletaPath = filePath + StringUtils.substringAfter(oldPath, Constants.RESOURCE_PREFIX);
|
|
|
+ System.out.println("5." + deletaPath);
|
|
|
+ if (deleteFileRecursive(deletaPath, count)) {
|
|
|
+ // 执行特定文件夹删除操作
|
|
|
+ String fileExtension = getFileExtensionFromPath(deletaPath);
|
|
|
+ if (fileExtension.equalsIgnoreCase("pdf")) {
|
|
|
+ String subFolderPath = getSubFolderPath(deletaPath, "pdf");
|
|
|
+ System.out.println("8." + subFolderPath);
|
|
|
+ deleteFolder(subFolderPath); // 修改这一行
|
|
|
+ } else if (fileExtension.equalsIgnoreCase("doc") || fileExtension.equalsIgnoreCase("docx")) {
|
|
|
+ String subFolderPath = getSubFolderPath(deletaPath, "word");
|
|
|
+ System.out.println("9." + subFolderPath);
|
|
|
+ deleteFolder(subFolderPath); // 修改这一行
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除数据库中的文件记录
|
|
|
+ int deleteCount = regionDevelopMapper.deleteRegionDevelopById(ids);
|
|
|
+ System.out.println("文件删除成功");
|
|
|
+ return true; // 文件删除成功
|
|
|
+ } else {
|
|
|
+ System.out.println("文件删除失败");
|
|
|
+ return false; // 文件删除失败
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
- * 导入数据
|
|
|
+ * 删除文件
|
|
|
*
|
|
|
- * @param dataList 数据列表
|
|
|
- * @param updateSupport 是否更新
|
|
|
- * @return 结果
|
|
|
+ * @param ids 文件
|
|
|
+ * @return
|
|
|
*/
|
|
|
- @Override
|
|
|
- public String importData(List<RegionDevelop> dataList, boolean updateSupport) {
|
|
|
- BulkImportService<RegionDevelop> importService = new BulkImportService<RegionDevelop>() {
|
|
|
- @Override
|
|
|
- protected Long checkExistingItem(RegionDevelop item) {
|
|
|
- RegionDevelop RegionDevelop = regionDevelopMapper.selectRegionDevelopByTitle(item.getTitle());
|
|
|
- return RegionDevelop == null ? 0L : RegionDevelop.getId();
|
|
|
+ public static boolean deleteFileRecursive(String ids, Long count) {
|
|
|
+ for (String s : deleteFileList(ids, count)){
|
|
|
+ File file = new File(s);
|
|
|
+ System.out.println("11. " + s);
|
|
|
+ if (file.isFile() && file.exists()) {
|
|
|
+ if (!file.delete()){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- protected boolean updateItem(RegionDevelop item, Long id) {
|
|
|
- item.setId(id);
|
|
|
- item.setUpdateBy(SecurityUtils.getLoginUser().getUsername());
|
|
|
- item.setUpdateTime(DateUtils.getNowDate());
|
|
|
- return regionDevelopMapper.updateRegionDevelop(item) > 0;
|
|
|
- }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- protected boolean executeBatch(List<RegionDevelop> batchDataList) {
|
|
|
- return regionDevelopMapper.insertRegionDevelopDataList(batchDataList) > 0;
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 获取要删除的文件列表
|
|
|
+ */
|
|
|
+ public static List<String> deleteFileList(String str, Long count){
|
|
|
+ //获取/前的str
|
|
|
+ String path = "";
|
|
|
+ // 查找最后一个 '/' 的索引
|
|
|
+ int lastSlashIndex = str.lastIndexOf('/');
|
|
|
+ // 确保找到 '/' 并且 '/' 不是第一个字符
|
|
|
+ if (lastSlashIndex > 0 && lastSlashIndex < str.length() - 1) {
|
|
|
+ // 获取 '/' 前面的字符
|
|
|
+ path = str.substring(0, lastSlashIndex);
|
|
|
+ }
|
|
|
+ // 获取文件名
|
|
|
+ String fileName = str.substring(lastSlashIndex+1);
|
|
|
|
|
|
- @Override
|
|
|
- protected String getItemTitle(RegionDevelop item) {
|
|
|
- return item.getTitle();
|
|
|
+ String[] strings = splitFileName(fileName);
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ int i = 0;
|
|
|
+ // 如果文件不从0开始
|
|
|
+ if (!strings[1].equals("00")){
|
|
|
+ i = 1;
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ for (; i < count; i++){
|
|
|
+ String fileNumber = "";
|
|
|
+ System.out.println(strings[1]);
|
|
|
+ if (i < 100){
|
|
|
+ fileNumber = String.format("%02d", i);
|
|
|
+ }else {
|
|
|
+ fileNumber = String.valueOf(i);
|
|
|
}
|
|
|
- };
|
|
|
|
|
|
- return importService.importData(dataList, updateSupport);
|
|
|
+ String filename = path + "/" + strings[0] + "_" + fileNumber + "." + strings[2];
|
|
|
+ System.out.println("filename"+filename);
|
|
|
+ list.add(filename);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分解格式为 xxx_00.jpg 的字符串
|
|
|
+ *
|
|
|
+ * @param fileName 要处理的字符串
|
|
|
+ * @return 分解后的字符串数组,其中包含_前面的部分,_和.之间的部分,以及.后面的部分
|
|
|
+ */
|
|
|
+ public static String[] splitFileName(String fileName) {
|
|
|
+ // 找到 '_' 和 '.' 的索引
|
|
|
+ int underscoreIndex = fileName.indexOf('_');
|
|
|
+ int dotIndex = fileName.indexOf('.');
|
|
|
+
|
|
|
+ // 检查索引有效性
|
|
|
+ if (underscoreIndex == -1 || dotIndex == -1 || underscoreIndex >= dotIndex) {
|
|
|
+ throw new IllegalArgumentException("字符串格式不正确");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取 _ 前面的部分
|
|
|
+ String partBeforeUnderscore = fileName.substring(0, underscoreIndex);
|
|
|
+
|
|
|
+ // 获取 _ 和 . 之间的部分
|
|
|
+ String partBetweenUnderscoreAndDot = fileName.substring(underscoreIndex + 1, dotIndex);
|
|
|
+
|
|
|
+ // 获取 . 后面的部分
|
|
|
+ String partAfterDot = fileName.substring(dotIndex + 1);
|
|
|
+
|
|
|
+ return new String[] { partBeforeUnderscore, partBetweenUnderscoreAndDot, partAfterDot };
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 递归删除文件夹及其内容
|
|
|
+ private void deleteFolder(String filePath) {
|
|
|
+ File folder = new File(filePath);
|
|
|
+ System.out.println("9." + folder);
|
|
|
+ if (folder.exists()) {
|
|
|
+ File[] files = folder.listFiles();
|
|
|
+ if (files != null) {
|
|
|
+ for (File file : files) {
|
|
|
+ if (file.isDirectory()) {
|
|
|
+ deleteFolder(file.getPath()); // 使用完整的文件夹路径
|
|
|
+ } else {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ folder.delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|