文档目录
业务功能页面

简介

本开发文档面向DouPHP小程序的业务功能页面模块,围绕预约预订、课程学习、招聘求职、门店查询四大业务域展开。重点说明:

  • 预约系统的时段管理与冲突检测机制
  • 课程学习的进度跟踪与考试测评思路
  • 招聘求职的信息发布与简历投递流程
  • 门店查询的位置服务与导航能力 同时给出领域模型设计、业务流程优化建议、常见问题解决方案以及可落地的开发示例指引。

项目结构

本项目采用前后端分离的模块化组织方式:

  • 小程序前端位于 miniprogram/default/pages,按业务划分页面(如 book、course、job、store)。
  • 后端提供 API 控制器与业务服务,例如 BookService、CourseController、JobController、StoreController。
  • 业务规则集中在服务层(如 BookService),控制器负责参数校验、路由与响应组装。
graph TB
subgraph "小程序前端"
A["预约详情 show.ts"]
B["确认预约 contact.ts"]
C["课程/招聘/门店页面"]
end
subgraph "后端API"
D["BookService预约核心逻辑"]
E["CourseController课程展示"]
F["JobController招聘列表/详情"]
G["StoreController门店列表/详情"]
end
A --> D
B --> D
C --> E
C --> F
C --> G

图表来源

  • show.ts(小程序预约详情):1-185
  • contact.ts(小程序确认预约):1-219
  • BookService.php:318-532
  • CourseController.php:150-220
  • JobController.php:34-93
  • StoreController.php:27-69

章节来源

  • show.ts(小程序预约详情):1-185
  • contact.ts(小程序确认预约):1-219
  • BookService.php:318-532
  • CourseController.php:150-220
  • JobController.php:34-93
  • StoreController.php:27-69

核心组件

  • 预约核心服务 BookService:负责日期列表生成、时段计算、容量与价格调整、冲突检测、用户限制、黑名单与过期处理等。
  • 小程序预约页面:show.ts 负责项目详情与日期/时段选择;contact.ts 负责确认预约表单与提交。
  • 课程控制器 CourseController:负责课程列表与详情渲染、访问统计、分类信息构建。
  • 招聘控制器 JobController:提供招聘列表与详情接口,复用前端 JobService。
  • 门店控制器 StoreController:提供门店列表与详情接口,支持分页与分类筛选。

章节来源

  • BookService.php:318-532
  • show.ts(小程序预约详情):1-185
  • contact.ts(小程序确认预约):1-219
  • CourseController.php:150-220
  • JobController.php:34-93
  • StoreController.php:27-69

架构总览

小程序通过 HTTP 调用后端 API,控制器将请求转发至对应服务进行业务处理,最终返回结构化数据供前端渲染或交互。

sequenceDiagram
participant U as "用户"
participant P as "小程序页面"
participant S as "后端服务"
participant DB as "数据库"
U->>P : 打开预约详情
P->>S : 获取项目详情与可用日期
S->>DB : 查询项目配置与排班
DB-->>S : 返回数据
S-->>P : 日期列表
P->>S : 选择日期后获取时段
S->>DB : 计算时段容量/价格/状态
DB-->>S : 已预约计数/规则
S-->>P : 时段列表含剩余/状态
P->>S : 提交预约
S->>DB : 写入预约记录并校验冲突
DB-->>S : 成功/失败
S-->>P : 结果提示

图表来源

  • show.ts(小程序预约详情):37-126
  • contact.ts(小程序确认预约):166-211
  • BookService.php:318-532

详细组件分析

预约系统:时段管理与冲突检测

  • 日期范围与星期过滤:根据项目与分类的配置计算可预约天数,结合排班的星期设置过滤有效日期。
  • 时段拆分与规则应用:常规时段可按 duration 拆分为子时段;支持关闭、替换、追加、覆盖四类规则,动态调整容量与价格。
  • 容量与冲突检测:统计指定日期的已预约数,考虑取消延迟释放,确保不超售;检查用户是否已预约该时段。
  • 用户限制与黑名单:支持按天、周期维度限制预约次数;对频繁取消或爽约的用户自动加入黑名单。
  • 过期与自动处理:定时任务将过期未履约的预约标记为过期,并触发爽约次数检查。
flowchart TD
Start(["开始"]) --> LoadDate["加载可预约日期"]
LoadDate --> SelectDate{"选择日期?"}
SelectDate --> |是| LoadSlots["加载时段列表"]
LoadSlots --> ApplyRules["应用规则(关闭/替换/追加/覆盖)"]
ApplyRules --> CalcCapacity["计算容量与价格"]
CalcCapacity --> CheckConflict{"冲突检测"}
CheckConflict --> |有冲突| Block["阻止预约"]
CheckConflict --> |无冲突| Submit["提交预约"]
Submit --> ValidateLimit{"用户限制检查"}
ValidateLimit --> |超限| Block
ValidateLimit --> |通过| Save["保存预约记录"]
Save --> End(["结束"])

图表来源

  • BookService.php:150-227
  • BookService.php:318-532
  • BookService.php:905-930
  • BookService.php:1005-1184
  • BookService.php:1270-1308

章节来源

  • BookService.php:150-227
  • BookService.php:318-532
  • BookService.php:905-930
  • BookService.php:1005-1184
  • BookService.php:1270-1308

小程序预约页面:日历组件集成与时段选择

  • 日期选择:show.ts 调用接口获取日期列表,默认选中首个可用日期并加载对应时段。
  • 时段选择:根据返回的时段列表渲染可选时间段,禁止选择已满、停诊或已预约的时段。
  • 确认预约:contact.ts 加载自定义字段与联系人列表,提交时校验必填项并调用预约接口。
sequenceDiagram
participant V as "视图(show.ts/contact.ts)"
participant H as "HTTP客户端"
participant R as "路由(route)"
participant S as "BookService"
V->>H : GET /book/date?id=...&current_date=...
H->>R : 解析路由
R->>S : 调用 getDateList/getTimeList
S-->>R : 返回日期/时段数据
R-->>H : JSON响应
H-->>V : 渲染日期/时段
V->>H : POST /book/booking (预约提交)
H->>R : 解析路由
R->>S : 校验并保存预约
S-->>R : 成功/错误
R-->>H : 结果
H-->>V : 提示跳转

图表来源

  • show.ts(小程序预约详情):37-126
  • contact.ts(小程序确认预约):166-211
  • BookService.php:318-532

章节来源

  • show.ts(小程序预约详情):1-185
  • contact.ts(小程序确认预约):1-219

课程学习:进度跟踪与考试测评

  • 课程展示:CourseController 负责课程列表与详情渲染,包含访问统计与分类信息。
  • 进度跟踪建议:在前端维护课程观看进度(如视频播放位置、章节完成状态),在后台记录学习行为日志,便于后续分析与提醒。
  • 考试测评建议:基于课程章节构建题库与试卷,提交答案后计算得分并记录成绩,支持错题回顾与复习推荐。
classDiagram
class CourseController {
+index(request) Response
+show(request) Response
-buildCourseCategoryInfo(catId) array|false
}
class CourseService {
+buildCourseListData(catId, page, pageSize, archive) array
+buildCourseShowData(id) array|null
+recordCourseView(id) void
+findCategoryById(catId) array|false
}
CourseController --> CourseService : "依赖"

图表来源

  • CourseController.php:77-220

章节来源

  • CourseController.php:77-220

招聘求职:信息发布与简历投递

  • 列表与详情:JobController 提供招聘列表与详情接口,支持分类筛选与分页。
  • 简历投递建议:在前端提供在线投递简历入口,后端接收简历文件与基本信息,存储到对象存储并关联到职位记录,支持管理员审核与反馈。
sequenceDiagram
participant M as "小程序页面"
participant J as "JobController"
participant JS as "JobService"
participant DB as "数据库"
M->>J : GET /api?route=job&page=...&class=...
J->>JS : buildListingData(page, class)
JS->>DB : 查询职位列表
DB-->>JS : 列表数据
JS-->>J : 返回结果
J-->>M : JSON响应
M->>J : GET /api?route=job&id=...
J->>JS : getShowPageData(id)
JS->>DB : 查询职位详情
DB-->>JS : 详情数据
JS-->>J : 返回结果
J-->>M : JSON响应

图表来源

  • JobController.php:34-93

章节来源

  • JobController.php:34-93

门店查询:位置服务与导航

  • 列表与详情:StoreController 提供门店列表与详情接口,支持分页与分类筛选。
  • 位置服务建议:在后端存储门店经纬度,前端使用地图SDK展示门店位置并提供导航跳转;详情页显示地址、电话与图片等信息。
sequenceDiagram
participant M as "小程序页面"
participant S as "StoreController"
participant SS as "StoreService"
participant DB as "数据库"
M->>S : GET /api?route=store&page=...&class=...&pageSize=...
S->>SS : buildStoreListData(page, class, pageSize)
SS->>DB : 查询门店列表
DB-->>SS : 列表数据
SS-->>S : 返回结果
S-->>M : JSON响应
M->>S : GET /api?route=store&id=...
S->>SS : buildStoreShowData(id)
SS->>DB : 查询门店详情
DB-->>SS : 详情数据
SS-->>S : 返回结果
S-->>M : JSON响应

图表来源

  • StoreController.php:27-69

章节来源

  • StoreController.php:27-69

依赖关系分析

  • 控制器与服务解耦:控制器仅负责参数校验与响应组装,核心业务逻辑下沉到服务层,提升可测试性与可维护性。
  • 小程序与后端通信:通过统一的 HTTP 客户端与路由工具封装接口调用,减少重复代码。
  • 数据一致性:预约容量与冲突检测在服务层集中实现,避免前端误判导致的数据不一致。
graph LR
P["小程序页面"] --> C1["BookService"]
P --> C2["CourseController"]
P --> C3["JobController"]
P --> C4["StoreController"]
C2 --> CS["CourseService"]
C3 --> JS["JobService"]
C4 --> SS["StoreService"]

图表来源

  • BookService.php:318-532
  • CourseController.php:77-220
  • JobController.php:34-93
  • StoreController.php:27-69

章节来源

  • BookService.php:318-532
  • CourseController.php:77-220
  • JobController.php:34-93
  • StoreController.php:27-69

性能考虑

  • 预约时段计算:尽量使用数据库索引(item_id、book_date、start_time)加速容量统计与冲突检测。
  • 缓存策略:对热门课程列表、门店列表与常用配置进行缓存,降低数据库压力。
  • 异步任务:将过期处理、黑名单检查等耗时操作放入队列或定时任务,避免阻塞主流程。
  • 前端优化:懒加载日期与时段列表,减少首屏数据量;对长列表使用虚拟滚动提升渲染性能。

故障排查指南

  • 预约冲突处理:检查时段容量与已预约计数,确认是否存在并发写入导致的超售;必要时增加事务与锁机制。
  • 学习进度保存:确保前端定期上报观看进度,后端记录时间戳与章节ID,异常时支持断点续学。
  • 招聘信息审核:建立审核流程,未审核信息不对外展示;审核通过后更新状态并通知发布者。
  • 常见错误定位:查看接口返回码与日志,核对参数合法性与权限控制;对非法字符进行过滤与提示。

章节来源

  • BookService.php:1005-1184
  • JobController.php:34-93

结论

本模块以服务层为核心,实现了预约、课程、招聘、门店等业务的统一抽象与扩展。通过清晰的职责划分与接口设计,既保证了业务逻辑的正确性,又提升了前端集成的便捷性。建议在后续迭代中持续完善进度跟踪、考试测评、位置服务等能力,并结合数据分析驱动业务优化。

附录

  • 开发示例指引:
    • 日历组件集成:参考 show.ts 的日期与时段加载流程,结合后端 getDateList/getTimeList 接口实现。
    • 在线考试系统:基于课程章节构建题库,前端实现答题界面,后端记录成绩与错题。
    • 地图服务接入:在 store 详情页展示经纬度,使用地图SDK实现导航跳转。
  • 最佳实践:
    • 参数校验与安全:对所有输入进行白名单校验与非法字符过滤。
    • 错误处理与用户体验:统一错误提示与跳转逻辑,避免用户困惑。
    • 可观测性:关键操作记录日志,便于问题追踪与性能分析。
添加日期:2026-10-05