ycl-common/src/main/java/utils/file/FileUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/task/DeleteWorkOrderImgTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ycl-common/src/main/java/utils/file/FileUtils.java
@@ -3,6 +3,7 @@ import config.PlatformConfig; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; @@ -16,16 +17,17 @@ /** * 文件处理工具类 * * * @author ruoyi */ @Slf4j public class FileUtils { public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; /** * 输出指定文件的byte数组 * * * @param filePath 文件路径 * @param os 输出流 * @return @@ -72,6 +74,35 @@ } /** * 从字符串中提取日期部分 * * @param inputString 输入字符串 * @return 提取的日期字符串,如果未找到则返回 "" */ public static String extractDateFromString(String inputString) { // 使用正则表达式来匹配日期格式 YYYY-MM-DD String datePattern = "(\\d{4}-\\d{2}-\\d{2})"; java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(datePattern); java.util.regex.Matcher matcher = pattern.matcher(inputString); if (matcher.find()) { return matcher.group(1); } return ""; } public static String getImgName(String url) { // 找到最后一个斜杠的位置 int lastSlashIndex = url.lastIndexOf('/'); if(lastSlashIndex == -1){ return ""; } // 提取从最后一个斜杠之后的部分 return url.substring(lastSlashIndex + 1); } /** * 写数据到文件中 * * @param data 数据 @@ -100,7 +131,7 @@ /** * 删除文件 * * * @param filePath 文件 * @return */ @@ -118,7 +149,7 @@ /** * 文件名称验证 * * * @param filename 文件名称 * @return true 正常 false 非法 */ @@ -129,7 +160,7 @@ /** * 检查文件是否可下载 * * * @param resource 需要下载的文件 * @return true 正常 false 非法 */ @@ -153,7 +184,7 @@ /** * 下载文件名重新编码 * * * @param request 请求对象 * @param fileName 文件名 * @return 编码后的文件名 @@ -223,7 +254,7 @@ /** * 获取图像后缀 * * * @param photoByte 图像数据 * @return 后缀名 */ @@ -252,7 +283,7 @@ /** * 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png * * * @param fileName 路径名称 * @return 没有文件路径的名称 */ @@ -270,7 +301,7 @@ /** * 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi * * * @param fileName 路径名称 * @return 没有文件路径和后缀的名称 */ ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -622,8 +622,10 @@ List<String> imgList = workOrderList.subList(4,workOrderList.size()).stream().map(WorkOrderCheckImg::getImgUrl).collect(Collectors.toList()); List<Integer> idList = workOrderList.subList(4, workOrderList.size()).stream().map(WorkOrderCheckImg::getId).collect(Collectors.toList()); //删除照片 ,并且物理删除服务器内对应照片的名字 // /profile/2024-11-18_1d8e6d37-a4d0-4bba-8473-ff4e50eda83d.png for (String filePath: imgList){ FileUtils.deleteFile( PlatformConfig.getUploadPath()+ filePath); delImgFormClient(filePath); } workOrderCheckImgMapper.deleteBatchIds(idList); @@ -682,6 +684,23 @@ return Result.error("删除失败"); } /*** * 通过url删除服务器内的图片 * @param url */ public void delImgFormClient(String url){ //提取文件名 /profile/2024-11-17_79c02666-da1e-45ba-9f29-7523c848fa4a.png // 这部分2024-11-17_79c02666-da1e-45ba-9f29-7523c848fa4a.png String imgPath = FileUtils.getImgName(url); if (imgPath.isEmpty()){ log.error("url错误:{}",imgPath); }else{ //提取日期部分 组装目录 : /opt/zgyw/uploadPath + / + yyyy-MM-dd + String pathName = PlatformConfig.getUploadPath() + "/" + FileUtils.extractDateFromString(url); FileUtils.deleteFile(pathName+"/" + imgPath); } } /** * id删除 * @@ -703,9 +722,8 @@ log.error("删除路径:{}",PlatformConfig.getUploadPath()); for (String filePath: workOrderImg){ FileUtils.deleteFile( PlatformConfig.getUploadPath()+ filePath); delImgFormClient(filePath); } // /home/zgyw/uploadPath //删除工单图片记录 workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().eq("work_order_no", workOrderNo)); @@ -715,9 +733,6 @@ workOrderErrorTypeMapper.delete(new QueryWrapper<WorkOrderErrorType>().eq("work_order_no", workOrderNo)); //删除工单情况记录 workOrderYwConditionRecordMapper.delete(new QueryWrapper<WorkOrderYwConditionRecord>().eq("work_order_no", workOrderNo)); if (baseMapper.deleteById(id) > 0) { return Result.ok("删除成功"); ycl-server/src/main/java/com/ycl/task/DeleteWorkOrderImgTask.java
@@ -19,25 +19,27 @@ private final ISysConfigService configService; public void delWorkOrderImg() { String basePath = PlatformConfig.getUploadPath() + "/profile"; String basePath = PlatformConfig.getUploadPath(); log.info("开始删除工单照片"); log.info("删除路径:{}",basePath); log.info("删除主路径:{}",basePath); // /opt/zgyw/uploadPath //字典查询需要删除时间在几个月前的照片 String dictLabel = configService.selectConfigByKey("del.workorder.time"); log.info("清理时间:{}月",dictLabel); if (StringUtils.isEmpty(dictLabel)) { log.error("未设置删除时间范围"); return; log.info("未设置删除时间范围");; dictLabel = "6"; } log.info("默认6月前的图片"); //获得当前时间 LocalDate nowDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //计算 ? 月前的日期 ? 用字典存入系统中 LocalDate sixMonthAgo = nowDate.minusMonths(Long.parseLong("6")); LocalDate sixMonthAgo = nowDate.minusMonths(Long.parseLong(dictLabel)); //读取服务器中的文件夹名 File directory = new File(basePath); //检测路径存在 并且是一个目录 if (directory.exists() && directory.isDirectory()) { //获得 目录集合 File[] files = directory.listFiles(); if (files != null) { for (File file : files) { @@ -64,12 +66,12 @@ File[] allContents = directoryToBeDeleted.listFiles(); if (allContents != null) { for (File file : allContents) { // deleteDirectory(file); deleteDirectory(file); log.error("打印文件名:{}",file.getName()); } } // directoryToBeDeleted.delete(); log.error("打印目录名:{}", directoryToBeDeleted.getName()); directoryToBeDeleted.delete(); log.error("打印文件名:{}", directoryToBeDeleted.getName()); } ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -437,6 +437,7 @@ wo.id, wo.work_order_no, wo.serial_number, dr.create_time as distributeTime, m.name as source, yw.unit_name, yw.unit_contact, @@ -446,9 +447,9 @@ wo.status FROM t_work_order wo LEFT JOIN t_work_order_distribute_record dr ON wo.work_order_no = dr.work_order_no AND dr.deleted = 0 INNER JOIN t_monitor m ON m.serial_number = wo.serial_number LEFT JOIN t_yw_unit yw ON yw.id = wo.unit_id AND yw.deleted = 0 where wo.work_order_no = #{workOrderNo} LEFT JOIN t_yw_unit yw ON yw.id = wo.unit_id AND yw.deleted = 0 Where wo.work_order_no = #{workOrderNo} </select> <select id="getRecoveryInfo" resultType="com.ycl.platform.domain.vo.WorkOrderVO">