需求规格说明书 第5组 - xiaochu-dev/online-shopping-group5 GitHub Wiki
在线购物系统 需求规格说明书
| 项目 | 内容 |
|---|---|
| 项目名称 | 在线购物系统(挑战升级) |
| 版本 | MVP(第 1 次迭代基线版本) |
| 项目组号 | 第 5 组 |
| 组长 | 胡成溯 |
| 编制人 | 周到(产品经理) |
| 编制日期 | 2026-10-04 |
| 文档状态 | 已依据需求澄清访谈结论定稿(v1.1 按第 1 次评审助教点评补强) |
文档说明:本文件描述 MVP 版本的功能需求,作为本组开发、测试与验收的依据。 需求条目中的规则均来自 2026-10-04 的需求澄清访谈结论,未经澄清的假设一律标注为「待确认」。
1 引言
1.1 编写目的
明确 MVP 版本的功能范围、业务规则与验收依据,供开发、测试、评审三方使用。
1.2 项目背景
本课程项目采用「挑战升级」组织方式:所有项目组在统一基线需求之上,于 7 次迭代中逐步增加功能。本次为第 1 次迭代,目标是交付可运行的基线 MVP 原型。
1.3 范围界定
| 属于本版本范围 | 不属于本版本范围(后续迭代) |
|---|---|
| 单商品在线售卖(同一时间仅一件在售) | 多商品 / 多卖家 / 商品分类 |
| 卖家后台(发布、历史、意向人、冻结、改密) | 用户注册与登录体系 |
| 买家填写信息提交购买意向 | 在线支付(本版本为线下交易) |
| 意向排队、口令码撤销、顺位递补 | 库存管理、订单系统、物流配送 |
| 商品冻结/解冻与交易结果标记 | 评价、营销、权限、消息通知 |
| Web 网页端 | Android / iOS / 微信小程序 |
1.4 术语与缩写
| 术语 | 含义 |
|---|---|
| 在售 | 商品可被买家浏览并提交意向的状态 |
| 已冻结 | 商品处于交易中或卖家主动冻结,不再接收新意向的状态 |
| 意向 | 买家提交的购买申请,包含姓名、联系电话,并绑定一个口令码 |
| 口令码 | 买家提交意向时系统生成并当场显示的凭证,用于撤销该意向 |
| 队列 | 按意向提交时间正序排列的购买意向列表 |
| 递补 | 队首交易失败或撤销后,后一位自动顶上的机制 |
| 历史商品 | 已完成(成交或失败)或被下架的商品记录 |
1.5 参考资料
- 《课程导论》——项目主题与基线需求来源
- 课程 Wiki《系统验收标准》——五方面验收要求
- 课程 Wiki《阶段性评审 (I)》——报告与提交规范
- 《需求澄清结论-第5组》——本组需求澄清访谈结果(2026-10-04)
2 用户角色与用例
2.1 用户角色识别
| 角色 | 说明 | 是否需要登录 |
|---|---|---|
| 卖家 | 系统内唯一的运营者。负责发布商品、处理意向、标记交易结果 | ✅ 需登录(用户名 + 密码) |
| 买家 | 任意访问者。无需注册,浏览商品并提交购买意向 | ❌ 无需登录(填写姓名与电话即可) |
| 系统 | 自动执行状态流转(进入交易时自动冻结、撤销后自动递补) | — |
⚠️ 本版本无买家账号体系,买家身份不具备持久性,每次提交意向都是独立记录。
2.2 角色职责对比
| 能力 | 卖家 | 买家 |
|---|---|---|
| 发布商品 | ✅ | ❌ |
| 浏览在售商品 | ✅ | ✅ |
| 提交购买意向 | ❌ | ✅ |
| 查看意向购买人列表 | ✅ | ❌ |
| 标记交易结果(成功/失败) | ✅(唯一入口) | ❌ |
| 冻结 / 解冻商品 | ✅(手动) | ❌ |
| 撤销自己的意向 | ❌ | ✅(凭口令码) |
| 修改密码 | ✅ | ❌ |
3 业务流程
3.1 主流程:商品从发布到成交
① 卖家登录后台
↓
② 卖家发布商品(名称·描述·图片·价格)
↓
③ 商品进入「在售」状态,买家可见
↓
④ 买家浏览商品 → 填写姓名、电话 → 提交购买意向
↓
⑤ 系统生成口令码并显示给买家;意向按提交时间进入队列
↓
⑥ 卖家查看意向购买人列表,选定一位进行线下交易
↓
⑦ 商品自动转为「已冻结」;队列后位者仍排队但不可进入交易
↓
⑧ 卖家线下谈完后回后台标记结果
↓
┌────────────┴────────────┐
标记「成功」 标记「失败」
↓ ↓
商品撤下,进入历史 商品恢复「在售」,重新上线
(保留完整记录) ↓
队列后一位自动递补进入交易
3.2 分支流程:买家撤销意向
买家凭口令码发起撤销
↓
该意向从队列中移出
↓
队列中后于它的意向位次自动前移(顺位递补)
↓
商品状态不变(仍为「在售」或「已冻结」,取决于撤销发生在何时)
3.3 商品状态流转
商品状态值共 3 个,语义状态显式列为 4 个——「已恢复在售」为语义标签,库中复用 on_sale 状态值:
| 状态 | 含义 | 买家可否浏览 | 可否提交新意向 |
|---|---|---|---|
| 在售 | 上架可售 | ✅ | ✅ |
| 已冻结 | 交易中 / 卖家主动冻结 | ✅(显示「商品交易中」) | ❌ |
| 已下架 | 成交撤下或手动下架,转入历史 | 仅历史记录中可见 | ❌ |
| 已恢复在售 | 经历「冻结 → 解冻」或「标记失败恢复」路径后重新在售;语义标签:库中复用 on_sale 状态值,不新增状态值(第 1 次评审助教建议显式化) |
✅ | ✅ |
状态流转图:
卖家发布
↓
┌──────┐
│ 在售 │ ←────────────┐
└──────┘ │
│ ↑ │ 标记「失败」
进入交易(系统自动) │ 或手动解冻
或卖家手动冻结 │
↓ │ │
┌──────┐ │
│已冻结│──────────────┘
└──────┘
│
│ 标记「成功」
│ 或卖家手动下架
↓
┌──────┐
│已下架│(终态)
└──────┘
关键规则:自动冻结(进入交易时)与手动冻结是同一个状态,不做区分。 恢复路径显式化:流转图中「标记失败 / 手动解冻 → 在售」的回路即**「已恢复在售」**语义态——库中复用
on_sale,仅语义上区分「经历过冻结的商品重新在售」。
4 功能需求
FR-01 卖家登录与账号管理
描述:系统内仅有一个卖家账号,卖家须登录后才能进入后台执行任何操作。
| 编号 | 需求条目 |
|---|---|
| FR-01-1 | 系统内有且仅有一个卖家账号,采用「用户名 + 密码」方式认证 |
| FR-01-2 | 账号的初始化方式(预置数据 / 自行建表)由开发方决定,实现即可 |
| FR-01-3 | 未登录状态下无法访问后台;发布、冻结、查看意向人、标记结果等操作均须先登录 |
| FR-01-4 | 修改密码时必须校验原密码,校验通过方可设置新密码 |
| FR-01-5 | 新密码长度不少于 8 位 |
| FR-01-6 | 本版本**不提供「退出登录」**功能 |
优先级:高(阻塞后续全部后台功能)
FR-02 商品发布
描述:卖家在后台发布商品,填写 4 项商品信息。
商品字段规格:
| 字段 | 必填 | 类型 / 限制 |
|---|---|---|
| 名称 | ✅ | 文本,不设字数上限 |
| 描述 | ❌ | 文本,不设字数上限,允许留空 |
| 图片 | ❌ | 最多 1 张主图;格式 JPG / PNG;单张 ≤ 5MB;未上传时使用占位图 |
| 价格 | ✅ | 数值,必须 > 0;人民币;保留两位小数(如 9.90) |
| 编号 | 需求条目 |
|---|---|
| FR-02-1 | 同一时间在售商品有且仅有一件 |
| FR-02-2 | 已有一件在售时,不允许再发布新商品 |
| FR-02-3 | 名称、价格为必填项,缺失时给出提示并阻止提交 |
| FR-02-4 | 描述可留空,图片可不上传(自动使用占位图) |
| FR-02-5 | 价格必须大于 0,格式非法(0、负数、非数字)时给出提示并阻止提交 |
| FR-02-6 | 图片超出 5MB 或格式非 JPG/PNG 时,给出提示并阻止上传 |
| FR-02-7 | 商品发布后即进入「在售」状态,买家可见 |
| FR-02-8 | 发布后商品信息不可修改(澄清结论未提及修改能力,按不可改处理;如需修改需重新发布) |
优先级:高
⚠️ 待确认:FR-02-8「发布后不可修改」是基于澄清结论「未提及修改」的推断,建议在第 2 次评审前与助教复核。
FR-03 商品浏览与意向提交
描述:买家浏览在售商品,填写信息提交购买意向。
| 编号 | 需求条目 |
|---|---|
| FR-03-1 | 买家无需登录即可浏览「在售」状态的商品 |
| FR-03-2 | 商品在「已冻结」状态下仍可被浏览,但页面显示**「商品交易中」**提示 |
| FR-03-3 | 「已冻结」状态下不接收新的购买意向,买家无法提交 |
| FR-03-4 | 提交意向需填写 姓名、联系电话,两项均必填 |
| FR-03-5 | 联系电话不做格式校验,任意输入均接收 |
| FR-03-6 | 联系电话不做唯一性校验与去重,同一号码可重复提交意向 |
| FR-03-7 | 每次提交都是独立的一次意向记录,各自拥有独立口令码 |
| FR-03-8 | 提交成功后,系统生成口令码并当场显示给买家 |
| FR-03-9 | 意向按提交时间正序进入队列,规则为严格先到先得 |
| FR-03-10 | 系统内无在售商品时,买家页显示**「暂无商品在售」**空态提示,不渲染商品卡片与提交表单(v1.1 补录,页面已实现) |
优先级:高
FR-04 意向队列与排队规则
描述:多名买家同时有意向时,按队列规则管理。
| 编号 | 需求条目 |
|---|---|
| FR-04-1 | 队列可容纳多个意向,不限制为一人 |
| FR-04-2 | 队列排序规则:按意向提交时间正序(先到先得) |
| FR-04-3 | 同一时间仅队列首位可进入线下交易环节 |
| FR-04-4 | 买家可凭口令码撤销自己的意向 |
| FR-04-5 | 撤销后该意向从队列中移出 |
| FR-04-6 | 撤销后,其后所有意向的位次自动前移(顺位递补) |
| FR-04-7 | 队首交易失败时,后一位自动递补成为新的队首 |
| FR-04-8 | 口令码失效规则(v1.1 正式化):口令码不设时间有效期,随意向生命周期——意向为 pending 时有效(冻结期仍然有效);意向进入 trading 或到达终态(success / failed / cancelled)后即失效,不可再凭码操作 |
| FR-04-9 | 凭口令码查询意向状态:本版本不提供(v1.1 显式划为范围外)。口令码仅提交成功时当场展示一次,不支持后续凭码查询,防止口令码被他人拾获后刺探队列信息;列入第 2 次迭代候选 |
| FR-04-10 | 凭口令码修改意向信息:本版本不提供(v1.1 显式划为范围外)。姓名/电话提交后不可修改,如填写有误可凭口令码撤销后重新提交(FR-04-4 已覆盖该场景);列入第 2 次迭代候选 |
优先级:高(逻辑复杂度最高,需重点测试)
✅ 已于 v1.1 定义:口令码的生成算法、存储方式、校验规则与失效规则见 FR-04-8 ~ FR-04-10,设计细节见 Wiki《口令码与队列规则说明》(设计定义与代码实现一一对应)。
FR-05 卖家后台 · 意向购买人管理
描述:卖家登录后可查看当前商品的意向购买人列表。
| 编号 | 需求条目 |
|---|---|
| FR-05-1 | 卖家可查看当前在售/冻结商品的意向购买人列表 |
| FR-05-2 | 列表展示字段:姓名、联系电话、意向提交时间 |
| FR-05-3 | 列表按提交时间顺序展示,便于卖家识别队首 |
| FR-05-4 | 卖家从列表中选择一位买家进入线下交易 |
优先级:高
FR-06 商品冻结与解冻
描述:商品进入交易或卖家主动操作时冻结,冻结期间不接收新意向。
| 编号 | 需求条目 |
|---|---|
| FR-06-1 | 自动冻结:卖家选定买家进入交易时,系统自动将商品由「在售」转为「已冻结」 |
| FR-06-2 | 手动冻结:卖家可在后台手动冻结商品 |
| FR-06-3 | 自动冻结与手动冻结是同一个状态,不做区分 |
| FR-06-4 | 冻结期间不再接收新的购买意向,买家点「我要买」显示**「商品交易中」** |
| FR-06-5 | 冻结期间商品对买家仍然可见,但无法购买、无法提交意向 |
| FR-06-6 | 后台提供冻结 / 解冻开关,卖家在交易进行中亦可手动解冻 |
| FR-06-7 | 解冻后商品恢复「在售」,重新接收新意向 |
优先级:高
FR-07 交易结果标记
描述:线下交易完成后,卖家回后台标记结果。
| 编号 | 需求条目 |
|---|---|
| FR-07-1 | 交易结果只能由卖家在后台标记,买家侧无此入口 |
| FR-07-2 | 结果分两档:成功 / 失败 |
| FR-07-3 | 系统不参与结果判定,也不自动判定 |
| FR-07-4 | 本版本无超时机制,不存在超时自动判失败 |
| FR-07-5 | 标记「成功」:商品撤下,转入历史记录 |
| FR-07-6 | 标记「失败」:商品恢复「在售」并重新上线 |
| FR-07-7 | 标记「失败」后,若队列中仍有排队的意向,按顺序递补进入交易 |
优先级:高
FR-08 历史商品记录
描述:商品成交或下架后,保留可查询的历史记录。
| 编号 | 需求条目 |
|---|---|
| FR-08-1 | 卖家可在后台查看历史商品列表 |
| FR-08-2 | 历史列表按时间倒序排列,支持翻页 |
| FR-08-3 | 商品级保留字段:商品名称、描述、图片、价格、发布时间、最终交易结果(成功/失败)、交易时间 |
| FR-08-4 | 每条历史商品可点进详情,查看该商品的意向购买人列表 |
| FR-08-5 | 意向人级保留字段:姓名、联系电话、意向提交时间、每人对应的交易结果 |
| FR-08-6 | 历史记录为只读,不提供修改与删除 |
优先级:中(不影响主流程,但属于基线要求)
⚠️ 待确认:FR-08-2「按时间倒序」中的"时间"指发布时间还是交易时间,澄清未明确。默认采用交易时间,如需调整请确认。
5 非功能需求
| 编号 | 类别 | 需求 |
|---|---|---|
| NFR-01 | 终端范围 | 仅 Web 网页端;Android / iOS / 微信小程序不在本版本范围 |
| NFR-02 | 数据一致性 | 同一时间在售商品唯一;队列位次在撤销/递补后必须正确重排 |
| NFR-03 | 并发处理 | 多人同时提交意向时,入库顺序必须严格反映提交时间先后 |
| NFR-04 | 数据持久化 | 商品、意向、历史记录、口令码须持久化存储,服务重启不丢失 |
| NFR-05 | 安全性 | 后台功能须登录后访问,未登录访问后台一律重定向至登录页(后台入口清晰);卖家密码以 sha256 + salt 哈希存储,数据库不落明文;口令码不可被他人猜测或枚举 |
| NFR-06 | 可用性 | 关键操作(提交、冻结、标记结果)需有明确的成功/失败反馈;边界空态(无在售商品、队列无有效意向)需有明确提示,不出现空白页 |
| NFR-07 | 操作留痕 | 关键操作记录时间戳:意向提交(created_at)、商品发布(published_at)、交易结果(traded_at)本版本已实现;冻结与改密操作的专属时间戳第 2 次迭代补齐(当前库表无对应字段,如实标注)(v1.1 新增) |
| NFR-08 | 历史可检索 | 历史商品列表除倒序 + 分页外,支持按商品名称检索定位——第 2 次迭代实现(当前版本为倒序 + 翻页浏览)(v1.1 新增) |
6 验收标准(MVP)
对照课程《系统验收标准》五方面:
| # | 方面 | 本版本验收要求 | 成果物 |
|---|---|---|---|
| 1 | 需求 | 本文件(需求规格说明书)+ 角色用例 | 本文件 |
| 2 | 代码 | 完整源代码,规范目录结构与版本命名,可从 Git 平台下载 | 项目简写-版本号.zip |
| 3 | 构建 | 提供构建配置(如 pom.xml)、构建工具及版本、构建过程手册 |
构建文件 + 手册 |
| 4 | 部署 | 提供运行环境说明、安装部署过程、部署脚本 | 部署脚本 + 手册 |
| 5 | 运行 | 每个功能点的测试用例设计及清单、自动化执行脚本、运行演示录屏 | 测试用例文档 + 脚本 + 录屏视频 |
MVP 功能验收清单(逐条核对):
| 序 | 验收项 | 通过标准 |
|---|---|---|
| 1 | 卖家登录 | 正确账号密码可进入后台;错误密码被拒绝 |
| 2 | 商品发布 | 4 项字段按规则校验;发布后进入在售状态 |
| 3 | 商品浏览 | 买家可见在售商品完整信息;无在售商品时显示「暂无商品在售」空态 |
| 4 | 提交意向 | 姓名电话必填校验生效;口令码正确生成并显示 |
| 5 | 排队规则 | 多意向按提交时间正序排列;仅队首可进入交易 |
| 6 | 撤销意向 | 凭口令码可撤销;队列自动顺位前移;口令码失效后凭码操作被拒 |
| 7 | 查看意向人 | 后台可见姓名、电话、提交时间 |
| 8 | 冻结 | 自动/手动冻结均生效;冻结期不收新意向并显示「商品交易中」;商品仍可见 |
| 9 | 解冻 | 手动解冻后恢复在售并可收新意向 |
| 10 | 标记成功 | 商品撤下并进入历史记录 |
| 11 | 标记失败 | 商品恢复在售;排队者自动递补 |
| 12 | 历史记录 | 商品级 + 意向人级字段完整;倒序排列;可翻页 |
| 13 | 修改密码 | 需验原密码;新密码 ≥8 位 |
| 14 | 范围核对 | 无评价功能;仅 Web 端 |
7 需求追溯矩阵
| 需求编号 | 需求名称 | 优先级 | 负责人 | 对应验收项 |
|---|---|---|---|---|
| FR-01 | 卖家登录与账号管理 | 高 | 胡成溯 | 1、13 |
| FR-02 | 商品发布 | 高 | 黄程宇 | 2 |
| FR-03 | 商品浏览与意向提交 | 高 | 黄程宇 | 3、4 |
| FR-04 | 意向队列与排队规则 | 高 | 周到 | 5、6 |
| FR-05 | 卖家后台 · 意向购买人管理 | 高 | 胡成溯 | 7 |
| FR-06 | 商品冻结与解冻 | 高 | 周到 | 8、9 |
| FR-07 | 交易结果标记 | 高 | 胡成溯 | 10、11 |
| FR-08 | 历史商品记录 | 中 | 胡成溯 | 12 |
| NFR-01 | 终端范围 | — | 全员 | 14 |
8 待确认事项
| # | 事项 | 影响 | 处理方式 |
|---|---|---|---|
| 1 | 口令码的生成、存储、校验规则与有效期 | FR-04 撤销功能 | ✅ 已定义关闭(v1.1):见 FR-04-8 ~ FR-04-10 与《口令码与队列规则说明》;有效期规则为「不设时间有效期,随意向生命周期」 |
| 2 | 商品发布后是否允许修改 | FR-02-8 | 第 2 次评审前与助教复核 |
| 3 | 历史记录"倒序"依据的时间字段 | FR-08-2 | 暂定交易时间,确认后修订 |
| 4 | 同一买家重复提交时,是否合并显示 | FR-03-6 | 澄清已明确「不合并」,各自独立 |
| 5 | 必做/选做划分与验收标准归属 | 项目考核 | 助教答复超出澄清范围,由本组对照课程验收标准自定 |
9 变更记录
| 版本 | 日期 | 变更内容 | 修订人 |
|---|---|---|---|
| v1.0 | 2026-10-04 | 首版创建,依据需求澄清访谈结论编制 | 周到 |
| v1.1 | 2026-10-07 | 依据第 1 次评审助教点评补强:①口令码失效规则正式化(FR-04-8),凭码查询/修改显式划为范围外(FR-04-9/10),关闭待确认事项 1;②商品状态显式化「已恢复在售」语义态(复用 on_sale);③NFR-05 扩写密码哈希存储与后台入口,新增 NFR-07 操作留痕、NFR-08 历史检索;④补 FR-03-10 空态提示,验收清单第 3/6 条补充通过标准 | 周到 |
本文件为第 5 组 MVP 版本需求基线,后续迭代在此文件基础上增补需求章节。