From 2af108bf3d11c976519c70e82947a489c30550c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Mon, 9 Mar 2026 17:20:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convert/TaskStatControllerConvert.java | 36 ++++++- .../dto/TaskStatByMonthServiceDTO.java | 9 +- .../service/dto/TaskStatItemServiceDTO.java | 95 +++++++++++++++++++ .../task/service/impl/TaskServiceImpl.java | 29 +++++- 4 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/ruoyi/task/service/dto/TaskStatItemServiceDTO.java diff --git a/src/main/java/com/ruoyi/task/controller/convert/TaskStatControllerConvert.java b/src/main/java/com/ruoyi/task/controller/convert/TaskStatControllerConvert.java index 3a7854f..77e3148 100644 --- a/src/main/java/com/ruoyi/task/controller/convert/TaskStatControllerConvert.java +++ b/src/main/java/com/ruoyi/task/controller/convert/TaskStatControllerConvert.java @@ -1,6 +1,13 @@ package com.ruoyi.task.controller.convert; import com.ruoyi.task.api.domain.TaskStatQueryVO; +import com.ruoyi.task.api.domain.TaskStatItemDTO; +import com.ruoyi.task.service.dto.TaskStatItemServiceDTO; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 任务统计Controller转换器 @@ -44,7 +51,34 @@ public class TaskStatControllerConvert { if (dto == null) return null; com.ruoyi.task.api.domain.TaskStatByMonthDTO apiDTO = new com.ruoyi.task.api.domain.TaskStatByMonthDTO(); apiDTO.setTotal(dto.getTotal()); - apiDTO.setDays(dto.getDays()); + + if (dto.getDays() != null) { + Map> apiDays = new HashMap<>(); + for (Map.Entry> entry : dto.getDays().entrySet()) { + List apiItems = new ArrayList<>(); + for (TaskStatItemServiceDTO item : entry.getValue()) { + apiItems.add(fromItem(item)); + } + apiDays.put(entry.getKey(), apiItems); + } + apiDTO.setDays(apiDays); + } + + return apiDTO; + } + + private static TaskStatItemDTO fromItem(TaskStatItemServiceDTO dto) { + if (dto == null) return null; + TaskStatItemDTO apiDTO = new TaskStatItemDTO(); + apiDTO.setTaskId(dto.getTaskId()); + apiDTO.setPlanId(dto.getPlanId()); + apiDTO.setTaskName(dto.getTaskName()); + apiDTO.setPlanName(dto.getPlanName()); + apiDTO.setStartTime(dto.getStartTime()); + apiDTO.setEndTime(dto.getEndTime()); + apiDTO.setActualStartTime(dto.getActualStartTime()); + apiDTO.setActualEndTime(dto.getActualEndTime()); + apiDTO.setStatus(dto.getStatus()); return apiDTO; } } diff --git a/src/main/java/com/ruoyi/task/service/dto/TaskStatByMonthServiceDTO.java b/src/main/java/com/ruoyi/task/service/dto/TaskStatByMonthServiceDTO.java index b1d3da3..96f0a39 100644 --- a/src/main/java/com/ruoyi/task/service/dto/TaskStatByMonthServiceDTO.java +++ b/src/main/java/com/ruoyi/task/service/dto/TaskStatByMonthServiceDTO.java @@ -1,5 +1,6 @@ package com.ruoyi.task.service.dto; +import java.util.List; import java.util.Map; /** @@ -13,8 +14,8 @@ public class TaskStatByMonthServiceDTO { /** 总数 */ private Integer total; - /** 每日统计 key:日期(1-31) value:任务数量 */ - private Map days; + /** 每日任务列表 key:日期(1-31) value:任务列表 */ + private Map> days; public Integer getTotal() { return total; @@ -24,11 +25,11 @@ public class TaskStatByMonthServiceDTO { this.total = total; } - public Map getDays() { + public Map> getDays() { return days; } - public void setDays(Map days) { + public void setDays(Map> days) { this.days = days; } } diff --git a/src/main/java/com/ruoyi/task/service/dto/TaskStatItemServiceDTO.java b/src/main/java/com/ruoyi/task/service/dto/TaskStatItemServiceDTO.java new file mode 100644 index 0000000..fc335fd --- /dev/null +++ b/src/main/java/com/ruoyi/task/service/dto/TaskStatItemServiceDTO.java @@ -0,0 +1,95 @@ +package com.ruoyi.task.service.dto; + +import com.ruoyi.task.api.enums.StatusEnum; +import java.util.Date; + +/** + * 任务统计项DTO + * + * @author ruoyi + * @date 2026-03-09 + */ +public class TaskStatItemServiceDTO { + + private Long taskId; + private Long planId; + private String taskName; + private String planName; + private Date startTime; + private Date endTime; + private Date actualStartTime; + private Date actualEndTime; + private StatusEnum status; + + public Long getTaskId() { + return taskId; + } + + public void setTaskId(Long taskId) { + this.taskId = taskId; + } + + public Long getPlanId() { + return planId; + } + + public void setPlanId(Long planId) { + this.planId = planId; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getPlanName() { + return planName; + } + + public void setPlanName(String planName) { + this.planName = planName; + } + + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public Date getActualStartTime() { + return actualStartTime; + } + + public void setActualStartTime(Date actualStartTime) { + this.actualStartTime = actualStartTime; + } + + public Date getActualEndTime() { + return actualEndTime; + } + + public void setActualEndTime(Date actualEndTime) { + this.actualEndTime = actualEndTime; + } + + public StatusEnum getStatus() { + return status; + } + + public void setStatus(StatusEnum status) { + this.status = status; + } +} diff --git a/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java b/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java index ff6449c..d6b10c3 100644 --- a/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java +++ b/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java @@ -2,7 +2,9 @@ package com.ruoyi.task.service.impl; import com.ruoyi.task.api.enums.StatusEnum; import com.ruoyi.task.domain.api.ITaskDomain; +import com.ruoyi.task.domain.api.ITaskPlanDomain; import com.ruoyi.task.domain.model.Task; +import com.ruoyi.task.domain.model.TaskPlan; import com.ruoyi.task.service.api.ITaskService; import com.ruoyi.task.service.convert.TaskDTOConvert; import com.ruoyi.task.service.dto.TaskDTO; @@ -10,9 +12,11 @@ import com.ruoyi.task.service.dto.TaskQueryDTO; import com.ruoyi.task.service.dto.TaskStatQueryServiceDTO; import com.ruoyi.task.service.dto.TaskStatByYearServiceDTO; import com.ruoyi.task.service.dto.TaskStatByMonthServiceDTO; +import com.ruoyi.task.service.dto.TaskStatItemServiceDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; @@ -24,6 +28,9 @@ public class TaskServiceImpl implements ITaskService { @Autowired private ITaskDomain taskDomain; + @Autowired + private ITaskPlanDomain taskPlanDomain; + @Override public Long createTaskWithoutPlan(TaskDTO taskDTO) { Task task = TaskDTOConvert.toDomain(taskDTO); @@ -212,7 +219,7 @@ public class TaskServiceImpl implements ITaskService { List tasks = taskDomain.getTaskList(task); Calendar calendar = Calendar.getInstance(); - Map days = new HashMap<>(); + Map> days = new HashMap<>(); int total = 0; for (Task t : tasks) { @@ -222,7 +229,25 @@ public class TaskServiceImpl implements ITaskService { int month = calendar.get(Calendar.MONTH) + 1; if (year == queryDTO.getYear() && month == queryDTO.getMonth()) { int day = calendar.get(Calendar.DAY_OF_MONTH); - days.put(day, days.getOrDefault(day, 0) + 1); + + TaskStatItemServiceDTO item = new TaskStatItemServiceDTO(); + item.setTaskId(t.getId()); + item.setPlanId(t.getPlanId()); + item.setTaskName(t.getTaskName()); + item.setStartTime(t.getStartTime()); + item.setEndTime(t.getEndTime()); + item.setActualStartTime(t.getActualStartTime()); + item.setActualEndTime(t.getActualEndTime()); + item.setStatus(t.getStatus()); + + if (t.getPlanId() != null) { + TaskPlan plan = taskPlanDomain.getTaskPlanById(t.getPlanId()); + if (plan != null) { + item.setPlanName(plan.getPlanName()); + } + } + + days.computeIfAbsent(day, k -> new ArrayList<>()).add(item); total++; } }