diff --git a/pom.xml b/pom.xml
index b695359..21ac47c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,12 @@
ruoyi-common-swagger
+
+
+ com.ruoyi
+ ruoyi-common-core
+
+
com.ruoyi
diff --git a/src/main/java/com/ruoyi/task/domain/api/ITaskDomain.java b/src/main/java/com/ruoyi/task/domain/api/ITaskDomain.java
new file mode 100644
index 0000000..0e5f1de
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/api/ITaskDomain.java
@@ -0,0 +1,62 @@
+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 createTaskWithoutPlan(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 getTaskList(Task task);
+
+ /**
+ * 根据计划ID获取任务
+ *
+ * @param planId 计划ID
+ * @return 任务列表
+ */
+ List getTaskByPlanId(Long planId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/api/ITaskPlanDomain.java b/src/main/java/com/ruoyi/task/domain/api/ITaskPlanDomain.java
new file mode 100644
index 0000000..84eafa9
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/api/ITaskPlanDomain.java
@@ -0,0 +1,79 @@
+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 getTaskPlanList(TaskPlan taskPlan);
+
+ /**
+ * 根据计划类型获取任务计划
+ *
+ * @param planType 计划类型
+ * @return 任务计划列表
+ */
+ List getTaskPlanByType(String planType);
+
+ /**
+ * 根据状态获取任务计划
+ *
+ * @param status 状态
+ * @return 任务计划列表
+ */
+ List getTaskPlanByStatus(String status);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/api/ITaskStatDomain.java b/src/main/java/com/ruoyi/task/domain/api/ITaskStatDomain.java
new file mode 100644
index 0000000..004dc61
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/api/ITaskStatDomain.java
@@ -0,0 +1,100 @@
+package com.ruoyi.task.domain.api;
+
+import com.ruoyi.task.domain.model.TaskStat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 任务统计领域接口
+ *
+ * @author ruoyi
+ * @date 2026-03-05
+ */
+public interface ITaskStatDomain {
+
+ /**
+ * 根据时间范围获取任务统计
+ *
+ * @param startTime 开始时间
+ * @param endTime 结束时间
+ * @param airportCode 机场代码
+ * @param routeName 航线名称
+ * @param taskCategory 任务类别
+ * @param taskType 任务类型
+ * @param taskStatus 任务状态
+ * @return 任务统计列表
+ */
+ List getTaskStatByTimeRange(Date startTime, Date endTime, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus);
+
+ /**
+ * 按月获取任务统计
+ *
+ * @param year 年份
+ * @param month 月份
+ * @param airportCode 机场代码
+ * @param routeName 航线名称
+ * @param taskCategory 任务类别
+ * @param taskType 任务类型
+ * @param taskStatus 任务状态
+ * @return 任务统计列表
+ */
+ List getTaskStatByMonth(int year, int month, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus);
+
+ /**
+ * 按周获取任务统计
+ *
+ * @param year 年份
+ * @param week 周数
+ * @param airportCode 机场代码
+ * @param routeName 航线名称
+ * @param taskCategory 任务类别
+ * @param taskType 任务类型
+ * @param taskStatus 任务状态
+ * @return 任务统计列表
+ */
+ List getTaskStatByWeek(int year, int week, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus);
+
+ /**
+ * 按年获取任务统计
+ *
+ * @param year 年份
+ * @param airportCode 机场代码
+ * @param routeName 航线名称
+ * @param taskCategory 任务类别
+ * @param taskType 任务类型
+ * @param taskStatus 任务状态
+ * @return 任务统计列表
+ */
+ List getTaskStatByYear(int year, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus);
+
+ /**
+ * 按任务类别获取统计
+ *
+ * @param taskCategory 任务类别
+ * @param startTime 开始时间
+ * @param endTime 结束时间
+ * @return 任务统计列表
+ */
+ List getTaskStatByCategory(String taskCategory, Date startTime, Date endTime);
+
+ /**
+ * 按任务类型获取统计
+ *
+ * @param taskType 任务类型
+ * @param startTime 开始时间
+ * @param endTime 结束时间
+ * @return 任务统计列表
+ */
+ List getTaskStatByType(String taskType, Date startTime, Date endTime);
+
+ /**
+ * 按任务状态获取统计
+ *
+ * @param taskStatus 任务状态
+ * @param startTime 开始时间
+ * @param endTime 结束时间
+ * @return 任务统计列表
+ */
+ List getTaskStatByStatus(String taskStatus, Date startTime, Date endTime);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/convert/TaskConvert.java b/src/main/java/com/ruoyi/task/domain/convert/TaskConvert.java
new file mode 100644
index 0000000..f8d0d27
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/convert/TaskConvert.java
@@ -0,0 +1,79 @@
+package com.ruoyi.task.domain.convert;
+
+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(entity.getTaskCategory());
+ model.setTaskType(entity.getTaskType());
+ model.setExecuteType(entity.getExecuteType());
+ model.setRouteId(entity.getRouteId());
+ model.setUavId(entity.getUavId());
+ model.setStatus(entity.getStatus());
+ model.setStartTime(entity.getStartTime());
+ model.setEndTime(entity.getEndTime());
+ model.setDescription(entity.getDescription());
+ model.setCreateBy(entity.getCreateBy());
+ model.setCreateTime(entity.getCreateTime());
+ model.setUpdateBy(entity.getUpdateBy());
+ model.setUpdateTime(entity.getUpdateTime());
+ model.setRemark(entity.getRemark());
+
+ 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());
+ entity.setTaskType(model.getTaskType());
+ entity.setExecuteType(model.getExecuteType());
+ entity.setRouteId(model.getRouteId());
+ entity.setUavId(model.getUavId());
+ entity.setStatus(model.getStatus());
+ entity.setStartTime(model.getStartTime());
+ entity.setEndTime(model.getEndTime());
+ entity.setDescription(model.getDescription());
+ entity.setCreateBy(model.getCreateBy());
+ entity.setCreateTime(model.getCreateTime());
+ entity.setUpdateBy(model.getUpdateBy());
+ entity.setUpdateTime(model.getUpdateTime());
+ entity.setRemark(model.getRemark());
+
+ return entity;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/convert/TaskPlanConvert.java b/src/main/java/com/ruoyi/task/domain/convert/TaskPlanConvert.java
new file mode 100644
index 0000000..d1e9ec9
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/convert/TaskPlanConvert.java
@@ -0,0 +1,81 @@
+package com.ruoyi.task.domain.convert;
+
+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(entity.getPlanType());
+ model.setExecuteType(entity.getExecuteType());
+ model.setCycleType(entity.getCycleType());
+ model.setCycleValue(entity.getCycleValue());
+ model.setStartDate(entity.getStartDate());
+ model.setEndDate(entity.getEndDate());
+ model.setExecuteTime(entity.getExecuteTime());
+ model.setRouteId(entity.getRouteId());
+ model.setUavId(entity.getUavId());
+ model.setStatus(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());
+
+ 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());
+ entity.setExecuteType(model.getExecuteType());
+ entity.setCycleType(model.getCycleType());
+ entity.setCycleValue(model.getCycleValue());
+ entity.setStartDate(model.getStartDate());
+ entity.setEndDate(model.getEndDate());
+ entity.setExecuteTime(model.getExecuteTime());
+ entity.setRouteId(model.getRouteId());
+ entity.setUavId(model.getUavId());
+ entity.setStatus(model.getStatus());
+ entity.setDescription(model.getDescription());
+ entity.setCreateBy(model.getCreateBy());
+ entity.setCreateTime(model.getCreateTime());
+ entity.setUpdateBy(model.getUpdateBy());
+ entity.setUpdateTime(model.getUpdateTime());
+ entity.setRemark(model.getRemark());
+
+ return entity;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/convert/TaskStatConvert.java b/src/main/java/com/ruoyi/task/domain/convert/TaskStatConvert.java
new file mode 100644
index 0000000..2cae5eb
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/convert/TaskStatConvert.java
@@ -0,0 +1,71 @@
+package com.ruoyi.task.domain.convert;
+
+import com.ruoyi.task.domain.model.TaskStat;
+import com.ruoyi.task.mapper.entity.TaskStatEntity;
+
+/**
+ * 任务统计转换类
+ *
+ * @author ruoyi
+ * @date 2026-03-05
+ */
+public class TaskStatConvert {
+
+ /**
+ * 将实体转换为领域模型
+ *
+ * @param entity 任务统计实体
+ * @return 任务统计领域模型
+ */
+ public static TaskStat toModel(TaskStatEntity entity) {
+ if (entity == null) {
+ return null;
+ }
+
+ TaskStat model = new TaskStat();
+ model.setId(entity.getId());
+ model.setAirportCode(entity.getAirportCode());
+ model.setRouteName(entity.getRouteName());
+ model.setTaskCategory(entity.getTaskCategory());
+ model.setTaskType(entity.getTaskType());
+ model.setTaskStatus(entity.getTaskStatus());
+ model.setYear(entity.getYear());
+ model.setMonth(entity.getMonth());
+ model.setDay(entity.getDay());
+ model.setTaskCount(entity.getTaskCount());
+ model.setCreateBy(entity.getCreateBy());
+ model.setUpdateBy(entity.getUpdateBy());
+ model.setRemark(entity.getRemark());
+
+ return model;
+ }
+
+ /**
+ * 将领域模型转换为实体
+ *
+ * @param model 任务统计领域模型
+ * @return 任务统计实体
+ */
+ public static TaskStatEntity toEntity(TaskStat model) {
+ if (model == null) {
+ return null;
+ }
+
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setId(model.getId());
+ entity.setAirportCode(model.getAirportCode());
+ entity.setRouteName(model.getRouteName());
+ entity.setTaskCategory(model.getTaskCategory());
+ entity.setTaskType(model.getTaskType());
+ entity.setTaskStatus(model.getTaskStatus());
+ entity.setYear(model.getYear());
+ entity.setMonth(model.getMonth());
+ entity.setDay(model.getDay());
+ entity.setTaskCount(model.getTaskCount());
+ entity.setCreateBy(model.getCreateBy());
+ entity.setUpdateBy(model.getUpdateBy());
+ entity.setRemark(model.getRemark());
+
+ return entity;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/impl/TaskDomainImpl.java b/src/main/java/com/ruoyi/task/domain/impl/TaskDomainImpl.java
new file mode 100644
index 0000000..3c0d643
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/impl/TaskDomainImpl.java
@@ -0,0 +1,90 @@
+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 createTaskWithoutPlan(Task task) {
+ // 确保planId为null,表示无关联计划
+ task.setPlanId(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 getTaskList(Task task) {
+ // 转换为实体作为查询条件
+ TaskInfoEntity entity = TaskConvert.toEntity(task);
+ // 查询数据库
+ List entityList = taskInfoMapper.selectTaskInfoList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskByPlanId(Long planId) {
+ // 创建查询条件
+ TaskInfoEntity entity = new TaskInfoEntity();
+ entity.setPlanId(planId);
+ // 查询数据库
+ List entityList = taskInfoMapper.selectTaskInfoList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskConvert::toModel)
+ .collect(Collectors.toList());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/impl/TaskPlanDomainImpl.java b/src/main/java/com/ruoyi/task/domain/impl/TaskPlanDomainImpl.java
new file mode 100644
index 0000000..088af30
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/impl/TaskPlanDomainImpl.java
@@ -0,0 +1,115 @@
+package com.ruoyi.task.domain.impl;
+
+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.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("定时任务计划");
+ // 转换为实体
+ TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
+ // 插入数据库
+ taskPlanMapper.insertTaskPlan(entity);
+ // 转换回领域模型并返回
+ return TaskPlanConvert.toModel(entity);
+ }
+
+ @Override
+ public TaskPlan createCycleTaskPlan(TaskPlan taskPlan) {
+ // 设置计划类型为周期任务计划
+ taskPlan.setPlanType("周期任务计划");
+ // 转换为实体
+ 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 getTaskPlanList(TaskPlan taskPlan) {
+ // 转换为实体作为查询条件
+ TaskPlanEntity entity = TaskPlanConvert.toEntity(taskPlan);
+ // 查询数据库
+ List entityList = taskPlanMapper.selectTaskPlanList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskPlanConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskPlanByType(String planType) {
+ // 创建查询条件
+ TaskPlanEntity entity = new TaskPlanEntity();
+ entity.setPlanType(planType);
+ // 查询数据库
+ List entityList = taskPlanMapper.selectTaskPlanList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskPlanConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskPlanByStatus(String status) {
+ // 创建查询条件
+ TaskPlanEntity entity = new TaskPlanEntity();
+ entity.setStatus(status);
+ // 查询数据库
+ List entityList = taskPlanMapper.selectTaskPlanList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskPlanConvert::toModel)
+ .collect(Collectors.toList());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/impl/TaskStatDomainImpl.java b/src/main/java/com/ruoyi/task/domain/impl/TaskStatDomainImpl.java
new file mode 100644
index 0000000..13149db
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/impl/TaskStatDomainImpl.java
@@ -0,0 +1,146 @@
+package com.ruoyi.task.domain.impl;
+
+import com.ruoyi.task.domain.api.ITaskStatDomain;
+import com.ruoyi.task.domain.convert.TaskStatConvert;
+import com.ruoyi.task.domain.model.TaskStat;
+import com.ruoyi.task.mapper.TaskStatMapper;
+import com.ruoyi.task.mapper.entity.TaskStatEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 任务统计领域实现类
+ *
+ * @author ruoyi
+ * @date 2026-03-05
+ */
+@Component
+public class TaskStatDomainImpl implements ITaskStatDomain {
+
+ @Autowired
+ private TaskStatMapper taskStatMapper;
+
+ @Override
+ public List getTaskStatByTimeRange(Date startTime, Date endTime, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ // 这里需要根据实际的数据库查询逻辑来设置条件
+ // 由于TaskStatMapper的selectTaskStatList方法支持的条件有限,
+ // 实际实现中可能需要扩展Mapper接口或使用其他方式实现复杂查询
+ // 这里仅作为示例
+ entity.setAirportCode(airportCode);
+ entity.setTaskCategory(taskCategory);
+ entity.setTaskType(taskType);
+ entity.setTaskStatus(taskStatus);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByMonth(int year, int month, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setYear(year);
+ entity.setMonth(month);
+ entity.setAirportCode(airportCode);
+ entity.setTaskCategory(taskCategory);
+ entity.setTaskType(taskType);
+ entity.setTaskStatus(taskStatus);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByWeek(int year, int week, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ // 周统计需要根据实际的周计算逻辑来设置条件
+ // 这里仅作为示例
+ entity.setYear(year);
+ entity.setAirportCode(airportCode);
+ entity.setTaskCategory(taskCategory);
+ entity.setTaskType(taskType);
+ entity.setTaskStatus(taskStatus);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByYear(int year, String airportCode, String routeName, String taskCategory, String taskType, String taskStatus) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setYear(year);
+ entity.setAirportCode(airportCode);
+ entity.setTaskCategory(taskCategory);
+ entity.setTaskType(taskType);
+ entity.setTaskStatus(taskStatus);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByCategory(String taskCategory, Date startTime, Date endTime) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setTaskCategory(taskCategory);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByType(String taskType, Date startTime, Date endTime) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setTaskType(taskType);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getTaskStatByStatus(String taskStatus, Date startTime, Date endTime) {
+ // 创建查询条件
+ TaskStatEntity entity = new TaskStatEntity();
+ entity.setTaskStatus(taskStatus);
+
+ // 查询数据库
+ List entityList = taskStatMapper.selectTaskStatList(entity);
+ // 转换为领域模型列表并返回
+ return entityList.stream()
+ .map(TaskStatConvert::toModel)
+ .collect(Collectors.toList());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/model/Task.java b/src/main/java/com/ruoyi/task/domain/model/Task.java
new file mode 100644
index 0000000..a2b9e9e
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/model/Task.java
@@ -0,0 +1,218 @@
+package com.ruoyi.task.domain.model;
+
+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 String taskCategory;
+
+ /** 任务类型(如一键起飞) */
+ private String taskType;
+
+ /** 执行类型(单次执行、连续执行) */
+ private String executeType;
+
+ /** 航线ID */
+ private Long routeId;
+
+ /** 无人机ID */
+ private Long uavId;
+
+ /** 状态(0待执行 1执行中 2已完成 3已取消) */
+ private String status;
+
+ /** 开始时间 */
+ private Date startTime;
+
+ /** 结束时间 */
+ private Date endTime;
+
+ /** 描述 */
+ private String description;
+
+ /** 创建者 */
+ private String createBy;
+
+ /** 创建时间 */
+ private Date createTime;
+
+ /** 更新者 */
+ private String updateBy;
+
+ /** 更新时间 */
+ private Date updateTime;
+
+ /** 备注 */
+ private String remark;
+
+ // 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 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 String getExecuteType() {
+ return executeType;
+ }
+
+ public void setExecuteType(String executeType) {
+ this.executeType = executeType;
+ }
+
+ public Long getRouteId() {
+ return routeId;
+ }
+
+ public void setRouteId(Long routeId) {
+ this.routeId = routeId;
+ }
+
+ public Long getUavId() {
+ return uavId;
+ }
+
+ public void setUavId(Long uavId) {
+ this.uavId = uavId;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ 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 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;
+ }
+
+ @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 +
+ ", description='" + description + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/model/TaskPlan.java b/src/main/java/com/ruoyi/task/domain/model/TaskPlan.java
new file mode 100644
index 0000000..33ea024
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/model/TaskPlan.java
@@ -0,0 +1,230 @@
+package com.ruoyi.task.domain.model;
+
+import java.util.Date;
+
+/**
+ * 任务计划领域模型
+ *
+ * @author ruoyi
+ * @date 2026-03-05
+ */
+public class TaskPlan {
+
+ /** 计划ID */
+ private Long id;
+
+ /** 计划名称 */
+ private String planName;
+
+ /** 计划类型(定时任务计划、周期任务计划) */
+ private String planType;
+
+ /** 执行类型(单次执行、连续执行) */
+ private String executeType;
+
+ /** 周期类型(日周期、周周期、月周期) */
+ private String cycleType;
+
+ /** 周期值(周周期:1-7多选,如"1,3,5";月周期:1-31多选,如"1,15,30") */
+ private String cycleValue;
+
+ /** 开始日期 */
+ private Date startDate;
+
+ /** 结束日期 */
+ private Date endDate;
+
+ /** 执行时间(仅在定义任务时有效) */
+ private Date executeTime;
+
+ /** 航线ID */
+ private Long routeId;
+
+ /** 无人机ID */
+ private Long uavId;
+
+ /** 状态(0待执行 1执行中 2已完成 3已取消) */
+ private String status;
+
+ /** 描述 */
+ private String description;
+
+ /** 创建者 */
+ private String createBy;
+
+ /** 创建时间 */
+ private Date createTime;
+
+ /** 更新者 */
+ private String updateBy;
+
+ /** 更新时间 */
+ private Date updateTime;
+
+ /** 备注 */
+ private String remark;
+
+ // 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 String getPlanType() {
+ return planType;
+ }
+
+ public void setPlanType(String planType) {
+ this.planType = planType;
+ }
+
+ public String getExecuteType() {
+ return executeType;
+ }
+
+ public void setExecuteType(String executeType) {
+ this.executeType = executeType;
+ }
+
+ 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 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 Long getRouteId() {
+ return routeId;
+ }
+
+ public void setRouteId(Long routeId) {
+ this.routeId = routeId;
+ }
+
+ public Long getUavId() {
+ return uavId;
+ }
+
+ public void setUavId(Long 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 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;
+ }
+
+ @Override
+ public String toString() {
+ return "TaskPlan{" +
+ "id=" + id +
+ ", planName='" + planName + '\'' +
+ ", planType='" + planType + '\'' +
+ ", executeType='" + executeType + '\'' +
+ ", cycleType='" + cycleType + '\'' +
+ ", cycleValue='" + cycleValue + '\'' +
+ ", startDate=" + startDate +
+ ", endDate=" + endDate +
+ ", executeTime=" + executeTime +
+ ", routeId=" + routeId +
+ ", uavId=" + uavId +
+ ", status='" + status + '\'' +
+ ", description='" + description + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/task/domain/model/TaskStat.java b/src/main/java/com/ruoyi/task/domain/model/TaskStat.java
new file mode 100644
index 0000000..bd6c450
--- /dev/null
+++ b/src/main/java/com/ruoyi/task/domain/model/TaskStat.java
@@ -0,0 +1,170 @@
+package com.ruoyi.task.domain.model;
+
+/**
+ * 任务统计领域模型
+ *
+ * @author ruoyi
+ * @date 2026-03-05
+ */
+public class TaskStat {
+
+ /** 统计ID */
+ private Long id;
+
+ /** 机场代码 */
+ private String airportCode;
+
+ /** 航线名称 */
+ private String routeName;
+
+ /** 任务类别(如人工执飞) */
+ private String taskCategory;
+
+ /** 任务类型(如一键起飞) */
+ private String taskType;
+
+ /** 任务状态(0待执行 1执行中 2已完成 3已取消) */
+ private String taskStatus;
+
+ /** 年份 */
+ private Integer year;
+
+ /** 月份 */
+ private Integer month;
+
+ /** 日期 */
+ private Integer day;
+
+ /** 任务数量 */
+ private Integer taskCount;
+
+ /** 创建者 */
+ private String createBy;
+
+ /** 更新者 */
+ private String updateBy;
+
+ /** 备注 */
+ private String remark;
+
+ // Getters and Setters
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ 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;
+ }
+
+ 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 String getTaskStatus() {
+ return taskStatus;
+ }
+
+ public void setTaskStatus(String taskStatus) {
+ this.taskStatus = taskStatus;
+ }
+
+ 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 Integer getDay() {
+ return day;
+ }
+
+ public void setDay(Integer day) {
+ this.day = day;
+ }
+
+ public Integer getTaskCount() {
+ return taskCount;
+ }
+
+ public void setTaskCount(Integer taskCount) {
+ this.taskCount = taskCount;
+ }
+
+ public String getCreateBy() {
+ return createBy;
+ }
+
+ public void setCreateBy(String createBy) {
+ this.createBy = createBy;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ @Override
+ public String toString() {
+ return "TaskStat{" +
+ "id=" + id +
+ ", airportCode='" + airportCode + '\'' +
+ ", routeName='" + routeName + '\'' +
+ ", taskCategory='" + taskCategory + '\'' +
+ ", taskType='" + taskType + '\'' +
+ ", taskStatus='" + taskStatus + '\'' +
+ ", year=" + year +
+ ", month=" + month +
+ ", day=" + day +
+ ", taskCount=" + taskCount +
+ '}';
+ }
+}
\ No newline at end of file