# 预约服务(移动端) ## 1. 概述 | 项 | 说明 | | --- | --- | | Base Path | `/app/bookingService` | | 资源视图 | `v_appointment_resource`(DDL:`sql/biz_v_appointment_resource.sql`) | | 视图依赖 | `biz_tech_resource.expert_rating`(见 `sql/biz_tech_resource_alter_expert_rating.sql`) | | 预约主表 | `biz_service_appointment` | | 专家评价 | `biz_service_appointment_review` | | 鉴权 | 需登录 | **Tab 与资源类型**(列表 `resourceType` 必传): | Tab | `resourceType` | | --- | --- | | 兽医(默认) | `004001` | | 专家 | `004005` | | 诊疗机构 | `004003` | **资料页**:列表项已返回详情字段,**无单独详情接口**。 ### 1.1 视图 `v_appointment_resource` 列说明 | 视图列 | 兽医 `004001` | 机构 `004003` | 专家 `004005` | | --- | --- | --- | --- | | `photo_file_url` | `biz_medical_resource.photo_file_url` | 同左 | `biz_tech_resource.photo_file_url` | | `max_daily_appointments` | 有值(机构)/ 兽医多为 NULL | 有值 | NULL | | `expert_rating` | NULL | NULL | `biz_tech_resource.expert_rating` | 其余列三端同源字段名一致(名称、介绍、地址、服务时段等)。 **提交后状态**: | 类型 | 初始 `status` | | --- | --- | | 兽医、专家 | `0` 待确认 | | 诊疗机构 | `5` 已预约 | --- ## 2. 近 7 日日期条 `GET /app/bookingService/dates` 自**当天**起连续 7 天(含当天)。 **响应 `data[]`** | 字段 | 说明 | | --- | --- | | `weekdayName` | 周几(如「周一」) | | `weekday` | 数字:周一=1 … 周日=7 | | `dateMmDd` | 日期 `MM-dd` | | `appointDate` | 日期 `yyyy-MM-dd`(提交预约用) | --- ## 3. 可预约资源列表 `GET /app/bookingService/resource/list` | 参数 | 必填 | 说明 | | --- | --- | --- | | `resourceType` | **是** | `004001` / `004005` / `004003` | | `resourceName` | 否 | 名称模糊 | | `weekday` | 否 | 周几 1~7;传入时仅返回 `service_weekdays` 含该值的资源 | | `pageNum` | 否 | 默认 1 | | `pageSize` | 否 | 默认 10,最大 50 | **响应**:`TableDataInfo`,`rows[]` 字段(与视图列一一对应,驼峰): | 字段 | 说明 | | --- | --- | | `id` | 资源主键 | | `resourceType` | `004001` / `004003` / `004005` | | `resourceName` | 名称 | | `photoFileUrl` | 主图/头像 URL | | `affiliatedUnit` | 隶属单位 | | `contactPhone` | 联系电话 | | `introduction` | 介绍 | | `detailAddress` | 详细地址 | | `serviceStartTime` / `serviceEndTime` | 服务时段 `HH:mm` | | `serviceArea` | 服务区域 | | `feeStandard` | 收费标准 | | `serviceWeekdays` | 服务周日 `1`~`7`,逗号分隔 | | `maxDailyAppointments` | 单日最大预约数(机构常见有值) | | `expertRating` | 专家评分(仅专家) | | `sysUserId` / `assignedLoginName` | 已分配账号信息 | | `publishTime` | 发布时间 | 排序:`publish_time` 降序。 --- ## 4. 专家历史评价 `GET /app/bookingService/expert/{expertResourceId}/reviews` | 参数 | 必填 | 说明 | | --- | --- | --- | | `expertResourceId` | 是 | 路径:专家资源 `id`(`004005`) | | `pageNum` | 否 | 页码,默认 1 | | `pageSize` | 否 | 每页条数,默认 10,最大 50 | **响应 `rows[]`** | 字段 | 说明 | | --- | --- | | `reviewerName` | 评价人 | | `reviewTime` | 评价时间 | | `punctualityScore` | 到场准时(1~5) | | `attitudeScore` | 服务态度(1~5) | | `guidanceScore` | 指导效果(1~5) | | `summary` | 综合评价 | 按 `reviewTime` 倒序。 --- ## 5. 所选日期是否已预约 `GET /app/bookingService/appointment/booked` 用于资料页选择预约日期后,判断**当前登录用户**在该服务方、该日是否已有有效预约。 | 参数 | 必填 | 说明 | | --- | --- | --- | | `providerType` | **是** | `1` 兽医 / `2` 机构 / `3` 专家 | | `providerId` | **是** | 服务方资源 `id`(与列表 `id` 一致) | | `appointDate` | **是** | `yyyy-MM-dd` | **响应 `data`** | 字段 | 类型 | 说明 | | --- | --- | --- | | `booked` | boolean | `true` 表示当日已有有效预约 | **有效预约**:`create_by` 为当前用户,且 `status` 不为 `2`(已拒绝)、`3`(已取消)。 --- ## 6. 提交预约 `POST /app/bookingService/appointment` **Body(JSON)** | 字段 | 必填 | 说明 | | --- | --- | --- | | `resourceType` | 是 | `004001` / `004005` / `004003` | | `resourceId` | 是 | 资源 `id` | | `appointDate` | 是 | `yyyy-MM-dd` | | `appointeeName` | 是 | 预约人 | | `contactPhone` | 是 | 手机号 | | `timeSlot` | 二选一 | 如 `08:00~10:00` | | `timeStart` / `timeEnd` | 二选一 | `HH:mm` | | `serviceAddress` | 是 | 服务地址 | | `serviceRequirement` | 否 | 服务需求 | **响应 `data`**:新建预约主键 `id`。 **校验**: - 资源须在视图中存在且已发布; - 预约日须在 `serviceWeekdays` 内(有配置时); - 机构且配置了 `maxDailyAppointments` 时,当日有效预约数(非已拒绝/已取消)未满。 **失败示例**:「预约对象不存在或未发布」「所选日期不在服务日内」「该机构当日预约已满」。 --- ## 7. 界面参考 `doc/app/预约服务/Snipaste_2026-05-24_10-52-44.jpg` `doc/app/预约服务/Snipaste_2026-05-24_13-55-00.jpg` `doc/app/预约服务/Snipaste_2026-05-24_13-56-00.jpg` (专家评价样式可参考 `doc/app/在线问诊/` 下星级展示图。)