在线购物系统需求规格说明书 - casf73/Software-Engineering-Practice GitHub Wiki

在线购物系统需求规格说明书

  • 文档版本:V3.0
  • 修订日期:2026-11-05
  • 项目名称:在线购物系统
  • 项目组号:第8组
  • 本版范围:基础功能、第二轮完善功能及第三轮挑战需求A.1、A.2

术语表

术语 定义
访客 无需注册即可浏览商品,填写姓名电话提交意向,并凭口令码操作。
注册客户 注册后可登录、提交客户意向,并查看本人购买历史。
卖家 唯一后台账号,管理商品、分类、库存、交易和客户资料。
选中商品 页面当前查看或操作的商品,不代表系统只能存在一个有效商品。
购买意向 针对指定商品的一件购买申请。
FIFO 按服务端queue_at升序排列,相同时间按意向编号升序。
队首 某件商品等待队列中的第一条有效意向。
口令码 与单条意向绑定的持有者凭据,结束后按规则失效。
在售 商品可公开展示,并可接收新的购买意向。
手动冻结 卖家暂停该商品新意向,保留队列,可手动解除。
交易冻结 该商品已进入队首交易,必须先登记结果。
库存 商品可售数量,成功交易减1,归零下架。
两级分类 一级与二级父子分类结构。
商品快照 下单时保存的商品名称和价格,商品编辑不回写。
默认交易地点 客户注册时保存的常用交易地点。
本次交易地点 客户提交某条意向时确认的地点,可与默认地点不同。
富媒体描述 允许的格式化文字及本地描述图片。
购买历史 客户账号下保留的意向记录及状态,不因口令码失效而删除。

1 项目概述

本系统支持单卖家在线展示多个商品、管理购买意向及登记线下交易结果。

访客可以免登录浏览和搜索商品,提交姓名电话后领取口令码。注册客户可以保存电话和默认交易地点,并在登录后查看本人购买历史。

每件商品具有独立的库存、状态和FIFO队列。卖家开始交易时,系统自动选择该商品队首买家;交易结果由卖家登记。

系统不提供线上支付,交易在线下完成。

2 迭代范围

轮次 主要内容
第一次 基础商品展示、访客意向、口令码、FIFO、交易结果、主动下架及图片上传。
第二次 等待联系信息修改、手动冻结解冻、卖家密码修改及旧会话撤销。
第三次 A.1多商品、两级分类、库存、搜索、多图富媒体;A.2客户注册、本人历史和卖家客户查询。

第三轮迭代日期为2026-10-22至2026-11-05。第四轮于2026-11-05开始,结束日期暂定。

3 用户角色与权限

角色 允许操作
访客 浏览、搜索、筛选商品;提交指定商品意向;凭码查询、修改等待联系信息或撤销。
注册客户 保留访客浏览能力;注册登录;确认本次交易地点;查看本人购买历史。
卖家 管理商品、分类、库存、媒体、队列、交易、账号和注册客户资料。

3.1 权限规则

  1. 商品公开浏览不要求登录或口令码。
  2. 卖家管理接口必须验证卖家身份。
  3. 本人历史和客户意向接口必须验证客户身份。
  4. 客户身份不能替代卖家身份。
  5. 本人历史使用服务端会话客户编号。
  6. 不允许客户端传入其他客户编号查看他人历史。
  7. 卖家查询客户资料不返回密码或密码哈希。
  8. 卖家查询客户历史不返回可操作的客户口令码。
  9. 客户和卖家会话身份分开维护。

4 挑战需求A.1 商品管理升级

4.1 多商品同时发布

  1. 系统允许多个商品同时有效。
  2. 每件商品使用独立编号。
  3. 商品状态、库存、等待队列和当前交易对象分别维护。
  4. 操作一个商品不改变其他商品状态、库存和排位。
  5. 当前页面通过商品编号确定操作对象。
  6. 旧唯一商品接口仅在上下文唯一时使用,多商品无法确定目标时返回冲突。

4.2 商品信息

字段 规则
名称 必填,最多80字符。
价格 必填,大于0,最多2位小数,整数部分最多10位。
库存 0~1000000整数。
分类 可关联一个一级或二级分类,也可未分类。
相册 0~9张JPG/PNG图片,单张不超过5MB。
描述 选填,最多20000字符;清理后的内容也受长度限制。

编辑交易中的商品应被拒绝,避免交易过程中改变库存或商品资料。

4.3 两级类别管理

  1. 卖家可新增、编辑和删除分类。
  2. parent_id为空表示一级分类。
  3. 二级分类只能关联一级父类。
  4. 禁止三级分类。
  5. 禁止父子循环和关联自身。
  6. 同一父类下名称不能重复,大小写不区分重复。
  7. 不同父类允许同名子类。
  8. 存在子类或商品引用时不能直接删除。
  9. 包含子类的一级分类不能直接降为二级。
  10. 一级分类筛选应包含其二级分类商品。

4.4 库存及售罄下架

  1. 每条购买意向对应1件商品。
  2. 成功交易扣减1件库存。
  3. 交易失败不扣减库存。
  4. 库存大于0时,成功交易后商品恢复在售。
  5. 库存归零时,商品自动下架。
  6. 售罄后,该商品其余等待意向结束,口令码失效。
  7. 库存0发布的商品直接为下架状态。
  8. 下架商品补货后,需要执行重新上架。
  9. 重新上架不自动恢复已结束的意向。
  10. 重复登记同一笔结果不能再次扣库存。

4.5 商品浏览、搜索和分页

  1. 买家可以浏览多个有效商品。
  2. 下架商品不出现在公开列表。
  3. 手动冻结和交易中商品仍可展示,但不能接受新意向。
  4. 搜索范围为商品名称及描述可见文字。
  5. 搜索忽略大小写。
  6. 支持一级或二级分类筛选。
  7. 支持分页,页码从0开始,每页1~100条。
  8. 无匹配结果时显示空状态。
  9. 重置筛选后恢复相应商品列表。

4.6 多图相册与富媒体描述

  1. 每商品最多9张相册图片。
  2. 图片格式支持JPG和PNG,单张不超过5MB。
  3. 未上传图片时显示占位内容。
  4. 保存并展示图片顺序。
  5. 买家可通过缩略图切换图片。
  6. 描述支持标题、段落、加粗、斜体、列表及本地图片。
  7. 服务端清理危险标签及属性。
  8. 相册地址必须来自允许的本地上传路径。
  9. 描述再次保存不应破坏已允许的内容和图片。

5 挑战需求A.2 客户升级

5.1 客户注册

注册字段:

字段 规则
用户名 必填,3~32位文字、数字、下划线或短横线。
密码 必填,8~128位,不允许空白密码。
电话 必填,符合电话格式和长度规则。
默认交易地点 必填,最多200字符。

业务规则:

  1. 用户名大小写归一后唯一。
  2. 重复注册应拒绝。
  3. 注册成功自动登录。
  4. 密码只保存派生结果,不保存明文。
  5. 对外返回客户资料时不返回密码字段。

5.2 客户登录和退出

  1. 客户使用用户名和密码登录。
  2. 错误账号或密码拒绝登录。
  3. 登录后建立客户身份并轮换会话编号。
  4. 退出只移除客户身份。
  5. 未登录时访问本人购买历史应要求登录。
  6. 客户退出不应清除同一浏览器的卖家身份。

5.3 默认与本次交易地点

  1. 注册时保存默认交易地点。
  2. 提交客户意向时,前端默认填入该地点。
  3. 客户可以修改本次交易地点。
  4. 本次地点必填,最多200字符。
  5. 修改本次地点不修改账号默认地点。
  6. 本次地点随意向保存,供客户历史及卖家查看。

5.4 客户购买历史

  1. 客户只能查看本人账号提交的购买记录。
  2. 记录按提交时间及编号倒序分页。
  3. 展示等待、交易、成功、失败、撤销、作废和下架结束状态。
  4. 展示商品名称价格快照、本次联系人、电话、地点、时间和有效排位。
  5. 商品后续改名或改价不改变历史快照。
  6. 口令码失效不删除历史记录。
  7. 访客意向不按相同姓名或电话自动认领。
  8. 客户不能通过修改查询参数访问他人历史。

5.5 卖家客户信息与历史

  1. 卖家可查询全部注册客户。
  2. 展示用户名、电话、默认地点和注册时间。
  3. 支持用户名或电话搜索。
  4. 支持分页。
  5. 可查看指定客户购买历史。
  6. 客户资料不返回密码或密码哈希。
  7. 卖家历史查询不提供客户口令码。
  8. 访客和仅客户身份不能访问卖家客户接口。

6 购买意向与FIFO队列

6.1 提交意向

  1. 意向必须关联指定商品。
  2. 仅在售且有库存时允许提交。
  3. 姓名必填,最多80字符。
  4. 电话必填,长度6~30字符,必须含数字。
  5. 电话允许数字、加号、括号、空格及短横线。
  6. 每条意向生成唯一口令码。
  7. 客户意向额外保存客户归属、交易地点和商品快照。

6.2 队列顺序

  1. 每件商品独立排队。
  2. 按queue_at升序排序,同时间按id升序。
  3. 开始交易自动选择队首。
  4. 卖家不能跳过队首指定其他买家。
  5. 重新排队保留同一意向和原口令码,刷新排队时间到队尾。

6.3 修改与撤销

  1. 等待中的买家可凭码修改姓名和电话。
  2. 修改保留编号、口令码、提交时间和排位。
  3. 手动冻结或其他买家交易时,等待者仍可修改或撤销。
  4. 当前交易中的买家不能修改或撤销。
  5. 撤销后退出队列并使原码失效。
  6. 后续买家的等待排位相应前移。

7 交易、冻结与商品状态

7.1 商品状态

状态 含义 后续处理
ON_SALE 在售 接收意向,可开始交易、手动冻结或下架。
MANUALLY_FROZEN 手动冻结 保留队列,拒绝新意向,可手动解冻。
IN_TRADE 交易中 拒绝新意向,须先登记交易结果。
DELISTED 下架 不公开接单,有库存后可重新上架。

7.2 意向状态

状态 含义
WAITING 等待排队。
IN_TRADE 当前交易对象。
TRADE_SUCCESS 交易成功。
TRADE_FAILED 交易失败作废,或商品售罄导致等待意向结束。
VOIDED 卖家作废等待意向。
CANCELLED 买家撤销。
PRODUCT_DELISTED 主动下架导致结束。

7.3 交易结果

结果 库存 商品 当前意向及原码
成功且有余量 减1 恢复在售 成功,原码失效。
成功后售罄 减1至0 下架 成功,原码失效;其他等待意向结束。
失败并作废 不变 恢复在售 失败,原码失效。
失败并重排 不变 恢复在售 返回等待,原码有效,移动队尾。

系统不自动开始下一笔交易,也没有超时自动成交。

7.4 手动冻结与主动下架

  1. 在售商品可手动冻结。
  2. 手动冻结保留队列和有效口令码。
  3. 手动冻结须先解冻才能开始交易或主动下架。
  4. 交易冻结不能通过手动解冻绕过。
  5. 主动下架只允许在售状态。
  6. 下架结束该商品等待意向,不影响其他商品。

8 卖家账号和密码

  1. 系统保留唯一卖家账号。
  2. 初始账号admin、密码123456仅用于首次建库。
  3. 卖家可修改密码,必须验证原密码。
  4. 新密码8~128位。
  5. 改密增加会话版本,使旧卖家身份失效。
  6. 重启不恢复初始密码。
  7. 卖家退出或改密不清除独立客户身份。

密码使用PBKDF2-HMAC-SHA256,600000次迭代、16字节随机盐及32字节派生结果。

9 数据保存

表 主要内容
products 商品资料、库存、分类、图片、描述及状态。
categories 两级分类。
purchase_intents 商品意向、排队、状态、口令码、客户归属、地点及快照。
customer_accounts 客户账号、电话、默认地点、密码哈希及注册时间。
seller_accounts 卖家密码哈希和会话版本。

日常运行使用H2文件数据库,重启需保留启动目录下的data。

客户历史基于意向记录和下单快照。系统当前没有独立保存每次重排、每次交易尝试的完整事件审计表。

10 业务流程与状态图

10.1 商品与交易主流程

flowchart TD
    A[卖家发布多个商品] --> B[买家浏览搜索并选择商品]
    B --> C{是否为登录客户}
    C -->|否| D[填写姓名电话]
    C -->|是| E[确认联系信息及本次地点]
    D --> F[进入指定商品FIFO队列]
    E --> F
    E --> G[保存客户归属及商品快照]
    F --> H[卖家开始队首交易]
    H --> I{登记结果}
    I -->|失败| J[作废或重新排队 库存不变]
    I -->|成功| K[库存减1]
    K --> L{库存为0}
    L -->|否| M[恢复在售 保留等待队列]
    L -->|是| N[下架并结束剩余等待]
    J --> M
    G --> O[客户本人及卖家查询历史]

10.2 买家浏览与意向操作

flowchart TD
    A[浏览 搜索 分类筛选] --> B[选择指定商品]
    B --> C[提交访客或客户意向]
    C --> D[获得口令码]
    D --> E{意向状态}
    E -->|等待| F[可查询 修改姓名电话或撤销]
    E -->|交易中| G[可查询 不能修改或撤销]
    E -->|已结束| H[口令失效 客户历史继续保留]

10.3 卖家后台与客户历史

flowchart TD
    A[卖家登录] --> B[管理多商品 分类 库存和媒体]
    A --> C[处理指定商品队列及交易]
    A --> D[客户管理]
    D --> E[用户名或电话搜索]
    E --> F[客户资料及购买历史]
    F --> G[展示快照和地点 不返回密码及客户口令]

10.4 商品发布与媒体处理

flowchart TD
    A[输入名称价格库存和分类] --> B[选择0至9张相册图]
    B --> C[编辑富文本及本地描述图片]
    C --> D[服务端校验并清理]
    D --> E{库存大于0}
    E -->|是| F[发布为在售]
    E -->|否| G[发布为下架]

10.5 商品状态

stateDiagram-v2
    [*] --> ON_SALE: 有库存发布
    [*] --> DELISTED: 零库存发布
    ON_SALE --> MANUALLY_FROZEN: 手动冻结
    MANUALLY_FROZEN --> ON_SALE: 手动解冻
    ON_SALE --> IN_TRADE: 开始队首交易
    IN_TRADE --> ON_SALE: 失败或成功后仍有库存
    IN_TRADE --> DELISTED: 成功售罄
    ON_SALE --> DELISTED: 主动下架或库存调整为0
    DELISTED --> ON_SALE: 补货后重新上架

10.6 购买意向状态

stateDiagram-v2
    [*] --> WAITING: 提交意向
    WAITING --> WAITING: 修改联系信息或重新排队
    WAITING --> IN_TRADE: 队首开始交易
    IN_TRADE --> TRADE_SUCCESS: 成交
    IN_TRADE --> TRADE_FAILED: 失败作废
    IN_TRADE --> WAITING: 失败重新排队
    WAITING --> VOIDED: 卖家作废
    WAITING --> CANCELLED: 买家撤销
    WAITING --> TRADE_FAILED: 商品售罄
    WAITING --> PRODUCT_DELISTED: 主动下架

10.7 口令码有效性

stateDiagram-v2
    [*] --> 有效: 提交意向
    有效 --> 有效: 等待 冻结 交易或失败重排
    有效 --> 失效: 撤销 作废 成交 售罄或下架
    失效 --> [*]: 原码不可操作 历史保留

11 第三轮需求测验Demo

需求人员编写独立网页Demo,提前展示第三轮新增功能。

  • 技术:Vue3、Element Plus。
  • 打开方式:双击index.html。
  • 依赖:本地vendor和assets,离线可用。
  • 数据:页面内模拟数据,刷新恢复。
  • 内容:商品、分类、库存、相册、富文本、客户账号及购买历史。
  • 边界:不连接真实接口和数据库,不模拟完整交易,不作为正式系统测试通过证明。

Demo目录:

https://github.com/casf73/Software-Engineering-Practice/tree/main/requirement/第三轮/功能测验Demo

12 验收与测试

12.1 功能验收

  1. 多个商品可同时发布,并独立维护队列。
  2. 分类最多两级,关联和筛选结果一致。
  3. 成功扣库存,失败不扣,售罄自动下架。
  4. 名称、描述搜索及分页正常。
  5. 多图和富文本能够保存并再次展示。
  6. 客户可以注册登录,并保存电话和默认地点。
  7. 客户只查看本人历史,商品编辑不改变快照。
  8. 卖家可查询注册客户及对应历史。
  9. 不泄露密码、密码哈希及客户可操作口令。

12.2 测试组织

  • 总用例R301~R308。
  • 每总用例8个功能实例及8个接口实例。
  • 第三轮共64个功能实例、64个接口实例。
  • 功能和接口测试分别放置在对应目录。
  • 实例包含详细输入、步骤、预期及设计方法。
  • Excel最右侧或说明位置记录测试方法,末行解释方法原理。

12.3 设计方法

方法 应用
等价类划分 合法与非法输入、匹配与不匹配搜索。
边界值分析 用户名、密码、地点、库存、图片数量及文件大小。
状态转换 在售、冻结、交易、下架及意向结束。
场景法 发布到购买历史的业务操作过程。
权限隔离 不同客户、访客与卖家之间的数据访问。

现有记录中第三轮64个接口实例通过,64个页面功能实例待人工执行。接口通过不代表页面功能已人工验收。

13 当前实现范围之外的内容

以下内容保留为后续需求,不计入第三轮已完成成果:

  • 商品视频上传及视频自动清理。

  • 商品多标签管理。

  • 完整的交易与队列事件审计。

  • 客户自助修改账号默认交易地点。

  • 线上支付。

  • 并发压力、性能极限和长时间稳定性测试。# 在线购物系统需求规格说明书

  • 文档版本:V3.0

  • 修订日期:2026-11-05

  • 项目名称:在线购物系统

  • 项目组号:第8组

  • 本版范围:基础功能、第二轮完善功能及第三轮挑战需求A.1、A.2

术语表

术语 定义
访客 无需注册即可浏览商品,填写姓名电话提交意向,并凭口令码操作。
注册客户 注册后可登录、提交客户意向,并查看本人购买历史。
卖家 唯一后台账号,管理商品、分类、库存、交易和客户资料。
选中商品 页面当前查看或操作的商品,不代表系统只能存在一个有效商品。
购买意向 针对指定商品的一件购买申请。
FIFO 按服务端queue_at升序排列,相同时间按意向编号升序。
队首 某件商品等待队列中的第一条有效意向。
口令码 与单条意向绑定的持有者凭据,结束后按规则失效。
在售 商品可公开展示,并可接收新的购买意向。
手动冻结 卖家暂停该商品新意向,保留队列,可手动解除。
交易冻结 该商品已进入队首交易,必须先登记结果。
库存 商品可售数量,成功交易减1,归零下架。
两级分类 一级与二级父子分类结构。
商品快照 下单时保存的商品名称和价格,商品编辑不回写。
默认交易地点 客户注册时保存的常用交易地点。
本次交易地点 客户提交某条意向时确认的地点,可与默认地点不同。
富媒体描述 允许的格式化文字及本地描述图片。
购买历史 客户账号下保留的意向记录及状态,不因口令码失效而删除。

1 项目概述

本系统支持单卖家在线展示多个商品、管理购买意向及登记线下交易结果。

访客可以免登录浏览和搜索商品,提交姓名电话后领取口令码。注册客户可以保存电话和默认交易地点,并在登录后查看本人购买历史。

每件商品具有独立的库存、状态和FIFO队列。卖家开始交易时,系统自动选择该商品队首买家;交易结果由卖家登记。

系统不提供线上支付,交易在线下完成。

2 迭代范围

轮次 主要内容
第一次 基础商品展示、访客意向、口令码、FIFO、交易结果、主动下架及图片上传。
第二次 等待联系信息修改、手动冻结解冻、卖家密码修改及旧会话撤销。
第三次 A.1多商品、两级分类、库存、搜索、多图富媒体;A.2客户注册、本人历史和卖家客户查询。

第三轮迭代日期为2026-10-22至2026-11-05。第四轮于2026-11-05开始,结束日期暂定。

3 用户角色与权限

角色 允许操作
访客 浏览、搜索、筛选商品;提交指定商品意向;凭码查询、修改等待联系信息或撤销。
注册客户 保留访客浏览能力;注册登录;确认本次交易地点;查看本人购买历史。
卖家 管理商品、分类、库存、媒体、队列、交易、账号和注册客户资料。

3.1 权限规则

  1. 商品公开浏览不要求登录或口令码。
  2. 卖家管理接口必须验证卖家身份。
  3. 本人历史和客户意向接口必须验证客户身份。
  4. 客户身份不能替代卖家身份。
  5. 本人历史使用服务端会话客户编号。
  6. 不允许客户端传入其他客户编号查看他人历史。
  7. 卖家查询客户资料不返回密码或密码哈希。
  8. 卖家查询客户历史不返回可操作的客户口令码。
  9. 客户和卖家会话身份分开维护。

4 挑战需求A.1 商品管理升级

4.1 多商品同时发布

  1. 系统允许多个商品同时有效。
  2. 每件商品使用独立编号。
  3. 商品状态、库存、等待队列和当前交易对象分别维护。
  4. 操作一个商品不改变其他商品状态、库存和排位。
  5. 当前页面通过商品编号确定操作对象。
  6. 旧唯一商品接口仅在上下文唯一时使用,多商品无法确定目标时返回冲突。

4.2 商品信息

字段 规则
名称 必填,最多80字符。
价格 必填,大于0,最多2位小数,整数部分最多10位。
库存 0~1000000整数。
分类 可关联一个一级或二级分类,也可未分类。
相册 0~9张JPG/PNG图片,单张不超过5MB。
描述 选填,最多20000字符;清理后的内容也受长度限制。

编辑交易中的商品应被拒绝,避免交易过程中改变库存或商品资料。

4.3 两级类别管理

  1. 卖家可新增、编辑和删除分类。
  2. parent_id为空表示一级分类。
  3. 二级分类只能关联一级父类。
  4. 禁止三级分类。
  5. 禁止父子循环和关联自身。
  6. 同一父类下名称不能重复,大小写不区分重复。
  7. 不同父类允许同名子类。
  8. 存在子类或商品引用时不能直接删除。
  9. 包含子类的一级分类不能直接降为二级。
  10. 一级分类筛选应包含其二级分类商品。

4.4 库存及售罄下架

  1. 每条购买意向对应1件商品。
  2. 成功交易扣减1件库存。
  3. 交易失败不扣减库存。
  4. 库存大于0时,成功交易后商品恢复在售。
  5. 库存归零时,商品自动下架。
  6. 售罄后,该商品其余等待意向结束,口令码失效。
  7. 库存0发布的商品直接为下架状态。
  8. 下架商品补货后,需要执行重新上架。
  9. 重新上架不自动恢复已结束的意向。
  10. 重复登记同一笔结果不能再次扣库存。

4.5 商品浏览、搜索和分页

  1. 买家可以浏览多个有效商品。
  2. 下架商品不出现在公开列表。
  3. 手动冻结和交易中商品仍可展示,但不能接受新意向。
  4. 搜索范围为商品名称及描述可见文字。
  5. 搜索忽略大小写。
  6. 支持一级或二级分类筛选。
  7. 支持分页,页码从0开始,每页1~100条。
  8. 无匹配结果时显示空状态。
  9. 重置筛选后恢复相应商品列表。

4.6 多图相册与富媒体描述

  1. 每商品最多9张相册图片。
  2. 图片格式支持JPG和PNG,单张不超过5MB。
  3. 未上传图片时显示占位内容。
  4. 保存并展示图片顺序。
  5. 买家可通过缩略图切换图片。
  6. 描述支持标题、段落、加粗、斜体、列表及本地图片。
  7. 服务端清理危险标签及属性。
  8. 相册地址必须来自允许的本地上传路径。
  9. 描述再次保存不应破坏已允许的内容和图片。

5 挑战需求A.2 客户升级

5.1 客户注册

注册字段:

字段 规则
用户名 必填,3~32位文字、数字、下划线或短横线。
密码 必填,8~128位,不允许空白密码。
电话 必填,符合电话格式和长度规则。
默认交易地点 必填,最多200字符。

业务规则:

  1. 用户名大小写归一后唯一。
  2. 重复注册应拒绝。
  3. 注册成功自动登录。
  4. 密码只保存派生结果,不保存明文。
  5. 对外返回客户资料时不返回密码字段。

5.2 客户登录和退出

  1. 客户使用用户名和密码登录。
  2. 错误账号或密码拒绝登录。
  3. 登录后建立客户身份并轮换会话编号。
  4. 退出只移除客户身份。
  5. 未登录时访问本人购买历史应要求登录。
  6. 客户退出不应清除同一浏览器的卖家身份。

5.3 默认与本次交易地点

  1. 注册时保存默认交易地点。
  2. 提交客户意向时,前端默认填入该地点。
  3. 客户可以修改本次交易地点。
  4. 本次地点必填,最多200字符。
  5. 修改本次地点不修改账号默认地点。
  6. 本次地点随意向保存,供客户历史及卖家查看。

5.4 客户购买历史

  1. 客户只能查看本人账号提交的购买记录。
  2. 记录按提交时间及编号倒序分页。
  3. 展示等待、交易、成功、失败、撤销、作废和下架结束状态。
  4. 展示商品名称价格快照、本次联系人、电话、地点、时间和有效排位。
  5. 商品后续改名或改价不改变历史快照。
  6. 口令码失效不删除历史记录。
  7. 访客意向不按相同姓名或电话自动认领。
  8. 客户不能通过修改查询参数访问他人历史。

5.5 卖家客户信息与历史

  1. 卖家可查询全部注册客户。
  2. 展示用户名、电话、默认地点和注册时间。
  3. 支持用户名或电话搜索。
  4. 支持分页。
  5. 可查看指定客户购买历史。
  6. 客户资料不返回密码或密码哈希。
  7. 卖家历史查询不提供客户口令码。
  8. 访客和仅客户身份不能访问卖家客户接口。

6 购买意向与FIFO队列

6.1 提交意向

  1. 意向必须关联指定商品。
  2. 仅在售且有库存时允许提交。
  3. 姓名必填,最多80字符。
  4. 电话必填,长度6~30字符,必须含数字。
  5. 电话允许数字、加号、括号、空格及短横线。
  6. 每条意向生成唯一口令码。
  7. 客户意向额外保存客户归属、交易地点和商品快照。

6.2 队列顺序

  1. 每件商品独立排队。
  2. 按queue_at升序排序,同时间按id升序。
  3. 开始交易自动选择队首。
  4. 卖家不能跳过队首指定其他买家。
  5. 重新排队保留同一意向和原口令码,刷新排队时间到队尾。

6.3 修改与撤销

  1. 等待中的买家可凭码修改姓名和电话。
  2. 修改保留编号、口令码、提交时间和排位。
  3. 手动冻结或其他买家交易时,等待者仍可修改或撤销。
  4. 当前交易中的买家不能修改或撤销。
  5. 撤销后退出队列并使原码失效。
  6. 后续买家的等待排位相应前移。

7 交易、冻结与商品状态

7.1 商品状态

状态 含义 后续处理
ON_SALE 在售 接收意向,可开始交易、手动冻结或下架。
MANUALLY_FROZEN 手动冻结 保留队列,拒绝新意向,可手动解冻。
IN_TRADE 交易中 拒绝新意向,须先登记交易结果。
DELISTED 下架 不公开接单,有库存后可重新上架。

7.2 意向状态

状态 含义
WAITING 等待排队。
IN_TRADE 当前交易对象。
TRADE_SUCCESS 交易成功。
TRADE_FAILED 交易失败作废,或商品售罄导致等待意向结束。
VOIDED 卖家作废等待意向。
CANCELLED 买家撤销。
PRODUCT_DELISTED 主动下架导致结束。

7.3 交易结果

结果 库存 商品 当前意向及原码
成功且有余量 减1 恢复在售 成功,原码失效。
成功后售罄 减1至0 下架 成功,原码失效;其他等待意向结束。
失败并作废 不变 恢复在售 失败,原码失效。
失败并重排 不变 恢复在售 返回等待,原码有效,移动队尾。

系统不自动开始下一笔交易,也没有超时自动成交。

7.4 手动冻结与主动下架

  1. 在售商品可手动冻结。
  2. 手动冻结保留队列和有效口令码。
  3. 手动冻结须先解冻才能开始交易或主动下架。
  4. 交易冻结不能通过手动解冻绕过。
  5. 主动下架只允许在售状态。
  6. 下架结束该商品等待意向,不影响其他商品。

8 卖家账号和密码

  1. 系统保留唯一卖家账号。
  2. 初始账号admin、密码123456仅用于首次建库。
  3. 卖家可修改密码,必须验证原密码。
  4. 新密码8~128位。
  5. 改密增加会话版本,使旧卖家身份失效。
  6. 重启不恢复初始密码。
  7. 卖家退出或改密不清除独立客户身份。

密码使用PBKDF2-HMAC-SHA256,600000次迭代、16字节随机盐及32字节派生结果。

9 数据保存

表 主要内容
products 商品资料、库存、分类、图片、描述及状态。
categories 两级分类。
purchase_intents 商品意向、排队、状态、口令码、客户归属、地点及快照。
customer_accounts 客户账号、电话、默认地点、密码哈希及注册时间。
seller_accounts 卖家密码哈希和会话版本。

日常运行使用H2文件数据库,重启需保留启动目录下的data。

客户历史基于意向记录和下单快照。系统当前没有独立保存每次重排、每次交易尝试的完整事件审计表。

10 业务流程与状态图

10.1 商品与交易主流程

flowchart TD
    A[卖家发布多个商品] --> B[买家浏览搜索并选择商品]
    B --> C{是否为登录客户}
    C -->|否| D[填写姓名电话]
    C -->|是| E[确认联系信息及本次地点]
    D --> F[进入指定商品FIFO队列]
    E --> F
    E --> G[保存客户归属及商品快照]
    F --> H[卖家开始队首交易]
    H --> I{登记结果}
    I -->|失败| J[作废或重新排队 库存不变]
    I -->|成功| K[库存减1]
    K --> L{库存为0}
    L -->|否| M[恢复在售 保留等待队列]
    L -->|是| N[下架并结束剩余等待]
    J --> M
    G --> O[客户本人及卖家查询历史]

10.2 买家浏览与意向操作

flowchart TD
    A[浏览 搜索 分类筛选] --> B[选择指定商品]
    B --> C[提交访客或客户意向]
    C --> D[获得口令码]
    D --> E{意向状态}
    E -->|等待| F[可查询 修改姓名电话或撤销]
    E -->|交易中| G[可查询 不能修改或撤销]
    E -->|已结束| H[口令失效 客户历史继续保留]

10.3 卖家后台与客户历史

flowchart TD
    A[卖家登录] --> B[管理多商品 分类 库存和媒体]
    A --> C[处理指定商品队列及交易]
    A --> D[客户管理]
    D --> E[用户名或电话搜索]
    E --> F[客户资料及购买历史]
    F --> G[展示快照和地点 不返回密码及客户口令]

10.4 商品发布与媒体处理

flowchart TD
    A[输入名称价格库存和分类] --> B[选择0至9张相册图]
    B --> C[编辑富文本及本地描述图片]
    C --> D[服务端校验并清理]
    D --> E{库存大于0}
    E -->|是| F[发布为在售]
    E -->|否| G[发布为下架]

10.5 商品状态

stateDiagram-v2
    [*] --> ON_SALE: 有库存发布
    [*] --> DELISTED: 零库存发布
    ON_SALE --> MANUALLY_FROZEN: 手动冻结
    MANUALLY_FROZEN --> ON_SALE: 手动解冻
    ON_SALE --> IN_TRADE: 开始队首交易
    IN_TRADE --> ON_SALE: 失败或成功后仍有库存
    IN_TRADE --> DELISTED: 成功售罄
    ON_SALE --> DELISTED: 主动下架或库存调整为0
    DELISTED --> ON_SALE: 补货后重新上架

10.6 购买意向状态

stateDiagram-v2
    [*] --> WAITING: 提交意向
    WAITING --> WAITING: 修改联系信息或重新排队
    WAITING --> IN_TRADE: 队首开始交易
    IN_TRADE --> TRADE_SUCCESS: 成交
    IN_TRADE --> TRADE_FAILED: 失败作废
    IN_TRADE --> WAITING: 失败重新排队
    WAITING --> VOIDED: 卖家作废
    WAITING --> CANCELLED: 买家撤销
    WAITING --> TRADE_FAILED: 商品售罄
    WAITING --> PRODUCT_DELISTED: 主动下架

10.7 口令码有效性

stateDiagram-v2
    [*] --> 有效: 提交意向
    有效 --> 有效: 等待 冻结 交易或失败重排
    有效 --> 失效: 撤销 作废 成交 售罄或下架
    失效 --> [*]: 原码不可操作 历史保留

11 第三轮需求测验Demo

需求人员编写独立网页Demo,提前展示第三轮新增功能。

  • 技术:Vue3、Element Plus。
  • 打开方式:双击index.html。
  • 依赖:本地vendor和assets,离线可用。
  • 数据:页面内模拟数据,刷新恢复。
  • 内容:商品、分类、库存、相册、富文本、客户账号及购买历史。
  • 边界:不连接真实接口和数据库,不模拟完整交易,不作为正式系统测试通过证明。

Demo目录:

https://github.com/casf73/Software-Engineering-Practice/tree/main/requirement/第三轮/功能测验Demo

12 验收与测试

12.1 功能验收

  1. 多个商品可同时发布,并独立维护队列。
  2. 分类最多两级,关联和筛选结果一致。
  3. 成功扣库存,失败不扣,售罄自动下架。
  4. 名称、描述搜索及分页正常。
  5. 多图和富文本能够保存并再次展示。
  6. 客户可以注册登录,并保存电话和默认地点。
  7. 客户只查看本人历史,商品编辑不改变快照。
  8. 卖家可查询注册客户及对应历史。
  9. 不泄露密码、密码哈希及客户可操作口令。

12.2 测试组织

  • 总用例R301~R308。
  • 每总用例8个功能实例及8个接口实例。
  • 第三轮共64个功能实例、64个接口实例。
  • 功能和接口测试分别放置在对应目录。
  • 实例包含详细输入、步骤、预期及设计方法。
  • Excel最右侧或说明位置记录测试方法,末行解释方法原理。

12.3 设计方法

方法 应用
等价类划分 合法与非法输入、匹配与不匹配搜索。
边界值分析 用户名、密码、地点、库存、图片数量及文件大小。
状态转换 在售、冻结、交易、下架及意向结束。
场景法 发布到购买历史的业务操作过程。
权限隔离 不同客户、访客与卖家之间的数据访问。

现有记录中第三轮64个接口实例通过,64个页面功能实例待人工执行。接口通过不代表页面功能已人工验收。

13 当前实现范围之外的内容

以下内容保留为后续需求,不计入第三轮已完成成果:

  • 商品视频上传及视频自动清理。
  • 商品多标签管理。
  • 完整的交易与队列事件审计。
  • 客户自助修改账号默认交易地点。
  • 线上支付。
  • 并发压力、性能极限和长时间稳定性测试。