zxl
2025-04-17 51f67136d3f6ff27a9f879b8c13bd308a7a733e1
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -60,6 +60,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import pojo.CascadeOption;
import utils.file.FileUtils;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -215,6 +216,7 @@
        }
        List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
        //只生成考核设备、且有运维单位的工单
        List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper())
                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag)
                .in(YwPoint::getSerialNumber, willAddSerialNumber)
@@ -287,6 +289,7 @@
            }
            log.info("即将生成的工单:{}", workOrder);
        }
        redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
        redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
        // 保存工单和故障类型
@@ -605,6 +608,30 @@
            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());
                //删除照片 ,并且物理删除服务器内对应照片的名字
//                /profile/2024-11-18_1d8e6d37-a4d0-4bba-8473-ff4e50eda83d.png
                for (String filePath: imgList){
                    delImgFormClient(filePath);
                }
                workOrderCheckImgMapper.deleteBatchIds(idList);
            }
            workOrderCheckImgMapper.insert(img);
        }
    }
@@ -650,9 +677,28 @@
    @Override
    public Result remove(List<String> ids) {
        if (baseMapper.deleteBatchIds(ids) > 0) {
            //批量删除是否被用到?
            return Result.ok("删除成功");
        }
        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);
        }
    }
    /**
@@ -667,6 +713,18 @@
        String workOrderNo = workOrder.getWorkOrderNo();
        //删除工单审核记录
        workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().eq("work_order_no", workOrderNo));
        //需要物理删除服务器中的图片
        //查询到工单照片集合
        List<String> workOrderImg = workOrderCheckImgMapper
                .selectList(new QueryWrapper<WorkOrderCheckImg>().eq("work_order_no", workOrderNo))
                .stream().map(WorkOrderCheckImg::getImgUrl).collect(Collectors.toList());
        log.error("删除工单图片集合:{}",workOrderImg);
        log.error("删除路径:{}",PlatformConfig.getUploadPath());
        for (String filePath: workOrderImg){
            delImgFormClient(filePath);
        }
        //删除工单图片记录
        workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().eq("work_order_no", workOrderNo));
        //删除工单下发记录
@@ -681,6 +739,9 @@
        }
        return Result.error("删除失败");
    }
    /**
     * 分页查询
@@ -1147,6 +1208,11 @@
    @Override
    public Result detailByNo(String workOrderNo) {
        WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo);
        //报空原因1. sql 中 inner join 表 t_work_order_distribute_record 中 无与该表关联的记录 wo.work_order_no = dr.work_order_no
        if(workOrder == null){
            workOrder = baseMapper.detailByNoButNoDistributeRecord(workOrderNo);
        }
        // 是否报备
        boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
                .eq(Report::getSerialNumber, workOrder.getSerialNumber())
@@ -1165,6 +1231,9 @@
        workOrder.setImgList(imgList);
        return Result.ok().data(workOrder);
    }
    @Autowired
    private WorkOrderMapper workOrderMapper;
    /**
     * 工单导出的逻辑
@@ -1195,6 +1264,30 @@
            query.setErrorTypeList(errorTypeList);
        }
        List<WorkOrderVO> export = baseMapper.export(query);
        List<String> workOrderNos = export.stream().map(WorkOrderVO::getWorkOrderNo).collect(Collectors.toList());
        List<WorkOrderVO> auditTimeList = workOrderMapper.getAuditTimeList(workOrderNos);
        Map<String, List<Date>> auditTimeMap = auditTimeList.stream()
                .collect(Collectors.groupingBy(
                        WorkOrderVO::getWorkOrderNo, // 分组的键
                        Collectors.mapping(WorkOrderVO::getAuditTime, Collectors.toList())));
        if (!CollectionUtils.isEmpty(workOrderNos)){
           export.forEach(workOrderVO -> {
               List<Date> auditTimes = auditTimeMap.get(workOrderVO.getWorkOrderNo());
               if (!CollectionUtils.isEmpty(auditTimes)){
                   //审核通过时间
                   Date passTime = Collections.max(auditTimes);
                   ZoneId zoneId = ZoneId.systemDefault();
                   workOrderVO.setPassTime(passTime.toInstant().atZone(zoneId).toLocalDateTime());
               }
           });
        }
        if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>();
        List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList());
        //查出相同ip的设备、并查出标签