# 我的预约（移动端）

## 1. 概述

| 项 | 说明 |
| --- | --- |
| Base Path | `/app/myAppointment` |
| 数据表 | `biz_service_appointment`、`biz_service_appointment_review` |
| 用户范围 | `create_by` = 当前登录用户名（与预约提交时一致） |
| 鉴权 | 需登录 |

**主 Tab → `providerType`**

| Tab | `providerType` |
| --- | --- |
| 兽医 | `1` |
| 专家 | `3` |
| 诊疗机构 | `2` |

**子 Tab → `statusTab`（必传）**

| `statusTab` | 含义 | SQL 语义 |
| --- | --- | --- |
| `all` | 全部 | 不额外过滤 |
| `notStarted` | 未开始 | `status in (0,1,5)` |
| `pendingReview` | 待评价 | `status=4` 且无评价记录 |
| `completed` | 已完成 | `status=4` |
| `cancelled` | 已取消 | `status=3` |

状态码：`0` 待确认、`1` 已确认、`2` 已拒绝、`3` 已取消、`4` 已完成、`5` 已预约（机构）。

---

## 2. 预约列表

`GET /app/myAppointment/list`

| 参数 | 必填 | 说明 |
| --- | --- | --- |
| `providerType` | **是** | `1` 兽医 / `2` 机构 / `3` 专家 |
| `statusTab` | **是** | 见上表 |
| `pageNum` | 否 | 默认 1 |
| `pageSize` | 否 | 默认 10，最大 50 |

**`rows[]` 主要字段**

| 字段 | 说明 |
| --- | --- |
| `id` | 预约主键 |
| `providerType` / `providerId` | 服务方类型与资源 ID |
| `providerName` | 兽医/专家/机构名称 |
| `appointDate` | 预约日期 |
| `timeStart` / `timeEnd` | 时段 |
| `serviceAddress` / `serviceRequirement` | 地址、需求 |
| `status` / `statusLabel` | 状态码与文案 |
| `rejectReason` | 拒绝理由（已拒绝时） |
| `canCancel` | 是否可取消（`status` 为 0/1/5） |
| `hasReview` | 是否已评价（专家已完成时） |

排序：`appoint_date` 降序。

---

## 3. 取消预约

`POST /app/myAppointment/cancel/{id}`

- 仅 `status` 为 **0、1、5** 可取消，更新为 **3（已取消）**。
- **已完成（4）** 不可取消。

---

## 4. 查看评价

`GET /app/myAppointment/{id}/review`

- 仅 **专家**（`providerType=3`）且 **已完成**（`status=4`）的预约。
- 返回单条 `BizServiceAppointmentReview`：`reviewerName`、`reviewTime`、`punctualityScore`、`attitudeScore`、`guidanceScore`、`summary`。

---

## 5. 提交评价

`POST /app/myAppointment/{id}/review`

**Body**

| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `punctualityScore` | 是 | 到场准时 1～5 |
| `attitudeScore` | 是 | 服务态度 1～5 |
| `guidanceScore` | 是 | 指导效果 1～5 |
| `summary` | 是 | 综合评价，≤100 字 |

**逻辑**

- 仅专家、已完成、且尚未评价；
- 写入 `biz_service_appointment_review`（到场准时 / 服务态度 / 指导效果星级 + 综合评价）；
- **不**即时更新 `biz_tech_resource.expert_rating`。

**响应 `data`**：评价记录 `id`。

---

## 6. 专家评分定时同步（后台）

| 项 | 说明 |
| --- | --- |
| 执行时间 | 每天 **23:00** |
| Quartz 目标 | `expertRatingSyncTask.syncExpertRatings` |
| 初始化 SQL | `sql/biz_sys_job_expert_rating_sync.sql` |

**计算公式**（关联 `biz_service_appointment_review` 与 `biz_service_appointment`，`provider_type=3`）：

\[
\text{expert\_rating} = \mathrm{round}\left(\frac{\sum \text{到场准时} + \sum \text{服务态度} + \sum \text{指导效果}}{3},\ 1\right)
\]

仅更新存在评价记录的专家；无评价时该专家不参与本次同步（保持库中原值，新建专家默认 5.0）。

---

## 7. 界面参考

`doc/app/我的预约/Snipaste_2026-05-24_14-06-16.jpg`  
`doc/app/我的预约/Snipaste_2026-05-24_14-07-00.jpg`  
`doc/app/我的预约/Snipaste_2026-05-24_14-07-21.jpg`
