164 lines
5.7 KiB
Java
164 lines
5.7 KiB
Java
package com.ruoyi.task.service.impl;
|
||
|
||
import com.ruoyi.task.api.enums.StatusEnum;
|
||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
||
import com.ruoyi.task.domain.api.ITaskDomain;
|
||
import com.ruoyi.task.domain.model.Task;
|
||
import com.ruoyi.task.service.api.ITaskService;
|
||
import com.ruoyi.task.service.convert.TaskDTOConvert;
|
||
import com.ruoyi.task.service.dto.TaskDTO;
|
||
import com.ruoyi.task.service.dto.TaskQueryDTO;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.stereotype.Service;
|
||
|
||
import java.util.List;
|
||
|
||
@Service
|
||
public class TaskServiceImpl implements ITaskService {
|
||
|
||
@Autowired
|
||
private ITaskDomain taskDomain;
|
||
|
||
@Override
|
||
public Long createTaskWithoutPlan(TaskDTO taskDTO) {
|
||
Task task = TaskDTOConvert.toDomain(taskDTO);
|
||
Task result = taskDomain.createTaskWithoutPlan(task);
|
||
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) {
|
||
// 如果传递了id,功能就等同于用ID去获取值
|
||
if (queryDTO.getId() != null) {
|
||
TaskDTO taskDTO = getTaskById(queryDTO.getId());
|
||
return taskDTO != null ? java.util.Collections.singletonList(taskDTO) : java.util.Collections.emptyList();
|
||
}
|
||
|
||
// 创建Task对象作为查询条件
|
||
Task task = new Task();
|
||
task.setRouteId(queryDTO.getRouteId());
|
||
task.setUavId(queryDTO.getUavId());
|
||
task.setStatus(queryDTO.getStatus());
|
||
task.setTaskCategory(queryDTO.getTaskCategory());
|
||
task.setTaskType(queryDTO.getTaskType());
|
||
task.setExecuteType(queryDTO.getExecuteType());
|
||
|
||
// 这里需要注意:Task类中没有airportCode、PlanTypeEnum和CycleTypeEnum字段,
|
||
// 这些字段可能需要通过关联查询来实现过滤,
|
||
// 但目前我们先按照现有的结构实现基本过滤
|
||
|
||
List<Task> tasks = taskDomain.getTaskList(task);
|
||
|
||
// 过滤时间范围(只有当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());
|
||
}
|
||
|
||
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);
|
||
}
|
||
|
||
@Override
|
||
public List<TaskDTO> getTaskByUavId(String uavId) {
|
||
// 创建Task对象作为查询条件
|
||
Task task = new Task();
|
||
task.setUavId(uavId);
|
||
|
||
List<Task> tasks = taskDomain.getTaskList(task);
|
||
return TaskDTOConvert.toDTOList(tasks);
|
||
}
|
||
|
||
@Override
|
||
public TaskDTO getCurrentTaskByUavId(String uavId) {
|
||
// 创建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;
|
||
}
|
||
//
|
||
// @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;
|
||
// }
|
||
|
||
@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;
|
||
}
|
||
}
|