修改逻辑
This commit is contained in:
parent
3d079b331a
commit
6c5e1a677c
|
|
@ -16,11 +16,7 @@ import com.ruoyi.task.service.dto.TaskStatItemServiceDTO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class TaskServiceImpl implements ITaskService {
|
public class TaskServiceImpl implements ITaskService {
|
||||||
|
|
@ -116,22 +112,22 @@ public class TaskServiceImpl implements ITaskService {
|
||||||
|
|
||||||
List<Task> tasks = taskDomain.getTaskList(task);
|
List<Task> tasks = taskDomain.getTaskList(task);
|
||||||
|
|
||||||
// 过滤掉状态为COMPLETED和FAILED的任务
|
// 只取状态为RUNNING的任务
|
||||||
tasks = tasks.stream()
|
tasks = tasks.stream()
|
||||||
.filter(t -> t.getStatus() != StatusEnum.COMPLETED && t.getStatus() != StatusEnum.FAILED)
|
.filter(t -> t.getStatus() == StatusEnum.RUNNING)
|
||||||
.collect(java.util.stream.Collectors.toList());
|
.collect(java.util.stream.Collectors.toList());
|
||||||
|
|
||||||
// 按照创建时间降序排序,取最新的一条
|
// 按照实际执行时间降序排序,取最新的一条
|
||||||
if (!tasks.isEmpty()) {
|
if (!tasks.isEmpty()) {
|
||||||
tasks.sort((t1, t2) -> {
|
tasks.sort((t1, t2) -> {
|
||||||
if (t1.getCreateTime() == null && t2.getCreateTime() == null) {
|
if (t1.getActualStartTime() == null && t2.getActualStartTime() == null) {
|
||||||
return 0;
|
return 0;
|
||||||
} else if (t1.getCreateTime() == null) {
|
} else if (t1.getActualStartTime() == null) {
|
||||||
return 1;
|
return 1;
|
||||||
} else if (t2.getCreateTime() == null) {
|
} else if (t2.getActualStartTime() == null) {
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
return t2.getCreateTime().compareTo(t1.getCreateTime());
|
return t2.getActualStartTime().compareTo(t1.getActualStartTime());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return TaskDTOConvert.toDTO(tasks.get(0));
|
return TaskDTOConvert.toDTO(tasks.get(0));
|
||||||
|
|
@ -170,8 +166,23 @@ public class TaskServiceImpl implements ITaskService {
|
||||||
// 如果状态变为执行中,设置实际开始时间
|
// 如果状态变为执行中,设置实际开始时间
|
||||||
if (status == StatusEnum.RUNNING) {
|
if (status == StatusEnum.RUNNING) {
|
||||||
task.setActualStartTime(new java.util.Date());
|
task.setActualStartTime(new java.util.Date());
|
||||||
}else {
|
|
||||||
|
if(Objects.isNull(task.getStartTime())){
|
||||||
|
task.setStartTime(new java.util.Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if(status == StatusEnum.PENDING) {
|
||||||
|
|
||||||
|
if(Objects.isNull(task.getStartTime())){
|
||||||
|
task.setStartTime(new java.util.Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
task.setActualEndTime(new java.util.Date());
|
task.setActualEndTime(new java.util.Date());
|
||||||
|
|
||||||
|
if(Objects.isNull(task.getEndTime())){
|
||||||
|
task.setEndTime(new java.util.Date());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Task result = taskDomain.updateTask(task);
|
Task result = taskDomain.updateTask(task);
|
||||||
return result != null;
|
return result != null;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,320 @@
|
||||||
|
{
|
||||||
|
"info": {
|
||||||
|
"_postman_id": "task-api-collection",
|
||||||
|
"name": "任务管理API",
|
||||||
|
"description": "任务管理相关接口的Postman集合",
|
||||||
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
||||||
|
},
|
||||||
|
"item": [
|
||||||
|
{
|
||||||
|
"name": "任务计划管理",
|
||||||
|
"item": [
|
||||||
|
{
|
||||||
|
"name": "创建定时任务计划",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"planName\": \"定时任务计划测试\",\n \"planType\": \"TIMED\",\n \"executeType\": \"SINGLE\",\n \"executeTime\": \"2026-03-10T10:00:00\",\n \"duration\": 3600,\n \"routeId\": 1,\n \"uavId\": \"UAV001\",\n \"description\": \"测试定时任务计划\",\n \"routeUrl\": \"http://example.com/route.json\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan/timed",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan", "timed"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "创建周期任务计划",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"planName\": \"周期任务计划测试\",\n \"planType\": \"CYCLE\",\n \"executeType\": \"SINGLE\",\n \"cycleType\": \"DAILY\",\n \"cycleValue\": \"1,3,5\",\n \"startDate\": \"2026-03-10\",\n \"endDate\": \"2026-03-31\",\n \"executeTime\": \"10:00:00\",\n \"duration\": 3600,\n \"routeId\": 1,\n \"uavId\": \"UAV001\",\n \"description\": \"测试周期任务计划\",\n \"routeUrl\": \"http://example.com/route.json\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan/cycle",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan", "cycle"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "获取任务计划详细信息",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan/{planId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan", "{planId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "planId",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "复杂条件查询任务计划列表",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"routeId\": 1,\n \"uavId\": \"UAV001\",\n \"planType\": \"TIMED\",\n \"startDateStart\": \"2026-03-01\",\n \"startDateEnd\": \"2026-03-31\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan/list",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan", "list"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "更新任务计划",
|
||||||
|
"request": {
|
||||||
|
"method": "PUT",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"id\": 1,\n \"planName\": \"更新后的任务计划\",\n \"executeTime\": \"2026-03-10T11:00:00\",\n \"duration\": 7200\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "删除任务计划",
|
||||||
|
"request": {
|
||||||
|
"method": "DELETE",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/plan/{planId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "plan", "{planId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "planId",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "任务管理",
|
||||||
|
"item": [
|
||||||
|
{
|
||||||
|
"name": "创建无关联计划的任务",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"taskName\": \"测试任务\",\n \"taskCategory\": \"MANUAL\",\n \"taskType\": \"ONE_CLICK_TAKEOFF\",\n \"executeType\": \"SINGLE\",\n \"routeId\": 1,\n \"uavId\": \"UAV001\",\n \"startTime\": \"2026-03-10T10:00:00\",\n \"endTime\": \"2026-03-10T11:00:00\",\n \"description\": \"测试任务\",\n \"routeUrl\": \"http://example.com/route.json\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "获取任务详细信息",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/{taskId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "{taskId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "taskId",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "复杂条件查询任务列表",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"routeId\": 1,\n \"uavId\": \"UAV001\",\n \"status\": \"PENDING\",\n \"startTimeStart\": \"2026-03-01\",\n \"startTimeEnd\": \"2026-03-31\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/list",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "list"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "更新任务",
|
||||||
|
"request": {
|
||||||
|
"method": "PUT",
|
||||||
|
"header": [],
|
||||||
|
"body": {
|
||||||
|
"mode": "raw",
|
||||||
|
"raw": "{\n \"id\": 1,\n \"taskName\": \"更新后的测试任务\",\n \"startTime\": \"2026-03-10T10:30:00\",\n \"endTime\": \"2026-03-10T11:30:00\"\n}",
|
||||||
|
"options": {
|
||||||
|
"raw": {
|
||||||
|
"language": "json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "删除任务",
|
||||||
|
"request": {
|
||||||
|
"method": "DELETE",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/{taskId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "{taskId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "taskId",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "根据无人机ID查询任务列表",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/uav/{uavId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "uav", "{uavId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "uavId",
|
||||||
|
"value": "UAV001"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "根据无人机ID获取最新的一条任务",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/uav/current/{uavId}",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "uav", "current", "{uavId}"],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "uavId",
|
||||||
|
"value": "UAV001"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "修改执行状态",
|
||||||
|
"request": {
|
||||||
|
"method": "PUT",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "{{baseUrl}}/task/status/{taskId}?status=RUNNING",
|
||||||
|
"host": ["{{baseUrl}}"],
|
||||||
|
"path": ["task", "status", "{taskId}"],
|
||||||
|
"query": [
|
||||||
|
{
|
||||||
|
"key": "status",
|
||||||
|
"value": "RUNNING"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "taskId",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"variable": [
|
||||||
|
{
|
||||||
|
"key": "baseUrl",
|
||||||
|
"value": "http://localhost:9215",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue