22 KiB
学员端开发需求整合确认文档
📋 基于需求文档和数据库分析的整合确认
我已经分析了《学员端开发需求文档.md》,并通过Docker命令直接查询了数据库表结构,获取了完整的字段定义和枚举值。现在整理出完整的技术规范和需要您确认的业务逻辑问题。
核心质量原则
- 数据一致性第一:页面显示数据与数据库数据必须100%一致
- 功能完整性第一:每个功能都要完整实现,不允许半成品
- 用户体验第一:每个交互都要符合预期,不允许异常
- 代码质量第一:不合格代码绝不允许合并
数据库信息
-
[✅] 数据库访问权限:开发者是否有数据库读写权限?
-
[ ✅] 数据库连接信息:开发环境的数据库配置 数据库配置信息如下: TYPE = mysql HOSTNAME = mysql DATABASE = niucloud USERNAME = niucloud PASSWORD = niucloud123
HOSTPORT = 3306 PREFIX = school_ CHARSET = utf8mb4 DEBUG = false
🔧 数据库操作方法
# 数据库连接信息
数据库:niucloud
用户名:niucloud
密码:niucloud123
# Docker命令查询示例
docker exec niucloud_mysql mysql -u niucloud -pniucloud123 -D niucloud -e "SHOW CREATE TABLE 表名;"
docker exec niucloud_mysql mysql -u niucloud -pniucloud123 -D niucloud -e "SELECT * FROM 表名 LIMIT 10;"
🔍 已明确的需求信息
1. 用户认证和登录 ✅ 已明确
- 登录方式:手机号+密码,支持微信一键登录
- 数据关联:
school_customer_resources主表,通过member_id关联member表 - 微信绑定:需要获取小程序和公众号openid,绑定到对应字段
- 首次登录:可提示设置密码但不强制
2. 个人信息管理 ✅ 已明确
- 用户信息:只展示姓名和欢迎语,不可修改
- 学员信息:可修改学员的基本信息
- 头像上传:支持,存储在
headimg字段,腾讯云COS,2M以下
3. 体测数据功能 ✅ 已明确
- 数据来源:
school_physical_test表 - 展示内容:身高、体重、体测报告PDF
- 趋势图:折线图展示身高体重趋势
4. 课程预约功能 ✅ 已明确
- 预约规则:只能预约等待位课程,取消需提前6小时
- 数据表:
school_person_course_schedule插入等待位记录 - 冲突处理:同一时间段只能预约一节课
5. 支付功能 ✅ 已明确
- 支付方式:微信支付、微信扫码支付
- 订单表:
school_order_table
6. 知识库功能 ✅ 已明确
- 数据表:
school_lesson_course_teaching - 内容渲染:富文本方式
- 权限控制:根据
student_id字段(逗号分割)
7. 消息管理功能 ✅ 已明确
- 数据表:
school_chat_messages - 消息推送:公众号模板消息推送
✅ 数据库表字段枚举值已确认
1. 订单类型枚举 (school_order_table.order_type)
已确认的枚举值:
order_type 字段注释:'订单类型1新订单2续费订单3内部员工订单4 转校 5 客户内转课订单'
- 1:新订单
- 2:续费订单
- 3:内部员工订单
- 4:转校
- 5:客户内转课订单
2. 知识库分类枚举 (school_lesson_course_teaching.table_type)
已确认的枚举值:
table_type 字段注释:'类型 1课程教学大纲 2跳绳教案库 3增高教案库 4篮球教案库 5强化教案库 6空中忍者教案库 7少儿安防教案库 8体能教案库 9热身动作库 10体能动作库 11趣味游戏库 12放松动作库 13训练内容 14训练视频 15课后作业 16优秀一堂课 17空中忍者 18篮球动作 19跳绳动作 20跑酷动作 21安防动作 22标准化动作 233-6岁体测 247+体测 253-6岁体测讲解—解读 267+岁体测讲解—解读 27互动游戏 28套圈游戏 29鼓励方式'
主要分类:
- 1:课程教学大纲
- 2:跳绳教案库
- 3:增高教案库
- 4:篮球教案库
- 5:强化教案库
- 6:空中忍者教案库
- 7:少儿安防教案库
- 8:体能教案库
- 9:热身动作库
- 10:体能动作库
- 11:趣味游戏库
- 12:放松动作库
- 13:训练内容
- 14:训练视频
- 15:课后作业
- 16:优秀一堂课
- 17-22:各种动作库
- 23-26:体测相关
- 27-29:游戏和鼓励方式
3. 消息类型枚举 (school_chat_messages)
已确认的枚举值:
from_type 字段:
enum('personnel','customer','system')
注释:'发送者类型|personnel=员工,customer=学生(客户)system(系统消息)'
- personnel:员工
- customer:学生(客户)
- system:系统消息
message_type 字段:
enum('text','img','order','student_courses','person_course_schedule')
注释:'消息类型|text=文本,img=图片消息,订单'消息order'学员课程变动消息student_courses'课程安排消息person_course_schedule'
- text:文本消息
- img:图片消息
- order:订单消息
- student_courses:学员课程变动消息
- person_course_schedule:课程安排消息
4. 课程状态枚举 (school_course_schedule.status)
已确认的枚举值:
enum('pending','upcoming','ongoing','completed')
注释:'课程状态: pending-待开始, upcoming-即将开始, ongoing-进行中, completed-已结束'
- pending:待开始
- upcoming:即将开始
- ongoing:进行中
- completed:已结束
5. 订单状态枚举 (school_order_table.order_status)
已确认的枚举值:
enum('pending','paid','signed','completed','transfer')
注释:'订单状态: pending-待支付, paid-已支付,signed待签约,completed已完成,transfer转学'
- pending:待支付
- paid:已支付
- signed:待签约
- completed:已完成
- transfer:转学
6. 支付类型枚举 (school_order_table.payment_type)
已确认的枚举值:
enum('cash','scan_code','subscription')
注释:'付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付wxpay_online微信在线代付'
- cash:现金支付
- scan_code:扫码支付
- subscription:订阅支付
- wxpay_online:微信在线代付(注释中提到但enum中未包含)
✅ 数据表结构已确认
1. 体测数据表字段 (school_physical_test)
完整字段结构:
CREATE TABLE `school_physical_test` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '体测编号',
`resource_id` int NOT NULL COMMENT '资源ID',
`student_id` int DEFAULT NULL COMMENT '学员ID',
`age` int NOT NULL DEFAULT '0' COMMENT '学员年龄',
`height` decimal(5,2) NOT NULL COMMENT '身高',
`weight` decimal(5,2) NOT NULL COMMENT '体重',
`coach_id` int DEFAULT NULL COMMENT '教练ID',
`seated_forward_bend` decimal(5,2) DEFAULT NULL COMMENT '坐位体前屈',
`sit_ups` decimal(5,2) DEFAULT NULL COMMENT '仰卧卷腹',
`push_ups` decimal(5,2) DEFAULT NULL COMMENT '九十度仰卧撑',
`flamingo_balance` decimal(5,2) DEFAULT NULL COMMENT '火烈鸟平衡测试',
`thirty_sec_jump` decimal(5,2) DEFAULT NULL COMMENT '三十秒双脚连续跳',
`standing_long_jump` decimal(5,2) DEFAULT NULL COMMENT '立定跳远',
`agility_run` decimal(5,2) DEFAULT NULL COMMENT '4乘10m灵敏折返跑',
`balance_beam` decimal(5,2) DEFAULT NULL COMMENT '走平衡木',
`tennis_throw` decimal(5,2) DEFAULT NULL COMMENT '网球掷远',
`ten_meter_shuttle_run` decimal(5,2) DEFAULT NULL COMMENT '十米往返跑',
`physical_test_report` text COMMENT '体测报告附件(多文件)',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
);
体测指标分类:
- 基础指标:身高、体重、年龄
- 柔韧性测试:坐位体前屈
- 力量测试:仰卧卷腹、九十度仰卧撑
- 平衡性测试:火烈鸟平衡测试、走平衡木
- 爆发力测试:三十秒双脚连续跳、立定跳远、网球掷远
- 敏捷性测试:4乘10m灵敏折返跑、十米往返跑
- 体测报告:PDF附件(多文件,逗号分割)
2. 订单表字段 (school_order_table)
完整字段结构:
CREATE TABLE `school_order_table` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '订单编号',
`payment_id` varchar(255) DEFAULT NULL COMMENT '支付编号',
`order_type` varchar(255) DEFAULT NULL COMMENT '订单类型1新订单2续费订单3内部员工订单4 转校 5 客户内转课订单',
`order_status` enum('pending','paid','signed','completed','transfer') DEFAULT 'pending' COMMENT '订单状态',
`payment_type` enum('cash','scan_code','subscription') NOT NULL COMMENT '付款类型',
`order_amount` decimal(10,2) NOT NULL COMMENT '订单金额',
`discount_amount` decimal(10,2) DEFAULT NULL COMMENT '优惠金额',
`course_id` int NOT NULL COMMENT '课程ID',
`class_id` int DEFAULT NULL COMMENT '班级ID',
`staff_id` int NOT NULL COMMENT '人员ID|员工表school_personnel.id',
`resource_id` int NOT NULL COMMENT '资源ID|客户资源表school_customer_resources.id',
`student_id` int NOT NULL COMMENT '学员 id',
`campus_id` int NOT NULL COMMENT '校区ID',
`course_plan_id` int DEFAULT NULL COMMENT '课程计划 id',
`gift_id` int DEFAULT NULL COMMENT '赠品 id',
`after_sales_status` varchar(50) DEFAULT NULL COMMENT '售后状态',
`after_sales_reason` text COMMENT '售后原因',
`after_sales_time` timestamp NULL DEFAULT NULL COMMENT '售后时间',
`payment_time` timestamp NULL DEFAULT NULL COMMENT '支付时间',
`subscription_payment_time` timestamp NULL DEFAULT NULL COMMENT '订阅支付生成时间',
`accounting_time` timestamp NULL DEFAULT NULL COMMENT '核算时间',
`remark` varchar(512) DEFAULT NULL COMMENT '订单备注',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
);
3. 业务逻辑确认
3.1 学员选择逻辑
问题:一个家长可能有多个孩子,学员端如何处理? 需要确认:
- 登录后是否需要选择孩子?
- 如何在不同孩子之间切换?
- 数据展示是否需要按孩子分别显示?
3.2 收藏功能
问题:是否需要收藏功能? 如果需要,请确认:
- 可以收藏哪些内容?(知识库文章、课程等)
- 是否需要创建
school_student_favorites表?
3.3 合同状态管理
问题:合同状态的具体定义 需要确认:
school_contract_sign.status 字段的枚举值:
- 待签署:pending?
- 已签署:signed?
- 已生效:active?
- 已到期:expired?
4. 页面功能细节确认
4.1 个人信息页面
基于您的说明,确认页面结构:
[用户信息区域]
- 显示:{name} 你好,今天是星期{x}
- 入会时间:{create_year_month}
- 年龄:{age} (根据最新学员生日计算)
[学员信息区域] - 可编辑
- 学员选择下拉框 (如果有多个孩子)
- 学员基本信息编辑
- 头像上传功能
[体测数据区域] - 只读
- 身高、体重显示
- 体测报告PDF预览/下载
4.2 消息页面渲染
基于 message_type 字段,确认渲染方式:
- 不同
message_type对应的页面渲染方式? - 消息列表和详情页的展示差异?
📝 需要创建的数据字典
基于数据库表结构分析,需要在 school_sys_dict 表中存储以下枚举数据:
1. 订单类型字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('订单类型', 'order_type', '[
{"name":"新订单","value":"1"},
{"name":"续费订单","value":"2"},
{"name":"内部员工订单","value":"3"},
{"name":"转校","value":"4"},
{"name":"客户内转课订单","value":"5"}
]');
2. 订单状态字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('订单状态', 'order_status', '[
{"name":"待支付","value":"pending"},
{"name":"已支付","value":"paid"},
{"name":"待签约","value":"signed"},
{"name":"已完成","value":"completed"},
{"name":"转学","value":"transfer"}
]');
3. 支付类型字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('支付类型', 'payment_type', '[
{"name":"现金支付","value":"cash"},
{"name":"扫码支付","value":"scan_code"},
{"name":"订阅支付","value":"subscription"},
{"name":"微信在线代付","value":"wxpay_online"}
]');
4. 知识库分类字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('知识库分类', 'knowledge_table_type', '[
{"name":"课程教学大纲","value":"1"},
{"name":"跳绳教案库","value":"2"},
{"name":"增高教案库","value":"3"},
{"name":"篮球教案库","value":"4"},
{"name":"强化教案库","value":"5"},
{"name":"空中忍者教案库","value":"6"},
{"name":"少儿安防教案库","value":"7"},
{"name":"体能教案库","value":"8"},
{"name":"热身动作库","value":"9"},
{"name":"体能动作库","value":"10"},
{"name":"趣味游戏库","value":"11"},
{"name":"放松动作库","value":"12"},
{"name":"训练内容","value":"13"},
{"name":"训练视频","value":"14"},
{"name":"课后作业","value":"15"},
{"name":"优秀一堂课","value":"16"}
]');
5. 消息发送类型字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('消息发送类型', 'message_from_type', '[
{"name":"员工","value":"personnel"},
{"name":"学生(客户)","value":"customer"},
{"name":"系统消息","value":"system"}
]');
6. 消息内容类型字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('消息内容类型', 'message_type', '[
{"name":"文本消息","value":"text"},
{"name":"图片消息","value":"img"},
{"name":"订单消息","value":"order"},
{"name":"学员课程变动消息","value":"student_courses"},
{"name":"课程安排消息","value":"person_course_schedule"}
]');
7. 课程状态字典
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES
('课程状态', 'course_schedule_status', '[
{"name":"待开始","value":"pending"},
{"name":"即将开始","value":"upcoming"},
{"name":"进行中","value":"ongoing"},
{"name":"已结束","value":"completed"}
]');
✅ 业务逻辑已确认
1. 多孩子处理逻辑
- 登录流程:登录后获取孩子列表,默认选择最新添加的孩子
- 切换方式:在孩子信息卡片处设置切换按钮
- 数据展示:所有数据根据选中的孩子ID查询
- 页面结构:孩子选择卡片下方显示各功能模块入口
2. 收藏功能
- 不需要收藏功能:知识内容由工作人员分享给学员,学员只能查看
3. 体测数据展示
- 展示指标:只显示身高和体重
- 趋势图:展示身高和体重的变化趋势
- 体测报告:
- 显示"体测附件"或"体测记录"图标
- 点击可在应用内预览PDF
- 支持将PDF转换为图片分享
4. 消息页面渲染规则
- text消息:纯文本显示
- img消息:缩略图+点击放大
- order消息:显示订单号、金额、状态、购买课程信息,支付成功后显示"查看合同"或"签署合同"按钮
- student_courses消息:课程变动通知(停课、签到核销等),样式与文本消息有差别,无交互
- person_course_schedule消息:预约课程生效通知,显示时间地点,点击查看课程详情
- 已读/未读状态:需要添加数据库字段支持
5. 支付功能
- 支付流程:简化为一键支付,直接唤起支付
- 支付成功:更新订单列表状态
- 支付失败:提示失败,不修改数据库
- 订单管理:只显示订单记录,支持按课程、时间筛选
6. 课程预约
- 预约确认:无需人工确认,可发消息通知教练和教务
- 冲突处理:相同时间段已有预约时提示不能重复预约
- 取消原因:可填写但非必填,需检查数据库字段
7. 合同管理
- 显示信息:合同名称、签署状态、签署时间
- 签署流程:查看合同 → 填写信息 → 上传签名 → 提交
- 文档下载:已签署合同可下载,需将Word转换为PDF或图片
8. 知识库权限
- 内容显示:只显示当前选中孩子可访问的内容
- 学习记录:不需要,仅支持浏览
🔧 需要的技术实现和数据库修改
1. 需要重新设计的数据表
1.1 课程预约功能 - 修改现有表
方案:使用现有的 school_person_course_schedule 表,通过 course_type=3 标识等待位预约
需要添加的字段:
-- 检查并添加取消原因字段
ALTER TABLE `school_person_course_schedule` ADD COLUMN `cancel_reason` varchar(255) DEFAULT NULL COMMENT '取消预约原因';
-- 确保有软删除字段(如果没有的话)
-- ALTER TABLE `school_person_course_schedule` ADD COLUMN `deleted_at` int DEFAULT 0 COMMENT '删除时间,0为未删除';
预约数据管理逻辑:
- 新预约:插入记录,设置
course_type=3(等待位) - 预约生效:员工将
course_type改为正式课程类型 - 取消预约:设置
deleted_at为当前时间戳,可选填写cancel_reason - 预约查询:查询
course_type=3且deleted_at=0的记录
1.2 消息已读状态 - 需要修改现有表
问题:school_chat_messages 表缺少已读状态字段
解决方案:添加字段
ALTER TABLE `school_chat_messages` ADD COLUMN `is_read` tinyint(1) DEFAULT 0 COMMENT '是否已读 0-未读 1-已读';
ALTER TABLE `school_chat_messages` ADD COLUMN `read_time` timestamp NULL DEFAULT NULL COMMENT '已读时间';
1.3 合同签署数据 - 需要修改现有表
问题:合同签署可能需要存储填写的表单数据 解决方案:检查并补充字段
-- 检查 school_contract_sign 表是否有以下字段,如果没有需要添加:
ALTER TABLE `school_contract_sign` ADD COLUMN `form_data` text COMMENT '签署时填写的表单数据JSON';
ALTER TABLE `school_contract_sign` ADD COLUMN `signature_image` varchar(500) COMMENT '签名图片路径';
ALTER TABLE `school_contract_sign` ADD COLUMN `signed_document` varchar(500) COMMENT '已签署文档路径';
1.4 支付类型枚举 - 需要修改现有表
问题:school_order_table.payment_type 枚举中缺少 wxpay_online
解决方案:修改枚举值
ALTER TABLE `school_order_table` MODIFY COLUMN `payment_type`
enum('cash','scan_code','subscription','wxpay_online') NOT NULL
COMMENT '付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付, wxpay_online-微信在线代付';
2. 不需要新建表的功能
2.1 收藏功能 - 不需要
原因:您明确表示不需要收藏功能
2.2 体测数据 - 现有表足够
原因:school_physical_test 表已包含所需的身高、体重和PDF报告字段
2.3 知识库 - 现有表足够
原因:school_lesson_course_teaching 表已有 student_ids 字段控制权限
2.4 订单管理 - 现有表足够
原因:school_order_table 表字段完整,只需要修改支付类型枚举
2.5 个人信息 - 现有表足够
原因:school_student 和 school_customer_resources 表已满足需求
2. Word文档转换库需求
合同下载需要Word转PDF/图片功能,需要检查后端是否有以下库:
- PHP Word转PDF:
phpoffice/phpword+dompdf/dompdf或tecnickcom/tcpdf - Word转图片:需要
imagick扩展 或LibreOffice命令行工具 - 推荐方案:使用
phpoffice/phpword+dompdf/dompdf实现Word转PDF
3. PDF转图片分享功能
体测报告分享需要PDF转图片:
- 使用
imagick扩展:$imagick = new Imagick('file.pdf[0]'); - 或使用
spatie/pdf-to-image包
4. 小程序PDF预览
UniApp内PDF预览实现:
- 使用
uni.downloadFile()下载PDF - 使用
uni.openDocument()打开PDF预览 - 或集成第三方PDF预览组件
📊 最终数据表修改总结
✅ 需要修改的表(共3个)
1. school_person_course_schedule - 课程预约
-- 添加取消原因字段
ALTER TABLE `school_person_course_schedule` ADD COLUMN `cancel_reason` varchar(255) DEFAULT NULL COMMENT '取消预约原因';
预约逻辑:
- 新预约:
course_type=3(等待位) - 取消预约:设置
deleted_at值 + 可选cancel_reason
2. school_chat_messages - 消息已读状态
ALTER TABLE `school_chat_messages` ADD COLUMN `is_read` tinyint(1) DEFAULT 0 COMMENT '是否已读 0-未读 1-已读';
ALTER TABLE `school_chat_messages` ADD COLUMN `read_time` timestamp NULL DEFAULT NULL COMMENT '已读时间';
3. school_order_table - 支付类型补充
ALTER TABLE `school_order_table` MODIFY COLUMN `payment_type`
enum('cash','scan_code','subscription','wxpay_online') NOT NULL
COMMENT '付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付, wxpay_online-微信在线代付';
✅ 需要检查的表(1个)
- school_contract_sign - 检查是否有
form_data、signature_image、signed_document字段
✅ 不需要新建的表
- 所有功能都可以使用现有表结构实现
- 无需创建新的数据表
🎯 开发任务规划
所有需求已明确,数据表设计已确定,现在可以开始制定详细的开发计划:
- 数据库设计完善:执行上述3个表的字段修改 + 7个数据字典插入
- 后端API开发:9个功能模块的接口实现
- 前端页面开发:UniApp小程序页面实现
- 第三方集成:支付、PDF处理、图片转换
- 测试验收:功能测试和用户体验验证
准备开始执行开发计划!