<<<<<<< HEAD
# 一、Schema范式设计

## 训练计划及任务执行模块

### 训练计划模块描述

根据用户所需要的健身目标，生成的整个训练计划，训练计划中包含了很多子任务。

### 任务执行模块描述

记录各类型子任务以及每项任务的执行情况

#### 任务类型

- 一次性任务
- 周期性任务（每日、每周、每月）

#### 任务状态

- 一次性任务，可以在任务数据中直接标注完成
- 周期性任务，虽然整体有完成状态，但是每次的执行都需要有单独的表来记录。

## 具体范式设计

### 1. 表设计

#### 1.1 训练计划表 (TrainingPlan)

| 字段     | 类型         | 说明             |
|----------|--------------|------------------|
| objectId | String       | 唯一标识符       |
| createdAt | Date        | 创建时间         |
| user     | Pointer<User> | 关联用户         |
| goal     | String       | 健身目标         |
| content  | String       | 训练计划详情     |
| tasks    | Array<Pointer<Task>> | 关联的子任务 |

#### 1.2 任务表 (Task)

| 字段      | 类型         | 说明                       |
|-----------|--------------|----------------------------|
| objectId  | String       | 唯一标识符                 |
| createdAt | Date         | 创建时间                   |
| plan      | Pointer<TrainingPlan> | 关联训练计划         |
| type      | String       | 任务类型（一次性任务/周期性任务） |
| name      | String       | 任务名称                   |
| status    | String       | 任务状态（未完成/已完成）  |
| count     | Number       | 执行次数                   |
| duration  | Number       | 持续时间                   |
| frequency | String       | 周期性任务的频率（每日/每周/每月，可选） |

#### 1.3 任务执行记录表 (TaskExecution)

| 字段     | 类型         | 说明                   |
|----------|--------------|------------------------|
| objectId | String       | 唯一标识符             |
| createdAt | Date        | 创建时间               |
| task     | Pointer<Task> | 关联任务               |
| execDate | Date         | 执行日期               |
| status   | String       | 执行状态（完成/未完成） |

#### 1.4 用户表 (User)

| 字段     | 类型         | 说明             |
|----------|--------------|------------------|
| objectId | String       | 唯一标识符       |
| createdAt | Date        | 创建时间         |
| username | String       | 用户名           |
| email    | String       | 用户邮箱         |
| password | String       | 用户密码         |

### 2. PlantUML 类图表示

以下是使用PlantUML表示的类图：

```plantuml
@startuml
class User {
  +objectId: String
  +createdAt: Date
  +username: String
  +email: String
  +password: String
}

class TrainingPlan {
  +objectId: String
  +createdAt: Date
  +goal: String
  +content: String
}

class Task {
  +objectId: String
  +createdAt: Date
  +type: String
  +name: String
  +status: String
  +count: Number
  +duration: Number
  +frequency: String
}

class TaskExecution {
  +objectId: String
  +createdAt: Date
  +execDate: Date
  +status: String
}

User "1" -- "0..*" TrainingPlan : owns
TrainingPlan "1" -- "0..*" Task : contains
Task "1" -- "0..*" TaskExecution : executes
@enduml
```
##打卡签到模块
###模块描述 
用户表是_User表 用户每日登录后，可以打卡签到，记录用户的签到时间，和日期，且每日只能打卡签到一次。
### 1. 用户表 (_User)

#### 表名：User

#### 字段：
- **objectId**：String (用户唯一标识)
- **username**：String (用户名)
- **email**：String (用户邮箱)
- **createdAt**：Date (创建时间)
- **updatedAt**：Date (更新时间)

---

## 2. 签到记录表 (SignInRecord)

#### 表名：SignInRecord

#### 字段：
- **objectId**：String (签到记录唯一标识)
- **user**：Pointer (用户，外键，关联到User表)
- **signInDate**：Date (签到日期)
- **createdAt**：Date (创建时间)

---

### 3. 设计注意事项

- 在 **SignInRecord** 表中，`user` 字段使用 `Pointer<User>` 来表示与用户表的关联。
- 每个用户每天只能有一条签到记录，因此在 **SignInRecord** 表中，`user` 和 `signInDate` 的组合应当是唯一的。
- `createdAt` 字段用于记录每条记录的创建时间，以便于后续的数据追踪。

#### PlantUML 类图表示

```plantuml
@startuml
class User {
  +objectId: String
  +username: String
  +email: String
  +createdAt: Date
  +updatedAt: Date
}

class SignInRecord {
  +objectId: String
  +user: Pointer
  +signInDate: Date
  +createdAt: Date
}

User "1" -- "0..*" SignInRecord : has
@enduml
```
# 二、业务逻辑描述

## 训练计划的完整逻辑

### 计划生成逻辑

用户在APP内，通过文本生成整个训练计划。

#### 数据来源

- **用户输入**：用户的健身需求等。
- **用户体征**：性别、年龄、体重等。

#### 结果存储

- **TrainingPlan**
  - 计划目标 `goal`：计划需求标题。
  - 计划详情 `content`：完整计划内容。

### 根据训练计划结果，排期生成任务

#### 数据来源

- **计划详情** `content`。

#### 文本生成


=======
# 一、训练计划及任务执行模块

- 训练计划模块描述
  - 根据用户所需要的健身目标，生成的整个训练计划，训练计划中包含了很多子任务。
- 任务执行模块描述

  - 记录各类型子任务以及每项任务的执行情况
  - 任务类型
    - 一次性任务
    - 周期性任务（每日、每周、每月）
  - 任务状态
    - 一次性任务，可以再任务数据中直接标注完成
    - 周期性任务，虽然整体有完成状态，但是每次的执行都需要有单独的表来记录。

# 表设计

## 训练计划表 (TrainingPlan)

- **objectId**: 唯一标识符
- **createdAt**: 创建时间
- **user**: Pointer (关联用户)
- **goal**: String (健身目标)
- **content**: String (训练计划详情)
- **tasks**: Array<Pointer> (关联的子任务)

## 任务表 (Task)

- **objectId**: 唯一标识符
- **createdAt**: 创建时间
- **plan**: Pointer (关联训练计划)
- **type**: String (任务类型，如“一次性任务”或“周期性任务”)
- **name**: String (任务名称)
- **status**: String (任务状态，如“未完成”、“已完成”)
- **count**: Number 执行次数
- **duration**: Number 持续时间
- **frequency**: String (周期性任务的频率，如“每日”、“每周”、“每月”，可选)
  - daily
  - weekly
  - monthly
  - yearly

## 任务执行记录表 (TaskExecution)

- **objectId**: 唯一标识符
- **createdAt**: 创建时间
- **task**: Pointer (关联任务)
- **execDate**: Date (执行日期)
- **status**: String (执行状态，如“完成”、“未完成”)

## 用户表 (User)

- **objectId**: 唯一标识符
- **createdAt**: 创建时间
- **username**: String (用户名)
- **email**: String (用户邮箱)
- **password**: String (用户密码)
- **phoneNumber**: String (用户电话)
- **sex**: String (用户性别)
- **age**: Number (用户年龄)

# PlantUML 类图表示

## 以下是使用 PlantUML 表示的类图：

```plantuml
@startuml

class TrainingPlan {
    +objectId: String
    +createdAt: Date
    +user: Pointer
    +goal: String
    +content: String
    +tasks: Array
}

class Task {
    +objectId: String
    +createdAt: Date
    +plan: Pointer
    +type: String
    +name: String
    +status: String
    +count: Number
    +duration: Number
    +frequency: String
}

class TaskExecution {
    +objectId: String
    +createdAt: Date
    +task: Pointer
    +execDate: Date
    +status: String
}

class User {
    +objectId: String
    +createdAt: Date
    +username: String
    +email: String
    +password: String
    +phoneNumber: String
    +sex: String
    +age: Number
}

TrainingPlan "1" -- "1..*" Task : contains
Task "1" -- "0..*" TaskExecution : executes
User "1" -- "0..*" TrainingPlan : creates

@enduml
```

# 设计说明

- **用户表 (User)**: 存储用户的基本信息。
- **训练计划表 (TrainingPlan)**: 每个用户可以有多个训练计划，每个计划可以包含多个子任务。
- **任务表 (Task)**: 定义了训练计划中的子任务，支持一次性和周期性任务。
- **任务执行记录表 (TaskExecution)**: 记录每个任务的执行情况，便于追踪任务的完成状态。

# 打卡签到模块

- 模块描述 用户表是\_User 表 用户每日登录后，可以打卡签到，记录用户的签到时间，和日期，且每日只能打卡签到一次。

## 用户表 (\_User)

- **表名**：User
- **字段**：
  - objectId: String (用户唯一标识)
  - username: String (用户名)
  - email: String (用户邮箱)
  - createdAt: Date (创建时间)
  - updatedAt: Date (更新时间)

## 签到记录表 (SignInRecord)

- **表名**：SignInRecord
- **字段**：
  - bjectId: String (签到记录唯一标识)
  - ser: Pointer (用户，外键，关联到 User 表)
  - ignInDate: Date (签到日期)
  - reatedAt: Date (创建时间)

# 设计注意事项

- 在 `SignInRecord` 表中，`user` 字段使用 `Pointer<User>` 来表示与用户表的关联。
- 每个用户每天只能有一条签到记录，因此在 `SignInRecord` 表中，`user` 和 `signInDate` 的组合应当是唯一的。
- `createdAt` 字段用于记录每条记录的创建时间，以便于后续的数据追踪。

## PlantUML 类图表示

```plantuml
@startuml

class User {
    +objectId: String
    +username: String
    +email: String
    +createdAt: Date
    +updatedAt: Date
}

class SignInRecord {
    +objectId: String
    +user: Pointer
    +signInDate: Date
    +createdAt: Date
}

User "1" -- "0..*" SignInRecord : has

@enduml
```

## 说明

- `User` 类表示用户表，包含用户的基本信息。
- `SignInRecord` 类表示签到记录表，记录用户的签到情况。
- 外键 `user` 使用 `Pointer<User>` 表示与用户表的关联。
- 关系表示为“一个用户可以有零到多个签到记录”，符合设计范式。

这种设计确保了数据的完整性和一致性，同时能够满足用户每日只能打卡一次的需求。

# 二、业务逻辑描述

# 训练计划的完整逻辑

## 计划生成逻辑

- 用户在 APP 内，通过文本生成整个训练计划
  - 数据来源
    - 用户输入：用户的健身需求等
    - 用户体征：性别、年龄、体重等
  - 文本生成
    - 提示词：训练计划生成提示词
  - 结果存储
    - TrainingPlan
      - 计划目标 goal 计划需求标题
      - 计划详情 content 完整计划内容
- 根据训练计划结果，排期生成任务
  - 数据来源
    - 计划详情 content
  - 文本生成
    - 提示词：严格限制 json 格式，输出任务列表（附带当前时- 间，用于时间的生成）
  - 生成结果：taskList
    - 循环数组，向 Task 表逐个插入数据。
>>>>>>> 538aa7279b9922f4eaea6729b67ae3a16c956e85

```json
[
  {
    "objectId": "task_001",
    "createdAt": "2024-12-01T10:00:00Z",
    "plan": "TrainingPlan_001",
    "type": "一次性任务",
    "name": "30分钟有氧运动",
    "status": "未完成",
    "count": 1,
    "duration": 30,
    "frequency": null
  },
  {
    "objectId": "task_002",
    "createdAt": "2024-12-01T10:00:00Z",
    "plan": "TrainingPlan_001",
    "type": "周期性任务",
    "name": "每周力量训练",
    "status": "已完成",
    "count": 4,
    "duration": 60,
    "frequency": "weekly"
  },
  {
    "objectId": "task_003",
    "createdAt": "2024-12-01T10:00:00Z",
    "plan": "TrainingPlan_001",
    "type": "周期性任务",
    "name": "每日步行1万步",
    "status": "未完成",
    "count": 8,
    "duration": 60,
    "frequency": "daily"
  },
  {
    "objectId": "task_004",
    "createdAt": "2024-12-01T10:00:00Z",
    "plan": "TrainingPlan_001",
    "type": "周期性任务",
    "name": "每月体重测量",
    "status": "已完成",
    "count": 1,
    "duration": 10,
    "frequency": "monthly"
  },
  {
    "objectId": "task_005",
    "createdAt": "2024-12-01T10:00:00Z",
    "plan": "TrainingPlan_001",
    "type": "一次性任务",
    "name": "参加健身课程",
    "status": "未完成",
    "count": 1,
    "duration": 45,
    "frequency": null
  }
]
```
<<<<<<< HEAD
### 计划执行的逻辑

#### 用户在 TodoList 页面，加载所有计划和子任务。

- 用户主动填写执行情况并提交。

#### 数据存储

- **TaskExecution**：记录每次用户执行情况提交的数据，并在提交后，根据 **Task** 中持续时间和次数条件，来判断 **Task** 本身是否标记完成。

#### 计划的完成和统计分析

- 连表查询，分析用户计划完成的总体情况和进度。

### 训练计划业务逻辑图例

**提示词**：{业务逻辑}，您是一名专业的产品经理，请您将上述逻辑的每个过程，用 PlantUML 的时序图表示出来。

### 业务逻辑图例

下面是根据您提供的业务逻辑描述所生成的 **PlantUML** 时序图。这个时序图展示了训练计划的生成、执行和完成统计分析的各个过程：

```plantuml
@startuml
actor User
entity APP
entity TrainingPlan
entity Task
entity TaskExecution

User -> APP: 输入健身需求和体征信息
APP -> TrainingPlan: 生成训练计划
APP -> Task: 根据计划生成任务
User -> APP: 查看任务和子任务
User -> APP: 提交任务执行情况
APP -> TaskExecution: 记录执行情况
APP -> Task: 判断任务是否完成
APP -> User: 展示任务完成情况
@enduml
```
### 解释

1. **训练计划生成逻辑**：通过用户输入的健身需求和体征信息，生成训练计划，并存储到 **TrainingPlan** 表中。
2. **任务生成**：根据训练计划的内容生成相关任务，每个任务存储到 **Task** 表中，并关联到相应的训练计划。
3. **任务执行**：用户在 TodoList 页面查看任务，并提交执行情况。每次执行情况记录在 **TaskExecution** 表中。
4. **任务完成标记**：通过任务的持续时间和次数条件，判断任务是否标记为完成。
5. **计划统计分析**：通过连表查询，分析用户任务完成的整体情况和进度。






=======

## 计划执行的逻辑

- 用户在 TodoList 页面，加载所有计划和子任务
  - 用户主动填写执行情况并提交
    - 数据存储
      - TaskExecution 记录每次用户执行情况提交的数据，并在提交后，根据 Task 中持续时间和次数条件，来判断 Task 本身是否标记完成。

## 计划的完成和统计分析

- 连表查询，分析用户计划完成的总体情况和进度

## 训练计划业务逻辑图例

```plantuml
@startuml

actor User
participant "APP" as App
participant "TrainingPlan" as TP
participant "Task" as T
participant "TaskExecution" as TE

== 计划生成逻辑 ==
User -> App : 输入健身需求
App -> TP : 创建训练计划
TP -> App : 返回训练计划ID

== 计划执行逻辑 ==
User -> App : 加载所有计划和子任务
App -> T : 查询任务列表
T -> App : 返回任务列表
User -> App : 填写执行情况并提交
App -> TE : 记录执行情况
TE -> App : 返回执行记录ID
App -> T : 检查任务完成状态
T -> App : 更新任务状态

== 计划完成和统计分析 ==
App -> TP : 查询用户计划完成情况
TP -> App : 返回完成情况和进度
App -> User : 显示统计分析结果

@enduml
```

### 说明：

- **用户(User)**在 APP 中输入健身需求和体征信息，APP 生成训练计划并返回。
- APP 根据训练计划生成任务列表并插入任务数据。
- 用户在 TodoList 页面查看计划和子任务，并提交执行情况。
- APP 记录执行情况，并判断任务是否完成。
- 最后，APP 进行统计分析并将结果展示给用户。
>>>>>>> 538aa7279b9922f4eaea6729b67ae3a16c956e85
