需求规格说明书 第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 版本需求基线,后续迭代在此文件基础上增补需求章节。