diff --git a/doc/ER/ER.svg b/doc/ER/ER.svg new file mode 100644 index 0000000..1ac4c35 --- /dev/null +++ b/doc/ER/ER.svg @@ -0,0 +1 @@ +
用户会话
用户会话
用户
用户
n
n
管理
管理
1
1
收货地址
收货地址
n
n
提交
提交
1
1
店铺变更请求
店铺变更请求
n
n
拥有
拥有
1
1
店铺
店铺
n
n
目标
目标
1
1
支付事务
支付事务
n
n
发起
发起
1
1
n
n
开设
开设
1
1
订单
订单
n
n
支付
支付
1
1
n
n
接收
接收
1
1
订单项目
订单项目
n
n
包含
包含
1
1
n
n
下达
下达
1
1
商品
商品
n
n
是项目
是项目
1
1
商品图片
商品图片
n
n
包含
包含
1
1
n
n
包含
包含
1
1
商品种类
商品种类
n
n
分类
分类
1
1
n
n
包含
包含
m
m
n
n
提交
提交
1
1
商品变更请求
商品变更请求
n
n
目标
目标
1
1
购物车
购物车
n
n
是项目
是项目
1
1
n
n
管理
管理
1
1
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ER/store_end.svg b/doc/ER/store_end.svg new file mode 100644 index 0000000..e32ae88 --- /dev/null +++ b/doc/ER/store_end.svg @@ -0,0 +1 @@ +
1
1
Store
Store
StoreID
StoreID
StoreName
StoreName
OwnerUseID
OwnerUseID
Description
Description
Change
RequestID
Change...
LogoURL
LogoURL
StoreStatus
StoreStatus
Product
Product
ProductID
ProductID
Contain
Contain
n
n
ProductName
ProductName
Product
Description
Product...
Price
Price
StockQuantity
StockQuantity
CreationDate
CreationDate
StoreChange
Request
StoreChange...
Target
Target
1
1
n
n
Requesting
UserID
Requesting...
RequestType
RequestType
Proposed
Data_JSON
Proposed...
Status
Status
Product
Category
Product...
Belongs to
Belongs to
1
1
n
n
CategoryID
CategoryID
CategoryName
CategoryName
Parent
CategoryID
Parent...
Category
Description
Category...
CreationDate
CreationDate
Last
UpdatedDate
Last...
Belongs to
Belongs to
m
m
n
n

ProductImage

ProductImage
ImageID
ImageID
ImageURL
ImageURL
ImageType
ImageType
SortOrder
SortOrder
UploadDate
UploadDate
1
1
Contain
Contain
n
n
CreationTime
CreationTime
Change
RequestID
Change...
ProductChange
Request
ProductChange...
Merchant
UserID
Merchant...
RequestType
RequestType
Proposed
Data_JSON
Proposed...
Status
Status
CreationTime
CreationTime
Propose&
Target
Propose&...
1
1
1
1
n
n
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ER/transaction.svg b/doc/ER/transaction.svg new file mode 100644 index 0000000..5f8b4fd --- /dev/null +++ b/doc/ER/transaction.svg @@ -0,0 +1 @@ +
1
1
Order
Order
OrderID
OrderID
UserID
UserID
StoreID
StoreID
OrderStatus
OrderStatus
Payment
TransactionID
Payment...
FinalAmount
ForThisOrder
FinalAmount...
Shipping
Address_Full
Shipping...
OrderItem
OrderItem
OrderItemID
OrderItemID
Contain
Contain
n
n
ProductID
ProductID
ProductName
AtPurchase
ProductName...
StoreID
StoreID
Quantity
Quantity
PriceAtPurchase
PriceAtPurchase
Payment
Transaction
Payment...
Payment
Payment
1
1
n
n
UserID
UserID
TotalAmount
TotalAmount
ExternalGateway
TransactionID
ExternalGateway...
Payment
Method
Payment...
CreationTime
CreationTime
Last
UpdatedDate
Last...
CreationTime
CreationTime
Completion
Time
Completion...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/ER/user_end.svg b/doc/ER/user_end.svg new file mode 100644 index 0000000..752c6e0 --- /dev/null +++ b/doc/ER/user_end.svg @@ -0,0 +1 @@ +
1
1
User
User
UserID
UserID
UserName
UserName
UserRole
UserRole
AccountStatus
AccountStatus
Default
AddressID
Default...
Registration
Date
Registration...
LastLoginDate
LastLoginDate
UserSession
UserSession
SessionToken
SessionToken
Manage
Manage
n
n
CreatedAt
CreatedAt
ExpiresAt
ExpiresAt
Last
AccessedAt
Last...
IPAddress
IPAddress
UserAgent
UserAgent
Shipping
Address
Shipping...
Own
Own
1
1
n
n
Recipient
Name
Recipient...
PhoneNumber
PhoneNumber
FullAddress_
Text
FullAddress_...
IsDefault
IsDefault
CartItem
CartItem
Own
Own
1
1
n
n
CartItemID
CartItemID
ProductID
ProductID
Quantity
Quantity
AddedDate
AddedDate
Price
AtAddition
Price...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000..6916170 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,11 @@ +# 文档说明 + +## 提交的文档 + +所有提交的文档都位于 `doc/数据库设计文档` 目录下。包括概念设计文档、逻辑设计文档和需求分析文档。 + +## 文档目录 +- [doc/草稿](./草稿) 中存放了开发过程中的需求分析、数据字典等草稿 +- [doc/数据库设计文档](./数据库设计文档) 中存放了提交版本的数据库设计文档 +- [doc/数据流图](./数据流图) 中存放了数据流图 +- [doc/ER](./ER) 中存放了ER图 \ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\346\246\202\345\277\265\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\346\246\202\345\277\265\350\256\276\350\256\241\346\226\207\346\241\243.md" new file mode 100644 index 0000000..ca8ed0f --- /dev/null +++ "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\346\246\202\345\277\265\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -0,0 +1,14 @@ +# 概念设计文档 + +### 总ER图 +![总ER图](../ER/ER.svg) + +### 分ER图 +#### 店铺相关分ER图 +![店铺相关分ER图](../ER/store_end.svg) + +#### 用户相关分ER图 +![用户相关分ER图](../ER/user_end.svg) + +#### 事务相关分ER图 +![事务相关分ER图](../ER/transaction.svg) \ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\200\273\350\276\221\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\200\273\350\276\221\350\256\276\350\256\241\346\226\207\346\241\243.md" new file mode 100644 index 0000000..3d9ef4f --- /dev/null +++ "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\200\273\350\276\221\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -0,0 +1,319 @@ +# 电商平台数据库逻辑设计文档 + +## 数据表设计 + +### 1. 用户表 (User) + +**表名**: `User` +**功能**: 存储平台所有用户的基本信息,包括顾客、商家和管理员 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| UserID | INT | PRIMARY KEY, AUTO_INCREMENT | 用户唯一标识符 | +| Username | VARCHAR(255) | NOT NULL, UNIQUE | 用户名,全局唯一 | +| PasswordHash | VARCHAR(255) | NOT NULL | 密码的哈希值+盐 | +| Email | VARCHAR(255) | UNIQUE | 用户邮箱地址,可选但唯一 | +| PhoneNumber | VARCHAR(50) | NULL | 用户手机号码,可选 | +| UserRole | ENUM | NOT NULL, DEFAULT 'customer' | 用户角色:customer(顾客)、merchant(商家)、admin(管理员) | +| RegistrationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 用户注册时间 | +| LastLoginDate | DATETIME | NULL | 最后登录时间 | +| DefaultAddressID | INT | NULL, FOREIGN KEY | 默认收货地址ID,关联ShippingAddress表 | +| AccountStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 账户状态:ACTIVE(活跃)、INACTIVE(非活跃)、SUSPENDED_BY_ADMIN(被管理员禁用) | + +**设计说明**: +- 支持多种用户角色,通过UserRole字段区分权限 +- 密码采用哈希存储,确保安全性 +- 预留默认地址字段,提升用户体验 +- 账户状态支持管理员管理功能 + +### 2. 收货地址表 (ShippingAddress) + +**表名**: `ShippingAddress` +**功能**: 存储用户的收货地址信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| AddressID | INT | PRIMARY KEY, AUTO_INCREMENT | 地址唯一标识符 | +| UserID | INT | NOT NULL, FOREIGN KEY | 所属用户ID | +| RecipientName | VARCHAR(255) | NOT NULL | 收货人姓名 | +| PhoneNumber | VARCHAR(50) | NOT NULL | 收货人电话 | +| FullAddress_Text | TEXT | NOT NULL | 完整地址信息 | +| IsDefault | BOOLEAN | NOT NULL, DEFAULT FALSE | 是否为默认地址 | + +**设计说明**: +- 支持用户管理多个收货地址 +- IsDefault字段配合User表的DefaultAddressID实现默认地址功能 +- 地址信息采用TEXT存储,支持详细地址描述 + +### 3. 店铺表 (Store) + +**表名**: `Store` +**功能**: 存储商家店铺的基本信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| StoreID | INT | PRIMARY KEY, AUTO_INCREMENT | 店铺唯一标识符 | +| StoreName | VARCHAR(255) | NOT NULL | 店铺名称 | +| OwnerUserID | INT | NOT NULL, FOREIGN KEY | 店主用户ID | +| Description | TEXT | NULL | 店铺描述 | +| LogoURL | VARCHAR(512) | NULL | 店铺Logo图片地址 | +| StoreStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 店铺状态:ACTIVE(正常营业)、INACTIVE_BY_MERCHANT(商家暂停)、SUSPENDED_BY_ADMIN(管理员暂停)、CLOSED_PERMANENTLY_BY_ADMIN(永久关闭) | +| CreationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 店铺创建时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 每个店铺关联一个商家用户 +- 支持店铺状态管理,区分商家自主操作和管理员操作 +- 记录创建和更新时间,便于审计 + +### 4. 商品分类表 (ProductCategory) + +**表名**: `ProductCategory` +**功能**: 存储商品分类的层级结构 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| CategoryID | INT | PRIMARY KEY, AUTO_INCREMENT | 分类唯一标识符 | +| CategoryName | VARCHAR(255) | NOT NULL | 分类名称 | +| ParentCategoryID | INT | NULL, FOREIGN KEY | 父分类ID,自关联 | +| CategoryDescription | TEXT | NULL | 分类描述 | + +**设计说明**: +- 采用自关联设计,支持多级分类结构 +- ParentCategoryID为NULL表示顶级分类 +- 支持分类的层级管理和导航 + +### 5. 商品表 (Product) + +**表名**: `Product` +**功能**: 存储商品的详细信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| ProductID | INT | PRIMARY KEY, AUTO_INCREMENT | 商品唯一标识符 | +| ProductName | VARCHAR(255) | NOT NULL | 商品名称 | +| ProductDescription | TEXT | NULL | 商品详细描述 | +| Price | DECIMAL(10,2) | NOT NULL | 商品单价 | +| ProductStatus | ENUM | NOT NULL, DEFAULT 'ACTIVE' | 商品状态:ACTIVE(在售)、INACTIVE_BY_MERCHANT(商家下架)、SUSPENDED_BY_ADMIN(管理员下架)、DISCONTINUED(停产) | +| StoreID | INT | NOT NULL, FOREIGN KEY | 所属店铺ID | +| CategoryID | INT | NOT NULL, FOREIGN KEY | 所属分类ID | +| StockQuantity | INT | NOT NULL, DEFAULT 0 | 库存数量 | +| MainImageURL | VARCHAR(512) | NULL | 主图片地址 | +| CreationDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 商品创建时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 价格采用DECIMAL精确数值类型 +- 库存数量增加非负约束,确保数据完整性 +- 商品状态支持多种管理场景 +- 关联店铺和分类,便于分类浏览和店铺管理 + +### 6. 商品图片表 (ProductImage) + +**表名**: `ProductImage` +**功能**: 存储商品的多张图片信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| ImageID | INT | PRIMARY KEY, AUTO_INCREMENT | 图片唯一标识符 | +| ProductID | INT | NOT NULL, FOREIGN KEY | 所属商品ID | +| ImageURL | VARCHAR(512) | NOT NULL | 图片存储地址 | +| ImageType | VARCHAR(50) | NOT NULL | 图片类型:MAIN(主图)、THUMBNAIL(缩略图)、DETAIL(详情图) | +| SortOrder | INT | NULL | 图片排序序号 | +| UploadDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 图片上传时间 | + +**设计说明**: +- 支持商品多图展示 +- 通过ImageType区分图片用途 +- SortOrder支持图片排序显示 + +### 7. 购物车表 (CartItem) + +**表名**: `CartItem` +**功能**: 存储用户购物车中的商品 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| CartItemID | INT | PRIMARY KEY, AUTO_INCREMENT | 购物车项目唯一标识符 | +| UserID | INT | NOT NULL, FOREIGN KEY | 所属用户ID | +| ProductID | INT | NOT NULL, FOREIGN KEY | 商品ID | +| Quantity | INT | NOT NULL, DEFAULT 1 | 商品数量 | +| PriceAtAddition | DECIMAL(10,2) | NOT NULL | 加入购物车时的商品价格 | +| AddedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 添加到购物车的时间 | + +**设计说明**: +- 记录加入购物车时的价格,避免价格变动影响 +- 数量字段增加正数约束 +- 支持购物车商品的时间排序 + +### 8. 支付事务表 (PaymentTransaction) + +**表名**: `PaymentTransaction` +**功能**: 记录用户的支付事务信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| PaymentTransactionID | INT | PRIMARY KEY, AUTO_INCREMENT | 支付事务唯一标识符 | +| UserID | INT | NOT NULL, FOREIGN KEY | 用户ID | +| TotalAmount | DECIMAL(10,2) | NOT NULL | 支付总金额 | +| PaymentMethod | VARCHAR(50) | NOT NULL | 支付方式 | +| ExternalGatewayTransactionID | VARCHAR(255) | NULL | 外部支付网关交易号 | +| Status | ENUM | NOT NULL, DEFAULT 'PENDING' | 支付状态:PENDING(待支付)、SUCCESSFUL(成功)、FAILED(失败) | +| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| CompletionTime | DATETIME | NULL | 完成时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 支持多种支付方式 +- 记录外部支付网关信息,便于对账 +- 完整的支付状态跟踪 + +### 9. 订单表 (Order) + +**表名**: `Order` +**功能**: 存储订单的基本信息 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| OrderID | INT | PRIMARY KEY, AUTO_INCREMENT | 订单唯一标识符 | +| UserID | INT | NOT NULL, FOREIGN KEY | 用户ID | +| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID | +| PaymentTransactionID | INT | NOT NULL, FOREIGN KEY | 关联的支付事务ID | +| OrderStatus | ENUM | NOT NULL, DEFAULT 'PENDING_PAYMENT' | 订单状态:PENDING_PAYMENT(待支付)、PAID_AND_PENDING_PROCESSING(已支付待处理)、PROCESSING_BY_MERCHANT(商家处理中)、SHIPPED(已发货)、DELIVERED(已送达)、COMPLETED(已完成)、CANCELLED_BY_USER(用户取消)、CANCELLED_BY_MERCHANT(商家取消)、CANCELLED_BY_SYSTEM(系统取消) | +| OrderTotalAmount | DECIMAL(10,2) | NOT NULL | 订单商品总金额 | +| DiscountAmount | DECIMAL(10,2) | NULL, DEFAULT 0.00 | 优惠金额 | +| ShippingFee | DECIMAL(10,2) | NULL, DEFAULT 0.00 | 运费 | +| FinalAmountForThisOrder | DECIMAL(10,2) | NOT NULL | 订单最终金额 | +| ShippingAddress_RecipientName | VARCHAR(255) | NOT NULL | 收货人姓名(冗余) | +| ShippingAddress_PhoneNumber | VARCHAR(50) | NOT NULL | 收货人电话(冗余) | +| ShippingAddress_Full | TEXT | NOT NULL | 完整收货地址(冗余) | +| Notes_ByUser | TEXT | NULL | 用户备注 | +| Notes_ByMerchant | TEXT | NULL | 商家备注 | +| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 订单创建时间 | +| PaymentConfirmationTime | DATETIME | NULL | 支付确认时间 | +| ShippingTime | DATETIME | NULL | 发货时间 | +| DeliveryTime | DATETIME | NULL | 送达时间 | +| CompletionTime | DATETIME | NULL | 完成时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 按店铺拆分订单,支持多商家模式 +- 冗余存储收货地址信息,避免地址修改影响历史订单 +- 完整的订单状态流转,支持各种业务场景 +- 记录订单各个关键时间点 + +### 10. 订单项目表 (OrderItem) + +**表名**: `OrderItem` +**功能**: 存储订单中的具体商品项目 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| OrderItemID | INT | PRIMARY KEY, AUTO_INCREMENT | 订单项目唯一标识符 | +| OrderID | INT | NOT NULL, FOREIGN KEY | 所属订单ID | +| ProductID | INT | NOT NULL, FOREIGN KEY | 商品ID | +| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID(冗余) | +| Quantity | INT | NOT NULL | 购买数量 | +| PriceAtPurchase | DECIMAL(10,2) | NOT NULL | 购买时的商品单价 | +| ProductNameAtPurchase | VARCHAR(255) | NOT NULL | 购买时的商品名称(冗余) | +| ProductImageURLAtPurchase | VARCHAR(512) | NULL | 购买时的商品图片(冗余) | +| Subtotal | DECIMAL(10,2) | NOT NULL | 小计金额 | + +**设计说明**: +- 冗余存储商品信息,保证历史订单数据完整性 +- 记录购买时价格,避免价格变动影响订单 +- 小计金额便于订单总额计算 + +### 11. 店铺变更请求表 (StoreChangeRequest) + +**表名**: `StoreChangeRequest` +**功能**: 存储店铺相关的变更请求,支持审核流程 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| ChangeRequestID | INT | PRIMARY KEY, AUTO_INCREMENT | 变更请求唯一标识符 | +| StoreID | INT | NULL, FOREIGN KEY | 目标店铺ID,创建请求时可为空 | +| RequestingUserID | INT | NOT NULL, FOREIGN KEY | 请求用户ID | +| RequestType | ENUM | NOT NULL | 请求类型:STORE_CREATE(创建)、STORE_UPDATE(更新)、STORE_DELETE(删除) | +| ProposedData_JSON | JSON | NULL | 建议的变更数据,JSON格式 | +| Status | ENUM | NOT NULL, DEFAULT 'PENDING_APPROVAL' | 请求状态:PENDING_APPROVAL(待审核)、APPROVED(已批准)、REJECTED(已拒绝)、APPLIED(已应用)、CANCELLED_BY_USER(用户取消) | +| SubmitterNotes | TEXT | NULL | 提交者备注 | +| AdminReviewerID | INT | NULL, FOREIGN KEY | 审核管理员ID | +| ReviewTimestamp | DATETIME | NULL | 审核时间 | +| AdminNotes | TEXT | NULL | 管理员审核备注 | +| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 请求创建时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 支持店铺的创建、更新、删除审核流程 +- 使用JSON字段存储灵活的变更数据 +- 完整的审核状态跟踪 +- 记录审核人员和时间,便于审计 + +### 12. 商品变更请求表 (ProductChangeRequest) + +**表名**: `ProductChangeRequest` +**功能**: 存储商品相关的变更请求,支持审核流程 + +| 字段名 | 数据类型 | 约束 | 描述 | +|--------|----------|------|------| +| ChangeRequestID | INT | PRIMARY KEY, AUTO_INCREMENT | 变更请求唯一标识符 | +| ProductID | INT | NULL, FOREIGN KEY | 目标商品ID,创建请求时可为空 | +| MerchantUserID | INT | NOT NULL, FOREIGN KEY | 商家用户ID | +| StoreID | INT | NOT NULL, FOREIGN KEY | 店铺ID | +| RequestType | ENUM | NOT NULL | 请求类型:PRODUCT_CREATE(创建)、PRODUCT_UPDATE(更新)、PRODUCT_DELETE(删除) | +| ProposedData_JSON | JSON | NULL | 建议的变更数据,JSON格式 | +| Status | ENUM | NOT NULL, DEFAULT 'PENDING_APPROVAL' | 请求状态 | +| SubmitterNotes | TEXT | NULL | 提交者备注 | +| AdminReviewerID | INT | NULL, FOREIGN KEY | 审核管理员ID | +| ReviewTimestamp | DATETIME | NULL | 审核时间 | +| AdminNotes | TEXT | NULL | 管理员审核备注 | +| CreationTime | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 请求创建时间 | +| LastUpdatedDate | DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 最后更新时间 | + +**设计说明**: +- 类似店铺变更请求,支持商品的审核流程 +- 确保商品变更的合规性 +- 记录变更历史,便于追溯 + +## 关系设计说明 + +### 主要外键关系 + +1. **用户相关关系**: + - User ← ShippingAddress (一对多) + - User ← Store (一对多,商家可拥有多个店铺) + - User ← CartItem (一对多) + - User ← PaymentTransaction (一对多) + - User ← Order (一对多) + +2. **店铺相关关系**: + - Store ← Product (一对多) + - Store ← Order (一对多) + - Store ← StoreChangeRequest (一对多) + +3. **商品相关关系**: + - ProductCategory ← Product (一对多) + - Product ← ProductImage (一对多) + - Product ← CartItem (一对多) + - Product ← OrderItem (一对多) + +4. **订单相关关系**: + - PaymentTransaction ← Order (一对多) + - Order ← OrderItem (一对多) + +### 设计特点 + +1. **数据完整性**: 通过外键约束保证数据一致性 +2. **历史数据保护**: 订单相关表冗余存储关键信息,避免数据修改影响历史记录 +3. **审核流程支持**: 变更请求表支持完整的审核流程 +4. **扩展性**: JSON字段支持灵活的数据存储 +5. **性能优化**: 合理的索引设计支持高效查询 + +## 索引设计 + +主要索引包括: +- 所有主键自动创建聚簇索引 +- 外键字段创建非聚簇索引 +- 用户名、邮箱等唯一约束字段的唯一索引 +- 订单状态、商品状态等常查询字段的普通索引 diff --git "a/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.md" "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.md" new file mode 100644 index 0000000..224f909 --- /dev/null +++ "b/doc/\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\346\226\207\346\241\243/\351\234\200\346\261\202\345\210\206\346\236\220\346\226\207\346\241\243.md" @@ -0,0 +1,242 @@ +# 需求分析文档 +### 用户需求分析 + +#### 普通用户 / 顾客 (Customer) + +- 用户通过用户名密码登录。 +- 用户可以查找和搜索商品(可按分类)、浏览商品信息。 +- 用户可以将来自不同店铺的商品统一放入购物车。 +- 用户可以管理自己的购物车(增删商品、修改数量)。 +- 用户对购物车中的所有商品发起一次性结账: + - 系统为购物车中每个店铺的商品分别生成独立的订单 (`Order`)。 + - 系统创建一个支付事务 (`PaymentTransaction`) 记录,汇总所有这些订单的总金额。 + - 用户(模拟)完成对该支付事务的支付。 + - 支付成功后,所有关联的订单状态会相应更新。 +- 用户可以查看自己创建的所有订单及其状态和详情。 +- 用户可以查看自己的支付记录。 +- 用户可以确认收货(将订单的状态从“已发货”改为“已送达”)。 +- 用户可以管理自己的收货地址。 +- 用户可以申请创建自己的店铺(需要平台管理员审核,通过后其用户角色更新为“商家”)。 + - 如果申请被驳回 (`REJECTED`),用户可以修改信息重新申请。 + +#### 商家用户 (Merchant) + +- 商家通过用户名密码登录(其用户角色为“商家”)。 +- 商家可以管理自己店铺的基本信息。 +- 商家可以增加、删除、修改自己管理的店铺的商品信息。 +- 商家可以设置和修改商品的库存数量。 +- 商家可以管理商品的上架/下架状态。 +- 商家可以查看和处理自己店铺收到的订单(例如:确认订单(将状态从“已付款”改为“处理中”)、发货(将状态从“处理中”改为“已发货”))。 + +#### 平台管理员 (Platform Administrator) + +- 管理员通过特定账户登录。 +- 管理员可以管理用户信息(查看、修改用户角色、启用/禁用账户)。 +- 管理员可以管理店铺信息(审核开店申请、查看、修改店铺状态)。 +- 管理员可以管理商品分类。 +- 管理员可以管理平台上的所有商品(例如:审核商品、下架违规商品)。 +- 管理员可以查看平台上的所有订单。 +- 管理员可以查看平台上的所有支付事务。 +- 管理员可以处理退款/退货请求(这会影响订单状态和支付事务状态)。 +- 管理员可以查看平台运营数据统计。 + +### 数据字典 +#### **用户 (User)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `UserID` | `Integer / UUID` | 唯一标识平台上的每一位用户。 | **主键 (Primary Key)** | +| `Username` | `Varchar` | 用户名 | **唯一 (Unique)** | +| `PasswordHash` | `Varchar` | 密码的哈希值+盐 | | +| `Email` | `Varchar` | 电子邮箱 | **唯一 (Unique)** | +| `PhoneNumber` | `Varchar` | 电话号码 | 可选 (Optional) | +| `UserRole` | `Enum / Varchar(15)` | 标识用户在平台中的主要角色。 | `取值: 'customer', 'merchant', 'admin'` | +| `RegistrationDate` | `DATETIME` | 注册时间 | | +| `LastLoginDate` | `DATETIME` | 最后登录时间 | 可为空 (Nullable) | +| `DefaultAddressID` | `Integer / UUID` | 默认收货地址ID | **外键 (Foreign Key)** -> `ShippingAddress.AddressID`,可为空 (Nullable) | +| `AccountStatus` | `Enum / Varchar(20)` | 表示用户账户的当前状态。 | `取值: 'ACTIVE', 'INACTIVE', 'SUSPENDED_BY_ADMIN'` | + +--- +#### **用户会话 (UserSession)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `SessionToken` | `VARCHAR(128) / UUID` | 唯一标识一个用户会话的令牌。 | **主键 (Primary Key)** | +| `UserID` | `Integer / UUID` | 此会话属于哪个用户。 | **外键 (Foreign Key)** -> `User.UserID` | +| `CreatedAt` | `DATETIME` | 会话被创建的时间戳。 | | +| `ExpiresAt` | `DATETIME` | 此会话令牌将在此时间点后失效。 | | +| `LastAccessedAt` | `DATETIME` | 用户最后一次使用此会话令牌与系统交互的时间。 | 可选 (Optional), 可为空 (Nullable) | +| `IPAddress` | `VARCHAR(45)` | 用户创建此会话时所使用的IP地址。 | 可选 (Optional), 可为空 (Nullable) | +| `UserAgent` | `TEXT` | 用户创建此会话时使用的浏览器或客户端的用户代理字符串。 | 可选 (Optional), 可为空 (Nullable) | + +--- +#### **店铺 (Store)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `StoreID` | `Integer / UUID` | 店铺编号 | **主键 (Primary Key)** | +| `StoreName` | `Varchar` | 店铺名称 | | +| `OwnerUserID` | `Integer / UUID` | 店主用户编号 | **外键 (Foreign Key)** -> `User.UserID` | +| `Description` | `TEXT` | 店铺描述 | | +| `LogoURL` | `VARCHAR` | 店铺Logo图片地址 | 可选 (Optional) | +| `StoreStatus` | `Enum / Varchar(30)` | 表示店铺当前的运营状态。 | `取值: 'ACTIVE', 'INACTIVE_BY_MERCHANT', 'SUSPENDED_BY_ADMIN', 'CLOSED_PERMANENTLY_BY_ADMIN'` | +| `CreationDate` | `DATETIME` | 店铺记录在系统中创建的时间。 | | +| `LastUpdatedDate` | `DATETIME` | 店铺信息最后更新时间 | | + +--- +#### **商品种类 (ProductCategory)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `CategoryID` | `Integer / UUID` | 分类ID | **主键 (Primary Key)** | +| `CategoryName` | `Varchar` | 分类名称 | | +| `ParentCategoryID` | `Integer / UUID` | 父分类ID | **外键 (Foreign Key)** -> `ProductCategory.CategoryID` (自关联), 可为空 (Nullable) | +| `CategoryDescription`| `TEXT` | 分类描述 | 可选 (Optional) | + +--- +#### **商品 (Product)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `ProductID` | `Integer / UUID` | 商品ID | **主键 (Primary Key)** | +| `ProductName` | `Varchar` | 商品名称 | | +| `ProductDescription` | `TEXT` | 商品详细介绍 | | +| `Price` | `DECIMAL` | 单价 | | +| `ProductStatus` | `Enum / Varchar(30)` | 表示商品当前的销售状态。 | `取值: 'ACTIVE', 'INACTIVE_BY_MERCHANT', 'SUSPENDED_BY_ADMIN', 'DISCONTINUED'` | +| `StoreID` | `Integer / UUID` | 所属的店铺ID | **外键 (Foreign Key)** -> `Store.StoreID` | +| `CategoryID` | `Integer / UUID` | 所属的种类ID | **外键 (Foreign Key)** -> `ProductCategory.CategoryID` | +| `StockQuantity` | `INT` | 库存数量 | `取值 >= 0` | +| `CreationDate` | `DATETIME` | 商品记录在系统中创建的时间 | | +| `LastUpdatedDate` | `DATETIME` | 商品信息最后更新时间 | | +| `MainImageURL` | `VARCHAR` | 商品主图片地址 | | + +--- +#### **商品图片 (ProductImage)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `ImageID` | `Integer / UUID` | 图片ID | **主键 (Primary Key)** | +| `ProductID` | `Integer / UUID` | 所属商品ID | **外键 (Foreign Key)** -> `Product.ProductID` | +| `ImageURL` | `VARCHAR` | 图片存储路径或URL | | +| `ImageType` | `VARCHAR` | 图片类型 | `取值: 'MAIN', 'THUMBNAIL', 'DETAIL' 等` | +| `SortOrder` | `INT` | 排序序号 | 可选 (Optional) | +| `UploadDate` | `DATETIME` | 上传时间 | | + +--- +#### **购物车项目 (CartItem)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `CartItemID` | `Integer / UUID` | 购物车项目ID | **主键 (Primary Key)** | +| `UserID` | `Integer / UUID` | 所属用户ID | **外键 (Foreign Key)** -> `User.UserID` | +| `ProductID` | `Integer / UUID` | 商品ID | **外键 (Foreign Key)** -> `Product.ProductID` | +| `Quantity` | `INT` | 数量 | | +| `AddedDate` | `DATETIME` | 添加时间 | | +| `PriceAtAddition`| `DECIMAL` | 加入购物车时的商品单价 | 用于价格快照 (Price Snapshot) | + +--- +#### **收货地址 (ShippingAddress)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `AddressID` | `Integer / UUID` | 地址ID | **主键 (Primary Key)** | +| `UserID` | `Integer / UUID` | 所属用户ID | **外键 (Foreign Key)** -> `User.UserID` | +| `RecipientName` | `Varchar` | 收货人姓名 | | +| `PhoneNumber` | `Varchar` | 收货人电话 | | +| `FullAddress_Text` | `TEXT / Varchar` | 完整地址 | | +| `IsDefault` | `BOOLEAN` | 是否为默认地址 | | + +--- +#### **商品变更请求 (ProductChangeRequest)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `ChangeRequestID` | `Integer / UUID` | 唯一标识每一条商品变更请求。 | **主键 (Primary Key)** | +| `ProductID` | `Integer / UUID` | 目标商品ID。 | 对于 `PRODUCT_CREATE` 可为空 | +| `MerchantUserID` | `Integer / UUID` | 提交请求的商家UserID。 | **外键 (Foreign Key)** -> `User.UserID` | +| `StoreID` | `Integer / UUID` | 商品所属的StoreID。 | **外键 (Foreign Key)** -> `Store.StoreID` | +| `RequestType` | `Enum / Varchar(25)` | 变更请求的具体类型。 | `取值: 'PRODUCT_CREATE', 'PRODUCT_UPDATE', 'PRODUCT_DELETE'` | +| `ProposedData_JSON` | `JSON / TEXT` | 以JSON格式存储请求的详细数据。 | | +| `Status` | `Enum / Varchar(25)` | 表示变更请求当前的审核或处理状态。 | `取值: 'PENDING_APPROVAL', 'APPROVED', 'REJECTED', 'APPLIED', 'CANCELLED_BY_USER'` | +| `SubmitterNotes` | `TEXT` | 商家提交备注 | 可选 (Optional) | +| `AdminReviewerID` | `Integer / UUID` | 审核管理员UserID | **外键 (Foreign Key)** -> `User.UserID`, 可为空 (Nullable) | +| `ReviewTimestamp` | `DATETIME` | 审核时间 | 可为空 (Nullable) | +| `AdminNotes` | `TEXT` | 管理员审核备注 | 可选 (Optional) | +| `CreationTime` | `DATETIME` | 请求创建时间 | | +| `LastUpdatedDate` | `DATETIME` | 请求最后更新时间 | | + +--- +#### **店铺变更请求 (StoreChangeRequest)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `ChangeRequestID` | `Integer / UUID` | 唯一标识每一条店铺变更请求。 | **主键 (Primary Key)** | +| `StoreID` | `Integer / UUID` | 目标店铺ID。 | 对于 `STORE_CREATE` 可为空 | +| `RequestingUserID` | `Integer / UUID` | 请求用户UserID。 | **外键 (Foreign Key)** -> `User.UserID` | +| `RequestType` | `Enum / Varchar(25)` | 变更请求的具体类型。 | `取值: 'STORE_CREATE', 'STORE_UPDATE', 'STORE_DELETE'` | +| `ProposedData_JSON` | `JSON / TEXT` | 以JSON格式存储请求的详细数据。 | | +| `Status` | `Enum / Varchar(25)` | 表示变更请求当前的审核或处理状态。 | `取值: 'PENDING_APPROVAL', 'APPROVED', 'REJECTED', 'APPLIED', 'CANCELLED_BY_USER'` | +| `SubmitterNotes` | `TEXT` | 提交者备注 | 可选 (Optional) | +| `AdminReviewerID` | `Integer / UUID` | 审核管理员UserID | **外键 (Foreign Key)** -> `User.UserID`, 可为空 (Nullable) | +| `ReviewTimestamp` | `DATETIME` | 审核时间 | 可为空 (Nullable) | +| `AdminNotes` | `TEXT` | 管理员审核备注 | 可选 (Optional) | +| `CreationTime` | `DATETIME` | 请求创建时间 | | +| `LastUpdatedDate` | `DATETIME` | 请求最后更新时间 | | + +--- +#### **支付事务 (PaymentTransaction)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `PaymentTransactionID` | `Integer / UUID` | 支付事务ID | **主键 (Primary Key)** | +| `UserID` | `Integer / UUID` | 用户ID | **外键 (Foreign Key)** -> `User.UserID` | +| `TotalAmount` | `DECIMAL` | 本次支付的总金额 | | +| `PaymentMethod` | `VARCHAR` | 支付方式 | `例如 'MOCK_PAY', 'ALIPAY_SIM'` | +| `ExternalGatewayTransactionID` | `VARCHAR` | 外部支付网关的交易流水号 | 可选 (Optional) | +| `Status` | `Enum / Varchar(15)` | 支付状态 | `取值: 'PENDING', 'SUCCESSFUL', 'FAILED'` | +| `CreationTime` | `DATETIME` | 创建时间 | | +| `CompletionTime` | `DATETIME` | 支付完成/失败时间 | 可为空 (Nullable) | +| `LastUpdatedDate` | `DATETIME` | 最后更新时间 | | + +--- +#### **订单 (Order)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `OrderID` | `Integer / UUID` | 订单ID | **主键 (Primary Key)** | +| `UserID` | `Integer / UUID` | 用户ID | **外键 (Foreign Key)** -> `User.UserID` | +| `StoreID` | `Integer / UUID` | 店铺ID | **外键 (Foreign Key)** -> `Store.StoreID` | +| `PaymentTransactionID` | `Integer / UUID` | 关联的支付事务ID | **外键 (Foreign Key)** -> `PaymentTransaction.PaymentTransactionID` | +| `OrderStatus` | `Enum / Varchar(35)` | 订单状态 | `见文档中的详细取值列表` | +| `OrderTotalAmount` | `DECIMAL` | 订单商品总金额 | 不含运费和优惠 | +| `DiscountAmount` | `DECIMAL` | 优惠金额 | 可选 (Optional) | +| `ShippingFee` | `DECIMAL` | 运费 | 可选 (Optional) | +| `FinalAmountForThisOrder` | `DECIMAL` | 此订单最终应付金额 | | +| `ShippingAddress_RecipientName` | `VARCHAR` | 收货人姓名 | 冗余数据 (Redundant Data) | +| `ShippingAddress_PhoneNumber` | `VARCHAR` | 收货人电话 | 冗余数据 (Redundant Data) | +| `ShippingAddress_Full` | `TEXT / Varchar` | 完整收货地址 | 冗余数据 (Redundant Data) | +| `Notes_ByUser` | `TEXT` | 用户备注 | 可选 (Optional) | +| `Notes_ByMerchant` | `TEXT` | 商家备注 | 可选 (Optional) | +| `CreationTime` | `DATETIME` | 订单创建时间 | | +| `PaymentConfirmationTime` | `DATETIME` | 支付确认时间 | 可为空 (Nullable) | +| `ShippingTime` | `DATETIME` | 发货时间 | 可为空 (Nullable) | +| `DeliveryTime` | `DATETIME` | 送达时间 | 可为空 (Nullable) | +| `CompletionTime` | `DATETIME` | 订单完成时间 | 可为空 (Nullable) | +| `LastUpdatedDate` | `DATETIME` | 订单最后更新时间 | | + +--- +#### **订单项目 (OrderItem)** +| 字段名 (Field Name) | 类型 (Type) | 含义说明 (Description) | 约束/备注 (Constraints/Notes) | +| :--- | :--- | :--- | :--- | +| `OrderItemID` | `Integer / UUID` | 订单项目ID | **主键 (Primary Key)** | +| `OrderID` | `Integer / UUID` | 所属订单ID | **外键 (Foreign Key)** -> `Order.OrderID` | +| `ProductID` | `Integer / UUID` | 商品ID | **外键 (Foreign Key)** -> `Product.ProductID` | +| `StoreID` | `Integer / UUID` | 所属店铺ID | **外键 (Foreign Key)** -> `Store.StoreID` | +| `Quantity` | `INT` | 购买数量 | | +| `PriceAtPurchase` | `DECIMAL` | 购买时商品单价 | 重要价格快照 (Important Price Snapshot) | +| `ProductNameAtPurchase` | `VARCHAR` | 购买时商品名称 | 冗余数据 (Redundant Data) | +| `ProductImageURLAtPurchase` | `VARCHAR` | 购买时商品主图URL | 冗余数据 (Redundant Data), 可选 (Optional) | +| `Subtotal` | `DECIMAL` | 小计金额 | `计算公式: PriceAtPurchase * Quantity` | + + +### 数据流图 + +#### 用户注册与登录 +![用户注册与登录](../数据流图/注册与登录.svg) + +#### 用户探索与购物 +![用户探索与购物](../数据流图/用户探索与购物.svg) + +#### 店铺信息与审核 +![店铺信息与审核](../数据流图/店铺信息与审核.svg) + +#### 订单 +![订单](../数据流图/订单.svg) diff --git "a/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\345\272\227\351\223\272\344\277\241\346\201\257\344\270\216\345\256\241\346\240\270.svg" "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\345\272\227\351\223\272\344\277\241\346\201\257\344\270\216\345\256\241\346\240\270.svg" new file mode 100644 index 0000000..2290494 --- /dev/null +++ "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\345\272\227\351\223\272\344\277\241\346\201\257\344\270\216\345\256\241\346\240\270.svg" @@ -0,0 +1,4 @@ +
开店/更改店铺
信息请求
开店/更改店铺...
上架/更改
商品请求
上架/更改...
合法请求
合法请求
5.0
权限检查
5.0...
用户权限
用户权限
用户信息
用户信息
审核通过
审核通过
5.1
店铺信息审核
5.1...
更新信息
更新信息
5.2
提交变更
5.2...
店铺信息
店铺信息
审核通过/不需要审核
的商品信息
审核通过/不需要审核...
6.1
信息审核
6.1...
管理员
管理员
管理员通过/不通过
管理员通过/不通过
如果需要审核
如果需要审核
管理员通过/不通过
管理员通过/不通过
如果需要审核
如果需要审核
合法请求
合法请求
6.0
权限检查
6.0...
6.2
提交变更
6.2...
商品信息
商品信息
用户信息
用户信息
更新商家用户信息
更新商家用户信息
更新信息
更新信息
用户权限
用户权限
店铺修改
请求列表
店铺修改 +请求列表
商品修改
请求列表
商品修改 +请求列表
记录请求
记录请求
记录请求
记录请求
商家
(用户)
商家 +(用户)
Text is not SVG - cannot display
\ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\346\263\250\345\206\214\344\270\216\347\231\273\345\275\225.svg" "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\346\263\250\345\206\214\344\270\216\347\231\273\345\275\225.svg" new file mode 100644 index 0000000..0a8d1d2 --- /dev/null +++ "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\346\263\250\345\206\214\344\270\216\347\231\273\345\275\225.svg" @@ -0,0 +1 @@ +
注册请求
注册请求
登录请求
登录请求
用户
用户
可以注册
可以注册
1.0
检查重复
1.0...
已有用户名/密码
已有用户名/密码
用户信息
用户信息
创建新用户
创建新用户
1.1
建立新用户
1.1...
用户名密码校验通过
用户名密码校验通过
2.0
用户名/密码检查
2.0...
更新会话信息
更新会话信息
2.1
成功登录
2.1...
会话管理
会话管理
不通过,注册失败
不通过,注册失败
登录失败
登录失败
Text is not SVG - cannot display
\ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\347\224\250\346\210\267\346\216\242\347\264\242\344\270\216\350\264\255\347\211\251.svg" "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\347\224\250\346\210\267\346\216\242\347\264\242\344\270\216\350\264\255\347\211\251.svg" new file mode 100644 index 0000000..518a651 --- /dev/null +++ "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\347\224\250\346\210\267\346\216\242\347\264\242\344\270\216\350\264\255\347\211\251.svg" @@ -0,0 +1,2 @@ +
浏览请求
(筛选/搜索词等)
浏览请求 +(筛选/搜索词等)
查看购物车请求
查看购物车请求
用户
用户
选择商品
选择商品
3.0
展示商品列表
3.0...
满足条件的商品列表
满足条件的商品列表
商品信息
商品信息
3.1
展示商品详情页面
3.1...
用户的购物车数据
用户的购物车数据
购物车
购物车
商品款式与数量信息
商品款式与数量信息
3.3
加入购物车
3.3...
用户操作购物车项目
用户操作购物车项目
4.0
查看购物车
4.0...
增、删、改操作
增、删、改操作
4.1
购物车操作
4.1...
商品详细信息
商品详细信息
3.2
展示店铺详情页面
3.2...
选择店铺
选择店铺
选择商品
选择商品
用户选择数量并加入购物车
用户选择数量并加入购物车
店铺信息
店铺信息
店铺和商品详细信息
店铺和商品详细信息
Text is not SVG - cannot display
\ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\350\256\242\345\215\225.svg" "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\350\256\242\345\215\225.svg" new file mode 100644 index 0000000..52436a9 --- /dev/null +++ "b/doc/\346\225\260\346\215\256\346\265\201\345\233\276/\350\256\242\345\215\225.svg" @@ -0,0 +1 @@ +
订单信息
订单信息
第三方支付服务
第三方支付服务
支付信息
支付信息
订单数据库
订单数据库
选择商品,发起结算
选择商品,发起结算
确认收货/退货
确认收货/退货
用户
用户
未支付订单
未支付订单
更新库存
更新库存
库存检查与更新
库存检查与更新
更新
更新
已支付订单
已支付订单
等待支付
等待支付
库存信息
库存信息
库存信息
库存信息
未支付订单
未支付订单
订单数据
订单数据
构建订单
构建订单
联系方式、收货地址
联系方式、收货地址
用户数据
用户数据
未支付订单
未支付订单
支付结果
支付结果
订单信息
订单信息
等待商家发货
等待商家发货
订单信息
订单信息
已发货订单
已发货订单
确认收货
确认收货
Text is not SVG - cannot display
\ No newline at end of file diff --git "a/doc/\346\225\260\346\215\256\345\255\227\345\205\270.md" "b/doc/\350\215\211\347\250\277/\346\225\260\346\215\256\345\255\227\345\205\270.md" similarity index 100% rename from "doc/\346\225\260\346\215\256\345\255\227\345\205\270.md" rename to "doc/\350\215\211\347\250\277/\346\225\260\346\215\256\345\255\227\345\205\270.md" diff --git "a/doc/\346\225\260\346\215\256\345\255\227\345\205\270v3.md" "b/doc/\350\215\211\347\250\277/\346\225\260\346\215\256\345\255\227\345\205\270v3.md" similarity index 100% rename from "doc/\346\225\260\346\215\256\345\255\227\345\205\270v3.md" rename to "doc/\350\215\211\347\250\277/\346\225\260\346\215\256\345\255\227\345\205\270v3.md" diff --git "a/doc/\351\234\200\346\261\202\350\215\211\347\250\277.md" "b/doc/\350\215\211\347\250\277/\351\234\200\346\261\202\350\215\211\347\250\277.md" similarity index 100% rename from "doc/\351\234\200\346\261\202\350\215\211\347\250\277.md" rename to "doc/\350\215\211\347\250\277/\351\234\200\346\261\202\350\215\211\347\250\277.md"