zxl
2025-11-10 cb415813de667096290d6bd0f924f5b523104117
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -119,7 +119,14 @@
        WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
        return self.batchAddWorkOrder(workOrderList);
    }
    private boolean isSameDay(Date date1, Date date2) {
        if (date1 == null || date2 == null) {
            return false;
        }
        LocalDate localDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate localDate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        return localDate1.isEqual(localDate2);
    }
    @Transactional(rollbackFor = Exception.class)
    public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList) {
        int total = workOrderList.size();
@@ -164,6 +171,15 @@
        for (WorkOrder workOrder : workOrderList) {
            WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
            if (Objects.nonNull(databaseWorkOrder)) {
                //判断是否是今天的工单
                if (!isSameDay(databaseWorkOrder.getCreateTime(), now)) {
                    // 若为前一天的工单,不更新,直接当作新工单新增
                    workOrder.setCreateTime(now);
                    workOrder.setUpdateTime(now);
                    waitAddList.add(workOrder);
                    continue; // 跳过后续的更新逻辑
                }
                List<String> errorNameList = databaseWorkOrder.getErrorTypeList();
                List<String> errorTypes = workOrder.getErrorTypeList();
                if (errorNameList.containsAll(errorTypes)) {
@@ -858,6 +874,43 @@
                }
            });
        }
        //加上报备信息
        if (!CollectionUtils.isEmpty(page.getRecords())) {
            List<String> serialNumberList = page.getRecords().stream()
                    .map(WorkOrderVO::getSerialNumber).collect(Collectors.toList());
            List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
                    .in(Report::getSerialNumber, serialNumberList)
                    .eq(Report::getStatus,1)
                    .eq(Report::getDeleted,Boolean.FALSE).list();
            Map<String, List<Report>> reportMap = reports.stream()
                    .collect(Collectors.groupingBy(Report::getSerialNumber));
            for (WorkOrderVO workOrder : page.getRecords()) {
                workOrder.setHasReport(false);
                List<Report> reportsByWorkOrder = reportMap.get(workOrder.getSerialNumber());
                if (CollectionUtils.isEmpty(reportsByWorkOrder)) {
                    continue; // 无报告,直接跳过
                }
                Date distributeTime = workOrder.getDistributeTime();
                for (Report report : reportsByWorkOrder) {
                    Date beginTime = report.getBeginCreateTime();
                    Date endTime = report.getEndCreateTime();
                    // 空指针防护
                    if (distributeTime == null || beginTime == null || endTime == null) {
                        continue;
                    }
                    // 时间区间判断:distributeTime 在 [beginTime, endTime] 内
                    boolean isInRange = distributeTime.compareTo(beginTime) >= 0
                            && distributeTime.compareTo(endTime) <= 0;
                    if (isInRange) {
                        workOrder.setHasReport(true);
                        break; // 找到一个即退出循环
                    }
                }
            }
        }
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
@@ -1072,8 +1125,10 @@
    @Override
    public WorkOrderTotalVO workOrderTotal(DashboardQuery dashboardQuery) {
        //todo大屏工单未处理工单数量有点问题
        return baseMapper.workOrderTotal(dashboardQuery);
    }
    @Override
    public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
@@ -1287,10 +1342,30 @@
        }
        // 是否报备
        boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
                .eq(Report::getSerialNumber, workOrder.getSerialNumber())
                .exists();
        workOrder.setHasReport(hasReport);
        List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
                .eq(Report::getSerialNumber,workOrder.getSerialNumber())
                .eq(Report::getStatus,1)
                .orderByDesc(Report::getCreateTime)
                .list();
        log.info("报备记录:{}",reports);
        Date distributeTime = workOrder.getDistributeTime();
        workOrder.setHasReport(false);
        for (Report report : reports) {
            Date beginTime = report.getBeginCreateTime();
            Date endTime = report.getEndCreateTime();
            // 空指针防护
            if (distributeTime == null || beginTime == null || endTime == null) {
                continue;
            }
            // 时间区间判断:distributeTime 在 [beginTime, endTime] 内
            boolean isInRange = distributeTime.compareTo(beginTime) >= 0
                    && distributeTime.compareTo(endTime) <= 0;
            if (isInRange) {
                workOrder.setHasReport(true);
                break; // 找到一个即退出循环
            }
        }
        // 故障类型
        List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
        List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());