From b6e36cdf53b2688f0a0b339b14a33609ac051005 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 02 四月 2026 18:34:59 +0800
Subject: [PATCH] 修改bug
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java | 112 ++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 77 insertions(+), 35 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java
index 0f9045e..4598804 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceUsageServiceImpl.java
@@ -84,7 +84,6 @@
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());
@@ -94,28 +93,22 @@
}
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;
}
@@ -127,31 +120,34 @@
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());
- deviceListVo.setCheckResult("已检查");
- } else {
- deviceListVo.setCheckTime(null);
- deviceListVo.setCheckResult("未检查");
- deviceListVo.setRisk(null);
- }
+ Task checkedTask = latestCheckedTaskMap.get(deviceListVo.getId());
+ if (checkedTask != null) {
+ deviceListVo.setCheckTime(checkedTask.getDate().atStartOfDay());
+ deviceListVo.setCheckResult("已检查");
} else {
deviceListVo.setCheckTime(null);
deviceListVo.setCheckResult("未检查");
@@ -160,7 +156,6 @@
}
return deviceList;
}
-
private Map<Integer, String> calculateProjectCategoryMap(List<Project> projects, EntrustListQuery query) {
if (projects.isEmpty() || query.getClientId() == null || query.getCategory() == null) {
return Collections.emptyMap();
@@ -213,6 +208,54 @@
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);
@@ -271,7 +314,6 @@
}
return deviceList;
}
-
@Override
public List<ErrorListVo> errorList(Page<ErrorListVo> page, ErrorListQuery query) throws ParseException {
String startTime=query.getStartTime();
--
Gitblit v1.7.1