xuhy
2026-03-15 9bacdf10738802fa49ad8be2a946d75b86264822
缺卡定时任务修改
1个文件已修改
47 ■■■■■ 已修改文件
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/ClockInScheduleTask.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/ClockInScheduleTask.java
@@ -56,13 +56,17 @@
    /**
     * 每5分钟执行一次
     */
    @Scheduled(cron = "0 */5 * * * ?")
    @Scheduled(fixedRate = 60*1000)
    public void clockInScheduleTask() {
        log.info("========== 开始执行打卡检查 ==========");
        try {
            // 查询下班卡在今天的
            List<XpSchedulingDetail> clockOutPlanList = xpSchedulingDetailService.list(Wrappers.lambdaQuery(XpSchedulingDetail.class)
                    .likeRight(XpSchedulingDetail::getPlanTime, LocalDate.now()));
            // 下班卡在昨天的
            List<XpSchedulingDetail> clockOutPlanListLast = xpSchedulingDetailService.list(Wrappers.lambdaQuery(XpSchedulingDetail.class)
                    .likeRight(XpSchedulingDetail::getPlanTime, LocalDate.now().minusDays(1)));
            if(!CollectionUtils.isEmpty(clockOutPlanList)){
                List<Long> fleetIds = clockOutPlanList.stream().map(XpSchedulingDetail::getFleetId).collect(Collectors.toList());
@@ -154,6 +158,47 @@
                }
            }
            if (!CollectionUtils.isEmpty(clockOutPlanListLast)){
                List<Long> fleetIds = clockOutPlanListLast.stream().map(XpSchedulingDetail::getFleetId).distinct().collect(Collectors.toList());
                // 查询所有车队的绑定人员
                List<XpFleetOperations> xpFleetOperations = xpFleetOperationsClient.getOperationsIdsByFleetIds(fleetIds).getData();
                // 查询班次
                List<Long> shiftIds = clockOutPlanListLast.stream().map(XpSchedulingDetail::getShiftId).collect(Collectors.toList());
                List<XpShift> xpShifts = xpShiftService.list(Wrappers.lambdaQuery(XpShift.class)
                        .in(XpShift::getId, shiftIds));
                log.info("========== 查询到{}个车队 ==========", xpFleetOperations.size());
                // 处理下班卡缺卡情况
                // 过滤当前时间在班次下班打卡时间之后5小时的数据   今日已过下班打卡时间5小时后的班次
                List<XpShift> shiftListFive = xpShifts.stream().filter(xpShift ->
                        DateUtils.stringToLocalDateTime(LocalDate.now().minusDays(1) + " " + xpShift.getEndTime() + ":00").plusHours(5).isBefore(LocalDateTime.now())).collect(Collectors.toList());
                List<Long> fiveIds = shiftListFive.stream().map(XpShift::getId).collect(Collectors.toList());
                if(!CollectionUtils.isEmpty(fiveIds)){
                    log.info("========== 进入下班过期的班次 ==========");
                    // 获取过期当前班次的排班明细  覆盖
                    List<XpSchedulingDetail> fiveClockOutPlans = clockOutPlanListLast.stream().filter(xpSchedulingDetail -> fiveIds.contains(xpSchedulingDetail.getShiftId())).collect(Collectors.toList());
                    List<Long> fiveFleetIdIn = fiveClockOutPlans.stream().map(XpSchedulingDetail::getFleetId).collect(Collectors.toList());
                    // 查询所有车队的绑定人员
                    if(!CollectionUtils.isEmpty(xpFleetOperations)){
                        List<Long> operationsUserIdsFive = xpFleetOperations.stream().filter(x -> fiveFleetIdIn.contains(x.getFleetId()))
                                .map(XpFleetOperations::getOperationsUserId).distinct().collect(Collectors.toList());
                        // 批量查询人员打卡信息
                        List<XpClockIn> clockInListFive = xpClockInService.list(Wrappers.lambdaQuery(XpClockIn.class)
                                .in(XpClockIn::getAppUserId, operationsUserIdsFive)
                                .isNull(XpClockIn::getClockOutTime));
                        log.info("========== 获取到{}个人员没有下班打卡信息 ==========", clockInListFive.size());
                        if(!CollectionUtils.isEmpty(clockInListFive)){
                            for (XpClockIn xpClockIn : clockInListFive) {
                                xpClockIn.setClockOutTime(LocalDateTime.now());
                                xpClockIn.setClockOutResult(3);
                            }
                            xpClockInService.updateBatchById(clockInListFive);
                            log.info("========== 修改为下班缺卡 ==========");
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.error("执行打卡检查任务执行失败", e);
        }