| | |
| | | String startTime = query.getStartTime(); |
| | | String endTime = query.getEndTime(); |
| | | |
| | | // 查询在建工程项目(usage_type 表示项目用途类型,假设 0 表示在建工程) |
| | | LambdaQueryWrapper<Project> projectWrapper = new LambdaQueryWrapper<>(); |
| | | if (query.getClientId() != null) { |
| | | projectWrapper.eq(Project::getClientId, query.getClientId()); |
| | |
| | | } |
| | | switch (query.getCategory()) { |
| | | case 1: |
| | | // 查询在建资产项目 |
| | | projectWrapper.eq(Project::getDeleted, false) |
| | | .ne(Project::getType, 2) // 在建工程 |
| | | .ne(Project::getType, 2) |
| | | .and(wrapper -> wrapper |
| | | .eq(Project::getStatus, 1) // 在建项目 |
| | | .or(w -> w |
| | | .eq(Project::getStatus, 2) // 已完成项目 |
| | | .between(Project::getSuccessTime, startTime, endTime) // 完成时间 >= 开始日期// 完成时间 <= 结束日期 |
| | | ) |
| | | .eq(Project::getStatus, 1) |
| | | .or(w -> w.eq(Project::getStatus, 2)) |
| | | ); |
| | | break; |
| | | case 2: |
| | | // 查询固定资产项目 |
| | | projectWrapper.eq(Project::getDeleted, false) |
| | | .eq(Project::getType, 2) // 在建工程 |
| | | .eq(Project::getType, 2) |
| | | .and(wrapper -> wrapper |
| | | .eq(Project::getStatus, 1) // 在建项目 |
| | | .or(w -> w |
| | | .eq(Project::getStatus, 2) // 已完成项目 |
| | | .between(Project::getSuccessTime, startTime, endTime) // 完成时间 >= 开始日期// 完成时间 <= 结束日期 |
| | | ) |
| | | .eq(Project::getStatus, 1) |
| | | .or(w -> w.eq(Project::getStatus, 2)) |
| | | ); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | |
| | | query.setProjectIds(projectIds); |
| | | |
| | | Map<Integer, String> categoryMap = calculateProjectCategoryMap(projects, query); |
| | | // 查询检查任务 |
| | | LambdaQueryWrapper<Task> taskWrapper = new LambdaQueryWrapper<>(); |
| | | taskWrapper.in(Task::getProjectId, projectIds) |
| | | .eq(Task::getDeleted, false); |
| | | List<Task> taskList = taskMapper.selectList(taskWrapper); |
| | | Map<Integer, Task> latestCheckedTaskMap = taskList.stream() |
| | | .filter(task -> task.getProjectId() != null) |
| | | .collect(Collectors.groupingBy(Task::getProjectId)) |
| | | .entrySet() |
| | | .stream() |
| | | .map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), |
| | | findLatestCheckedTask(entry.getValue(), startTime, endTime))) |
| | | .filter(entry -> entry.getValue() != null) |
| | | .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); |
| | | if (StringUtils.hasLength(startTime) || StringUtils.hasLength(endTime)) { |
| | | List<Integer> checkedProjectIds = new ArrayList<>(latestCheckedTaskMap.keySet()); |
| | | if (checkedProjectIds.isEmpty()) { |
| | | checkedProjectIds.add(-1); |
| | | } |
| | | query.setProjectIds(checkedProjectIds); |
| | | } |
| | | |
| | | List<EntrustProjectVo> deviceList = this.baseMapper.projectList(page, query); |
| | | for (EntrustProjectVo deviceListVo : deviceList) { |
| | | deviceListVo.setRisk(formatProjectCategory(categoryMap.get(deviceListVo.getId()))); |
| | | List<Task> tasks = taskList.stream().filter(e -> e.getProjectId().equals(deviceListVo.getId())).toList(); |
| | | // List<Task> tasks = taskMap.get(deviceListVo.getId()); |
| | | if (tasks != null && !tasks.isEmpty()) { |
| | | |
| | | Task task1 = tasks.stream().filter(e -> e.getDate().getYear() == LocalDateTime.now().getYear() && e.getDate().getMonth().getValue() == LocalDateTime.now().getMonth().getValue()).findFirst().orElse(null); |
| | | |
| | | // List<Record> recordList = records.stream().filter(e -> taskIds.contains(e.getCheckTaskId())).toList(); |
| | | // Record record = recordList.stream().max(Comparator.comparing(Record::getCreateTime)).orElse(null); |
| | | if (task1 != null && (task1.getState() == 3 || Integer.valueOf(5).equals(task1.getState()) || |
| | | Integer.valueOf(6).equals(task1.getState()) || Integer.valueOf(7).equals(task1.getState()))) { |
| | | deviceListVo.setCheckTime(task1.getDate().atStartOfDay()); |
| | | Task checkedTask = latestCheckedTaskMap.get(deviceListVo.getId()); |
| | | if (checkedTask != null) { |
| | | deviceListVo.setCheckTime(checkedTask.getDate().atStartOfDay()); |
| | | deviceListVo.setCheckResult("已检查"); |
| | | } else { |
| | | deviceListVo.setCheckTime(null); |
| | | deviceListVo.setCheckResult("未检查"); |
| | | deviceListVo.setRisk(null); |
| | | } |
| | | } else { |
| | | deviceListVo.setCheckTime(null); |
| | | deviceListVo.setCheckResult("未检查"); |
| | |
| | | } |
| | | return deviceList; |
| | | } |
| | | |
| | | private Map<Integer, String> calculateProjectCategoryMap(List<Project> projects, EntrustListQuery query) { |
| | | if (projects.isEmpty() || query.getClientId() == null || query.getCategory() == null) { |
| | | return Collections.emptyMap(); |
| | |
| | | return category + "类"; |
| | | } |
| | | |
| | | private Task findLatestCheckedTask(List<Task> tasks, String startTime, String endTime) { |
| | | LocalDate startDate = parseQueryDate(startTime); |
| | | LocalDate endDate = parseQueryDate(endTime); |
| | | return tasks.stream() |
| | | .filter(this::isCheckedTask) |
| | | .filter(task -> matchesCheckDate(task.getDate(), startDate, endDate)) |
| | | .max(Comparator.comparing(Task::getDate)) |
| | | .orElse(null); |
| | | } |
| | | |
| | | private boolean isCheckedTask(Task task) { |
| | | if (task == null || task.getDate() == null) { |
| | | return false; |
| | | } |
| | | Integer state = task.getState(); |
| | | return Integer.valueOf(3).equals(state) |
| | | || Integer.valueOf(5).equals(state) |
| | | || Integer.valueOf(6).equals(state) |
| | | || Integer.valueOf(7).equals(state); |
| | | } |
| | | |
| | | private boolean matchesCheckDate(LocalDate taskDate, LocalDate startDate, LocalDate endDate) { |
| | | if (taskDate == null) { |
| | | return false; |
| | | } |
| | | if (startDate == null && endDate == null) { |
| | | LocalDate currentDate = LocalDate.now(); |
| | | return taskDate.getYear() == currentDate.getYear() |
| | | && taskDate.getMonthValue() == currentDate.getMonthValue(); |
| | | } |
| | | return (startDate == null || !taskDate.isBefore(startDate)) |
| | | && (endDate == null || !taskDate.isAfter(endDate)); |
| | | } |
| | | |
| | | private LocalDate parseQueryDate(String dateText) { |
| | | if (!StringUtils.hasLength(dateText)) { |
| | | return null; |
| | | } |
| | | String normalizedDateText = normalizeDateText(dateText); |
| | | int separatorIndex = normalizedDateText.indexOf(' '); |
| | | if (separatorIndex < 0) { |
| | | separatorIndex = normalizedDateText.indexOf('T'); |
| | | } |
| | | if (separatorIndex > 0) { |
| | | normalizedDateText = normalizedDateText.substring(0, separatorIndex); |
| | | } |
| | | return LocalDate.parse(normalizedDateText); |
| | | } |
| | | @Override |
| | | public List<EntrustProjectReportVo> projectReport(Page<EntrustProjectReportVo> page, ProjectReportListQuery query) { |
| | | List<EntrustProjectReportVo> entrustProjectReportVoList = this.baseMapper.projectReport(page, query); |
| | |
| | | } |
| | | return deviceList; |
| | | } |
| | | |
| | | @Override |
| | | public List<ErrorListVo> errorList(Page<ErrorListVo> page, ErrorListQuery query) throws ParseException { |
| | | String startTime=query.getStartTime(); |