智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

22 KiB

学员端开发需求整合确认文档

📋 基于需求文档和数据库分析的整合确认

我已经分析了《学员端开发需求文档.md》,并通过Docker命令直接查询了数据库表结构,获取了完整的字段定义和枚举值。现在整理出完整的技术规范和需要您确认的业务逻辑问题。

核心质量原则

  1. 数据一致性第一:页面显示数据与数据库数据必须100%一致
  2. 功能完整性第一:每个功能都要完整实现,不允许半成品
  3. 用户体验第一:每个交互都要符合预期,不允许异常
  4. 代码质量第一:不合格代码绝不允许合并

数据库信息

  • [] 数据库访问权限:开发者是否有数据库读写权限?

  • [ ] 数据库连接信息:开发环境的数据库配置 数据库配置信息如下: 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=3deleted_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_studentschool_customer_resources 表已满足需求

2. Word文档转换库需求

合同下载需要Word转PDF/图片功能,需要检查后端是否有以下库:

  • PHP Word转PDFphpoffice/phpword + dompdf/dompdftecnickcom/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_datasignature_imagesigned_document 字段

不需要新建的表

  • 所有功能都可以使用现有表结构实现
  • 无需创建新的数据表

🎯 开发任务规划

所有需求已明确,数据表设计已确定,现在可以开始制定详细的开发计划:

  1. 数据库设计完善:执行上述3个表的字段修改 + 7个数据字典插入
  2. 后端API开发:9个功能模块的接口实现
  3. 前端页面开发:UniApp小程序页面实现
  4. 第三方集成:支付、PDF处理、图片转换
  5. 测试验收:功能测试和用户体验验证

准备开始执行开发计划!