zxl
2025-05-26 04b45b8c22594cc5535b164380738a80b0e8cbe2
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -8,6 +8,7 @@
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.util.StringUtil;
import com.ycl.config.PlatformConfig;
import com.ycl.exception.ServiceException;
import com.ycl.platform.domain.entity.*;
@@ -30,6 +31,7 @@
import com.ycl.system.mapper.SysConfigMapper;
import com.ycl.system.model.LoginUser;
import com.ycl.system.page.PageUtil;
import com.ycl.task.DeleteWorkOrderImgTask;
import com.ycl.utils.DateUtils;
import com.ycl.utils.SecurityUtils;
import com.ycl.utils.http.HttpUtils;
@@ -62,6 +64,7 @@
import pojo.CascadeOption;
import utils.file.FileUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
@@ -105,6 +108,8 @@
    @Autowired
    private RedisCache redisCache;
    @Autowired
    private DeleteWorkOrderImgTask deleteWorkOrderImgTask;
    @Override
    public synchronized Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) {
@@ -608,31 +613,41 @@
            img.setWorkOrderNo(workOrder.getWorkOrderNo());
            img.setImgUrl(frameImg);
            img.setCreateTime(new Date());
            //判断该工单的图片是否已经大于5张了
            LambdaQueryChainWrapper<WorkOrderCheckImg> qw = new LambdaQueryChainWrapper<>(workOrderCheckImgMapper);
            //按照创建日期降序排列
            List<WorkOrderCheckImg> workOrderList = workOrderCheckImgMapper.selectList(
                    new LambdaQueryChainWrapper<>(workOrderCheckImgMapper)
                            .eq(WorkOrderCheckImg::getWorkOrderNo, workOrder.getWorkOrderNo())
                            .orderByDesc(WorkOrderCheckImg::getCreateTime)
            );
            //保留最新的5张
            if (workOrderList.size()>=5){
                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());
                //删除照片 ,并且物理删除服务器内对应照片的名字
                for (String filePath: imgList){
                    FileUtils.deleteFile( PlatformConfig.getUploadPath()+ filePath);
                }
                workOrderCheckImgMapper.deleteBatchIds(idList);
            }
            workOrderCheckImgMapper.insert(img);
        }
    }
    /**
     * 清理工单图片
     * */
    public void clearWorkOrderImg(String workOrderNo) {
        //判断该工单的图片是否已经大于5张了
        //按照创建日期降序排列
        if (StringUtil.isEmpty(workOrderNo)) {
            return;
        }
        List<WorkOrderCheckImg> workOrderList = new LambdaQueryChainWrapper<WorkOrderCheckImg>(workOrderCheckImgMapper)
                .select()
                .eq(WorkOrderCheckImg::getWorkOrderNo, workOrderNo)
                .orderByDesc(WorkOrderCheckImg::getCreateTime)
                .list();
        if (workOrderList.size()>=5){
            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
            log.error("删除工单照片集合url:{}",imgList);
            log.error("删除工单存储数据集合id:{}",idList);
            for (String filePath: imgList){
                delImgFormClient(filePath);
            }
            workOrderCheckImgMapper.deleteBatchIds(idList);
        }
    }
    @Override
    public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) {
@@ -682,6 +697,24 @@
        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 = DeleteWorkOrderImgTask.imgSaveBasePath + "/" + FileUtils.extractDateFromString(url);
            log.error("删除工单图片集合{}",pathName+"/" + imgPath);
            FileUtils.deleteFile(pathName+"/" + imgPath);
        }
    }
    /**
     * id删除
     *
@@ -703,9 +736,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 +747,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("删除成功");
@@ -791,6 +820,11 @@
    }
    @Override
    public List<WorkOrderVO> distributeList(){
        return  baseMapper.distributeList();
    }
    @Override
    @Transactional
    public Result distributeFast(DistributeWorkOrderVO data) {
        // 获取当前时间
@@ -846,6 +880,9 @@
            distributeUnLock();
        }
    }
    @Override
    @Transactional
@@ -1207,6 +1244,8 @@
        List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
        List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
        workOrder.setErrorTypeList(errList);
        //详情时再次清理
        clearWorkOrderImg(workOrderNo);
        // 检测图片
        List<WorkOrderCheckImg> imgList = new LambdaQueryChainWrapper<>(workOrderCheckImgMapper)
                .eq(WorkOrderCheckImg::getWorkOrderNo, workOrderNo)