From 6c5e1a677c21ded2ad6ab580e360171ef56f0374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Tue, 10 Mar 2026 15:25:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/service/impl/TaskServiceImpl.java | 39 ++- .../postman/Task-API-Collection.json | 320 ++++++++++++++++++ 2 files changed, 345 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/postman/Task-API-Collection.json 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 078779c..a4767a2 100644 --- a/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java +++ b/src/main/java/com/ruoyi/task/service/impl/TaskServiceImpl.java @@ -16,11 +16,7 @@ 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; -import java.util.Map; +import java.util.*; @Service public class TaskServiceImpl implements ITaskService { @@ -115,23 +111,23 @@ public class TaskServiceImpl implements ITaskService { task.setUavId(uavId); List tasks = taskDomain.getTaskList(task); - - // 过滤掉状态为COMPLETED和FAILED的任务 + + // 只取状态为RUNNING的任务 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()); - // 按照创建时间降序排序,取最新的一条 + // 按照实际执行时间降序排序,取最新的一条 if (!tasks.isEmpty()) { tasks.sort((t1, t2) -> { - if (t1.getCreateTime() == null && t2.getCreateTime() == null) { + if (t1.getActualStartTime() == null && t2.getActualStartTime() == null) { return 0; - } else if (t1.getCreateTime() == null) { + } else if (t1.getActualStartTime() == null) { return 1; - } else if (t2.getCreateTime() == null) { + } else if (t2.getActualStartTime() == null) { return -1; } else { - return t2.getCreateTime().compareTo(t1.getCreateTime()); + return t2.getActualStartTime().compareTo(t1.getActualStartTime()); } }); return TaskDTOConvert.toDTO(tasks.get(0)); @@ -170,8 +166,23 @@ public class TaskServiceImpl implements ITaskService { // 如果状态变为执行中,设置实际开始时间 if (status == StatusEnum.RUNNING) { 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()); + + if(Objects.isNull(task.getEndTime())){ + task.setEndTime(new java.util.Date()); + } } Task result = taskDomain.updateTask(task); return result != null; diff --git a/src/main/resources/postman/Task-API-Collection.json b/src/main/resources/postman/Task-API-Collection.json new file mode 100644 index 0000000..e7b0a6d --- /dev/null +++ b/src/main/resources/postman/Task-API-Collection.json @@ -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" + } + ] +} \ No newline at end of file