Task模块

Task模块-任务管理业务理解

#tech / dev / pm #type / howto #status / growing

[!info] related notes


Task模块设计思路

Overview

  1. 支持重复任务、单次任务(比如 跑步任务,每天 8点到9点)
  2. 任务应该有起止时间,支持无期限任务
  3. 支持区分时间段任务(单天内的,不支持跨天)、时间点任务、全天任务,
  4. 支持提醒功能,任务开始前几分钟之类的预设值
  5. 支持与 goal 模块的 keyResult 绑定,完成时自动增加 keyResult 完成记录(即创建 goalRecord)
  6. 我个人认为应该使用 任务模板-任务实例 的形式

服务

基础服务

  • 任务模板创建: 有任务的基础信息(名字、时间配置、重要性、信息)等,如果时绑定 goal 模块的关键结果,则 重要性、信息 可以直接从 goal 中继承。
  • 任务模板创建获取: 文件夹的名字、图标、颜色;获取所有文件夹。
  • 任务模板获取:根据生命周期筛选获取 (是直接进入页面就初始化获取所有目标,客户端筛选 还是 每次筛选都只从服务端 获取筛选结果? 筛选结果是不是可以缓存
  • 任务实例的创建: 通过任务模板生成

复杂业务服务

  • 任务模板应该支持层级关系,支持生成依赖图谱
  • 任务提醒: 用户可以设置任务提醒。应该需要和 schedule 和 reminder 模块联动。
  • 每日总结功能: 提供 task 模块相关的当日统计信息
  1. goal 模块、task 模块、reminder 模块的提醒功能需要依赖 schedule 模块,记得统一一下时间配置,应该是使用 cron 表达式
  2. 其他的

领域实体对象

聚合根对象:

  • task-template(任务模板): 定义任务的“元数据”和“生成规则”。
  • task-instance(任务实例): 具体的某一天的一个代办事项

实体对象:

  • SubTask (子任务): 简单的 CheckList,隶属于 Instance。

关键值对象:

  • TaskRecurrence (重复规则): 核心 VO,封装 Cron 表达式或 RRule。
  • TimeSlot (时间段): 包含 startTime, endTime, isAllDay
  • LinkedKeyResult (关联目标): 包含 goalId, keyResultId, contributionValue (完成该任务给 KR 贡献多少分)。

关键点

task 和 keyresult联动时的 完成 功能的业务问题

问题: 现在 complete 任务实例是默认根据 taskTemplate 创建时绑定的 关键结果值 来变化的,并且点击一下 按钮就生效,还支持 undo(还没准确实现)

我觉得当前的设计不好,因为关键结果是有多种计算方式,比如 普通的 累加,还有 取最大值、取平均值,完成时 比如当 绑定的关键结果为 考试最高分到达 90,每月进行一次考试 时,用户完成 考试任务,并标记完成,添加到新的 record 应该需要 用户根据本次的考试结果来确定,而非默认可以达到; 并且如果实现每次完成都需要弹窗确认并输入新的 record 的值,可以确保 用户不会误触,也就不需要 undo 功能(并不好实现)

解决方法: 所以应该取消默认的 record 值,改为用户点击 complete 时,弹窗显示相关信息,并让用户手动输入 新 record 的值 你觉得呢

功能

应该实现下面两种不同的功能: 还有 每个 instance 完成时,对应的 keyResult 记录增加 实现 template 完全完成时,对应的 keyresult 记录增加。

要支持顺序任务主任务: 比如一个 毕业 的 goal, 有 二课活动达到 50 分 的 keyResult。 二课则是需要我去寻找的, 即 我应该创建一个 任务模板,我可以在其中创建 子任务 这种情况下,我需要去抢二课,我需要

创建于 2025/1/1 更新于 2026/5/27