zxl
2025-04-17 51f67136d3f6ff27a9f879b8c13bd308a7a733e1
删除工单,物理删除图片调整
4个文件已修改
99 ■■■■ 已修改文件
ycl-common/src/main/java/utils/file/FileUtils.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/DeleteWorkOrderImgTask.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | 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">