package com.ycl.task; import com.ycl.config.PlatformConfig; import com.ycl.system.service.ISysConfigService; import com.ycl.utils.DictUtils; import com.ycl.utils.StringUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.File; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @Slf4j @RequiredArgsConstructor @Component("DeleteWorkOrderImgTask") public class DeleteWorkOrderImgTask { private final ISysConfigService configService; public static String imgSaveBasePath = "/opt/zgyw/uploadPath"; public void delWorkOrderImg() { String basePath = PlatformConfig.getUploadPath(); log.info("开始删除工单照片"); log.info("删除主路径:{}",basePath); // /opt/zgyw/uploadPath/upload log.info("静态设置地址:{}",imgSaveBasePath); //字典查询需要删除时间在几个月前的照片 String dictLabel = configService.selectConfigByKey("del.workorder.time"); log.info("清理时间:{}月",dictLabel); if (StringUtils.isEmpty(dictLabel)) { log.info("未设置删除时间范围");; dictLabel = "6"; log.info("默认6月前的图片"); } //获得当前时间 LocalDate nowDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //计算 ? 月前的日期 ? 用字典存入系统中 LocalDate sixMonthAgo = nowDate.minusMonths(Long.parseLong(dictLabel)); //读取服务器中的文件夹名 File directory = new File(imgSaveBasePath); //检测路径存在 并且是一个目录 if (directory.exists() && directory.isDirectory()) { //获得 目录集合 File[] files = directory.listFiles(); if (files != null) { for (File file : files) { //检测是否为目录 格式 一般为yyyy-MM-dd if(file.isDirectory()){ String fileName = file.getName(); try { LocalDate fileNameDate = LocalDate.parse(fileName, formatter); if (fileNameDate.isBefore(sixMonthAgo)) { deleteDirectory(file); } }catch (Exception e){ // 如果解析失败(例如,文件夹名不是日期格式),可以记录日志或忽略 log.error("Skipping directory with invalid date format:{} ", fileName); } } } } } log.info("删除完毕"); } // 递归删除目录及其内容 public static void deleteDirectory(File directoryToBeDeleted) { File[] allContents = directoryToBeDeleted.listFiles(); if (allContents != null) { for (File file : allContents) { deleteDirectory(file); log.error("打印文件名:{}",file.getName()); } } directoryToBeDeleted.delete(); log.error("打印文件名:{}", directoryToBeDeleted.getName()); } }