在线购物系统子系统划分说明 - 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 发布和浏览商品

  1. S2输入商品名称、价格、库存、分类、图片和描述。
  2. S3校验并保存商品。
  3. S1通过公开列表获取有效商品。
  4. 商品修改后,S1读取最新商品数据。
  5. 已形成的购买历史继续使用原名称价格快照。

6.2 客户购买

  1. S1完成客户注册或登录。
  2. S5保存客户会话身份。
  3. 客户选择商品,确认本次联系信息和地点。
  4. S4建立意向、保存客户归属及商品快照。
  5. S1通过本人历史接口查看记录。
  6. S2通过卖家客户接口查看对应客户历史。

6.3 成交与库存

  1. S2请求开始指定商品交易。
  2. S4锁定商品并选择队首。
  3. 卖家登记交易结果。
  4. 成功时S3库存减1,失败时库存不变。
  5. 有库存恢复在售,售罄下架并结束剩余等待意向。
  6. 客户历史保留最终状态及原快照。

6.4 账号与会话隔离

  1. 客户与卖家分别建立角色身份。
  2. 登录时轮换会话编号。
  3. 客户退出只移除客户身份。
  4. 卖家退出或改密只移除卖家身份。
  5. 卖家改密通过会话版本使其他旧卖家身份失效。
  6. 客户不能使用客户身份访问卖家客户管理。

7 第三轮开发分工

人员 主要职责
麻津午 挑战需求明确、验收规则和独立需求测验Demo。
林天宏 买家商品浏览及客户页面。
刘云炎 卖家商品、分类、库存、媒体及客户管理页面。
沈姚杰 买家端查询、客户会话及本人历史接口。
章曦闵 卖家端接口及较多的商品、分类、库存、媒体和数据公共处理。
杨熠 功能测试、接口测试、详细实例及测试数据。

8 验收归属

轮次 范围
第一次 商品展示、访客意向、口令码、FIFO及基础交易。
第二次 联系信息修改、手动冻结解冻、卖家改密。
第三次 A.1商品升级、A.2客户升级。

第三轮测试分别设置功能和接口实例,每总用例每类至少8个。需求Demo用于提前体验,不代替正式系统测试。

完整操作事件审计、商品视频、多标签、客户自助修改默认地点等后续内容不计入第三轮已实现范围。