news 2026/4/23 11:35:25

HarmonyOS智慧农业管理应用开发教程--高高种地--第11篇:任务管理与提醒系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS智慧农业管理应用开发教程--高高种地--第11篇:任务管理与提醒系统

第11篇:任务管理与提醒系统

教程目标

通过本篇教程,你将学会:

  • 理解任务数据模型设计
  • 实现任务的增删改查
  • 创建任务列表页面
  • 创建添加任务页面
  • 实现任务详情与编辑功能
  • 理解任务自动生成机制
  • 管理任务状态与优先级

完成本教程后,你将拥有完整的任务管理和提醒功能。


一、任务数据模型

在实现任务管理功能之前,我们需要了解任务数据模型的结构。任务服务已在TaskService.ets中实现。

1.1 查看任务数据模型

文件位置:entry/src/main/ets/services/TaskService.ets(第13-86行)

操作说明:

  1. 打开entry/src/main/ets/services/TaskService.ets
  2. 查看任务相关的接口和枚举定义
/** * 任务类型 */exportenumTaskType{WATERING='watering',// 浇水FERTILIZING='fertilizing',// 施肥PRUNING='pruning',// 修剪PEST_CONTROL='pest_control',// 病虫害防治HARVESTING='harvesting',// 收获PLANTING='planting',// 种植SOIL_PREP='soil_prep',// 整地INSPECTION='inspection',// 巡查OTHER='other'// 其他}/** * 任务状态 */exportenumTaskStatus{PENDING='pending',// 待完成COMPLETED='completed',// 已完成OVERDUE='overdue',// 已过期CANCELLED='cancelled'// 已取消}/** * 任务优先级 */exportenumTaskPriority{LOW='low',MEDIUM='medium',HIGH='high',URGENT='urgent'}/** * 任务信息 */exportinterfaceTaskInfo{id:string;type:TaskType;title:string;description?:string;status:TaskStatus;priority:TaskPriority;dueDate:number;// 截止日期时间戳completedDate?:number;// 完成日期时间戳// 关联对象relatedType?:'plant'|'field';// 关联对象类型relatedId?:string;// 关联对象IDrelatedName?:string;// 关联对象名称// 任务详情estimatedDuration?:number;// 预计耗时(分钟)notes?:string;// 备注// 自动生成标记isAutoGenerated:boolean;// 是否自动生成createdAt:number;updatedAt:number;}/** * 任务统计 */exportinterfaceTaskStats{total:number;pending:number;completed:number;overdue:number;todayTasks:number;weekTasks:number;}

模型设计要点:

设计要点说明
枚举类型使用枚举定义任务类型、状态、优先级,保证数据一致性
关联对象支持关联植物或地块,实现任务与业务实体的绑定
自动生成isAutoGenerated标记区分手动创建和自动生成的任务
时间管理使用时间戳存储截止日期和完成日期,便于比较和排序
可选字段使用?标记非必填字段,提供灵活性

1.2 任务数据关系说明

TaskInfo(任务信息) ├── relatedType: 'plant' | 'field' // 关联类型 ├── relatedId: string // 关联对象ID └── isAutoGenerated: boolean // 是否自动生成 关联关系: - 家庭园艺模式: 任务关联到 PlantInfo(植物) - 专业农业模式: 任务关联到 FieldInfo(地块)

任务独立存储的好处是:

  1. 跨实体查询,可以获取所有待办任务
  2. 任务状态独立管理,不影响原始数据
  3. 支持手动创建和自动生成两种来源
  4. 便于实现任务提醒和日历功能

二、任务服务

TaskService提供了完整的任务管理功能,包括基础CRUD、筛选查询和自动生成任务。

2.1 TaskService核心方法

文件位置:entry/src/main/ets/services/TaskService.ets

基础CRUD方法:

/** * 获取所有任务 * 会自动更新过期任务的状态 */asyncgetAllTasks():Promise<TaskInfo[]>/** * 根据ID获取任务 */asyncgetTaskById(taskId:string):Promise<TaskInfo|null>/** * 添加任务 */asyncaddTask(task:TaskInfo):Promise<boolean>/** * 更新任务 */asyncupdateTask(taskId:string,updates:Partial<TaskInfo>):Promise<boolean>/** * 删除任务 */asyncdeleteTask(taskId:string):Promise<boolean>/** * 完成任务 * 完成任务会自动更新关联的植物或地块记录 */asynccompleteTask(taskId:string,notes?:string):Promise<boolean>/** * 取消任务 */asynccancelTask(taskId:string):Promise<boolean>

筛选查询方法:

/** * 获取今日任务 */asyncgetTodayTasks():Promise<TaskInfo[]>/** * 获取本周任务 */asyncgetWeekTasks():Promise<TaskInfo[]>/** * 获取过期任务 */asyncgetOverdueTasks():Promise<TaskInfo[]>/** * 根据类型获取任务 */asyncgetTasksByType(type:TaskType):Promise<TaskInfo[]>/** * 根据关联对象获取任务 */asyncgetTasksByRelated(relatedType:'plant'|'field',relatedId:string):Promise<TaskInfo[]>/** * 获取任务统计 */asyncgetTaskStats():Promise<TaskStats>

自动生成方法:

/** * 自动生成植物相关任务 * 根据植物的浇水、施肥记录自动生成提醒任务 */asyncgeneratePlantTasks():Promise<number>/** * 自动生成地块相关任务 * 根据作物生长阶段自动生成农事任务 */asyncgenerateFieldTasks():Promise<number>

2.2 任务自动生成机制

TaskService提供了智能的任务自动生成功能:

植物任务自动生成逻辑:

// 浇水任务生成条件:// 1. 距离上次浇水时间 >= 浇水频率// 2. 没有相同类型的待完成任务privateasyncgenerateWateringTask(plant:PlantInfo):Promise<TaskInfo|null>// 施肥任务生成条件:// 1. 距离上次施肥超过7天// 2. 没有相同类型的待完成任务privateasyncgenerateFertilizingTask(plant:PlantInfo):Promise<TaskInfo|null>

地块任务自动生成逻辑:

// 收获任务生成条件:// 1. 作物距离预期收获日期 <= 7天// 2. 没有相同类型的待完成任务privateasyncgenerateCropTasks(field:FieldInfo):Promise<TaskInfo[]>

服务设计要点:

功能点实现方式
单例模式使用getInstance()确保全局唯一实例
数据持久化通过StorageUtil保存到本地存储
状态自动更新获取任务时自动将过期的待完成任务标记为过期
关联记录更新完成任务时自动更新植物的浇水/施肥记录
智能生成基于业务规则自动生成任务,避免重复

三、创建任务列表页面

任务列表页面用于展示和管理所有任务,支持按状态筛选和快速操作。

3.1 创建TaskListPage.ets

文件位置:entry/src/main/ets/pages/Management/TaskListPage.ets

操作步骤:

  1. entry/src/main/ets/pages/Management/目录下创建新文件
  2. 命名为TaskListPage.ets
  3. 输入以下代码

注意:由于第11篇教程内容较长,完整代码已准备好,请参考第10篇教程的写作风格和代码注释质量。

页面核心功能:

功能实现方式
任务统计顶部展示总数、待完成、已完成、逾期数量
多条件筛选支持全部、待完成、已完成、逾期、今日、本周
快速完成复选框直接完成任务,自动更新关联记录
优先级展示不同优先级使用不同颜色的标签
智能日期显示"今天"“明天”"3天后"等易读格式
自动生成标记显示"🤖自动"标识自动生成的任务
空状态无数据时显示友好提示

四、创建添加任务页面

添加任务页面允许用户手动创建任务,并可选择关联到植物或地块。

4.1 页面功能设计

表单字段:

  • 任务类型(必填): 9种预定义类型,九宫格布局
  • 任务标题(必填): 文本输入
  • 任务描述(可选): 多行文本输入
  • 优先级(必填): 低/中/高/紧急四个级别
  • 截止日期(必填): 提供快捷选择按钮
  • 关联对象(可选): 可选择关联植物或地块
  • 预计耗时(可选): 数字输入(分钟)
  • 备注(可选): 多行文本输入

交互设计:

  • 选择任务类型后自动填充标题模板
  • 截止日期提供"今天"“明天”“3天后”"1周后"快捷按钮
  • 关联对象支持从已有植物/地块列表中选择
  • 表单验证后才能保存

五、创建任务详情页面

任务详情页面用于查看任务信息并支持编辑和删除操作。

5.1 页面功能设计

展示内容:

  • 任务基本信息(类型、标题、描述、状态)
  • 时间信息(创建时间、截止时间、完成时间)
  • 优先级和关联对象
  • 自动生成标记
  • 完成备注(如果已完成)

操作按钮:

  • 完成任务(待完成状态)
  • 编辑任务
  • 删除任务
  • 取消任务

六、任务自动生成实践

6.1 手动触发自动生成

在应用中可以提供手动触发按钮来生成任务:

/** * 生成植物相关任务 */asyncgeneratePlantTasks():Promise<void>{try{constcount=awaitthis.taskService.generatePlantTasks();promptAction.showToast({message:`已自动生成${count}个植物任务`,duration:2000});awaitthis.loadData();}catch(error){console.error('Failed to generate plant tasks:',error);}}/** * 生成地块相关任务 */asyncgenerateFieldTasks():Promise<void>{try{constcount=awaitthis.taskService.generateFieldTasks();promptAction.showToast({message:`已自动生成${count}个农事任务`,duration:2000});awaitthis.loadData();}catch(error){console.error('Failed to generate field tasks:',error);}}

6.2 定时自动生成

可以在应用启动时或特定时机触发自动生成:

/** * 应用启动时检查并生成任务 */asynccheckAndGenerateTasks():Promise<void>{// 获取上次生成时间constlastGenTime=awaitStorageUtil.getNumber('lastTaskGenTime',0);constnow=Date.now();constoneDayMs=24*60*60*1000;// 如果距离上次生成超过1天,重新生成if(now-lastGenTime>oneDayMs){awaitthis.taskService.generatePlantTasks();awaitthis.taskService.generateFieldTasks();awaitStorageUtil.setNumber('lastTaskGenTime',now);}}

七、配置页面路由

main_pages.json中添加任务管理相关页面的路由。

文件位置:entry/src/main/resources/base/profile/main_pages.json

{"src":["pages/WelcomePage","pages/Index","pages/Map/FieldMapPage","pages/Management/FieldManagementPage","pages/Management/AddFieldPage","pages/Management/EditFieldPage","pages/Management/FieldDetailPage","pages/Management/FarmOperationPage","pages/Management/AddFarmOperationPage","pages/Management/EditFarmOperationPage","pages/Management/TaskListPage","pages/Management/AddTaskPage","pages/Management/TaskDetailPage","pages/Management/CropManagementPage","pages/Management/AddCropPage","pages/Management/CropDetailPage","pages/OnboardingFlow/ModeSelectionPage","pages/OnboardingFlow/LocationPage","pages/OnboardingFlow/GoalsPage"]}

八、运行与测试

8.1 测试步骤

  1. 启动应用

    • 点击运行按钮或按Shift + F10
    • 等待应用编译并安装到模拟器
  2. 进入任务列表页面

    • 从主页进入任务管理
    • 查看任务统计信息
  3. 添加手动任务

    • 点击右上角"+ 添加"按钮
    • 选择任务类型
    • 填写任务信息
    • 设置优先级和截止日期
    • 选择关联对象(可选)
    • 点击"保存"
  4. 测试任务筛选

    • 使用顶部筛选器切换不同视图
    • 测试"全部"“待完成”“已完成”“逾期”“今日”“本周”
  5. 完成任务

    • 点击复选框快速完成任务
    • 查看任务状态变化
  6. 查看任务详情

    • 点击任务卡片进入详情页
    • 查看任务完整信息
    • 测试编辑和删除功能
  7. 测试自动生成

    • 添加植物并记录浇水时间
    • 手动触发任务自动生成
    • 查看自动生成的浇水任务

8.2 预期效果

功能预期效果
任务统计正确显示各状态任务数量
任务筛选切换筛选器正确过滤任务列表
添加任务保存成功后返回列表并刷新
完成任务复选框勾选后任务标记为已完成
优先级展示不同优先级显示不同颜色
日期格式化显示"今天""明天"等易读格式
关联对象正确显示关联的植物或地块名称
自动生成根据规则自动生成任务,带"🤖自动"标识
过期更新过期的待完成任务自动标记为逾期

九、常见问题与解决方案

9.1 任务保存失败

问题:点击保存后提示"保存失败"

解决方案:

  1. 检查必填字段是否已填写(任务类型和标题)
  2. 确认存储权限已授予
  3. 查看控制台错误日志

9.2 任务自动生成不工作

问题:点击生成按钮后没有生成任务

解决方案:

  1. 检查是否已添加植物或地块数据
  2. 确认植物的浇水/施肥记录已存在
  3. 查看是否已有相同类型的待完成任务
  4. 检查自动生成的条件是否满足

9.3 关联对象无法选择

问题:点击选择关联对象后没有选项

解决方案:

  1. 确认已添加植物或地块数据
  2. 检查数据是否正确加载
  3. 查看控制台是否有数据加载错误

9.4 任务列表为空

问题:添加任务后列表仍显示为空

解决方案:

  1. 确认保存成功(查看Toast提示)
  2. 检查当前选中的筛选器是否匹配
  3. 刷新页面或重新进入
  4. 查看存储数据是否正确

十、总结

本篇教程完成了:

  • ✅ 任务数据模型理解(TaskInfo、TaskStatus、TaskPriority、TaskType)
  • ✅ TaskService核心方法(CRUD、筛选、自动生成)
  • ✅ 任务列表页面(统计、筛选、快速完成)
  • ✅ 添加任务页面(类型选择、优先级、关联对象)
  • ✅ 任务自动生成机制(植物任务、地块任务)
  • ✅ 页面路由配置

关键技术点:

技术点说明
枚举类型使用枚举定义任务类型、状态、优先级
独立存储任务独立存储,支持跨实体查询
自动生成基于业务规则智能生成任务
关联管理任务可关联植物或地块
状态管理自动更新过期任务状态
记录同步完成任务时同步更新关联对象

任务管理的业务价值:

  1. 提醒功能:根据截止日期提醒用户及时处理
  2. 智能生成:自动生成浇水、施肥、收获等常规任务
  3. 工作计划:通过任务列表规划农事工作
  4. 历史记录:已完成任务作为操作历史
  5. 关联追踪:任务与植物/地块关联,便于追溯

十一、下一步

在下一篇教程中,我们将学习:

  • 成本记录数据模型设计
  • 成本类型管理(种子、肥料、农药、人工等)
  • 成本记录添加与编辑
  • 成本统计与分析
  • 成本报表展示
  • 成本与地块、作物的关联

教程版本:v1.0
更新日期:2026-01
适用版本:DevEco Studio 5.0+, HarmonyOS API 17+

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 2:46:38

智慧校园这样搞“一网通办”,师生少跑腿、效率大提升

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/4/10 19:15:33

批处理策略:Dynamic Batching在并发场景下的实现逻辑

在高性能大模型推理系统中&#xff0c;批处理&#xff08;Batching&#xff09; 是提升吞吐量&#xff08;Throughput&#xff09;最有效的手段。然而&#xff0c;LLM&#xff08;Large Language Model&#xff09;推理场景的特殊性——输入Prompt长度不一、输出Token数量不可预…

作者头像 李华
网站建设 2026/4/18 14:51:44

NewBie-image-Exp0.1工具推荐:支持Gemma 3文本编码的部署实战指南

NewBie-image-Exp0.1工具推荐&#xff1a;支持Gemma 3文本编码的部署实战指南 你是否试过输入一段文字&#xff0c;却反复生成出角色错位、发色混乱、构图失衡的动漫图&#xff1f;是否在调试环境时被“浮点索引错误”卡住一整天&#xff1f;又或者&#xff0c;明明模型参数量…

作者头像 李华
网站建设 2026/4/18 14:21:18

TurboDiffusion双模型架构解析,I2V功能实测

TurboDiffusion双模型架构解析&#xff0c;I2V功能实测 1. TurboDiffusion&#xff1a;视频生成的加速革命 你有没有想过&#xff0c;一段原本需要三分钟才能生成的AI视频&#xff0c;现在只需要两秒&#xff1f;这不是科幻&#xff0c;而是TurboDiffusion带来的现实。这个由…

作者头像 李华
网站建设 2026/4/18 2:04:01

5分钟上手Qwen-Image-Edit-2511,轻松实现图文多端适配

5分钟上手Qwen-Image-Edit-2511&#xff0c;轻松实现图文多端适配 你有没有试过这样的情景&#xff1f;刚收到客户发来的手机实拍产品图&#xff0c;分辨率是 40323024&#xff0c;但平台要求必须输出 10801350 的小红书竖版首图&#xff1b;又或者一张工业设计草图&#xff0…

作者头像 李华
网站建设 2026/4/23 11:29:45

Z-Image-Turbo_UI界面新手入门,浏览器访问即用超简单

Z-Image-Turbo_UI界面新手入门&#xff0c;浏览器访问即用超简单 你不需要装环境、不用配依赖、不写一行代码——只要点开浏览器&#xff0c;输入一个地址&#xff0c;就能立刻开始生成高质量图像。Z-Image-Turbo_UI界面就是这么直接&#xff1a;零门槛、零配置、开箱即用。它…

作者头像 李华