Compare commits
No commits in common. "main" and "dev" have entirely different histories.
23
pom.xml
23
pom.xml
|
|
@ -71,30 +71,12 @@
|
||||||
<artifactId>ruoyi-common-swagger</artifactId>
|
<artifactId>ruoyi-common-swagger</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- RuoYi Common Core -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.ruoyi</groupId>
|
|
||||||
<artifactId>ruoyi-common-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Tuoheng TASK API -->
|
<!-- Tuoheng TASK API -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.ruoyi</groupId>
|
<groupId>com.ruoyi</groupId>
|
||||||
<artifactId>tuoheng-api-task</artifactId>
|
<artifactId>tuoheng-api-task</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Tuoheng AIRLINE API -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.ruoyi</groupId>
|
|
||||||
<artifactId>tuoheng-api-airline</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Tuoheng DEVICE API -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.ruoyi</groupId>
|
|
||||||
<artifactId>tuoheng-api-device</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Flyway Database Migration -->
|
<!-- Flyway Database Migration -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.flywaydb</groupId>
|
<groupId>org.flywaydb</groupId>
|
||||||
|
|
@ -106,11 +88,6 @@
|
||||||
<groupId>org.flywaydb</groupId>
|
<groupId>org.flywaydb</groupId>
|
||||||
<artifactId>flyway-mysql</artifactId>
|
<artifactId>flyway-mysql</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.projectlombok</groupId>
|
|
||||||
<artifactId>lombok</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
dIdd
|
|
||||||
|
|
||||||
|
|
@ -1,135 +0,0 @@
|
||||||
package com.ruoyi.task.controller;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
|
||||||
import com.ruoyi.common.core.web.controller.BaseController;
|
|
||||||
import com.ruoyi.task.api.domain.TaskStatByMonthVO;
|
|
||||||
import com.ruoyi.task.api.domain.TaskStatQueryVO;
|
|
||||||
import com.ruoyi.task.api.domain.TaskVO;
|
|
||||||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.service.api.ITaskService;
|
|
||||||
import com.ruoyi.task.controller.convert.TaskControllerConvert;
|
|
||||||
import com.ruoyi.task.controller.convert.TaskStatControllerConvert;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务Controller
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-01-17
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/task")
|
|
||||||
@Slf4j
|
|
||||||
public class TaskController extends BaseController
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private ITaskService taskService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建普通-立即任务
|
|
||||||
*/
|
|
||||||
@PostMapping
|
|
||||||
public R<Long> createTaskWithoutPlan(@RequestBody TaskVO taskVO)
|
|
||||||
{
|
|
||||||
taskVO.setTaskType(TaskTypeEnum.IMMEDIATELY);
|
|
||||||
taskVO.setTaskCategory(TaskCategoryEnum.NORMAL);
|
|
||||||
log.info("createTaskWithoutPlan {}", JSON.toJSONString(taskVO));
|
|
||||||
|
|
||||||
Long taskId = taskService.createTaskWithoutPlan(TaskControllerConvert.to(taskVO));
|
|
||||||
return R.ok(taskId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取任务详细信息
|
|
||||||
*/
|
|
||||||
@GetMapping(value = "/{taskId}")
|
|
||||||
public R<TaskVO> getTaskById(@PathVariable("taskId") Long taskId)
|
|
||||||
{
|
|
||||||
return R.ok(TaskControllerConvert.from(taskService.getTaskById(taskId)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 复杂条件查询任务列表
|
|
||||||
// */
|
|
||||||
// @PostMapping("/list")
|
|
||||||
// public R<List<com.ruoyi.task.api.domain.TaskDTO>> list(@RequestBody TaskQueryDTO queryDTO)
|
|
||||||
// {
|
|
||||||
// return R.ok(TaskControllerConvert.fromList(taskService.getTaskList(queryDTO)));
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务
|
|
||||||
*/
|
|
||||||
@PutMapping
|
|
||||||
public R<Boolean> updateTask(@RequestBody TaskVO taskVO)
|
|
||||||
{
|
|
||||||
log.info("updateTask {}", JSON.toJSONString(taskVO));
|
|
||||||
boolean result = taskService.updateTask(TaskControllerConvert.to(taskVO));
|
|
||||||
return R.ok(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务
|
|
||||||
*/
|
|
||||||
@DeleteMapping("/{taskId}")
|
|
||||||
public R<Boolean> deleteTask(@PathVariable("taskId") Long taskId)
|
|
||||||
{
|
|
||||||
log.info("deleteTask {}", taskId);
|
|
||||||
boolean result = taskService.deleteTask(taskId);
|
|
||||||
return R.ok(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据无人机ID查询任务列表
|
|
||||||
*/
|
|
||||||
@GetMapping("/uav/{uavId}")
|
|
||||||
public R<List<TaskVO>> getTaskByUavId(@PathVariable("uavId") String uavId)
|
|
||||||
{
|
|
||||||
return R.ok(TaskControllerConvert.fromList(taskService.getTaskByUavId(uavId)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据无人机ID获取最新的一条任务
|
|
||||||
*/
|
|
||||||
@GetMapping("/uav/current/{uavId}")
|
|
||||||
public R<TaskVO> getCurrentTaskByUavId(@PathVariable("uavId") String uavId)
|
|
||||||
{
|
|
||||||
return R.ok(TaskControllerConvert.from(taskService.getCurrentTaskByUavId(uavId)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改执行状态
|
|
||||||
*/
|
|
||||||
@PutMapping("/status/{taskId}")
|
|
||||||
public R<Boolean> updateTaskStatus(@PathVariable("taskId") Long taskId, @RequestParam("status") StatusEnum status)
|
|
||||||
{
|
|
||||||
boolean result = taskService.updateTaskStatus(taskId, status);
|
|
||||||
return R.ok(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年统计任务
|
|
||||||
*/
|
|
||||||
@PostMapping("/stat/year")
|
|
||||||
public R<com.ruoyi.task.api.domain.TaskStatByYearDTO> getTaskStatByYear(@RequestBody TaskStatQueryVO queryDTO)
|
|
||||||
{
|
|
||||||
return R.ok(TaskStatControllerConvert.fromYear(taskService.getTaskStatByYear(TaskStatControllerConvert.toQuery(queryDTO))));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年月统计任务
|
|
||||||
*/
|
|
||||||
@PostMapping("/stat/month")
|
|
||||||
public R<TaskStatByMonthVO> getTaskStatByMonth(@RequestBody TaskStatQueryVO queryDTO)
|
|
||||||
{
|
|
||||||
return R.ok(TaskStatControllerConvert.fromMonth(taskService.getTaskStatByMonth(TaskStatControllerConvert.toQuery(queryDTO))));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
||||||
package com.ruoyi.task.controller;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
|
||||||
import com.ruoyi.common.core.web.controller.BaseController;
|
|
||||||
import com.ruoyi.task.api.domain.TaskPlanDTO;
|
|
||||||
import com.ruoyi.task.api.domain.TaskPlanQueryDTO;
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.service.api.ITaskPlanService;
|
|
||||||
import com.ruoyi.task.controller.convert.TaskPlanControllerConvert;
|
|
||||||
import com.ruoyi.task.controller.convert.TaskPlanQueryControllerConvert;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划Controller
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-01-17
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/task/plan")
|
|
||||||
public class TaskPlanController extends BaseController
|
|
||||||
{
|
|
||||||
@Autowired
|
|
||||||
private ITaskPlanService taskPlanService;
|
|
||||||
|
|
||||||
private void setDefaultPlan(TaskPlanDTO plan) {
|
|
||||||
if(Objects.isNull(plan)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(Objects.isNull(plan.getExecuteType())) {
|
|
||||||
plan.setExecuteType(ExecuteTypeEnum.ONCE);
|
|
||||||
}
|
|
||||||
if(Objects.isNull(plan.getStatus())) {
|
|
||||||
plan.setStatus(StatusEnum.PENDING);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建定时任务计划
|
|
||||||
*/
|
|
||||||
@PostMapping("/timed")
|
|
||||||
public R<Long> createNormalTimedTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO)
|
|
||||||
{
|
|
||||||
taskPlanDTO.setPlanType(PlanTypeEnum.TIMED);
|
|
||||||
setDefaultPlan(taskPlanDTO);
|
|
||||||
Long planId = taskPlanService.createNormalTimedTaskPlan(TaskPlanControllerConvert.to(taskPlanDTO),true);
|
|
||||||
return R.ok(planId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建周期任务计划
|
|
||||||
*/
|
|
||||||
@PostMapping("/cycle")
|
|
||||||
public R<Long> createCycleTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO)
|
|
||||||
{
|
|
||||||
taskPlanDTO.setPlanType(PlanTypeEnum.CYCLE);
|
|
||||||
setDefaultPlan(taskPlanDTO);
|
|
||||||
Long planId = taskPlanService.createCycleTaskPlan(TaskPlanControllerConvert.to(taskPlanDTO),true);
|
|
||||||
return R.ok(planId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取任务计划详细信息
|
|
||||||
*/
|
|
||||||
@GetMapping(value = "/{planId}")
|
|
||||||
public R<TaskPlanDTO> getTaskPlanById(@PathVariable("planId") Long planId)
|
|
||||||
{
|
|
||||||
return R.ok(TaskPlanControllerConvert.from(taskPlanService.getTaskPlanById(planId)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 复杂条件查询任务计划列表
|
|
||||||
*/
|
|
||||||
@PostMapping("/list")
|
|
||||||
public R<List<TaskPlanDTO>> list(@RequestBody TaskPlanQueryDTO queryDTO)
|
|
||||||
{
|
|
||||||
return R.ok(TaskPlanControllerConvert.fromList(taskPlanService.getTaskPlanList(TaskPlanQueryControllerConvert.to(queryDTO))));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务计划
|
|
||||||
*/
|
|
||||||
@PutMapping
|
|
||||||
public R<Boolean> updateTaskPlan(@RequestBody TaskPlanDTO taskPlanDTO)
|
|
||||||
{
|
|
||||||
|
|
||||||
taskPlanService.updateTaskPlan(TaskPlanControllerConvert.to(taskPlanDTO));
|
|
||||||
// taskPlanService.deleteTaskPlan(taskPlanDTO.getId());
|
|
||||||
// if(!Objects.isNull(taskPlanDTO.getPlanType())) {
|
|
||||||
// if(Objects.equals(taskPlanDTO.getPlanType(), PlanTypeEnum.TIMED)){
|
|
||||||
// taskPlanDTO.setPlanType(PlanTypeEnum.TIMED);
|
|
||||||
// setDefaultPlan(taskPlanDTO);
|
|
||||||
// taskPlanService.createTimedTaskPlan(TaskPlanControllerConvert.to(taskPlanDTO));
|
|
||||||
// return R.ok(true);
|
|
||||||
// }else if (Objects.equals(taskPlanDTO.getPlanType(), PlanTypeEnum.CYCLE)){
|
|
||||||
// taskPlanDTO.setPlanType(PlanTypeEnum.CYCLE);
|
|
||||||
// setDefaultPlan(taskPlanDTO);
|
|
||||||
// taskPlanService.createCycleTaskPlan(TaskPlanControllerConvert.to(taskPlanDTO));
|
|
||||||
// return R.ok(true);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
return R.ok(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务计划
|
|
||||||
*/
|
|
||||||
@DeleteMapping("/{planId}")
|
|
||||||
public R<Boolean> deleteTaskPlan(@PathVariable("planId") Long planId)
|
|
||||||
{
|
|
||||||
boolean result = taskPlanService.deleteTaskPlan(planId);
|
|
||||||
return R.ok(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
package com.ruoyi.task.controller.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.utils.BaseConvert;
|
|
||||||
import com.ruoyi.task.api.domain.TaskVO;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务Controller转换器
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskControllerConvert extends BaseConvert<com.ruoyi.task.service.dto.TaskDTO, TaskVO> {
|
|
||||||
|
|
||||||
private static final TaskControllerConvert INSTANCE = new TaskControllerConvert();
|
|
||||||
|
|
||||||
private TaskControllerConvert() {
|
|
||||||
super(com.ruoyi.task.service.dto.TaskDTO.class, TaskVO.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务DTO 转 API DTO
|
|
||||||
*/
|
|
||||||
public static TaskVO from(com.ruoyi.task.service.dto.TaskDTO dto) {
|
|
||||||
return INSTANCE.innerFrom(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API DTO 转 服务DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.service.dto.TaskDTO to(TaskVO apiDTO) {
|
|
||||||
return INSTANCE.innerTo(apiDTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务DTO List 转 API DTO List
|
|
||||||
*/
|
|
||||||
public static List<TaskVO> fromList(List<com.ruoyi.task.service.dto.TaskDTO> dtoList) {
|
|
||||||
return INSTANCE.innerFromList(dtoList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API DTO List 转 服务DTO List
|
|
||||||
*/
|
|
||||||
public static List<com.ruoyi.task.service.dto.TaskDTO> toList(List<TaskVO> apiDTOList) {
|
|
||||||
return INSTANCE.innerToList(apiDTOList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
package com.ruoyi.task.controller.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.utils.BaseConvert;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划Controller转换器
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskPlanControllerConvert extends BaseConvert<com.ruoyi.task.service.dto.TaskPlanDTO, com.ruoyi.task.api.domain.TaskPlanDTO> {
|
|
||||||
|
|
||||||
private static final TaskPlanControllerConvert INSTANCE = new TaskPlanControllerConvert();
|
|
||||||
|
|
||||||
private TaskPlanControllerConvert() {
|
|
||||||
super(com.ruoyi.task.service.dto.TaskPlanDTO.class, com.ruoyi.task.api.domain.TaskPlanDTO.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务DTO 转 API DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.api.domain.TaskPlanDTO from(com.ruoyi.task.service.dto.TaskPlanDTO dto) {
|
|
||||||
return INSTANCE.innerFrom(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API DTO 转 服务DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.service.dto.TaskPlanDTO to(com.ruoyi.task.api.domain.TaskPlanDTO apiDTO) {
|
|
||||||
return INSTANCE.innerTo(apiDTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务DTO List 转 API DTO List
|
|
||||||
*/
|
|
||||||
public static List<com.ruoyi.task.api.domain.TaskPlanDTO> fromList(List<com.ruoyi.task.service.dto.TaskPlanDTO> dtoList) {
|
|
||||||
return INSTANCE.innerFromList(dtoList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API DTO List 转 服务DTO List
|
|
||||||
*/
|
|
||||||
public static List<com.ruoyi.task.service.dto.TaskPlanDTO> toList(List<com.ruoyi.task.api.domain.TaskPlanDTO> apiDTOList) {
|
|
||||||
return INSTANCE.innerToList(apiDTOList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
package com.ruoyi.task.controller.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.utils.BaseConvert;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划查询Controller转换器
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskPlanQueryControllerConvert extends BaseConvert<com.ruoyi.task.service.dto.TaskPlanQueryDTO, com.ruoyi.task.api.domain.TaskPlanQueryDTO> {
|
|
||||||
|
|
||||||
private static final TaskPlanQueryControllerConvert INSTANCE = new TaskPlanQueryControllerConvert();
|
|
||||||
|
|
||||||
private TaskPlanQueryControllerConvert() {
|
|
||||||
super(com.ruoyi.task.service.dto.TaskPlanQueryDTO.class, com.ruoyi.task.api.domain.TaskPlanQueryDTO.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务DTO 转 API DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.api.domain.TaskPlanQueryDTO from(com.ruoyi.task.service.dto.TaskPlanQueryDTO dto) {
|
|
||||||
return INSTANCE.innerFrom(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API DTO 转 服务DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.service.dto.TaskPlanQueryDTO to(com.ruoyi.task.api.domain.TaskPlanQueryDTO apiDTO) {
|
|
||||||
return INSTANCE.innerTo(apiDTO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
||||||
package com.ruoyi.task.controller.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.domain.TaskStatByMonthVO;
|
|
||||||
import com.ruoyi.task.api.domain.TaskStatQueryVO;
|
|
||||||
import com.ruoyi.task.api.domain.TaskStatItemVO;
|
|
||||||
import com.ruoyi.task.service.dto.TaskStatItemServiceDTO;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务统计Controller转换器
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskStatControllerConvert {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* API 查询DTO 转 服务查询DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.service.dto.TaskStatQueryServiceDTO toQuery(TaskStatQueryVO apiDTO) {
|
|
||||||
if (apiDTO == null) return null;
|
|
||||||
com.ruoyi.task.service.dto.TaskStatQueryServiceDTO dto = new com.ruoyi.task.service.dto.TaskStatQueryServiceDTO();
|
|
||||||
dto.setYear(apiDTO.getYear());
|
|
||||||
dto.setMonth(apiDTO.getMonth());
|
|
||||||
dto.setStartDate(apiDTO.getStartTime());
|
|
||||||
dto.setEndDate(apiDTO.getEndTime());
|
|
||||||
dto.setTaskCategory(apiDTO.getTaskCategory());
|
|
||||||
dto.setTaskType(apiDTO.getTaskType());
|
|
||||||
dto.setStatusList(apiDTO.getStatusList());
|
|
||||||
dto.setRouteIdList(apiDTO.getRouteIdList());
|
|
||||||
dto.setUavIdList(apiDTO.getUavIdList());
|
|
||||||
return dto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务按年统计DTO 转 API 按年统计DTO
|
|
||||||
*/
|
|
||||||
public static com.ruoyi.task.api.domain.TaskStatByYearDTO fromYear(com.ruoyi.task.service.dto.TaskStatByYearServiceDTO dto) {
|
|
||||||
if (dto == null) return null;
|
|
||||||
com.ruoyi.task.api.domain.TaskStatByYearDTO apiDTO = new com.ruoyi.task.api.domain.TaskStatByYearDTO();
|
|
||||||
apiDTO.setTotal(dto.getTotal());
|
|
||||||
apiDTO.setMonths(dto.getMonths());
|
|
||||||
return apiDTO;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 服务按月统计DTO 转 API 按月统计DTO
|
|
||||||
*/
|
|
||||||
public static TaskStatByMonthVO fromMonth(com.ruoyi.task.service.dto.TaskStatByMonthServiceDTO dto) {
|
|
||||||
if (dto == null) return null;
|
|
||||||
TaskStatByMonthVO apiDTO = new TaskStatByMonthVO();
|
|
||||||
apiDTO.setTotal(dto.getTotal());
|
|
||||||
|
|
||||||
if (dto.getDays() != null) {
|
|
||||||
Map<Integer, List<TaskStatItemVO>> apiDays = new HashMap<>();
|
|
||||||
for (Map.Entry<Integer, List<TaskStatItemServiceDTO>> entry : dto.getDays().entrySet()) {
|
|
||||||
List<TaskStatItemVO> apiItems = new ArrayList<>();
|
|
||||||
for (TaskStatItemServiceDTO item : entry.getValue()) {
|
|
||||||
apiItems.add(fromItem(item));
|
|
||||||
}
|
|
||||||
apiDays.put(entry.getKey(), apiItems);
|
|
||||||
}
|
|
||||||
apiDTO.setDays(apiDays);
|
|
||||||
}
|
|
||||||
|
|
||||||
return apiDTO;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TaskStatItemVO fromItem(TaskStatItemServiceDTO dto) {
|
|
||||||
if (dto == null) return null;
|
|
||||||
TaskStatItemVO apiDTO = new TaskStatItemVO();
|
|
||||||
apiDTO.setTaskId(dto.getTaskId());
|
|
||||||
apiDTO.setPlanId(dto.getPlanId());
|
|
||||||
apiDTO.setTaskName(dto.getTaskName());
|
|
||||||
apiDTO.setPlanName(dto.getPlanName());
|
|
||||||
apiDTO.setRouteName(dto.getRouteName());
|
|
||||||
apiDTO.setAirVendor(dto.getAirVendor());
|
|
||||||
apiDTO.setAirType(dto.getAirType());
|
|
||||||
apiDTO.setPlanStartDate(dto.getPlanStartDate());
|
|
||||||
apiDTO.setPlanEndDate(dto.getPlanEndDate());
|
|
||||||
apiDTO.setStartTime(dto.getStartTime());
|
|
||||||
apiDTO.setEndTime(dto.getEndTime());
|
|
||||||
apiDTO.setActualStartTime(dto.getActualStartTime());
|
|
||||||
apiDTO.setActualEndTime(dto.getActualEndTime());
|
|
||||||
apiDTO.setStatus(dto.getStatus());
|
|
||||||
apiDTO.setTaskType(dto.getTaskType());
|
|
||||||
apiDTO.setTaskCategory(dto.getTaskCategory());
|
|
||||||
apiDTO.setAirlineType(dto.getAirlineType());
|
|
||||||
apiDTO.setTaskCreateTime(dto.getTaskCreateTime());
|
|
||||||
apiDTO.setTaskCreateBy(dto.getTaskCreateBy());
|
|
||||||
return apiDTO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
package com.ruoyi.task.domain.api;
|
|
||||||
|
|
||||||
import com.ruoyi.task.domain.model.Task;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务领域接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public interface ITaskDomain {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建无关联计划的飞行任务
|
|
||||||
*
|
|
||||||
* @param task 任务领域模型
|
|
||||||
* @return 创建后的任务
|
|
||||||
*/
|
|
||||||
Task createTask(Task task);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务
|
|
||||||
*
|
|
||||||
* @param task 任务领域模型
|
|
||||||
* @return 更新后的任务
|
|
||||||
*/
|
|
||||||
Task updateTask(Task task);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务
|
|
||||||
*
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 是否删除成功
|
|
||||||
*/
|
|
||||||
boolean deleteTask(Long taskId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID获取任务
|
|
||||||
*
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 任务领域模型
|
|
||||||
*/
|
|
||||||
Task getTaskById(Long taskId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据条件查询任务列表
|
|
||||||
*
|
|
||||||
* @param task 查询条件
|
|
||||||
* @return 任务列表
|
|
||||||
*/
|
|
||||||
List<Task> getTaskList(Task task);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据计划ID获取任务
|
|
||||||
*
|
|
||||||
* @param planId 计划ID
|
|
||||||
* @return 任务列表
|
|
||||||
*/
|
|
||||||
List<Task> getTaskByPlanId(Long planId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询指定无人机 actualStartTime 离现在最近的任务
|
|
||||||
*
|
|
||||||
* @param uavId 无人机ID
|
|
||||||
* @return 任务领域模型
|
|
||||||
*/
|
|
||||||
Task getCurrentTaskByUavId(String uavId);
|
|
||||||
}
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
package com.ruoyi.task.domain.api;
|
|
||||||
|
|
||||||
import com.ruoyi.task.domain.model.TaskPlan;
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskPlanEntity;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划领域接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public interface ITaskPlanDomain {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建定时任务计划
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划领域模型
|
|
||||||
* @return 创建后的任务计划
|
|
||||||
*/
|
|
||||||
TaskPlan createTimedTaskPlan(TaskPlan taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建周期任务计划
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划领域模型
|
|
||||||
* @return 创建后的任务计划
|
|
||||||
*/
|
|
||||||
TaskPlan createCycleTaskPlan(TaskPlan taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务计划
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划领域模型
|
|
||||||
* @return 更新后的任务计划
|
|
||||||
*/
|
|
||||||
TaskPlan updateTaskPlan(TaskPlan taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务计划
|
|
||||||
*
|
|
||||||
* @param planId 计划ID
|
|
||||||
* @return 是否删除成功
|
|
||||||
*/
|
|
||||||
boolean deleteTaskPlan(Long planId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID获取任务计划
|
|
||||||
*
|
|
||||||
* @param planId 计划ID
|
|
||||||
* @return 任务计划领域模型
|
|
||||||
*/
|
|
||||||
TaskPlan getTaskPlanById(Long planId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据条件查询任务计划列表
|
|
||||||
*
|
|
||||||
* @param taskPlan 查询条件
|
|
||||||
* @return 任务计划列表
|
|
||||||
*/
|
|
||||||
List<TaskPlan> getTaskPlanList(TaskPlan taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据计划类型获取任务计划
|
|
||||||
*
|
|
||||||
* @param planType 计划类型
|
|
||||||
* @return 任务计划列表
|
|
||||||
*/
|
|
||||||
List<TaskPlan> getTaskPlanByType(String planType);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据状态获取任务计划
|
|
||||||
*
|
|
||||||
* @param status 状态
|
|
||||||
* @return 任务计划列表
|
|
||||||
*/
|
|
||||||
List<TaskPlan> getTaskPlanByStatus(String status);
|
|
||||||
}
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
package com.ruoyi.task.domain.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
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.model.Task;
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskInfoEntity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务转换类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class TaskConvert {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将实体转换为领域模型
|
|
||||||
*
|
|
||||||
* @param entity 任务实体
|
|
||||||
* @return 任务领域模型
|
|
||||||
*/
|
|
||||||
public static Task toModel(TaskInfoEntity entity) {
|
|
||||||
if (entity == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Task model = new Task();
|
|
||||||
model.setId(entity.getId());
|
|
||||||
model.setPlanId(entity.getPlanId());
|
|
||||||
model.setTaskName(entity.getTaskName());
|
|
||||||
model.setTaskCategory(TaskCategoryEnum.getByCode(entity.getTaskCategory()));
|
|
||||||
model.setTaskType(TaskTypeEnum.getByCode(entity.getTaskType()));
|
|
||||||
model.setExecuteType(ExecuteTypeEnum.getByCode(entity.getExecuteType()));
|
|
||||||
model.setRouteId(entity.getRouteId());
|
|
||||||
model.setUavId(entity.getUavId());
|
|
||||||
model.setStatus(StatusEnum.getByCode(entity.getStatus()));
|
|
||||||
model.setStartTime(entity.getStartTime());
|
|
||||||
model.setEndTime(entity.getEndTime());
|
|
||||||
model.setActualStartTime(entity.getActualStartTime());
|
|
||||||
model.setActualEndTime(entity.getActualEndTime());
|
|
||||||
model.setDescription(entity.getDescription());
|
|
||||||
model.setCreateBy(entity.getCreateBy());
|
|
||||||
model.setCreateTime(entity.getCreateTime());
|
|
||||||
model.setUpdateBy(entity.getUpdateBy());
|
|
||||||
model.setUpdateTime(entity.getUpdateTime());
|
|
||||||
model.setRemark(entity.getRemark());
|
|
||||||
model.setRouteUrl(entity.getRouteUrl());
|
|
||||||
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将领域模型转换为实体
|
|
||||||
*
|
|
||||||
* @param model 任务领域模型
|
|
||||||
* @return 任务实体
|
|
||||||
*/
|
|
||||||
public static TaskInfoEntity toEntity(Task model) {
|
|
||||||
if (model == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskInfoEntity entity = new TaskInfoEntity();
|
|
||||||
entity.setId(model.getId());
|
|
||||||
entity.setPlanId(model.getPlanId());
|
|
||||||
entity.setTaskName(model.getTaskName());
|
|
||||||
entity.setTaskCategory(model.getTaskCategory() != null ? model.getTaskCategory().getCode() : null);
|
|
||||||
entity.setTaskType(model.getTaskType() != null ? model.getTaskType().getCode() : null);
|
|
||||||
entity.setExecuteType(model.getExecuteType() != null ? model.getExecuteType().getCode() : null);
|
|
||||||
entity.setRouteId(model.getRouteId());
|
|
||||||
entity.setUavId(model.getUavId());
|
|
||||||
entity.setStatus(model.getStatus() != null ? model.getStatus().getCode() : null);
|
|
||||||
entity.setStartTime(model.getStartTime());
|
|
||||||
entity.setEndTime(model.getEndTime());
|
|
||||||
entity.setActualStartTime(model.getActualStartTime());
|
|
||||||
entity.setActualEndTime(model.getActualEndTime());
|
|
||||||
entity.setDescription(model.getDescription());
|
|
||||||
entity.setCreateBy(model.getCreateBy());
|
|
||||||
entity.setCreateTime(model.getCreateTime());
|
|
||||||
entity.setUpdateBy(model.getUpdateBy());
|
|
||||||
entity.setUpdateTime(model.getUpdateTime());
|
|
||||||
entity.setRemark(model.getRemark());
|
|
||||||
entity.setRouteUrl(model.getRouteUrl());
|
|
||||||
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
package com.ruoyi.task.domain.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.CycleTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.domain.model.TaskPlan;
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskPlanEntity;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划转换类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class TaskPlanConvert {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将实体转换为领域模型
|
|
||||||
*
|
|
||||||
* @param entity 任务计划实体
|
|
||||||
* @return 任务计划领域模型
|
|
||||||
*/
|
|
||||||
public static TaskPlan toModel(TaskPlanEntity entity) {
|
|
||||||
if (entity == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskPlan model = new TaskPlan();
|
|
||||||
model.setId(entity.getId());
|
|
||||||
model.setPlanName(entity.getPlanName());
|
|
||||||
model.setPlanType(PlanTypeEnum.getByCode(entity.getPlanType()));
|
|
||||||
model.setExecuteType(ExecuteTypeEnum.getByCode(entity.getExecuteType()));
|
|
||||||
model.setCycleType(CycleTypeEnum.getByCode(entity.getCycleType()));
|
|
||||||
model.setCycleValue(entity.getCycleValue());
|
|
||||||
model.setStartDate(entity.getStartDate());
|
|
||||||
model.setEndDate(entity.getEndDate());
|
|
||||||
model.setExecuteTime(entity.getExecuteTime());
|
|
||||||
model.setDuration(entity.getDuration());
|
|
||||||
model.setRouteId(entity.getRouteId());
|
|
||||||
model.setUavId(entity.getUavId());
|
|
||||||
model.setStatus(StatusEnum.getByCode(entity.getStatus()));
|
|
||||||
model.setDescription(entity.getDescription());
|
|
||||||
model.setCreateBy(entity.getCreateBy());
|
|
||||||
model.setCreateTime(entity.getCreateTime());
|
|
||||||
model.setUpdateBy(entity.getUpdateBy());
|
|
||||||
model.setUpdateTime(entity.getUpdateTime());
|
|
||||||
model.setRemark(entity.getRemark());
|
|
||||||
model.setRouteUrl(entity.getRouteUrl());
|
|
||||||
|
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将领域模型转换为实体
|
|
||||||
*
|
|
||||||
* @param model 任务计划领域模型
|
|
||||||
* @return 任务计划实体
|
|
||||||
*/
|
|
||||||
public static TaskPlanEntity toEntity(TaskPlan model) {
|
|
||||||
if (model == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskPlanEntity entity = new TaskPlanEntity();
|
|
||||||
entity.setId(model.getId());
|
|
||||||
entity.setPlanName(model.getPlanName());
|
|
||||||
entity.setPlanType(model.getPlanType() != null ? model.getPlanType().getCode() : null);
|
|
||||||
entity.setExecuteType(model.getExecuteType() != null ? model.getExecuteType().getCode() : null);
|
|
||||||
entity.setCycleType(model.getCycleType() != null ? model.getCycleType().getCode() : null);
|
|
||||||
entity.setCycleValue(model.getCycleValue());
|
|
||||||
entity.setStartDate(model.getStartDate());
|
|
||||||
entity.setEndDate(model.getEndDate());
|
|
||||||
entity.setExecuteTime(model.getExecuteTime());
|
|
||||||
entity.setDuration(model.getDuration());
|
|
||||||
entity.setRouteId(model.getRouteId());
|
|
||||||
entity.setUavId(model.getUavId());
|
|
||||||
entity.setStatus(model.getStatus() != null ? model.getStatus().getCode() : null);
|
|
||||||
entity.setDescription(model.getDescription());
|
|
||||||
entity.setCreateBy(model.getCreateBy());
|
|
||||||
entity.setCreateTime(model.getCreateTime());
|
|
||||||
entity.setUpdateBy(model.getUpdateBy());
|
|
||||||
entity.setUpdateTime(model.getUpdateTime());
|
|
||||||
entity.setRemark(model.getRemark());
|
|
||||||
entity.setRouteUrl(model.getRouteUrl());
|
|
||||||
|
|
||||||
return entity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
||||||
package com.ruoyi.task.domain.impl;
|
|
||||||
|
|
||||||
import com.ruoyi.task.domain.api.ITaskDomain;
|
|
||||||
import com.ruoyi.task.domain.convert.TaskConvert;
|
|
||||||
import com.ruoyi.task.domain.model.Task;
|
|
||||||
import com.ruoyi.task.mapper.TaskInfoMapper;
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskInfoEntity;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务领域实现类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class TaskDomainImpl implements ITaskDomain {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskInfoMapper taskInfoMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task createTask(Task task) {
|
|
||||||
// 确保planId为null,表示无关联计划
|
|
||||||
// 转换为实体
|
|
||||||
TaskInfoEntity entity = TaskConvert.toEntity(task);
|
|
||||||
// 插入数据库
|
|
||||||
taskInfoMapper.insertTaskInfo(entity);
|
|
||||||
// 转换回领域模型并返回
|
|
||||||
return TaskConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task updateTask(Task task) {
|
|
||||||
// 转换为实体
|
|
||||||
TaskInfoEntity entity = TaskConvert.toEntity(task);
|
|
||||||
// 更新数据库
|
|
||||||
taskInfoMapper.updateTaskInfo(entity);
|
|
||||||
// 查询更新后的实体
|
|
||||||
TaskInfoEntity updatedEntity = taskInfoMapper.selectTaskInfoById(task.getId());
|
|
||||||
// 转换回领域模型并返回
|
|
||||||
return TaskConvert.toModel(updatedEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteTask(Long taskId) {
|
|
||||||
// 删除数据库记录
|
|
||||||
int result = taskInfoMapper.deleteTaskInfoById(taskId);
|
|
||||||
// 返回删除结果
|
|
||||||
return result > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task getTaskById(Long taskId) {
|
|
||||||
// 查询数据库
|
|
||||||
TaskInfoEntity entity = taskInfoMapper.selectTaskInfoById(taskId);
|
|
||||||
// 转换为领域模型并返回
|
|
||||||
return TaskConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Task> getTaskList(Task task) {
|
|
||||||
// 转换为实体作为查询条件
|
|
||||||
TaskInfoEntity entity = TaskConvert.toEntity(task);
|
|
||||||
// 查询数据库
|
|
||||||
List<TaskInfoEntity> entityList = taskInfoMapper.selectTaskInfoList(entity);
|
|
||||||
// 转换为领域模型列表并返回
|
|
||||||
return entityList.stream()
|
|
||||||
.map(TaskConvert::toModel)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Task> getTaskByPlanId(Long planId) {
|
|
||||||
// 创建查询条件
|
|
||||||
TaskInfoEntity entity = new TaskInfoEntity();
|
|
||||||
entity.setPlanId(planId);
|
|
||||||
// 查询数据库
|
|
||||||
List<TaskInfoEntity> entityList = taskInfoMapper.selectTaskInfoList(entity);
|
|
||||||
// 转换为领域模型列表并返回
|
|
||||||
return entityList.stream()
|
|
||||||
.map(TaskConvert::toModel)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task getCurrentTaskByUavId(String uavId) {
|
|
||||||
TaskInfoEntity entity = taskInfoMapper.selectCurrentTaskByUavId(uavId);
|
|
||||||
return TaskConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,121 +0,0 @@
|
||||||
package com.ruoyi.task.domain.impl;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.domain.api.ITaskPlanDomain;
|
|
||||||
import com.ruoyi.task.domain.convert.TaskPlanConvert;
|
|
||||||
import com.ruoyi.task.domain.model.TaskPlan;
|
|
||||||
import com.ruoyi.task.mapper.TaskPlanMapper;
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskPlanEntity;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划领域实现类
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class TaskPlanDomainImpl implements ITaskPlanDomain {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TaskPlanMapper taskPlanMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskPlan createTimedTaskPlan(TaskPlan taskPlan) {
|
|
||||||
// 设置计划类型为定时任务计划
|
|
||||||
taskPlan.setPlanType(PlanTypeEnum.TIMED);
|
|
||||||
// 转换为实体
|
|
||||||
TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
|
|
||||||
// 插入数据库
|
|
||||||
taskPlanMapper.insertTaskPlan(entity);
|
|
||||||
// 转换回领域模型并返回
|
|
||||||
return TaskPlanConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskPlan createCycleTaskPlan(TaskPlan taskPlan) {
|
|
||||||
// 设置计划类型为周期任务计划
|
|
||||||
taskPlan.setPlanType(PlanTypeEnum.CYCLE);
|
|
||||||
// 转换为实体
|
|
||||||
TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
|
|
||||||
// 插入数据库
|
|
||||||
taskPlanMapper.insertTaskPlan(entity);
|
|
||||||
// 转换回领域模型并返回
|
|
||||||
return TaskPlanConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskPlan updateTaskPlan(TaskPlan taskPlan) {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 转换为实体
|
|
||||||
TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
|
|
||||||
// 更新数据库
|
|
||||||
taskPlanMapper.updateTaskPlan(entity);
|
|
||||||
// 查询更新后的实体
|
|
||||||
TaskPlanEntity updatedEntity = taskPlanMapper.selectTaskPlanById(taskPlan.getId());
|
|
||||||
// 转换回领域模型并返回
|
|
||||||
return TaskPlanConvert.toModel(updatedEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteTaskPlan(Long planId) {
|
|
||||||
// 删除数据库记录
|
|
||||||
int result = taskPlanMapper.deleteTaskPlanById(planId);
|
|
||||||
// 返回删除结果
|
|
||||||
return result > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskPlan getTaskPlanById(Long planId) {
|
|
||||||
// 查询数据库
|
|
||||||
TaskPlanEntity entity = taskPlanMapper.selectTaskPlanById(planId);
|
|
||||||
// 转换为领域模型并返回
|
|
||||||
return TaskPlanConvert.toModel(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<TaskPlan> getTaskPlanList(TaskPlan taskPlan) {
|
|
||||||
// 转换为实体作为查询条件
|
|
||||||
TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
|
|
||||||
// 查询数据库
|
|
||||||
List<TaskPlanEntity> entityList = taskPlanMapper.selectTaskPlanList(entity);
|
|
||||||
// 转换为领域模型列表并返回
|
|
||||||
return entityList.stream()
|
|
||||||
.map(TaskPlanConvert::toModel)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<TaskPlan> getTaskPlanByType(String planType) {
|
|
||||||
// 创建查询条件
|
|
||||||
TaskPlanEntity entity = new TaskPlanEntity();
|
|
||||||
entity.setPlanType(planType);
|
|
||||||
// 查询数据库
|
|
||||||
List<TaskPlanEntity> entityList = taskPlanMapper.selectTaskPlanList(entity);
|
|
||||||
// 转换为领域模型列表并返回
|
|
||||||
return entityList.stream()
|
|
||||||
.map(TaskPlanConvert::toModel)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<TaskPlan> getTaskPlanByStatus(String status) {
|
|
||||||
// 创建查询条件
|
|
||||||
TaskPlanEntity entity = new TaskPlanEntity();
|
|
||||||
entity.setStatus(status);
|
|
||||||
// 查询数据库
|
|
||||||
List<TaskPlanEntity> entityList = taskPlanMapper.selectTaskPlanList(entity);
|
|
||||||
// 转换为领域模型列表并返回
|
|
||||||
return entityList.stream()
|
|
||||||
.map(TaskPlanConvert::toModel)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,272 +0,0 @@
|
||||||
package com.ruoyi.task.domain.model;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务领域模型
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class Task {
|
|
||||||
|
|
||||||
/** 任务ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划ID(可为空,如一键起飞) */
|
|
||||||
private Long planId;
|
|
||||||
|
|
||||||
/** 任务名称 */
|
|
||||||
private String taskName;
|
|
||||||
|
|
||||||
/** 任务类别(如人工执飞) */
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型(如一键起飞) */
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 错误是否恢复
|
|
||||||
*/
|
|
||||||
private Boolean recovery ;
|
|
||||||
|
|
||||||
/** 开始时间 */
|
|
||||||
private Date startTime;
|
|
||||||
|
|
||||||
/** 结束时间 */
|
|
||||||
private Date endTime;
|
|
||||||
|
|
||||||
/** 实际开始时间 */
|
|
||||||
private Date actualStartTime;
|
|
||||||
|
|
||||||
/** 实际结束时间 */
|
|
||||||
private Date actualEndTime;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 创建者 */
|
|
||||||
private String createBy;
|
|
||||||
|
|
||||||
/** 创建时间 */
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
/** 更新者 */
|
|
||||||
private String updateBy;
|
|
||||||
|
|
||||||
/** 更新时间 */
|
|
||||||
private Date updateTime;
|
|
||||||
|
|
||||||
/** 备注 */
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getRecovery() {
|
|
||||||
return recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRecovery(Boolean recovery) {
|
|
||||||
this.recovery = recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCreateBy() {
|
|
||||||
return createBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreateBy(String createBy) {
|
|
||||||
this.createBy = createBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getCreateTime() {
|
|
||||||
return createTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreateTime(Date createTime) {
|
|
||||||
this.createTime = createTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUpdateBy() {
|
|
||||||
return updateBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpdateBy(String updateBy) {
|
|
||||||
this.updateBy = updateBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getUpdateTime() {
|
|
||||||
return updateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpdateTime(Date updateTime) {
|
|
||||||
this.updateTime = updateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemark() {
|
|
||||||
return remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemark(String remark) {
|
|
||||||
this.remark = remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Task{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planId=" + planId +
|
|
||||||
", taskName='" + taskName + '\'' +
|
|
||||||
", taskCategory=" + taskCategory +
|
|
||||||
", taskType=" + taskType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", startTime=" + startTime +
|
|
||||||
", endTime=" + endTime +
|
|
||||||
", actualStartTime=" + actualStartTime +
|
|
||||||
", actualEndTime=" + actualEndTime +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,274 +0,0 @@
|
||||||
package com.ruoyi.task.domain.model;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.CycleTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划领域模型
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class TaskPlan {
|
|
||||||
|
|
||||||
/** 计划ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划名称 */
|
|
||||||
private String planName;
|
|
||||||
|
|
||||||
/** 计划类型(定时任务计划、周期任务计划) */
|
|
||||||
private PlanTypeEnum planType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 周期类型(日周期、周周期、月周期) */
|
|
||||||
private CycleTypeEnum cycleType;
|
|
||||||
|
|
||||||
/** 周期值(周周期:1-7多选,如"1,3,5";月周期:1-31多选,如"1,15,30") */
|
|
||||||
private String cycleValue;
|
|
||||||
|
|
||||||
/** 开始日期 */
|
|
||||||
private Date startDate;
|
|
||||||
|
|
||||||
/** 结束日期 */
|
|
||||||
private Date endDate;
|
|
||||||
|
|
||||||
/** 执行时间 */
|
|
||||||
/**
|
|
||||||
* 对于周期任务
|
|
||||||
* - 数据格式 : Date 类型,包含完整的日期和时间信息
|
|
||||||
* - 使用逻辑 :
|
|
||||||
* - 从 executeTime 中提取时分秒部分
|
|
||||||
* - 将这些时分秒应用到当前周期任务的日期上
|
|
||||||
* - 生成一个新的 Date 对象作为任务的开始时间
|
|
||||||
* - 示例 :
|
|
||||||
* - 如果 executeTime 设置为 "2026-03-06 14:30:00"
|
|
||||||
* - 当生成 2026-03-10 的周期任务时,任务开始时间会是 "2026-03-10 14:30:00"
|
|
||||||
* - 当生成 2026-03-15 的周期任务时,任务开始时间会是 "2026-03-15 14:30:00"
|
|
||||||
*
|
|
||||||
* 对于定时任务
|
|
||||||
* executeTime 就是执行时间
|
|
||||||
/** 执行时间(仅在定义任务时有效) */
|
|
||||||
private Date executeTime;
|
|
||||||
|
|
||||||
/** 执行时长 秒 */
|
|
||||||
private Integer duration;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 创建者 */
|
|
||||||
private String createBy;
|
|
||||||
|
|
||||||
/** 创建时间 */
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
/** 更新者 */
|
|
||||||
private String updateBy;
|
|
||||||
|
|
||||||
/** 更新时间 */
|
|
||||||
private Date updateTime;
|
|
||||||
|
|
||||||
/** 备注 */
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlanName() {
|
|
||||||
return planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanName(String planName) {
|
|
||||||
this.planName = planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlanTypeEnum getPlanType() {
|
|
||||||
return planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanType(PlanTypeEnum planType) {
|
|
||||||
this.planType = planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CycleTypeEnum getCycleType() {
|
|
||||||
return cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleType(CycleTypeEnum cycleType) {
|
|
||||||
this.cycleType = cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCycleValue() {
|
|
||||||
return cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleValue(String cycleValue) {
|
|
||||||
this.cycleValue = cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDate() {
|
|
||||||
return startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDate(Date startDate) {
|
|
||||||
this.startDate = startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDate() {
|
|
||||||
return endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDate(Date endDate) {
|
|
||||||
this.endDate = endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getExecuteTime() {
|
|
||||||
return executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteTime(Date executeTime) {
|
|
||||||
this.executeTime = executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getDuration() {
|
|
||||||
return duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDuration(Integer duration) {
|
|
||||||
this.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCreateBy() {
|
|
||||||
return createBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreateBy(String createBy) {
|
|
||||||
this.createBy = createBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getCreateTime() {
|
|
||||||
return createTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreateTime(Date createTime) {
|
|
||||||
this.createTime = createTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUpdateBy() {
|
|
||||||
return updateBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpdateBy(String updateBy) {
|
|
||||||
this.updateBy = updateBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getUpdateTime() {
|
|
||||||
return updateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUpdateTime(Date updateTime) {
|
|
||||||
this.updateTime = updateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemark() {
|
|
||||||
return remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemark(String remark) {
|
|
||||||
this.remark = remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskPlan{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planName='" + planName + '\'' +
|
|
||||||
", planType=" + planType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", cycleType=" + cycleType +
|
|
||||||
", cycleValue='" + cycleValue + '\'' +
|
|
||||||
", startDate=" + startDate +
|
|
||||||
", endDate=" + endDate +
|
|
||||||
", executeTime=" + executeTime +
|
|
||||||
", duration=" + duration +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
package com.ruoyi.task.mapper;
|
|
||||||
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskInfoEntity;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务信息表Mapper接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public interface TaskInfoMapper {
|
|
||||||
/**
|
|
||||||
* 根据任务主键查询任务信息
|
|
||||||
*
|
|
||||||
* @param id 任务主键
|
|
||||||
* @return 任务信息
|
|
||||||
*/
|
|
||||||
TaskInfoEntity selectTaskInfoById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询任务信息列表
|
|
||||||
*
|
|
||||||
* @param taskInfo 任务信息
|
|
||||||
* @return 任务信息集合
|
|
||||||
*/
|
|
||||||
List<TaskInfoEntity> selectTaskInfoList(TaskInfoEntity taskInfo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增任务信息
|
|
||||||
*
|
|
||||||
* @param taskInfo 任务信息
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int insertTaskInfo(TaskInfoEntity taskInfo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改任务信息
|
|
||||||
*
|
|
||||||
* @param taskInfo 任务信息
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int updateTaskInfo(TaskInfoEntity taskInfo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务信息
|
|
||||||
*
|
|
||||||
* @param id 任务主键
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int deleteTaskInfoById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除任务信息
|
|
||||||
*
|
|
||||||
* @param ids 需要删除的任务主键集合
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int deleteTaskInfoByIds(Long[] ids);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询指定无人机 actualStartTime 离现在最近的任务
|
|
||||||
*
|
|
||||||
* @param uavId 无人机ID
|
|
||||||
* @return 任务信息
|
|
||||||
*/
|
|
||||||
TaskInfoEntity selectCurrentTaskByUavId(String uavId);
|
|
||||||
}
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
||||||
package com.ruoyi.task.mapper;
|
|
||||||
|
|
||||||
import com.ruoyi.task.mapper.entity.TaskPlanEntity;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划表Mapper接口
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public interface TaskPlanMapper {
|
|
||||||
/**
|
|
||||||
* 根据计划主键查询任务计划
|
|
||||||
*
|
|
||||||
* @param id 计划主键
|
|
||||||
* @return 任务计划信息
|
|
||||||
*/
|
|
||||||
TaskPlanEntity selectTaskPlanById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询任务计划列表
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划信息
|
|
||||||
* @return 任务计划集合
|
|
||||||
*/
|
|
||||||
List<TaskPlanEntity> selectTaskPlanList(TaskPlanEntity taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 新增任务计划
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划信息
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int insertTaskPlan(TaskPlanEntity taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改任务计划
|
|
||||||
*
|
|
||||||
* @param taskPlan 任务计划信息
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int updateTaskPlan(TaskPlanEntity taskPlan);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务计划
|
|
||||||
*
|
|
||||||
* @param id 计划主键
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int deleteTaskPlanById(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量删除任务计划
|
|
||||||
*
|
|
||||||
* @param ids 需要删除的计划主键集合
|
|
||||||
* @return 影响行数
|
|
||||||
*/
|
|
||||||
int deleteTaskPlanByIds(Long[] ids);
|
|
||||||
}
|
|
||||||
|
|
@ -1,213 +0,0 @@
|
||||||
package com.ruoyi.task.mapper.entity;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.web.domain.BaseEntity;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务信息表实体对象 task_info
|
|
||||||
* Mapper 层实体,对应数据库表
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class TaskInfoEntity extends BaseEntity {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 任务主键 */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 任务名称 */
|
|
||||||
private String taskName;
|
|
||||||
|
|
||||||
/** 任务类别 */
|
|
||||||
private String taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型 */
|
|
||||||
private String taskType;
|
|
||||||
|
|
||||||
/** 计划ID */
|
|
||||||
private Long planId;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 执行类型 */
|
|
||||||
private String executeType;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private String status;
|
|
||||||
|
|
||||||
/** 错误是否恢复 */
|
|
||||||
private Boolean recovery;
|
|
||||||
|
|
||||||
/** 开始时间 */
|
|
||||||
private Date startTime;
|
|
||||||
|
|
||||||
/** 结束时间 */
|
|
||||||
private Date endTime;
|
|
||||||
|
|
||||||
/** 实际开始时间 */
|
|
||||||
private Date actualStartTime;
|
|
||||||
|
|
||||||
/** 实际结束时间 */
|
|
||||||
private Date actualEndTime;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTaskName() {
|
|
||||||
return taskName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskName(String taskName) {
|
|
||||||
this.taskName = taskName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(String taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(String taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getPlanId() {
|
|
||||||
return planId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanId(Long planId) {
|
|
||||||
this.planId = planId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(String executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(String status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getRecovery() {
|
|
||||||
return recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRecovery(Boolean recovery) {
|
|
||||||
this.recovery = recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskInfoEntity{" +
|
|
||||||
"id=" + id +
|
|
||||||
", taskName='" + taskName + '\'' +
|
|
||||||
", taskCategory='" + taskCategory + '\'' +
|
|
||||||
", taskType='" + taskType + '\'' +
|
|
||||||
", planId=" + planId +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", executeType='" + executeType + '\'' +
|
|
||||||
", status='" + status + '\'' +
|
|
||||||
", startTime=" + startTime +
|
|
||||||
", endTime=" + endTime +
|
|
||||||
", actualStartTime=" + actualStartTime +
|
|
||||||
", actualEndTime=" + actualEndTime +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,202 +0,0 @@
|
||||||
package com.ruoyi.task.mapper.entity;
|
|
||||||
|
|
||||||
import com.ruoyi.common.core.web.domain.BaseEntity;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划表实体对象 task_plan
|
|
||||||
* Mapper 层实体,对应数据库表
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
public class TaskPlanEntity extends BaseEntity {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
/** 计划主键 */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划名称 */
|
|
||||||
private String planName;
|
|
||||||
|
|
||||||
/** 计划类型 */
|
|
||||||
private String planType;
|
|
||||||
|
|
||||||
/** 周期类型 */
|
|
||||||
private String cycleType;
|
|
||||||
|
|
||||||
/** 周期值 */
|
|
||||||
private String cycleValue;
|
|
||||||
|
|
||||||
/** 执行类型 */
|
|
||||||
private String executeType;
|
|
||||||
|
|
||||||
/** 执行时间 */
|
|
||||||
private Date executeTime;
|
|
||||||
|
|
||||||
/** 执行时长 秒 */
|
|
||||||
private Integer duration;
|
|
||||||
|
|
||||||
/** 开始日期 */
|
|
||||||
private Date startDate;
|
|
||||||
|
|
||||||
/** 结束日期 */
|
|
||||||
private Date endDate;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private String status;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlanName() {
|
|
||||||
return planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanName(String planName) {
|
|
||||||
this.planName = planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlanType() {
|
|
||||||
return planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanType(String planType) {
|
|
||||||
this.planType = planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCycleType() {
|
|
||||||
return cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleType(String cycleType) {
|
|
||||||
this.cycleType = cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCycleValue() {
|
|
||||||
return cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleValue(String cycleValue) {
|
|
||||||
this.cycleValue = cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(String executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getExecuteTime() {
|
|
||||||
return executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteTime(Date executeTime) {
|
|
||||||
this.executeTime = executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getDuration() {
|
|
||||||
return duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDuration(Integer duration) {
|
|
||||||
this.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDate() {
|
|
||||||
return startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDate(Date startDate) {
|
|
||||||
this.startDate = startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDate() {
|
|
||||||
return endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDate(Date endDate) {
|
|
||||||
this.endDate = endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(String status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskPlanEntity{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planName='" + planName + '\'' +
|
|
||||||
", planType='" + planType + '\'' +
|
|
||||||
", cycleType='" + cycleType + '\'' +
|
|
||||||
", cycleValue='" + cycleValue + '\'' +
|
|
||||||
", executeType='" + executeType + '\'' +
|
|
||||||
", executeTime=" + executeTime +
|
|
||||||
", duration=" + duration +
|
|
||||||
", startDate=" + startDate +
|
|
||||||
", endDate=" + endDate +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status='" + status + '\'' +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
package com.ruoyi.task.service.api;
|
|
||||||
|
|
||||||
import com.ruoyi.task.service.dto.TaskPlanDTO;
|
|
||||||
import com.ruoyi.task.service.dto.TaskPlanQueryDTO;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ITaskPlanService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建定时任务计划
|
|
||||||
* @param taskPlanDTO 任务计划DTO
|
|
||||||
* @return 任务计划ID
|
|
||||||
*/
|
|
||||||
Long createNormalTimedTaskPlan(TaskPlanDTO taskPlanDTO, boolean create);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建周期任务计划
|
|
||||||
* @param taskPlanDTO 任务计划DTO
|
|
||||||
* @return 任务计划ID
|
|
||||||
*/
|
|
||||||
Long createCycleTaskPlan(TaskPlanDTO taskPlanDTO,boolean create);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID获取任务计划
|
|
||||||
* @param planId 任务计划ID
|
|
||||||
* @return 任务计划DTO
|
|
||||||
*/
|
|
||||||
TaskPlanDTO getTaskPlanById(Long planId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 复杂条件查询任务计划列表
|
|
||||||
* @param queryDTO 查询条件DTO
|
|
||||||
* @return 任务计划列表
|
|
||||||
*/
|
|
||||||
List<TaskPlanDTO> getTaskPlanList(TaskPlanQueryDTO queryDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务计划
|
|
||||||
* @param taskPlanDTO 任务计划DTO
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
boolean updateTaskPlan(TaskPlanDTO taskPlanDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务计划
|
|
||||||
* @param planId 任务计划ID
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
boolean deleteTaskPlan(Long planId);
|
|
||||||
}
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
package com.ruoyi.task.service.api;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.service.dto.TaskDTO;
|
|
||||||
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 java.util.List;
|
|
||||||
|
|
||||||
public interface ITaskService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建无关联计划的任务
|
|
||||||
* @param taskDTO 任务DTO
|
|
||||||
* @return 任务ID
|
|
||||||
*/
|
|
||||||
Long createTaskWithoutPlan(TaskDTO taskDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据ID获取任务
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 任务DTO
|
|
||||||
*/
|
|
||||||
TaskDTO getTaskById(Long taskId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 复杂条件查询任务列表
|
|
||||||
* @param queryDTO 查询条件DTO
|
|
||||||
* @return 任务列表
|
|
||||||
*/
|
|
||||||
List<TaskDTO> getTaskList(TaskQueryDTO queryDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新任务
|
|
||||||
* @param taskDTO 任务DTO
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
boolean updateTask(TaskDTO taskDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除任务
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
boolean deleteTask(Long taskId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据无人机ID查询任务列表
|
|
||||||
* @param uavId 无人机ID
|
|
||||||
* @return 任务列表
|
|
||||||
*/
|
|
||||||
List<TaskDTO> getTaskByUavId(String uavId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据无人机ID获取最新的一条任务
|
|
||||||
* @param uavId 无人机ID
|
|
||||||
* @return 任务DTO
|
|
||||||
*/
|
|
||||||
TaskDTO getCurrentTaskByUavId(String uavId);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 修改实际开始执行时间
|
|
||||||
// * @param taskId 任务ID
|
|
||||||
// * @return 是否成功
|
|
||||||
// */
|
|
||||||
// boolean updateActualStartTime(Long taskId);
|
|
||||||
//
|
|
||||||
// /**
|
|
||||||
// * 修改实际执行结束时间
|
|
||||||
// * @param taskId 任务ID
|
|
||||||
// * @return 是否成功
|
|
||||||
// */
|
|
||||||
// boolean updateActualEndTime(Long taskId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改执行状态
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @param status 任务状态
|
|
||||||
* @return 是否成功
|
|
||||||
*/
|
|
||||||
boolean updateTaskStatus(Long taskId, StatusEnum status);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年统计任务
|
|
||||||
* @param queryDTO 查询条件
|
|
||||||
* @return 按年统计结果
|
|
||||||
*/
|
|
||||||
TaskStatByYearServiceDTO getTaskStatByYear(TaskStatQueryServiceDTO queryDTO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年月统计任务
|
|
||||||
* @param queryDTO 查询条件
|
|
||||||
* @return 按年月统计结果
|
|
||||||
*/
|
|
||||||
TaskStatByMonthServiceDTO getTaskStatByMonth(TaskStatQueryServiceDTO queryDTO);
|
|
||||||
}
|
|
||||||
|
|
@ -1,77 +0,0 @@
|
||||||
package com.ruoyi.task.service.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.domain.model.Task;
|
|
||||||
import com.ruoyi.task.service.dto.TaskDTO;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class TaskDTOConvert {
|
|
||||||
|
|
||||||
public static TaskDTO toDTO(Task task) {
|
|
||||||
if (task == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskDTO dto = new TaskDTO();
|
|
||||||
dto.setId(task.getId());
|
|
||||||
dto.setPlanId(task.getPlanId());
|
|
||||||
dto.setTaskName(task.getTaskName());
|
|
||||||
dto.setTaskCategory(task.getTaskCategory());
|
|
||||||
dto.setTaskType(task.getTaskType());
|
|
||||||
dto.setExecuteType(task.getExecuteType());
|
|
||||||
dto.setRouteId(task.getRouteId());
|
|
||||||
dto.setUavId(task.getUavId());
|
|
||||||
dto.setStatus(task.getStatus());
|
|
||||||
dto.setStartTime(task.getStartTime());
|
|
||||||
dto.setEndTime(task.getEndTime());
|
|
||||||
dto.setActualStartTime(task.getActualStartTime());
|
|
||||||
dto.setActualEndTime(task.getActualEndTime());
|
|
||||||
dto.setDescription(task.getDescription());
|
|
||||||
dto.setRemark(task.getRemark());
|
|
||||||
dto.setRouteUrl(task.getRouteUrl());
|
|
||||||
dto.setRecovery(task.getRecovery());
|
|
||||||
|
|
||||||
return dto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Task toDomain(TaskDTO dto) {
|
|
||||||
if (dto == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Task task = new Task();
|
|
||||||
task.setId(dto.getId());
|
|
||||||
task.setPlanId(dto.getPlanId());
|
|
||||||
task.setTaskName(dto.getTaskName());
|
|
||||||
task.setTaskCategory(dto.getTaskCategory());
|
|
||||||
task.setTaskType(dto.getTaskType());
|
|
||||||
task.setExecuteType(dto.getExecuteType());
|
|
||||||
task.setRouteId(dto.getRouteId());
|
|
||||||
task.setUavId(dto.getUavId());
|
|
||||||
task.setStatus(dto.getStatus());
|
|
||||||
task.setStartTime(dto.getStartTime());
|
|
||||||
task.setEndTime(dto.getEndTime());
|
|
||||||
task.setActualStartTime(dto.getActualStartTime());
|
|
||||||
task.setActualEndTime(dto.getActualEndTime());
|
|
||||||
task.setDescription(dto.getDescription());
|
|
||||||
task.setRemark(dto.getRemark());
|
|
||||||
task.setRouteUrl(dto.getRouteUrl());
|
|
||||||
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<TaskDTO> toDTOList(List<Task> tasks) {
|
|
||||||
return tasks.stream()
|
|
||||||
.map(TaskDTOConvert::toDTO)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Task> toDomainList(List<TaskDTO> dtos) {
|
|
||||||
return dtos.stream()
|
|
||||||
.map(TaskDTOConvert::toDomain)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
package com.ruoyi.task.service.convert;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.CycleTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.domain.model.TaskPlan;
|
|
||||||
import com.ruoyi.task.service.dto.TaskPlanDTO;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class TaskPlanDTOConvert {
|
|
||||||
|
|
||||||
public static TaskPlanDTO toDTO(TaskPlan taskPlan) {
|
|
||||||
if (taskPlan == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskPlanDTO dto = new TaskPlanDTO();
|
|
||||||
dto.setId(taskPlan.getId());
|
|
||||||
dto.setPlanName(taskPlan.getPlanName());
|
|
||||||
dto.setPlanType(taskPlan.getPlanType());
|
|
||||||
dto.setExecuteType(taskPlan.getExecuteType());
|
|
||||||
dto.setCycleType(taskPlan.getCycleType());
|
|
||||||
dto.setCycleValue(taskPlan.getCycleValue());
|
|
||||||
dto.setStartDate(taskPlan.getStartDate());
|
|
||||||
dto.setEndDate(taskPlan.getEndDate());
|
|
||||||
dto.setExecuteTime(taskPlan.getExecuteTime());
|
|
||||||
dto.setDuration(taskPlan.getDuration());
|
|
||||||
dto.setRouteId(taskPlan.getRouteId());
|
|
||||||
dto.setUavId(taskPlan.getUavId());
|
|
||||||
dto.setStatus(taskPlan.getStatus());
|
|
||||||
dto.setDescription(taskPlan.getDescription());
|
|
||||||
dto.setRemark(taskPlan.getRemark());
|
|
||||||
dto.setRouteUrl(taskPlan.getRouteUrl());
|
|
||||||
|
|
||||||
return dto;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TaskPlan toDomain(TaskPlanDTO dto) {
|
|
||||||
if (dto == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskPlan taskPlan = new TaskPlan();
|
|
||||||
taskPlan.setId(dto.getId());
|
|
||||||
taskPlan.setPlanName(dto.getPlanName());
|
|
||||||
taskPlan.setPlanType(dto.getPlanType());
|
|
||||||
taskPlan.setExecuteType(dto.getExecuteType());
|
|
||||||
taskPlan.setCycleType(dto.getCycleType());
|
|
||||||
taskPlan.setCycleValue(dto.getCycleValue());
|
|
||||||
taskPlan.setStartDate(dto.getStartDate());
|
|
||||||
taskPlan.setEndDate(dto.getEndDate());
|
|
||||||
taskPlan.setExecuteTime(dto.getExecuteTime());
|
|
||||||
taskPlan.setDuration(dto.getDuration());
|
|
||||||
taskPlan.setRouteId(dto.getRouteId());
|
|
||||||
taskPlan.setUavId(dto.getUavId());
|
|
||||||
taskPlan.setStatus(dto.getStatus());
|
|
||||||
taskPlan.setDescription(dto.getDescription());
|
|
||||||
taskPlan.setRemark(dto.getRemark());
|
|
||||||
taskPlan.setRouteUrl(dto.getRouteUrl());
|
|
||||||
|
|
||||||
return taskPlan;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<TaskPlanDTO> toDTOList(List<TaskPlan> taskPlans) {
|
|
||||||
return taskPlans.stream()
|
|
||||||
.map(TaskPlanDTOConvert::toDTO)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<TaskPlan> toDomainList(List<TaskPlanDTO> dtos) {
|
|
||||||
return dtos.stream()
|
|
||||||
.map(TaskPlanDTOConvert::toDomain)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,228 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
|
||||||
import org.apache.ibatis.type.Alias;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务数据传输对象
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Alias("TaskServiceDTO")
|
|
||||||
public class TaskDTO {
|
|
||||||
|
|
||||||
/** 任务ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划ID(可为空,如一键起飞) */
|
|
||||||
private Long planId;
|
|
||||||
|
|
||||||
/** 任务名称 */
|
|
||||||
private String taskName;
|
|
||||||
|
|
||||||
/** 任务类别(如人工执飞) */
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型(如一键起飞) */
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/** 错误是否恢复 */
|
|
||||||
private Boolean recovery;
|
|
||||||
|
|
||||||
/** 开始时间 */
|
|
||||||
private Date startTime;
|
|
||||||
|
|
||||||
/** 结束时间 */
|
|
||||||
private Date endTime;
|
|
||||||
|
|
||||||
/** 实际开始时间 */
|
|
||||||
private Date actualStartTime;
|
|
||||||
|
|
||||||
/** 实际结束时间 */
|
|
||||||
private Date actualEndTime;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 备注 */
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getRecovery() {
|
|
||||||
return recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRecovery(Boolean recovery) {
|
|
||||||
this.recovery = recovery;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemark() {
|
|
||||||
return remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemark(String remark) {
|
|
||||||
this.remark = remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskDTO{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planId=" + planId +
|
|
||||||
", taskName='" + taskName + '\'' +
|
|
||||||
", taskCategory=" + taskCategory +
|
|
||||||
", taskType=" + taskType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", startTime=" + startTime +
|
|
||||||
", endTime=" + endTime +
|
|
||||||
", actualStartTime=" + actualStartTime +
|
|
||||||
", actualEndTime=" + actualEndTime +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,219 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.CycleTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import org.apache.ibatis.type.Alias;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划数据传输对象
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Alias("TaskPlanServiceDTO")
|
|
||||||
public class TaskPlanDTO {
|
|
||||||
|
|
||||||
/** 计划ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划名称 */
|
|
||||||
private String planName;
|
|
||||||
|
|
||||||
/** 计划类型(定时任务计划、周期任务计划) */
|
|
||||||
private PlanTypeEnum planType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 周期类型(日周期、周周期、月周期) */
|
|
||||||
private CycleTypeEnum cycleType;
|
|
||||||
|
|
||||||
/** 周期值(周周期:1-7多选,如"1,3,5";月周期:1-31多选,如"1,15,30") */
|
|
||||||
private String cycleValue;
|
|
||||||
|
|
||||||
/** 开始日期 */
|
|
||||||
private Date startDate;
|
|
||||||
|
|
||||||
/** 结束日期 */
|
|
||||||
private Date endDate;
|
|
||||||
|
|
||||||
/** 执行时间(仅在定义任务时有效) */
|
|
||||||
private Date executeTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 执行时长 秒
|
|
||||||
*/
|
|
||||||
private Integer duration;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态 */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/** 描述 */
|
|
||||||
private String description;
|
|
||||||
|
|
||||||
/** 备注 */
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
/** 航线文件URL */
|
|
||||||
private String routeUrl;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlanName() {
|
|
||||||
return planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanName(String planName) {
|
|
||||||
this.planName = planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlanTypeEnum getPlanType() {
|
|
||||||
return planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanType(PlanTypeEnum planType) {
|
|
||||||
this.planType = planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CycleTypeEnum getCycleType() {
|
|
||||||
return cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleType(CycleTypeEnum cycleType) {
|
|
||||||
this.cycleType = cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCycleValue() {
|
|
||||||
return cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleValue(String cycleValue) {
|
|
||||||
this.cycleValue = cycleValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDate() {
|
|
||||||
return startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDate(Date startDate) {
|
|
||||||
this.startDate = startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDate() {
|
|
||||||
return endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDate(Date endDate) {
|
|
||||||
this.endDate = endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getExecuteTime() {
|
|
||||||
return executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteTime(Date executeTime) {
|
|
||||||
this.executeTime = executeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getDuration() {
|
|
||||||
return duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDuration(Integer duration) {
|
|
||||||
this.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDescription(String description) {
|
|
||||||
this.description = description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRemark() {
|
|
||||||
return remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRemark(String remark) {
|
|
||||||
this.remark = remark;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteUrl() {
|
|
||||||
return routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteUrl(String routeUrl) {
|
|
||||||
this.routeUrl = routeUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskPlanDTO{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planName='" + planName + '\'' +
|
|
||||||
", planType=" + planType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", cycleType=" + cycleType +
|
|
||||||
", cycleValue='" + cycleValue + '\'' +
|
|
||||||
", startDate=" + startDate +
|
|
||||||
", endDate=" + endDate +
|
|
||||||
", executeTime=" + executeTime +
|
|
||||||
", duration=" + duration +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", description='" + description + '\'' +
|
|
||||||
", routeUrl='" + routeUrl + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,214 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.*;
|
|
||||||
import org.apache.ibatis.type.Alias;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务计划查询条件数据传输对象
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Alias("TaskPlanQueryServiceDTO")
|
|
||||||
public class TaskPlanQueryDTO {
|
|
||||||
|
|
||||||
/** 计划ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划名称 */
|
|
||||||
private String planName;
|
|
||||||
|
|
||||||
/** 计划类型(定时任务计划、周期任务计划) */
|
|
||||||
private PlanTypeEnum planType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 周期类型(日周期、周周期、月周期) */
|
|
||||||
private CycleTypeEnum cycleType;
|
|
||||||
|
|
||||||
/** 开始日期(开始范围) */
|
|
||||||
private Date startDateStart;
|
|
||||||
|
|
||||||
/** 开始日期(结束范围) */
|
|
||||||
private Date startDateEnd;
|
|
||||||
|
|
||||||
/** 结束日期(开始范围) */
|
|
||||||
private Date endDateStart;
|
|
||||||
|
|
||||||
/** 结束日期(结束范围) */
|
|
||||||
private Date endDateEnd;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态(0待执行 1执行中 2已完成 3已取消) */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/** 任务类别 */
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型 */
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
|
|
||||||
/** 机场代码 */
|
|
||||||
private String airportCode;
|
|
||||||
|
|
||||||
/** 航线名称 */
|
|
||||||
private String routeName;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlanName() {
|
|
||||||
return planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanName(String planName) {
|
|
||||||
this.planName = planName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlanTypeEnum getPlanType() {
|
|
||||||
return planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanType(PlanTypeEnum planType) {
|
|
||||||
this.planType = planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CycleTypeEnum getCycleType() {
|
|
||||||
return cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleType(CycleTypeEnum cycleType) {
|
|
||||||
this.cycleType = cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDateStart() {
|
|
||||||
return startDateStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDateStart(Date startDateStart) {
|
|
||||||
this.startDateStart = startDateStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDateEnd() {
|
|
||||||
return startDateEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDateEnd(Date startDateEnd) {
|
|
||||||
this.startDateEnd = startDateEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDateStart() {
|
|
||||||
return endDateStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDateStart(Date endDateStart) {
|
|
||||||
this.endDateStart = endDateStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDateEnd() {
|
|
||||||
return endDateEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDateEnd(Date endDateEnd) {
|
|
||||||
this.endDateEnd = endDateEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAirportCode() {
|
|
||||||
return airportCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAirportCode(String airportCode) {
|
|
||||||
this.airportCode = airportCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteName() {
|
|
||||||
return routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteName(String routeName) {
|
|
||||||
this.routeName = routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskPlanQueryDTO{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planName='" + planName + '\'' +
|
|
||||||
", planType=" + planType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", cycleType=" + cycleType +
|
|
||||||
", startDateStart=" + startDateStart +
|
|
||||||
", startDateEnd=" + startDateEnd +
|
|
||||||
", endDateStart=" + endDateStart +
|
|
||||||
", endDateEnd=" + endDateEnd +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", taskCategory=" + taskCategory +
|
|
||||||
", taskType=" + taskType +
|
|
||||||
", airportCode='" + airportCode + '\'' +
|
|
||||||
", routeName='" + routeName + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,202 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.*;
|
|
||||||
import org.apache.ibatis.type.Alias;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务查询条件数据传输对象
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-05
|
|
||||||
*/
|
|
||||||
@Alias("TaskQueryServiceDTO")
|
|
||||||
public class TaskQueryDTO {
|
|
||||||
|
|
||||||
/** 任务ID */
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
/** 计划ID(可为空,如一键起飞) */
|
|
||||||
private Long planId;
|
|
||||||
|
|
||||||
/** 任务名称 */
|
|
||||||
private String taskName;
|
|
||||||
|
|
||||||
/** 任务类别(如人工执飞) */
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型(如一键起飞) */
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
|
|
||||||
/** 执行类型(单次执行、连续执行) */
|
|
||||||
private ExecuteTypeEnum executeType;
|
|
||||||
|
|
||||||
/** 航线ID */
|
|
||||||
private Long routeId;
|
|
||||||
|
|
||||||
/** 无人机ID */
|
|
||||||
private String uavId;
|
|
||||||
|
|
||||||
/** 状态(0待执行 1执行中 2已完成 3已取消) */
|
|
||||||
private StatusEnum status;
|
|
||||||
|
|
||||||
/** 开始时间(开始范围) */
|
|
||||||
private Date startTimeStart;
|
|
||||||
|
|
||||||
/** 开始时间(结束范围) */
|
|
||||||
private Date startTimeEnd;
|
|
||||||
|
|
||||||
/** 结束时间(开始范围) */
|
|
||||||
private Date endTimeStart;
|
|
||||||
|
|
||||||
/** 结束时间(结束范围) */
|
|
||||||
private Date endTimeEnd;
|
|
||||||
|
|
||||||
/** 机场代码 */
|
|
||||||
private String airportCode;
|
|
||||||
|
|
||||||
/** 航线名称 */
|
|
||||||
private String routeName;
|
|
||||||
|
|
||||||
// Getters and Setters
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExecuteTypeEnum getExecuteType() {
|
|
||||||
return executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setExecuteType(ExecuteTypeEnum executeType) {
|
|
||||||
this.executeType = executeType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getRouteId() {
|
|
||||||
return routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteId(Long routeId) {
|
|
||||||
this.routeId = routeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUavId() {
|
|
||||||
return uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavId(String uavId) {
|
|
||||||
this.uavId = uavId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(StatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartTimeStart() {
|
|
||||||
return startTimeStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartTimeStart(Date startTimeStart) {
|
|
||||||
this.startTimeStart = startTimeStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartTimeEnd() {
|
|
||||||
return startTimeEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartTimeEnd(Date startTimeEnd) {
|
|
||||||
this.startTimeEnd = startTimeEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndTimeStart() {
|
|
||||||
return endTimeStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndTimeStart(Date endTimeStart) {
|
|
||||||
this.endTimeStart = endTimeStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndTimeEnd() {
|
|
||||||
return endTimeEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndTimeEnd(Date endTimeEnd) {
|
|
||||||
this.endTimeEnd = endTimeEnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAirportCode() {
|
|
||||||
return airportCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAirportCode(String airportCode) {
|
|
||||||
this.airportCode = airportCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteName() {
|
|
||||||
return routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteName(String routeName) {
|
|
||||||
this.routeName = routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskQueryDTO{" +
|
|
||||||
"id=" + id +
|
|
||||||
", planId=" + planId +
|
|
||||||
", taskName='" + taskName + '\'' +
|
|
||||||
", taskCategory=" + taskCategory +
|
|
||||||
", taskType=" + taskType +
|
|
||||||
", executeType=" + executeType +
|
|
||||||
", routeId=" + routeId +
|
|
||||||
", uavId=" + uavId +
|
|
||||||
", status=" + status +
|
|
||||||
", startTimeStart=" + startTimeStart +
|
|
||||||
", startTimeEnd=" + startTimeEnd +
|
|
||||||
", endTimeStart=" + endTimeStart +
|
|
||||||
", endTimeEnd=" + endTimeEnd +
|
|
||||||
", airportCode='" + airportCode + '\'' +
|
|
||||||
", routeName='" + routeName + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年月统计任务DTO
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskStatByMonthServiceDTO {
|
|
||||||
|
|
||||||
/** 总数 */
|
|
||||||
private Integer total;
|
|
||||||
|
|
||||||
/** 每日任务列表 key:日期(1-31) value:任务列表 */
|
|
||||||
private Map<Integer, List<TaskStatItemServiceDTO>> days;
|
|
||||||
|
|
||||||
public Integer getTotal() {
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTotal(Integer total) {
|
|
||||||
this.total = total;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Integer, List<TaskStatItemServiceDTO>> getDays() {
|
|
||||||
return days;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDays(Map<Integer, List<TaskStatItemServiceDTO>> days) {
|
|
||||||
this.days = days;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按年统计任务DTO
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskStatByYearServiceDTO {
|
|
||||||
|
|
||||||
/** 总数 */
|
|
||||||
private Integer total;
|
|
||||||
|
|
||||||
/** 每月统计 key:月份(1-12) value:任务数量 */
|
|
||||||
private Map<Integer, Integer> months;
|
|
||||||
|
|
||||||
public Integer getTotal() {
|
|
||||||
return total;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTotal(Integer total) {
|
|
||||||
this.total = total;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Integer, Integer> getMonths() {
|
|
||||||
return months;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMonths(Map<Integer, Integer> months) {
|
|
||||||
this.months = months;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,208 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.CycleTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.PlanTypeEnum;
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
|
||||||
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 PlanTypeEnum planType;
|
|
||||||
private CycleTypeEnum cycleType;
|
|
||||||
private Date planStartDate;
|
|
||||||
private Date planEndDate;
|
|
||||||
private String routeName;
|
|
||||||
private String airVendor;
|
|
||||||
private String airType;
|
|
||||||
|
|
||||||
public String getAirType() {
|
|
||||||
return airType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAirType(String airType) {
|
|
||||||
this.airType = airType;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Date startTime;
|
|
||||||
private Date endTime;
|
|
||||||
private Date actualStartTime;
|
|
||||||
private Date actualEndTime;
|
|
||||||
private StatusEnum status;
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
private String airlineType;
|
|
||||||
private Date taskCreateTime;
|
|
||||||
private String taskCreateBy;
|
|
||||||
|
|
||||||
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 PlanTypeEnum getPlanType() {
|
|
||||||
return planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanType(PlanTypeEnum planType) {
|
|
||||||
this.planType = planType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CycleTypeEnum getCycleType() {
|
|
||||||
return cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCycleType(CycleTypeEnum cycleType) {
|
|
||||||
this.cycleType = cycleType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getPlanStartDate() {
|
|
||||||
return planStartDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanStartDate(Date planStartDate) {
|
|
||||||
this.planStartDate = planStartDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getPlanEndDate() {
|
|
||||||
return planEndDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlanEndDate(Date planEndDate) {
|
|
||||||
this.planEndDate = planEndDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRouteName() {
|
|
||||||
return routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteName(String routeName) {
|
|
||||||
this.routeName = routeName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAirVendor() {
|
|
||||||
return airVendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAirVendor(String airVendor) {
|
|
||||||
this.airVendor = airVendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAirlineType() {
|
|
||||||
return airlineType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAirlineType(String airlineType) {
|
|
||||||
this.airlineType = airlineType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getTaskCreateTime() {
|
|
||||||
return taskCreateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCreateTime(Date taskCreateTime) {
|
|
||||||
this.taskCreateTime = taskCreateTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTaskCreateBy() {
|
|
||||||
return taskCreateBy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCreateBy(String taskCreateBy) {
|
|
||||||
this.taskCreateBy = taskCreateBy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
||||||
package com.ruoyi.task.service.dto;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.StatusEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskCategoryEnum;
|
|
||||||
import com.ruoyi.task.api.enums.TaskTypeEnum;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 任务统计查询DTO
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
* @date 2026-03-09
|
|
||||||
*/
|
|
||||||
public class TaskStatQueryServiceDTO {
|
|
||||||
|
|
||||||
/** 年份 */
|
|
||||||
private Integer year;
|
|
||||||
|
|
||||||
/** 月份 */
|
|
||||||
private Integer month;
|
|
||||||
|
|
||||||
/** 开始日期 */
|
|
||||||
private Date startDate;
|
|
||||||
|
|
||||||
/** 结束日期 */
|
|
||||||
private Date endDate;
|
|
||||||
|
|
||||||
/** 任务类别 */
|
|
||||||
private TaskCategoryEnum taskCategory;
|
|
||||||
|
|
||||||
/** 任务类型 */
|
|
||||||
private TaskTypeEnum taskType;
|
|
||||||
|
|
||||||
/** 状态列表 */
|
|
||||||
private List<StatusEnum> statusList;
|
|
||||||
|
|
||||||
/** 航线ID列表 */
|
|
||||||
private List<Long> routeIdList;
|
|
||||||
|
|
||||||
/** 无人机ID列表 */
|
|
||||||
private List<String> uavIdList;
|
|
||||||
|
|
||||||
public Integer getYear() {
|
|
||||||
return year;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setYear(Integer year) {
|
|
||||||
this.year = year;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getMonth() {
|
|
||||||
return month;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMonth(Integer month) {
|
|
||||||
this.month = month;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getStartDate() {
|
|
||||||
return startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStartDate(Date startDate) {
|
|
||||||
this.startDate = startDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getEndDate() {
|
|
||||||
return endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndDate(Date endDate) {
|
|
||||||
this.endDate = endDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskCategoryEnum getTaskCategory() {
|
|
||||||
return taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskCategory(TaskCategoryEnum taskCategory) {
|
|
||||||
this.taskCategory = taskCategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskTypeEnum getTaskType() {
|
|
||||||
return taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskType(TaskTypeEnum taskType) {
|
|
||||||
this.taskType = taskType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StatusEnum> getStatusList() {
|
|
||||||
return statusList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatusList(List<StatusEnum> statusList) {
|
|
||||||
this.statusList = statusList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Long> getRouteIdList() {
|
|
||||||
return routeIdList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRouteIdList(List<Long> routeIdList) {
|
|
||||||
this.routeIdList = routeIdList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getUavIdList() {
|
|
||||||
return uavIdList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUavIdList(List<String> uavIdList) {
|
|
||||||
this.uavIdList = uavIdList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,355 +0,0 @@
|
||||||
package com.ruoyi.task.service.impl;
|
|
||||||
|
|
||||||
import com.ruoyi.task.api.enums.*;
|
|
||||||
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.ITaskPlanService;
|
|
||||||
import com.ruoyi.task.service.convert.TaskPlanDTOConvert;
|
|
||||||
import com.ruoyi.task.service.dto.TaskPlanDTO;
|
|
||||||
import com.ruoyi.task.service.dto.TaskPlanQueryDTO;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class TaskPlanServiceImpl implements ITaskPlanService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ITaskPlanDomain taskPlanDomain;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ITaskDomain taskDomain;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long createNormalTimedTaskPlan(TaskPlanDTO taskPlanDTO, boolean create) {
|
|
||||||
TaskPlan taskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
|
||||||
|
|
||||||
// 校验PlanTypeEnum
|
|
||||||
if (taskPlan.getPlanType() != null && taskPlan.getPlanType() == PlanTypeEnum.CYCLE) {
|
|
||||||
throw new IllegalArgumentException("定时任务计划不能设置为周期类型");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置结束时间:开始时间 + 执行时长
|
|
||||||
if (taskPlan.getExecuteTime() != null && taskPlan.getDuration() != null) {
|
|
||||||
taskPlan.setStartDate(taskPlan.getExecuteTime());
|
|
||||||
taskPlan.setEndDate(taskPlan.getExecuteTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(create){
|
|
||||||
TaskPlan result = taskPlanDomain.createTimedTaskPlan(taskPlan);
|
|
||||||
// 创建对应的任务记录
|
|
||||||
createNormalTaskFromPlan(result);
|
|
||||||
return result.getId();
|
|
||||||
}else {
|
|
||||||
taskPlanDomain.updateTaskPlan(taskPlan);
|
|
||||||
createNormalTaskFromPlan(taskPlan);
|
|
||||||
return taskPlan.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long createCycleTaskPlan(TaskPlanDTO taskPlanDTO,boolean create) {
|
|
||||||
TaskPlan taskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
|
||||||
|
|
||||||
// 校验PlanTypeEnum
|
|
||||||
if (taskPlan.getPlanType() != null && taskPlan.getPlanType() == PlanTypeEnum.TIMED) {
|
|
||||||
throw new IllegalArgumentException("周期任务计划不能设置为定时类型");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果PlanTypeEnum为空,设置为周期类型
|
|
||||||
if (taskPlan.getPlanType() == null) {
|
|
||||||
taskPlan.setPlanType(PlanTypeEnum.CYCLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(create){
|
|
||||||
TaskPlan result = taskPlanDomain.createCycleTaskPlan(taskPlan);
|
|
||||||
// 创建对应的任务记录
|
|
||||||
createNormalTaskFromPlan(result);
|
|
||||||
return result.getId();
|
|
||||||
}else {
|
|
||||||
taskPlanDomain.updateTaskPlan(taskPlan);
|
|
||||||
createNormalTaskFromPlan(taskPlan);
|
|
||||||
return taskPlan.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据任务计划创建任务记录
|
|
||||||
*/
|
|
||||||
private void createNormalTaskFromPlan(TaskPlan taskPlan) {
|
|
||||||
// 检查是否为周期任务计划
|
|
||||||
if (taskPlan.getPlanType() == PlanTypeEnum.CYCLE) {
|
|
||||||
// 生成周期任务记录
|
|
||||||
generateNormalCycleTasks(taskPlan);
|
|
||||||
} else {
|
|
||||||
// 生成单次任务记录
|
|
||||||
generateNormalPlanTask(taskPlan);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成单次任务记录
|
|
||||||
*/
|
|
||||||
private void generateNormalPlanTask(TaskPlan taskPlan) {
|
|
||||||
Task task = new Task();
|
|
||||||
task.setTaskName(taskPlan.getPlanName() + "_任务");
|
|
||||||
task.setPlanId(taskPlan.getId());
|
|
||||||
task.setTaskCategory(TaskCategoryEnum.NORMAL);
|
|
||||||
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.TIMED)){
|
|
||||||
task.setTaskType(TaskTypeEnum.TIMED);
|
|
||||||
}
|
|
||||||
if (Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.CYCLE)) {
|
|
||||||
task.setTaskType(TaskTypeEnum.CYCLE);
|
|
||||||
}
|
|
||||||
if (Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.IMMEDIATELY)) {
|
|
||||||
task.setTaskType(TaskTypeEnum.IMMEDIATELY);
|
|
||||||
}
|
|
||||||
|
|
||||||
task.setExecuteType(taskPlan.getExecuteType());
|
|
||||||
task.setRouteId(taskPlan.getRouteId());
|
|
||||||
task.setUavId(taskPlan.getUavId());
|
|
||||||
task.setStartTime(taskPlan.getExecuteTime());
|
|
||||||
|
|
||||||
// 设置结束时间:开始时间 + 执行时长
|
|
||||||
if (taskPlan.getExecuteTime() != null && taskPlan.getDuration() != null) {
|
|
||||||
java.util.Calendar endTaskCalendar = java.util.Calendar.getInstance();
|
|
||||||
endTaskCalendar.setTime(taskPlan.getExecuteTime());
|
|
||||||
endTaskCalendar.add(java.util.Calendar.SECOND, taskPlan.getDuration());
|
|
||||||
task.setEndTime(endTaskCalendar.getTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
task.setStatus(StatusEnum.PENDING); // 待执行
|
|
||||||
task.setDescription("由任务计划自动创建");
|
|
||||||
|
|
||||||
// 创建任务
|
|
||||||
taskDomain.createTask(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成周期任务记录
|
|
||||||
*/
|
|
||||||
private void generateNormalCycleTasks(TaskPlan taskPlan) {
|
|
||||||
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
|
||||||
calendar.setTime(taskPlan.getStartDate());
|
|
||||||
|
|
||||||
java.util.Calendar endCalendar = java.util.Calendar.getInstance();
|
|
||||||
endCalendar.setTime(taskPlan.getEndDate());
|
|
||||||
|
|
||||||
if (taskPlan.getCycleType() == CycleTypeEnum.DAILY) {
|
|
||||||
// 日周期:cycleValue 表示每几天执行一次
|
|
||||||
int dayInterval = 1;
|
|
||||||
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
|
||||||
try {
|
|
||||||
dayInterval = Integer.parseInt(taskPlan.getCycleValue().trim());
|
|
||||||
if (dayInterval < 1) dayInterval = 1;
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
dayInterval = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!calendar.after(endCalendar)) {
|
|
||||||
createNormalTaskForDate(taskPlan, calendar);
|
|
||||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, dayInterval);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 周周期和月周期:解析 cycleValue 为集合
|
|
||||||
java.util.Set<Integer> cycleValues = new java.util.HashSet<>();
|
|
||||||
if (taskPlan.getCycleValue() != null && !taskPlan.getCycleValue().isEmpty()) {
|
|
||||||
String[] values = taskPlan.getCycleValue().split(",");
|
|
||||||
for (String value : values) {
|
|
||||||
try {
|
|
||||||
cycleValues.add(Integer.parseInt(value.trim()));
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
// 忽略无效值
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!calendar.after(endCalendar)) {
|
|
||||||
boolean shouldCreateTask = false;
|
|
||||||
|
|
||||||
if (taskPlan.getCycleType() == CycleTypeEnum.WEEKLY) {
|
|
||||||
int dayOfWeek = calendar.get(java.util.Calendar.DAY_OF_WEEK);
|
|
||||||
shouldCreateTask = cycleValues.contains(dayOfWeek);
|
|
||||||
} else if (taskPlan.getCycleType() == CycleTypeEnum.MONTHLY) {
|
|
||||||
int dayOfMonth = calendar.get(java.util.Calendar.DAY_OF_MONTH);
|
|
||||||
shouldCreateTask = cycleValues.contains(dayOfMonth);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shouldCreateTask) {
|
|
||||||
createNormalTaskForDate(taskPlan, calendar);
|
|
||||||
}
|
|
||||||
|
|
||||||
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createNormalTaskForDate(TaskPlan taskPlan, java.util.Calendar calendar) {
|
|
||||||
Task task = new Task();
|
|
||||||
task.setTaskName(taskPlan.getPlanName() + "_任务_" + formatDate(calendar.getTime()));
|
|
||||||
task.setPlanId(taskPlan.getId());
|
|
||||||
task.setTaskCategory(TaskCategoryEnum.NORMAL);
|
|
||||||
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.TIMED)){
|
|
||||||
task.setTaskType(TaskTypeEnum.TIMED);
|
|
||||||
}
|
|
||||||
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.CYCLE)){
|
|
||||||
task.setTaskType(TaskTypeEnum.CYCLE);
|
|
||||||
}
|
|
||||||
if(Objects.equals(taskPlan.getPlanType(), PlanTypeEnum.IMMEDIATELY)){
|
|
||||||
task.setTaskType(TaskTypeEnum.IMMEDIATELY);
|
|
||||||
}
|
|
||||||
task.setExecuteType(taskPlan.getExecuteType());
|
|
||||||
task.setRouteId(taskPlan.getRouteId());
|
|
||||||
task.setUavId(taskPlan.getUavId());
|
|
||||||
|
|
||||||
if (taskPlan.getExecuteTime() != null) {
|
|
||||||
java.util.Calendar taskCalendar = java.util.Calendar.getInstance();
|
|
||||||
taskCalendar.setTime(calendar.getTime());
|
|
||||||
java.util.Calendar executeTimeCalendar = java.util.Calendar.getInstance();
|
|
||||||
executeTimeCalendar.setTime(taskPlan.getExecuteTime());
|
|
||||||
taskCalendar.set(java.util.Calendar.HOUR_OF_DAY, executeTimeCalendar.get(java.util.Calendar.HOUR_OF_DAY));
|
|
||||||
taskCalendar.set(java.util.Calendar.MINUTE, executeTimeCalendar.get(java.util.Calendar.MINUTE));
|
|
||||||
taskCalendar.set(java.util.Calendar.SECOND, executeTimeCalendar.get(java.util.Calendar.SECOND));
|
|
||||||
task.setStartTime(taskCalendar.getTime());
|
|
||||||
|
|
||||||
java.util.Calendar endTaskCalendar = (java.util.Calendar) taskCalendar.clone();
|
|
||||||
if (taskPlan.getDuration() != null) {
|
|
||||||
endTaskCalendar.add(java.util.Calendar.SECOND, taskPlan.getDuration());
|
|
||||||
} else {
|
|
||||||
endTaskCalendar.add(java.util.Calendar.SECOND, 3600);
|
|
||||||
}
|
|
||||||
task.setEndTime(endTaskCalendar.getTime());
|
|
||||||
} else {
|
|
||||||
task.setStartTime(calendar.getTime());
|
|
||||||
task.setEndTime(calendar.getTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
task.setStatus(StatusEnum.PENDING);
|
|
||||||
task.setDescription("由任务计划自动创建");
|
|
||||||
|
|
||||||
taskDomain.createTask(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 格式化日期为字符串
|
|
||||||
*/
|
|
||||||
private String formatDate(java.util.Date date) {
|
|
||||||
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
|
|
||||||
return sdf.format(date);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskPlanDTO getTaskPlanById(Long planId) {
|
|
||||||
TaskPlan taskPlan = taskPlanDomain.getTaskPlanById(planId);
|
|
||||||
return TaskPlanDTOConvert.toDTO(taskPlan);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<TaskPlanDTO> getTaskPlanList(TaskPlanQueryDTO queryDTO) {
|
|
||||||
// 如果传递了id,功能就等同于getTaskPlanById
|
|
||||||
if (queryDTO.getId() != null) {
|
|
||||||
TaskPlanDTO taskPlanDTO = getTaskPlanById(queryDTO.getId());
|
|
||||||
return taskPlanDTO != null ? java.util.Collections.singletonList(taskPlanDTO) : java.util.Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建TaskPlan对象作为查询条件
|
|
||||||
TaskPlan taskPlan = new TaskPlan();
|
|
||||||
taskPlan.setRouteId(queryDTO.getRouteId());
|
|
||||||
taskPlan.setUavId(queryDTO.getUavId());
|
|
||||||
taskPlan.setStatus(queryDTO.getStatus());
|
|
||||||
taskPlan.setPlanType(queryDTO.getPlanType());
|
|
||||||
taskPlan.setCycleType(queryDTO.getCycleType());
|
|
||||||
|
|
||||||
// 这里需要注意:TaskPlan类中没有airportCode和routeName字段,
|
|
||||||
// 这些字段可能需要通过关联查询来实现过滤,
|
|
||||||
// 但目前我们先按照现有的结构实现基本过滤
|
|
||||||
|
|
||||||
List<TaskPlan> taskPlans = taskPlanDomain.getTaskPlanList(taskPlan);
|
|
||||||
|
|
||||||
// 过滤时间范围(只有当startDateStart和startDateEnd都传时才使用)
|
|
||||||
if (queryDTO.getStartDateStart() != null && queryDTO.getStartDateEnd() != null) {
|
|
||||||
java.util.Date startDateStart = queryDTO.getStartDateStart();
|
|
||||||
java.util.Date startDateEnd = queryDTO.getStartDateEnd();
|
|
||||||
taskPlans = taskPlans.stream()
|
|
||||||
.filter(plan -> {
|
|
||||||
java.util.Date planStartDate = plan.getStartDate();
|
|
||||||
return planStartDate != null &&
|
|
||||||
!planStartDate.before(startDateStart) &&
|
|
||||||
!planStartDate.after(startDateEnd);
|
|
||||||
})
|
|
||||||
.collect(java.util.stream.Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
return TaskPlanDTOConvert.toDTOList(taskPlans);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean updateTaskPlan(TaskPlanDTO taskPlanDTO) {
|
|
||||||
// 先查询原始数据
|
|
||||||
TaskPlan existingTaskPlan = taskPlanDomain.getTaskPlanById(taskPlanDTO.getId());
|
|
||||||
if (existingTaskPlan == null) {
|
|
||||||
throw new IllegalArgumentException("任务计划不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将传入的非空字段覆盖到原始数据
|
|
||||||
TaskPlan updateTaskPlan = TaskPlanDTOConvert.toDomain(taskPlanDTO);
|
|
||||||
if (updateTaskPlan.getPlanName() != null) existingTaskPlan.setPlanName(updateTaskPlan.getPlanName());
|
|
||||||
if (updateTaskPlan.getPlanType() != null) existingTaskPlan.setPlanType(updateTaskPlan.getPlanType());
|
|
||||||
if (updateTaskPlan.getCycleType() != null) existingTaskPlan.setCycleType(updateTaskPlan.getCycleType());
|
|
||||||
if (updateTaskPlan.getCycleValue() != null) existingTaskPlan.setCycleValue(updateTaskPlan.getCycleValue());
|
|
||||||
if (updateTaskPlan.getExecuteType() != null) existingTaskPlan.setExecuteType(updateTaskPlan.getExecuteType());
|
|
||||||
if (updateTaskPlan.getExecuteTime() != null) existingTaskPlan.setExecuteTime(updateTaskPlan.getExecuteTime());
|
|
||||||
if (updateTaskPlan.getDuration() != null) existingTaskPlan.setDuration(updateTaskPlan.getDuration());
|
|
||||||
if (updateTaskPlan.getStartDate() != null) existingTaskPlan.setStartDate(updateTaskPlan.getStartDate());
|
|
||||||
if (updateTaskPlan.getEndDate() != null) existingTaskPlan.setEndDate(updateTaskPlan.getEndDate());
|
|
||||||
if (updateTaskPlan.getRouteId() != null) existingTaskPlan.setRouteId(updateTaskPlan.getRouteId());
|
|
||||||
if (updateTaskPlan.getUavId() != null) existingTaskPlan.setUavId(updateTaskPlan.getUavId());
|
|
||||||
if (updateTaskPlan.getStatus() != null) existingTaskPlan.setStatus(updateTaskPlan.getStatus());
|
|
||||||
if (updateTaskPlan.getDescription() != null) existingTaskPlan.setDescription(updateTaskPlan.getDescription());
|
|
||||||
if (updateTaskPlan.getRouteUrl() != null) existingTaskPlan.setRouteUrl(updateTaskPlan.getRouteUrl());
|
|
||||||
if (updateTaskPlan.getRemark() != null) existingTaskPlan.setRemark(updateTaskPlan.getRemark());
|
|
||||||
|
|
||||||
TaskPlan result = taskPlanDomain.updateTaskPlan(existingTaskPlan);
|
|
||||||
|
|
||||||
if (result != null) {
|
|
||||||
// 先删除该计划下的所有未执行任务
|
|
||||||
List<Task> tasks = taskDomain.getTaskByPlanId(result.getId());
|
|
||||||
for (Task task : tasks) {
|
|
||||||
if (task.getStatus() == StatusEnum.PENDING) {
|
|
||||||
taskDomain.deleteTask(task.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
createNormalTaskFromPlan(existingTaskPlan);
|
|
||||||
|
|
||||||
return result != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean deleteTaskPlan(Long planId) {
|
|
||||||
// 先获取该计划下的所有任务
|
|
||||||
List<Task> tasks = taskDomain.getTaskByPlanId(planId);
|
|
||||||
|
|
||||||
// 删除所有状态为待执行的任务
|
|
||||||
for (Task task : tasks) {
|
|
||||||
if (task.getStatus() == StatusEnum.PENDING) {
|
|
||||||
taskDomain.deleteTask(task.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 最后删除任务计划
|
|
||||||
return taskPlanDomain.deleteTaskPlan(planId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,348 +0,0 @@
|
||||||
package com.ruoyi.task.service.impl;
|
|
||||||
|
|
||||||
import com.ruoyi.airline.api.RemoteAirlineService;
|
|
||||||
import com.ruoyi.airline.api.domain.AirlineFileVO;
|
|
||||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
|
||||||
import com.ruoyi.device.api.RemoteAircraftService;
|
|
||||||
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;
|
|
||||||
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.*;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class TaskServiceImpl implements ITaskService {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ITaskDomain taskDomain;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ITaskPlanDomain taskPlanDomain;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RemoteAirlineService remoteAirlineService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RemoteAircraftService remoteAircraftService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long createTaskWithoutPlan(TaskDTO taskDTO) {
|
|
||||||
Task task = TaskDTOConvert.toDomain(taskDTO);
|
|
||||||
task.setPlanId(null);
|
|
||||||
task.setStatus(StatusEnum.PENDING);
|
|
||||||
Task result = taskDomain.createTask(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 = taskDomain.getCurrentTaskByUavId(uavId);
|
|
||||||
return TaskDTOConvert.toDTO(task);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// @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.CHECKING) {
|
|
||||||
task.setActualStartTime(new java.util.Date());
|
|
||||||
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 if(status != StatusEnum.RUNNING) {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TaskStatByYearServiceDTO getTaskStatByYear(TaskStatQueryServiceDTO queryDTO) {
|
|
||||||
Task task = new Task();
|
|
||||||
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) {
|
|
||||||
// 如果指定了状态列表,则过滤状态
|
|
||||||
if (queryDTO.getStatusList() != null && !queryDTO.getStatusList().isEmpty()
|
|
||||||
&& !queryDTO.getStatusList().contains(t.getStatus())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果指定了航线ID列表,则过滤航线
|
|
||||||
if (queryDTO.getRouteIdList() != null && !queryDTO.getRouteIdList().isEmpty()
|
|
||||||
&& !queryDTO.getRouteIdList().contains(t.getRouteId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果指定了无人机ID列表,则过滤无人机
|
|
||||||
if (queryDTO.getUavIdList() != null && !queryDTO.getUavIdList().isEmpty()
|
|
||||||
&& !queryDTO.getUavIdList().contains(t.getUavId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果指定了日期范围,则使用日期范围过滤;否则使用年份过滤
|
|
||||||
if (queryDTO.getStartDate() != null && queryDTO.getEndDate() != null) {
|
|
||||||
if (t.getStartTime().before(queryDTO.getStartDate()) || t.getStartTime().after(queryDTO.getEndDate())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else if (queryDTO.getYear() != null) {
|
|
||||||
calendar.setTime(t.getStartTime());
|
|
||||||
int year = calendar.get(Calendar.YEAR);
|
|
||||||
if (year != queryDTO.getYear()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
calendar.setTime(t.getStartTime());
|
|
||||||
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.setTaskCategory(queryDTO.getTaskCategory());
|
|
||||||
task.setTaskType(queryDTO.getTaskType());
|
|
||||||
|
|
||||||
List<Task> tasks = taskDomain.getTaskList(task);
|
|
||||||
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
Map<Integer, List<TaskStatItemServiceDTO>> days = new HashMap<>();
|
|
||||||
int total = 0;
|
|
||||||
|
|
||||||
for (Task t : tasks) {
|
|
||||||
if (t.getStartTime() != null) {
|
|
||||||
// 如果指定了状态列表,则过滤状态
|
|
||||||
if (queryDTO.getStatusList() != null && !queryDTO.getStatusList().isEmpty()
|
|
||||||
&& !queryDTO.getStatusList().contains(t.getStatus())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果指定了航线ID列表,则过滤航线
|
|
||||||
if (queryDTO.getRouteIdList() != null && !queryDTO.getRouteIdList().isEmpty()
|
|
||||||
&& !queryDTO.getRouteIdList().contains(t.getRouteId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果指定了无人机ID列表,则过滤无人机
|
|
||||||
if (queryDTO.getUavIdList() != null && !queryDTO.getUavIdList().isEmpty()
|
|
||||||
&& !queryDTO.getUavIdList().contains(t.getUavId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
calendar.setTime(t.getStartTime());
|
|
||||||
int year = calendar.get(Calendar.YEAR);
|
|
||||||
int month = calendar.get(Calendar.MONTH) + 1;
|
|
||||||
|
|
||||||
// 如果指定了日期范围,则使用日期范围过滤;否则使用年月过滤
|
|
||||||
boolean matchDate = false;
|
|
||||||
if (queryDTO.getStartDate() != null && queryDTO.getEndDate() != null) {
|
|
||||||
if (!t.getStartTime().before(queryDTO.getStartDate()) && !t.getStartTime().after(queryDTO.getEndDate())) {
|
|
||||||
matchDate = true;
|
|
||||||
}
|
|
||||||
} else if (queryDTO.getYear() != null && queryDTO.getMonth() != null) {
|
|
||||||
if (year == queryDTO.getYear() && month == queryDTO.getMonth()) {
|
|
||||||
matchDate = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matchDate) {
|
|
||||||
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
|
||||||
|
|
||||||
TaskStatItemServiceDTO item = new TaskStatItemServiceDTO();
|
|
||||||
item.setTaskId(t.getId());
|
|
||||||
item.setPlanId(t.getPlanId());
|
|
||||||
item.setTaskName(t.getTaskName());
|
|
||||||
item.setTaskType(t.getTaskType());
|
|
||||||
item.setTaskCategory(t.getTaskCategory());
|
|
||||||
item.setStartTime(t.getStartTime());
|
|
||||||
item.setEndTime(t.getEndTime());
|
|
||||||
item.setActualStartTime(t.getActualStartTime());
|
|
||||||
item.setActualEndTime(t.getActualEndTime());
|
|
||||||
item.setStatus(t.getStatus());
|
|
||||||
item.setTaskCreateTime(t.getCreateTime());
|
|
||||||
item.setTaskCreateBy(t.getCreateBy());
|
|
||||||
|
|
||||||
if (t.getPlanId() != null) {
|
|
||||||
TaskPlan plan = taskPlanDomain.getTaskPlanById(t.getPlanId());
|
|
||||||
if (plan != null) {
|
|
||||||
item.setPlanName(plan.getPlanName());
|
|
||||||
item.setPlanType(plan.getPlanType());
|
|
||||||
item.setCycleType(plan.getCycleType());
|
|
||||||
item.setPlanStartDate(plan.getStartDate());
|
|
||||||
item.setPlanEndDate(plan.getEndDate());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询航线名称
|
|
||||||
if (t.getRouteId() != null && t.getRouteId()>0L) {
|
|
||||||
try {
|
|
||||||
R<AirlineFileVO> airlineResult = remoteAirlineService.getFileById(t.getRouteId(), SecurityConstants.INNER);
|
|
||||||
if (airlineResult != null && airlineResult.getData() != null) {
|
|
||||||
item.setRouteName(airlineResult.getData().getName());
|
|
||||||
item.setAirVendor(airlineResult.getData().getAirVendor());
|
|
||||||
item.setAirType(airlineResult.getData().getAirType());
|
|
||||||
item.setAirlineType(airlineResult.getData().getType());
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
// 忽略远程调用异常
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// // 查询无人机型号
|
|
||||||
// if (t.getUavId() != null) {
|
|
||||||
// try {
|
|
||||||
// Long aircraftId = Long.parseLong(t.getUavId());
|
|
||||||
// R<AircraftDetailVO> aircraftResult = remoteAircraftService.getAircraftDetail(aircraftId, SecurityConstants.INNER);
|
|
||||||
// if (aircraftResult != null && aircraftResult.getData() != null) {
|
|
||||||
// item.setAircraftModel(aircraftResult.getData().getAircraftModel());
|
|
||||||
// }
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// // 忽略远程调用异常或类型转换异常
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
days.computeIfAbsent(day, k -> new ArrayList<>()).add(item);
|
|
||||||
total++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskStatByMonthServiceDTO result = new TaskStatByMonthServiceDTO();
|
|
||||||
result.setTotal(total);
|
|
||||||
result.setDays(days);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,123 +0,0 @@
|
||||||
-- ----------------------------
|
|
||||||
-- 任务计划表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_plan (
|
|
||||||
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '计划ID',
|
|
||||||
plan_name VARCHAR(100) NOT NULL COMMENT '计划名称',
|
|
||||||
plan_type VARCHAR(50) NOT NULL COMMENT '计划类型(定时任务计划、周期任务计划)',
|
|
||||||
execute_type VARCHAR(50) NOT NULL COMMENT '执行类型(单次执行、连续执行)',
|
|
||||||
cycle_type VARCHAR(50) DEFAULT '' COMMENT '周期类型(日周期、周周期、月周期)',
|
|
||||||
cycle_value VARCHAR(100) DEFAULT '' COMMENT '周期值(周周期:1-7多选,如"1,3,5";月周期:1-31多选,如"1,15,30")',
|
|
||||||
start_date DATETIME COMMENT '开始日期',
|
|
||||||
end_date DATETIME COMMENT '结束日期',
|
|
||||||
execute_time DATETIME COMMENT '执行时间(仅在定义任务时有效)',
|
|
||||||
route_id BIGINT(20) DEFAULT NULL COMMENT '航线ID',
|
|
||||||
uav_id BIGINT(20) DEFAULT NULL COMMENT '无人机ID',
|
|
||||||
status CHAR(1) DEFAULT '0' COMMENT '计划状态(0待执行 1执行中 2已完成 3已取消)',
|
|
||||||
description VARCHAR(500) DEFAULT NULL COMMENT '描述',
|
|
||||||
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
|
||||||
create_time DATETIME COMMENT '创建时间',
|
|
||||||
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
|
||||||
update_time DATETIME COMMENT '更新时间',
|
|
||||||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
||||||
PRIMARY KEY (id)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=100 COMMENT='任务计划表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 任务表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_info (
|
|
||||||
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID',
|
|
||||||
plan_id BIGINT(20) DEFAULT NULL COMMENT '计划ID(可为空,如一键起飞)',
|
|
||||||
task_name VARCHAR(100) NOT NULL COMMENT '任务名称',
|
|
||||||
task_category VARCHAR(50) NOT NULL COMMENT '任务类别(如人工执飞)',
|
|
||||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型(如一键起飞)',
|
|
||||||
execute_type VARCHAR(50) NOT NULL COMMENT '执行类型(单次执行、连续执行)',
|
|
||||||
route_id BIGINT(20) DEFAULT NULL COMMENT '航线ID',
|
|
||||||
uav_id BIGINT(20) DEFAULT NULL COMMENT '无人机ID',
|
|
||||||
status CHAR(1) DEFAULT '0' COMMENT '任务状态(0待执行 1执行中 2已完成 3已取消)',
|
|
||||||
start_time DATETIME COMMENT '开始时间',
|
|
||||||
end_time DATETIME COMMENT '结束时间',
|
|
||||||
description VARCHAR(500) DEFAULT NULL COMMENT '描述',
|
|
||||||
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
|
||||||
create_time DATETIME COMMENT '创建时间',
|
|
||||||
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
|
||||||
update_time DATETIME COMMENT '更新时间',
|
|
||||||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
||||||
PRIMARY KEY (id),
|
|
||||||
KEY idx_task_info_plan_id (plan_id)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=100 COMMENT='任务表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 任务统计表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_stat (
|
|
||||||
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '统计ID',
|
|
||||||
airport_code VARCHAR(50) DEFAULT '' COMMENT '机场代码',
|
|
||||||
route_name VARCHAR(100) DEFAULT '' COMMENT '航线名称',
|
|
||||||
task_category VARCHAR(50) NOT NULL COMMENT '任务类别(如人工执飞)',
|
|
||||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型(如一键起飞)',
|
|
||||||
task_status CHAR(1) DEFAULT '0' COMMENT '任务状态(0待执行 1执行中 2已完成 3已取消)',
|
|
||||||
year INT(4) COMMENT '年份',
|
|
||||||
month INT(2) COMMENT '月份',
|
|
||||||
day INT(2) COMMENT '日期',
|
|
||||||
task_count INT(11) DEFAULT 0 COMMENT '任务数量',
|
|
||||||
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
|
|
||||||
create_time DATETIME COMMENT '创建时间',
|
|
||||||
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
|
|
||||||
update_time DATETIME COMMENT '更新时间',
|
|
||||||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
|
||||||
PRIMARY KEY (id),
|
|
||||||
KEY idx_task_stat_year (year),
|
|
||||||
KEY idx_task_stat_month (month),
|
|
||||||
KEY idx_task_stat_day (day),
|
|
||||||
KEY idx_task_stat_task_category (task_category),
|
|
||||||
KEY idx_task_stat_task_type (task_type),
|
|
||||||
KEY idx_task_stat_task_status (task_status)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=100 COMMENT='任务统计表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 计划与航线关联表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS plan_airline (
|
|
||||||
plan_id BIGINT(20) NOT NULL COMMENT '计划ID',
|
|
||||||
airline_id BIGINT(20) NOT NULL COMMENT '航线ID',
|
|
||||||
PRIMARY KEY (plan_id, airline_id)
|
|
||||||
) ENGINE=InnoDB COMMENT='计划与航线关联表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 计划与无人机关联表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS plan_uav (
|
|
||||||
plan_id BIGINT(20) NOT NULL COMMENT '计划ID',
|
|
||||||
uav_id BIGINT(20) NOT NULL COMMENT '无人机ID',
|
|
||||||
PRIMARY KEY (plan_id, uav_id)
|
|
||||||
) ENGINE=InnoDB COMMENT='计划与无人机关联表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 任务与航线关联表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_airline (
|
|
||||||
task_id BIGINT(20) NOT NULL COMMENT '任务ID',
|
|
||||||
airline_id BIGINT(20) NOT NULL COMMENT '航线ID',
|
|
||||||
PRIMARY KEY (task_id, airline_id)
|
|
||||||
) ENGINE=InnoDB COMMENT='任务与航线关联表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 任务与无人机关联表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_uav (
|
|
||||||
task_id BIGINT(20) NOT NULL COMMENT '任务ID',
|
|
||||||
uav_id BIGINT(20) NOT NULL COMMENT '无人机ID',
|
|
||||||
PRIMARY KEY (task_id, uav_id)
|
|
||||||
) ENGINE=InnoDB COMMENT='任务与无人机关联表';
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 任务与用户关联表
|
|
||||||
-- ----------------------------
|
|
||||||
CREATE TABLE IF NOT EXISTS task_user (
|
|
||||||
task_id BIGINT(20) NOT NULL COMMENT '任务ID',
|
|
||||||
user_id BIGINT(20) NOT NULL COMMENT '用户ID',
|
|
||||||
role_type VARCHAR(50) DEFAULT '' COMMENT '角色类型(负责人、参与者等)',
|
|
||||||
PRIMARY KEY (task_id, user_id)
|
|
||||||
) ENGINE=InnoDB COMMENT='任务与用户关联表';
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
-- ----------------------------
|
|
||||||
-- 添加任务计划执行时长字段
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE task_plan
|
|
||||||
ADD COLUMN duration INT(11) DEFAULT NULL COMMENT '执行时长(秒)' AFTER execute_time;
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
-- ----------------------------
|
|
||||||
-- 添加任务实际执行时间和实际结束时间字段
|
|
||||||
-- ----------------------------
|
|
||||||
ALTER TABLE task_info
|
|
||||||
ADD COLUMN actual_start_time DATETIME DEFAULT NULL COMMENT '实际开始时间' AFTER start_time,
|
|
||||||
ADD COLUMN actual_end_time DATETIME DEFAULT NULL COMMENT '实际结束时间' AFTER end_time;
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
-- 添加 route_url 字段到 task_info 表
|
|
||||||
ALTER TABLE task_info ADD COLUMN route_url VARCHAR(255) COMMENT '航线文件URL';
|
|
||||||
|
|
||||||
-- 添加 route_url 字段到 task_plan 表
|
|
||||||
ALTER TABLE task_plan ADD COLUMN route_url VARCHAR(255) COMMENT '航线文件URL';
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
-- 修改 task_plan 表的 uav_id 字段类型为 VARCHAR(255)
|
|
||||||
ALTER TABLE task_plan MODIFY COLUMN uav_id VARCHAR(255) COMMENT '无人机ID';
|
|
||||||
|
|
||||||
-- 修改 task_info 表的 uav_id 字段类型为 VARCHAR(255)
|
|
||||||
ALTER TABLE task_info MODIFY COLUMN uav_id VARCHAR(255) COMMENT '无人机ID';
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
-- 修改 task_plan 表的 status 字段类型为 VARCHAR(20)
|
|
||||||
ALTER TABLE task_plan MODIFY COLUMN status VARCHAR(20) COMMENT '计划状态';
|
|
||||||
|
|
||||||
-- 修改 task_info 表的 status 字段类型为 VARCHAR(20)
|
|
||||||
ALTER TABLE task_info MODIFY COLUMN status VARCHAR(20) COMMENT '任务状态';
|
|
||||||
|
|
||||||
-- 修改 task_stat 表的 task_status 字段类型为 VARCHAR(20)
|
|
||||||
ALTER TABLE task_stat MODIFY COLUMN task_status VARCHAR(20) COMMENT '任务状态';
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
-- 为任务表添加 recovery 字段
|
|
||||||
ALTER TABLE task_info ADD COLUMN recovery BOOLEAN DEFAULT FALSE COMMENT '错误是否恢复';
|
|
||||||
|
|
@ -1,157 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE mapper
|
|
||||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="com.ruoyi.task.mapper.TaskInfoMapper">
|
|
||||||
|
|
||||||
<resultMap type="com.ruoyi.task.mapper.entity.TaskInfoEntity" id="TaskInfoResult">
|
|
||||||
<result property="id" column="id" />
|
|
||||||
<result property="taskName" column="task_name" />
|
|
||||||
<result property="taskCategory" column="task_category" />
|
|
||||||
<result property="taskType" column="task_type" />
|
|
||||||
<result property="planId" column="plan_id" />
|
|
||||||
<result property="routeId" column="route_id" />
|
|
||||||
<result property="uavId" column="uav_id" />
|
|
||||||
<result property="executeType" column="execute_type" />
|
|
||||||
<result property="status" column="status" />
|
|
||||||
<result property="startTime" column="start_time" />
|
|
||||||
<result property="endTime" column="end_time" />
|
|
||||||
<result property="actualStartTime" column="actual_start_time" />
|
|
||||||
<result property="actualEndTime" column="actual_end_time" />
|
|
||||||
<result property="description" column="description" />
|
|
||||||
<result property="routeUrl" column="route_url" />
|
|
||||||
<result property="createBy" column="create_by" />
|
|
||||||
<result property="createTime" column="create_time" />
|
|
||||||
<result property="updateBy" column="update_by" />
|
|
||||||
<result property="updateTime" column="update_time" />
|
|
||||||
<result property="remark" column="remark" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<sql id="selectTaskInfoVo">
|
|
||||||
select id, task_name, task_category, task_type, plan_id, route_id,
|
|
||||||
uav_id, execute_type, status, start_time, end_time, actual_start_time, actual_end_time, description, route_url,
|
|
||||||
create_by, create_time, update_by, update_time, remark
|
|
||||||
from task_info
|
|
||||||
</sql>
|
|
||||||
|
|
||||||
<select id="selectTaskInfoById" parameterType="Long" resultMap="TaskInfoResult">
|
|
||||||
<include refid="selectTaskInfoVo"/>
|
|
||||||
where id = #{id}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectTaskInfoList" parameterType="com.ruoyi.task.mapper.entity.TaskInfoEntity" resultMap="TaskInfoResult">
|
|
||||||
<include refid="selectTaskInfoVo"/>
|
|
||||||
<where>
|
|
||||||
<if test="taskName != null and taskName != ''">
|
|
||||||
and task_name like concat('%', #{taskName}, '%')
|
|
||||||
</if>
|
|
||||||
<if test="taskCategory != null and taskCategory != ''">
|
|
||||||
and task_category = #{taskCategory}
|
|
||||||
</if>
|
|
||||||
<if test="taskType != null and taskType != ''">
|
|
||||||
and task_type = #{taskType}
|
|
||||||
</if>
|
|
||||||
<if test="planId != null">
|
|
||||||
and plan_id = #{planId}
|
|
||||||
</if>
|
|
||||||
<if test="routeId != null">
|
|
||||||
and route_id = #{routeId}
|
|
||||||
</if>
|
|
||||||
<if test="uavId != null">
|
|
||||||
and uav_id = #{uavId}
|
|
||||||
</if>
|
|
||||||
<if test="executeType != null and executeType != ''">
|
|
||||||
and execute_type = #{executeType}
|
|
||||||
</if>
|
|
||||||
<if test="status != null and status != ''">
|
|
||||||
and status = #{status}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<insert id="insertTaskInfo" parameterType="com.ruoyi.task.mapper.entity.TaskInfoEntity" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
|
||||||
insert into task_info
|
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="taskName != null and taskName != ''">task_name,</if>
|
|
||||||
<if test="taskCategory != null and taskCategory != ''">task_category,</if>
|
|
||||||
<if test="taskType != null and taskType != ''">task_type,</if>
|
|
||||||
<if test="planId != null">plan_id,</if>
|
|
||||||
<if test="routeId != null">route_id,</if>
|
|
||||||
<if test="uavId != null">uav_id,</if>
|
|
||||||
<if test="executeType != null and executeType != ''">execute_type,</if>
|
|
||||||
<if test="status != null and status != ''">status,</if>
|
|
||||||
<if test="startTime != null">start_time,</if>
|
|
||||||
<if test="endTime != null">end_time,</if>
|
|
||||||
<if test="actualStartTime != null">actual_start_time,</if>
|
|
||||||
<if test="actualEndTime != null">actual_end_time,</if>
|
|
||||||
<if test="description != null and description != ''">description,</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">route_url,</if>
|
|
||||||
<if test="createBy != null and createBy != ''">create_by,</if>
|
|
||||||
<if test="remark != null and remark != ''">remark,</if>
|
|
||||||
create_time
|
|
||||||
</trim>
|
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="taskName != null and taskName != ''">#{taskName},</if>
|
|
||||||
<if test="taskCategory != null and taskCategory != ''">#{taskCategory},</if>
|
|
||||||
<if test="taskType != null and taskType != ''">#{taskType},</if>
|
|
||||||
<if test="planId != null">#{planId},</if>
|
|
||||||
<if test="routeId != null">#{routeId},</if>
|
|
||||||
<if test="uavId != null">#{uavId},</if>
|
|
||||||
<if test="executeType != null and executeType != ''">#{executeType},</if>
|
|
||||||
<if test="status != null and status != ''">#{status},</if>
|
|
||||||
<if test="startTime != null">#{startTime},</if>
|
|
||||||
<if test="endTime != null">#{endTime},</if>
|
|
||||||
<if test="actualStartTime != null">#{actualStartTime},</if>
|
|
||||||
<if test="actualEndTime != null">#{actualEndTime},</if>
|
|
||||||
<if test="description != null and description != ''">#{description},</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">#{routeUrl},</if>
|
|
||||||
<if test="createBy != null and createBy != ''">#{createBy},</if>
|
|
||||||
<if test="remark != null and remark != ''">#{remark},</if>
|
|
||||||
now()
|
|
||||||
</trim>
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<update id="updateTaskInfo" parameterType="com.ruoyi.task.mapper.entity.TaskInfoEntity">
|
|
||||||
update task_info
|
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
|
||||||
<if test="taskName != null and taskName != ''">task_name = #{taskName},</if>
|
|
||||||
<if test="taskCategory != null and taskCategory != ''">task_category = #{taskCategory},</if>
|
|
||||||
<if test="taskType != null and taskType != ''">task_type = #{taskType},</if>
|
|
||||||
<if test="planId != null">plan_id = #{planId},</if>
|
|
||||||
<if test="routeId != null">route_id = #{routeId},</if>
|
|
||||||
<if test="uavId != null">uav_id = #{uavId},</if>
|
|
||||||
<if test="executeType != null and executeType != ''">execute_type = #{executeType},</if>
|
|
||||||
<if test="status != null and status != ''">status = #{status},</if>
|
|
||||||
<if test="startTime != null">start_time = #{startTime},</if>
|
|
||||||
<if test="endTime != null">end_time = #{endTime},</if>
|
|
||||||
<if test="actualStartTime != null">actual_start_time = #{actualStartTime},</if>
|
|
||||||
<if test="actualEndTime != null">actual_end_time = #{actualEndTime},</if>
|
|
||||||
<if test="description != null and description != ''">description = #{description},</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">route_url = #{routeUrl},</if>
|
|
||||||
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
|
|
||||||
<if test="remark != null">remark = #{remark},</if>
|
|
||||||
update_time = now()
|
|
||||||
</trim>
|
|
||||||
where id = #{id}
|
|
||||||
</update>
|
|
||||||
|
|
||||||
<delete id="deleteTaskInfoById" parameterType="Long">
|
|
||||||
delete from task_info where id = #{id}
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
<delete id="deleteTaskInfoByIds" parameterType="Long">
|
|
||||||
delete from task_info where id in
|
|
||||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
|
||||||
#{id}
|
|
||||||
</foreach>
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
<select id="selectCurrentTaskByUavId" parameterType="String" resultMap="TaskInfoResult">
|
|
||||||
<include refid="selectTaskInfoVo"/>
|
|
||||||
where uav_id = #{uavId}
|
|
||||||
and actual_start_time is not null
|
|
||||||
order by abs(timestampdiff(second, actual_start_time, now()))
|
|
||||||
limit 1
|
|
||||||
</select>
|
|
||||||
|
|
||||||
</mapper>
|
|
||||||
|
|
@ -1,146 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE mapper
|
|
||||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="com.ruoyi.task.mapper.TaskPlanMapper">
|
|
||||||
|
|
||||||
<resultMap type="com.ruoyi.task.mapper.entity.TaskPlanEntity" id="TaskPlanResult">
|
|
||||||
<result property="id" column="id" />
|
|
||||||
<result property="planName" column="plan_name" />
|
|
||||||
<result property="planType" column="plan_type" />
|
|
||||||
<result property="cycleType" column="cycle_type" />
|
|
||||||
<result property="cycleValue" column="cycle_value" />
|
|
||||||
<result property="executeType" column="execute_type" />
|
|
||||||
<result property="executeTime" column="execute_time" />
|
|
||||||
<result property="duration" column="duration" />
|
|
||||||
<result property="startDate" column="start_date" />
|
|
||||||
<result property="endDate" column="end_date" />
|
|
||||||
<result property="routeId" column="route_id" />
|
|
||||||
<result property="uavId" column="uav_id" />
|
|
||||||
<result property="status" column="status" />
|
|
||||||
<result property="description" column="description" />
|
|
||||||
<result property="routeUrl" column="route_url" />
|
|
||||||
<result property="createBy" column="create_by" />
|
|
||||||
<result property="createTime" column="create_time" />
|
|
||||||
<result property="updateBy" column="update_by" />
|
|
||||||
<result property="updateTime" column="update_time" />
|
|
||||||
<result property="remark" column="remark" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<sql id="selectTaskPlanVo">
|
|
||||||
select id, plan_name, plan_type, cycle_type, cycle_value, execute_type,
|
|
||||||
execute_time, duration, start_date, end_date, route_id, uav_id, status,
|
|
||||||
description, route_url, create_by, create_time, update_by, update_time, remark
|
|
||||||
from task_plan
|
|
||||||
</sql>
|
|
||||||
|
|
||||||
<select id="selectTaskPlanById" parameterType="Long" resultMap="TaskPlanResult">
|
|
||||||
<include refid="selectTaskPlanVo"/>
|
|
||||||
where id = #{id}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectTaskPlanList" parameterType="com.ruoyi.task.mapper.entity.TaskPlanEntity" resultMap="TaskPlanResult">
|
|
||||||
<include refid="selectTaskPlanVo"/>
|
|
||||||
<where>
|
|
||||||
<if test="planName != null and planName != ''">
|
|
||||||
and plan_name like concat('%', #{planName}, '%')
|
|
||||||
</if>
|
|
||||||
<if test="planType != null and planType != ''">
|
|
||||||
and plan_type = #{planType}
|
|
||||||
</if>
|
|
||||||
<if test="cycleType != null and cycleType != ''">
|
|
||||||
and cycle_type = #{cycleType}
|
|
||||||
</if>
|
|
||||||
<if test="executeType != null and executeType != ''">
|
|
||||||
and execute_type = #{executeType}
|
|
||||||
</if>
|
|
||||||
<if test="status != null and status != ''">
|
|
||||||
and status = #{status}
|
|
||||||
</if>
|
|
||||||
<if test="routeId != null">
|
|
||||||
and route_id = #{routeId}
|
|
||||||
</if>
|
|
||||||
<if test="uavId != null">
|
|
||||||
and uav_id = #{uavId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<insert id="insertTaskPlan" parameterType="com.ruoyi.task.mapper.entity.TaskPlanEntity" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
|
||||||
insert into task_plan
|
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="planName != null and planName != ''">plan_name,</if>
|
|
||||||
<if test="planType != null and planType != ''">plan_type,</if>
|
|
||||||
<if test="cycleType != null and cycleType != ''">cycle_type,</if>
|
|
||||||
<if test="cycleValue != null and cycleValue != ''">cycle_value,</if>
|
|
||||||
<if test="executeType != null and executeType != ''">execute_type,</if>
|
|
||||||
<if test="executeTime != null">execute_time,</if>
|
|
||||||
<if test="duration != null">duration,</if>
|
|
||||||
<if test="startDate != null">start_date,</if>
|
|
||||||
<if test="endDate != null">end_date,</if>
|
|
||||||
<if test="routeId != null">route_id,</if>
|
|
||||||
<if test="uavId != null">uav_id,</if>
|
|
||||||
<if test="status != null and status != ''">status,</if>
|
|
||||||
<if test="description != null and description != ''">description,</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">route_url,</if>
|
|
||||||
<if test="createBy != null and createBy != ''">create_by,</if>
|
|
||||||
<if test="remark != null and remark != ''">remark,</if>
|
|
||||||
create_time
|
|
||||||
</trim>
|
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
|
||||||
<if test="planName != null and planName != ''">#{planName},</if>
|
|
||||||
<if test="planType != null and planType != ''">#{planType},</if>
|
|
||||||
<if test="cycleType != null and cycleType != ''">#{cycleType},</if>
|
|
||||||
<if test="cycleValue != null and cycleValue != ''">#{cycleValue},</if>
|
|
||||||
<if test="executeType != null and executeType != ''">#{executeType},</if>
|
|
||||||
<if test="executeTime != null">#{executeTime},</if>
|
|
||||||
<if test="duration != null">#{duration},</if>
|
|
||||||
<if test="startDate != null">#{startDate},</if>
|
|
||||||
<if test="endDate != null">#{endDate},</if>
|
|
||||||
<if test="routeId != null">#{routeId},</if>
|
|
||||||
<if test="uavId != null">#{uavId},</if>
|
|
||||||
<if test="status != null and status != ''">#{status},</if>
|
|
||||||
<if test="description != null and description != ''">#{description},</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">#{routeUrl},</if>
|
|
||||||
<if test="createBy != null and createBy != ''">#{createBy},</if>
|
|
||||||
<if test="remark != null and remark != ''">#{remark},</if>
|
|
||||||
now()
|
|
||||||
</trim>
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<update id="updateTaskPlan" parameterType="com.ruoyi.task.mapper.entity.TaskPlanEntity">
|
|
||||||
update task_plan
|
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
|
||||||
<if test="planName != null and planName != ''">plan_name = #{planName},</if>
|
|
||||||
<if test="planType != null and planType != ''">plan_type = #{planType},</if>
|
|
||||||
<if test="cycleType != null and cycleType != ''">cycle_type = #{cycleType},</if>
|
|
||||||
<if test="cycleValue != null and cycleValue != ''">cycle_value = #{cycleValue},</if>
|
|
||||||
<if test="executeType != null and executeType != ''">execute_type = #{executeType},</if>
|
|
||||||
<if test="executeTime != null">execute_time = #{executeTime},</if>
|
|
||||||
<if test="duration != null">duration = #{duration},</if>
|
|
||||||
<if test="startDate != null">start_date = #{startDate},</if>
|
|
||||||
<if test="endDate != null">end_date = #{endDate},</if>
|
|
||||||
<if test="routeId != null">route_id = #{routeId},</if>
|
|
||||||
<if test="uavId != null">uav_id = #{uavId},</if>
|
|
||||||
<if test="status != null and status != ''">status = #{status},</if>
|
|
||||||
<if test="description != null and description != ''">description = #{description},</if>
|
|
||||||
<if test="routeUrl != null and routeUrl != ''">route_url = #{routeUrl},</if>
|
|
||||||
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
|
|
||||||
<if test="remark != null">remark = #{remark},</if>
|
|
||||||
update_time = now()
|
|
||||||
</trim>
|
|
||||||
where id = #{id}
|
|
||||||
</update>
|
|
||||||
|
|
||||||
<delete id="deleteTaskPlanById" parameterType="Long">
|
|
||||||
delete from task_plan where id = #{id}
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
<delete id="deleteTaskPlanByIds" parameterType="Long">
|
|
||||||
delete from task_plan where id in
|
|
||||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
|
||||||
#{id}
|
|
||||||
</foreach>
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
</mapper>
|
|
||||||
|
|
@ -1,320 +0,0 @@
|
||||||
{
|
|
||||||
"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