a-tuoheng-task/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java

262 lines
9.4 KiB
Java
Raw Normal View History

2026-03-05 17:14:10 +08:00
package com.ruoyi.task.service.impl;
2026-03-06 09:19:18 +08:00
import com.ruoyi.task.api.enums.StatusEnum;
2026-03-05 17:14:10 +08:00
import com.ruoyi.task.domain.api.ITaskDomain;
2026-03-09 17:20:57 +08:00
import com.ruoyi.task.domain.api.ITaskPlanDomain;
2026-03-05 17:14:10 +08:00
import com.ruoyi.task.domain.model.Task;
2026-03-09 17:20:57 +08:00
import com.ruoyi.task.domain.model.TaskPlan;
2026-03-05 17:15:01 +08:00
import com.ruoyi.task.service.api.ITaskService;
2026-03-05 17:14:10 +08:00
import com.ruoyi.task.service.convert.TaskDTOConvert;
import com.ruoyi.task.service.dto.TaskDTO;
import com.ruoyi.task.service.dto.TaskQueryDTO;
2026-03-09 16:36:47 +08:00
import com.ruoyi.task.service.dto.TaskStatQueryServiceDTO;
import com.ruoyi.task.service.dto.TaskStatByYearServiceDTO;
import com.ruoyi.task.service.dto.TaskStatByMonthServiceDTO;
2026-03-09 17:20:57 +08:00
import com.ruoyi.task.service.dto.TaskStatItemServiceDTO;
2026-03-05 17:14:10 +08:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
2026-03-09 17:20:57 +08:00
import java.util.ArrayList;
2026-03-09 16:36:47 +08:00
import java.util.Calendar;
import java.util.HashMap;
2026-03-05 17:14:10 +08:00
import java.util.List;
2026-03-09 16:36:47 +08:00
import java.util.Map;
2026-03-05 17:14:10 +08:00
@Service
public class TaskServiceImpl implements ITaskService {
@Autowired
private ITaskDomain taskDomain;
2026-03-09 17:20:57 +08:00
@Autowired
private ITaskPlanDomain taskPlanDomain;
2026-03-05 17:14:10 +08:00
@Override
public Long createTaskWithoutPlan(TaskDTO taskDTO) {
Task task = TaskDTOConvert.toDomain(taskDTO);
2026-03-09 14:50:47 +08:00
task.setPlanId(null);
2026-03-09 15:35:51 +08:00
task.setStatus(StatusEnum.PENDING);
2026-03-09 14:50:47 +08:00
Task result = taskDomain.createTask(task);
2026-03-05 17:14:10 +08:00
return result != null ? result.getId() : null;
}
@Override
public TaskDTO getTaskById(Long taskId) {
Task task = taskDomain.getTaskById(taskId);
return TaskDTOConvert.toDTO(task);
}
@Override
public List<TaskDTO> getTaskList(TaskQueryDTO queryDTO) {
2026-03-06 10:52:23 +08:00
// 如果传递了id功能就等同于用ID去获取值
if (queryDTO.getId() != null) {
TaskDTO taskDTO = getTaskById(queryDTO.getId());
return taskDTO != null ? java.util.Collections.singletonList(taskDTO) : java.util.Collections.emptyList();
}
2026-03-05 17:14:10 +08:00
// 创建Task对象作为查询条件
Task task = new Task();
task.setRouteId(queryDTO.getRouteId());
2026-03-06 10:52:23 +08:00
task.setUavId(queryDTO.getUavId());
2026-03-06 10:28:00 +08:00
task.setStatus(queryDTO.getStatus());
task.setTaskCategory(queryDTO.getTaskCategory());
task.setTaskType(queryDTO.getTaskType());
2026-03-06 10:52:23 +08:00
task.setExecuteType(queryDTO.getExecuteType());
// 这里需要注意Task类中没有airportCode、PlanTypeEnum和CycleTypeEnum字段
// 这些字段可能需要通过关联查询来实现过滤,
// 但目前我们先按照现有的结构实现基本过滤
2026-03-05 17:14:10 +08:00
List<Task> tasks = taskDomain.getTaskList(task);
2026-03-06 10:52:23 +08:00
// 过滤时间范围只有当startTimeStart和startTimeEnd都传时才使用
if (queryDTO.getStartTimeStart() != null && queryDTO.getStartTimeEnd() != null) {
java.util.Date startTimeStart = queryDTO.getStartTimeStart();
java.util.Date startTimeEnd = queryDTO.getStartTimeEnd();
tasks = tasks.stream()
.filter(t -> {
java.util.Date taskStartTime = t.getStartTime();
return taskStartTime != null &&
!taskStartTime.before(startTimeStart) &&
!taskStartTime.after(startTimeEnd);
})
.collect(java.util.stream.Collectors.toList());
}
2026-03-05 17:14:10 +08:00
return TaskDTOConvert.toDTOList(tasks);
}
@Override
public boolean updateTask(TaskDTO taskDTO) {
Task task = TaskDTOConvert.toDomain(taskDTO);
Task result = taskDomain.updateTask(task);
return result != null;
}
@Override
public boolean deleteTask(Long taskId) {
return taskDomain.deleteTask(taskId);
}
2026-03-06 11:25:26 +08:00
@Override
2026-03-09 09:51:54 +08:00
public List<TaskDTO> getTaskByUavId(String uavId) {
2026-03-06 11:25:26 +08:00
// 创建Task对象作为查询条件
Task task = new Task();
task.setUavId(uavId);
List<Task> tasks = taskDomain.getTaskList(task);
return TaskDTOConvert.toDTOList(tasks);
}
2026-03-06 11:29:41 +08:00
@Override
2026-03-09 09:51:54 +08:00
public TaskDTO getCurrentTaskByUavId(String uavId) {
2026-03-06 11:29:41 +08:00
// 创建Task对象作为查询条件
Task task = new Task();
task.setUavId(uavId);
List<Task> tasks = taskDomain.getTaskList(task);
// 按照创建时间降序排序,取最新的一条
if (!tasks.isEmpty()) {
tasks.sort((t1, t2) -> {
if (t1.getCreateTime() == null && t2.getCreateTime() == null) {
return 0;
} else if (t1.getCreateTime() == null) {
return 1;
} else if (t2.getCreateTime() == null) {
return -1;
} else {
return t2.getCreateTime().compareTo(t1.getCreateTime());
}
});
return TaskDTOConvert.toDTO(tasks.get(0));
}
return null;
}
2026-03-06 13:56:26 +08:00
//
// @Override
// public boolean updateActualStartTime(Long taskId) {
// Task task = taskDomain.getTaskById(taskId);
// if (task != null) {
// task.setActualStartTime(new java.util.Date());
// Task result = taskDomain.updateTask(task);
// return result != null;
// }
// return false;
// }
//
// @Override
// public boolean updateActualEndTime(Long taskId) {
// Task task = taskDomain.getTaskById(taskId);
// if (task != null) {
// task.setActualEndTime(new java.util.Date());
// Task result = taskDomain.updateTask(task);
// return result != null;
// }
// return false;
// }
2026-03-06 13:54:58 +08:00
@Override
public boolean updateTaskStatus(Long taskId, StatusEnum status) {
Task task = taskDomain.getTaskById(taskId);
if (task != null) {
task.setStatus(status);
// 如果状态变为执行中,设置实际开始时间
if (status == StatusEnum.RUNNING) {
task.setActualStartTime(new java.util.Date());
}else {
task.setActualEndTime(new java.util.Date());
}
Task result = taskDomain.updateTask(task);
return result != null;
}
return false;
}
2026-03-09 16:36:47 +08:00
@Override
public TaskStatByYearServiceDTO getTaskStatByYear(TaskStatQueryServiceDTO queryDTO) {
Task task = new Task();
task.setRouteId(queryDTO.getRouteId());
task.setUavId(queryDTO.getUavId());
task.setStatus(queryDTO.getStatus());
task.setTaskCategory(queryDTO.getTaskCategory());
task.setTaskType(queryDTO.getTaskType());
List<Task> tasks = taskDomain.getTaskList(task);
Calendar calendar = Calendar.getInstance();
Map<Integer, Integer> months = new HashMap<>();
int total = 0;
for (Task t : tasks) {
if (t.getStartTime() != null) {
calendar.setTime(t.getStartTime());
int year = calendar.get(Calendar.YEAR);
if (year == queryDTO.getYear()) {
int month = calendar.get(Calendar.MONTH) + 1;
months.put(month, months.getOrDefault(month, 0) + 1);
total++;
}
}
}
TaskStatByYearServiceDTO result = new TaskStatByYearServiceDTO();
result.setTotal(total);
result.setMonths(months);
return result;
}
@Override
public TaskStatByMonthServiceDTO getTaskStatByMonth(TaskStatQueryServiceDTO queryDTO) {
Task task = new Task();
task.setRouteId(queryDTO.getRouteId());
task.setUavId(queryDTO.getUavId());
task.setStatus(queryDTO.getStatus());
task.setTaskCategory(queryDTO.getTaskCategory());
task.setTaskType(queryDTO.getTaskType());
List<Task> tasks = taskDomain.getTaskList(task);
Calendar calendar = Calendar.getInstance();
2026-03-09 17:20:57 +08:00
Map<Integer, List<TaskStatItemServiceDTO>> days = new HashMap<>();
2026-03-09 16:36:47 +08:00
int total = 0;
for (Task t : tasks) {
if (t.getStartTime() != null) {
calendar.setTime(t.getStartTime());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
if (year == queryDTO.getYear() && month == queryDTO.getMonth()) {
int day = calendar.get(Calendar.DAY_OF_MONTH);
2026-03-09 17:20:57 +08:00
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);
2026-03-09 16:36:47 +08:00
total++;
}
}
}
TaskStatByMonthServiceDTO result = new TaskStatByMonthServiceDTO();
result.setTotal(total);
result.setDays(days);
return result;
}
2026-03-05 17:14:10 +08:00
}