| | |
| | | |
| | | // 设置巡检人昵称列表 |
| | | if (StringUtils.isNotBlank(task.getInspectorIds())) { |
| | | List<String> inspectorNickNames = Arrays.stream(task.getInspectorIds().split(",")) |
| | | .filter(StringUtils::isNotBlank) |
| | | .map(idStr -> { |
| | | List<String> inspectorNickNames = new ArrayList<>(); |
| | | for (String idStr : task.getInspectorIds().split(",")) { |
| | | if (StringUtils.isNotBlank(idStr)) { |
| | | Long id = Long.valueOf(idStr); |
| | | return userNickNameMap.getOrDefault(id, "未知用户"); |
| | | }) |
| | | .toList(); |
| | | inspectorNickNames.add(userNickNameMap.getOrDefault(id, "未知用户")); |
| | | } |
| | | } |
| | | dto.setInspector(inspectorNickNames); |
| | | } |
| | | |
| | |
| | | |
| | | private LocalDateTime calculateFirstExecutionTime(TimingTask task) { |
| | | // 根据频率类型和详情计算首次执行时间 |
| | | return switch (task.getFrequencyType()) { |
| | | case "DAILY" -> |
| | | String frequencyType = task.getFrequencyType(); |
| | | if ("DAILY".equals(frequencyType)) { |
| | | // 如果是每天执行,计算今天或明天的具体时间 |
| | | calculateDailyFirstExecution(task.getFrequencyDetail()); |
| | | case "WEEKLY" -> |
| | | return calculateDailyFirstExecution(task.getFrequencyDetail()); |
| | | } else if ("WEEKLY".equals(frequencyType)) { |
| | | // 如果是每周执行,计算下周的具体星期几 |
| | | calculateWeeklyFirstExecution(task.getFrequencyDetail()); |
| | | case "MONTHLY" -> |
| | | return calculateWeeklyFirstExecution(task.getFrequencyDetail()); |
| | | } else if ("MONTHLY".equals(frequencyType)) { |
| | | // 如果是每月执行,计算下个月的具体日期 |
| | | calculateMonthlyFirstExecution(task.getFrequencyDetail()); |
| | | case "QUARTERLY" -> |
| | | return calculateMonthlyFirstExecution(task.getFrequencyDetail()); |
| | | } else if ("QUARTERLY".equals(frequencyType)) { |
| | | // 自定义频率,如每小时、每30分钟等 |
| | | calculateCustomFirstExecution(task.getFrequencyDetail()); |
| | | default -> throw new IllegalArgumentException("不支持的频率类型: " + task.getFrequencyType()); |
| | | }; |
| | | return calculateCustomFirstExecution(task.getFrequencyDetail()); |
| | | } else { |
| | | throw new IllegalArgumentException("不支持的频率类型: " + task.getFrequencyType()); |
| | | } |
| | | } |
| | | |
| | | private LocalDateTime calculateDailyFirstExecution(String frequencyDetail) { |
| | |
| | | String frequencyDetail, |
| | | LocalDateTime currentTime) { |
| | | try { |
| | | return switch (frequencyType) { |
| | | case "DAILY" -> calculateDailyNextTime(frequencyDetail, currentTime); |
| | | case "WEEKLY" -> calculateWeeklyNextTime(frequencyDetail, currentTime); |
| | | case "MONTHLY" -> calculateMonthlyNextTime(frequencyDetail, currentTime); |
| | | case "QUARTERLY" -> calculateQuarterlyNextTime(frequencyDetail, currentTime); |
| | | default -> throw new IllegalArgumentException("不支持的频率类型: " + frequencyType); |
| | | }; |
| | | switch (frequencyType) { |
| | | case "DAILY": |
| | | return calculateDailyNextTime(frequencyDetail, currentTime); |
| | | case "WEEKLY": |
| | | return calculateWeeklyNextTime(frequencyDetail, currentTime); |
| | | case "MONTHLY": |
| | | return calculateMonthlyNextTime(frequencyDetail, currentTime); |
| | | case "QUARTERLY": |
| | | return calculateQuarterlyNextTime(frequencyDetail, currentTime); |
| | | default: |
| | | throw new IllegalArgumentException("不支持的频率类型: " + frequencyType); |
| | | } |
| | | } catch (Exception e) { |
| | | throw new RuntimeException("计算下次执行时间失败: " + e.getMessage(), e); |
| | | } |