在线购物系统子系统划分说明 - casf73/Software-Engineering-Practice GitHub Wiki
在线购物系统子系统划分说明
- 文档版本:V3.0
- 修订日期:2026-11-05
- 对应范围:基础功能、第二轮完善功能及第三轮挑战需求 A
- 项目名称:在线购物系统
1 划分说明
系统继续采用五个子系统的划分方式。第三轮在原有职责基础上增加多商品、分类、库存、媒体和客户功能。
前端通过HTTP接口访问后端。后端按商品、购买意向、客户及公共支持职责处理业务,避免页面直接访问数据库。
2 子系统划分结果
| 编号 | 子系统 | 主要职责 |
|---|---|---|
| S1 | 买家交互子系统 | 商品浏览、搜索、分类筛选、多图富文本展示、意向提交、口令码操作、客户注册登录及本人购买历史。 |
| S2 | 卖家工作台子系统 | 多商品、分类、库存和媒体编辑,商品独立队列及交易管理,注册客户查询与客户历史查看。 |
| S3 | 商品与媒体子系统 | 商品资料、两级分类、库存、商品状态、多图相册、富媒体清理和图片存储。 |
| S4 | 购买意向与交易子系统 | 按商品FIFO排队、意向修改与撤销、交易结果、库存联动、客户归属、地点及商品快照。 |
| S5 | 数据与公共支持层 | H2与JPA、角色会话、密码派生、鉴权、统一错误、分页模型和文件访问。 |
3 调用关系与职责边界
flowchart TD
S1[买家交互子系统] --> API[HTTP接口]
S2[卖家工作台子系统] --> API
API --> S3[商品与媒体子系统]
API --> S4[购买意向与交易子系统]
API --> CS[客户账号与历史服务]
S3 --> S5[数据与公共支持层]
S4 --> S5
CS --> S5
客户账号与历史服务为现有子系统之间的支撑服务,不增加独立的第六个子系统。
- 客户注册登录由S1提供页面,后端客户服务配合S5保存账号和会话。
- 本人购买历史由S1展示,S4提供意向、地点和快照。
- 卖家客户查询由S2展示,后端客户服务在S5鉴权后查询资料和历史。
- 库存和交易状态由S3、S4协同处理,页面只展示服务端结果。
4 各子系统职责与实现对应
4.1 S1 买家交互子系统
| 功能 | 主要内容 | 前端实现 |
|---|---|---|
| 商品浏览 | 展示多个有效商品及库存、分类、价格和状态。 | StorefrontView |
| 搜索与筛选 | 按名称、描述关键词及一级二级分类查找商品。 | StorefrontView、catalogApi |
| 多图与富文本 | 切换相册图片,展示格式化描述。 | ProductGallery、richText |
| 购买意向 | 对指定商品提交姓名、电话和客户本次地点。 | StorefrontView、customerApi |
| 口令码操作 | 查询、修改等待联系信息和撤销。 | StorefrontView、publicApi |
| 客户注册登录 | 注册资料输入、登录状态及退出。 | CustomerAuthView、customerSession |
| 本人购买历史 | 查看个人记录、快照、状态和交易地点。 | CustomerAccountView |
主要接口:
/api/public/products/api/public/products/{id}/api/public/categories/api/public/products/{id}/intents/api/public/intents/{passcode}/api/customer/register/api/customer/login/api/customer/session/api/customer/logout/api/customer/orders/api/customer/products/{id}/intents
4.2 S2 卖家工作台子系统
| 功能 | 主要内容 | 前端实现 |
|---|---|---|
| 多商品管理 | 发布、编辑、选择及查看多个商品。 | SellerDashboardView |
| 库存与上架 | 编辑库存、查看售罄状态、补货重新上架。 | SellerDashboardView |
| 分类管理 | 一级二级分类新增、编辑、删除。 | SellerCategories |
| 媒体编辑 | 多图上传及富文本编辑。 | SellerDashboardView、RichDescriptionEditor |
| 商品队列 | 查看指定商品等待者及交易对象。 | SellerDashboardView |
| 交易结果 | 登记成功或失败并刷新库存状态。 | SellerDashboardView |
| 客户管理 | 按用户名或电话查找注册客户。 | SellerCustomers |
| 客户历史 | 查看指定客户购买记录。 | SellerCustomers |
| 账号管理 | 卖家登录、退出及修改密码。 | SellerLoginView、SellerDashboardView |
主要接口:
/api/seller/products/api/seller/products/{id}/api/seller/products/{id}/workbench/api/seller/products/{id}/relist/api/seller/products/{id}/freeze/api/seller/products/{id}/unfreeze/api/seller/products/{id}/delist/api/seller/products/image/api/seller/categories/api/seller/categories/{id}/api/seller/products/{id}/trades/start/api/seller/trades/{intentId}/result/api/seller/customers/api/seller/customers/{id}/api/seller/customers/{id}/orders
4.3 S3 商品与媒体子系统
| 职责 | 实现规则 |
|---|---|
| 多商品持久化 | 不再以唯一当前商品限制发布,每个商品有独立编号。 |
| 商品分类 | 商品关联一个一级或二级分类,也可未分类。 |
| 分类约束 | 禁止三级、循环、同级重名及有引用分类删除。 |
| 库存 | 保存0~1000000整数库存。 |
| 商品状态 | 维护在售、手动冻结、交易中和下架。 |
| 多图相册 | 保存最多9张有序图片地址。 |
| 富媒体 | 清理危险标签和属性,支持允许的文字格式和本地图片。 |
| 公开查询 | 支持搜索、分类和分页,排除下架商品。 |
后端实现:
- CatalogController
- CatalogService
- StoreService
- ProductRepository
- CategoryRepository
- Product
- Category
- RichDescription
4.4 S4 购买意向与交易子系统
| 职责 | 实现规则 |
|---|---|
| 商品独立队列 | 每件商品按queue_at、id升序组织等待意向。 |
| 队首选择 | 卖家开始交易时自动选取指定商品队首。 |
| 联系信息修改 | 等待者可修改姓名电话,保留编号、原码和排位。 |
| 撤销与作废 | 结束相应意向,清空口令码。 |
| 失败重排 | 保留原码,将同一意向移动到队尾。 |
| 成功库存处理 | 成功减1,有余量继续在售,售罄后下架。 |
| 客户归属 | 注册客户意向关联服务端当前客户编号。 |
| 本次地点 | 保存本次交易地点,不修改账号默认地点。 |
| 商品快照 | 保存下单时名称价格,防止商品编辑改变历史展示。 |
| 历史保留 | 意向结束后保留记录,口令失效不删除历史。 |
后端实现:
- PublicController
- CustomerController
- StoreService
- CustomerService
- IntentRepository
- PurchaseIntent
4.5 S5 数据与公共支持层
| 职责 | 实现内容 |
|---|---|
| 数据存储 | H2文件数据库,JPA实体与数据访问。 |
| 客户账号 | customer_accounts保存客户资料及密码哈希。 |
| 卖家账号 | seller_accounts保存卖家密码哈希和会话版本。 |
| 角色会话 | 客户和卖家身份使用不同会话属性。 |
| 卖家鉴权 | SellerAuthInterceptor检查卖家身份及会话版本。 |
| 客户鉴权 | 从客户会话读取客户编号,拒绝未登录客户访问个人历史。 |
| 密码处理 | PBKDF2-HMAC-SHA256、随机盐、600000次迭代。 |
| 统一返回 | DTO、分页模型和统一错误消息。 |
| 文件服务 | 保存图片并提供/uploads访问路径。 |
5 核心数据关系
| 数据对象 | 关联 |
|---|---|
| categories | parent_id指向一级分类,形成最多两级结构。 |
| products | category_id关联分类,一件商品对应多条购买意向。 |
| purchase_intents | product_id关联商品,customer_id可关联客户。 |
| customer_accounts | 一个客户可有多条购买意向。 |
| seller_accounts | 固定卖家身份,与客户账号分表保存。 |
访客意向的customer_id为空。不能依据姓名或电话相同自动将访客记录转为客户记录。
6 关键业务协作
6.1 发布和浏览商品
- S2输入商品名称、价格、库存、分类、图片和描述。
- S3校验并保存商品。
- S1通过公开列表获取有效商品。
- 商品修改后,S1读取最新商品数据。
- 已形成的购买历史继续使用原名称价格快照。
6.2 客户购买
- S1完成客户注册或登录。
- S5保存客户会话身份。
- 客户选择商品,确认本次联系信息和地点。
- S4建立意向、保存客户归属及商品快照。
- S1通过本人历史接口查看记录。
- S2通过卖家客户接口查看对应客户历史。
6.3 成交与库存
- S2请求开始指定商品交易。
- S4锁定商品并选择队首。
- 卖家登记交易结果。
- 成功时S3库存减1,失败时库存不变。
- 有库存恢复在售,售罄下架并结束剩余等待意向。
- 客户历史保留最终状态及原快照。
6.4 账号与会话隔离
- 客户与卖家分别建立角色身份。
- 登录时轮换会话编号。
- 客户退出只移除客户身份。
- 卖家退出或改密只移除卖家身份。
- 卖家改密通过会话版本使其他旧卖家身份失效。
- 客户不能使用客户身份访问卖家客户管理。
7 第三轮开发分工
| 人员 | 主要职责 |
|---|---|
| 麻津午 | 挑战需求明确、验收规则和独立需求测验Demo。 |
| 林天宏 | 买家商品浏览及客户页面。 |
| 刘云炎 | 卖家商品、分类、库存、媒体及客户管理页面。 |
| 沈姚杰 | 买家端查询、客户会话及本人历史接口。 |
| 章曦闵 | 卖家端接口及较多的商品、分类、库存、媒体和数据公共处理。 |
| 杨熠 | 功能测试、接口测试、详细实例及测试数据。 |
8 验收归属
| 轮次 | 范围 |
|---|---|
| 第一次 | 商品展示、访客意向、口令码、FIFO及基础交易。 |
| 第二次 | 联系信息修改、手动冻结解冻、卖家改密。 |
| 第三次 | A.1商品升级、A.2客户升级。 |
第三轮测试分别设置功能和接口实例,每总用例每类至少8个。需求Demo用于提前体验,不代替正式系统测试。
完整操作事件审计、商品视频、多标签、客户自助修改默认地点等后续内容不计入第三轮已实现范围。