Files
akmon/pages/mall/mall.md
2026-01-20 08:04:15 +08:00

1064 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 电商商城系统完整需求文档
## 1. 项目概述
## 📋 文档内容概览
### 🎯 核心特性
- **6个客户端应用**: 消费者端、商家端、配送端、管理端、客服端、数据分析端
- **完整功能模块**: 用户管理、商品管理、订单系统、配送系统等
- **优惠券系统**: 8种券类型、多种发放机制、完整使用流程
- **智能配送**: 配送员管理、智能调度、实时追踪、费用计算
### 🗄️ 数据库设计
- **15+核心数据表**: 涵盖用户、商家、商品、订单、配送、支付等
- **完整SQL建表语句**: 每个表都包含详细字段定义
- **关系设计**: 合理的外键关系和数据完整性约束
### 🛠️ 技术栈
- **前端**: uni-app-x + Pinia + 自定义组件库
- **后端**: Node.js + Fastify + Kafka
- **数据库**: PostgreSQL (Supabase)
- **实时通信**: Supabase Realtime
- **支付**: 微信支付/支付宝集成
### 🚀 实施计划
- **4个阶段**: 总计6.5个月开发周期
- **详细时间线**: 从基础平台到完整上线
- **风险评估**: 技术、业务、合规风险应对策略
### 📈 扩展规划
- **功能扩展**: 直播带货、积分商城、会员体系
- **技术升级**: 微服务架构、AI推荐、大数据分析
### 1.1 项目背景
构建一个完整的电商商城平台,支持多端应用,包含商品销售、订单管理、配送服务、优惠券营销等完整电商功能。
### 1.2 系统架构
- **技术栈**: uni-app-x + Supabase + Node.js + Fastify + Kafka
- **数据库**: PostgreSQL (Supabase)
- **消息队列**: Apache Kafka
- **实时通信**: Supabase Realtime
## 2. 客户端应用规划
### 2.1 消费者端 (Consumer App)
**目标用户**: 普通消费者
**主要功能**:
- 用户注册/登录/个人中心
- 商品浏览、搜索、筛选
- 购物车管理
- 订单下单、支付、追踪
- 优惠券领取和使用
- 收货地址管理
- 评价和反馈
- 客服咨询
### 2.2 商家端 (Merchant App)
**目标用户**: 入驻商家
**主要功能**:
- 商家注册审核
- 店铺装修和管理
- 商品上架、编辑、库存管理
- 订单处理和发货
- 营销活动创建
- 数据统计分析
- 客服管理
- 财务结算
### 2.3 配送端 (Delivery App)
**目标用户**: 配送员
**主要功能**:
- 配送员注册和认证
- 接单和路线规划
- 实时位置追踪
- 订单状态更新
- 配送完成确认
- 收入统计
- 评价管理
### 2.4 后台管理端 (Admin Panel)
**目标用户**: 平台管理员
**主要功能**:
- 用户管理 (消费者/商家/配送员)
- 商品审核和分类管理
- 订单监控和处理
- 优惠券系统管理
- 配送网络管理
- 数据统计和报表
- 财务管理
- 系统配置
### 2.5 客服端 (Customer Service App)
**目标用户**: 客服人员
**主要功能**:
- 多渠道客服工作台
- 实时聊天和消息处理
- 订单问题处理
- 退换货处理
- 投诉和纠纷处理
- 客户信息查询
- 服务质量统计
### 2.6 数据分析端 (Analytics Dashboard)
**目标用户**: 运营和分析师
**主要功能**:
- 实时数据大屏
- 销售数据分析
- 用户行为分析
- 商家表现分析
- 配送效率分析
- 优惠券效果分析
- 预测分析和建议
## 3. 核心功能模块
### 3.1 用户管理系统
```sql
-- 用户基础表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
nickname VARCHAR(100),
avatar_url TEXT,
gender INTEGER DEFAULT 0,
birthday DATE,
user_type INTEGER NOT NULL DEFAULT 1,
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 用户地址表
CREATE TABLE user_addresses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
name VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL,
province VARCHAR(50) NOT NULL,
city VARCHAR(50) NOT NULL,
district VARCHAR(50) NOT NULL,
detail_address TEXT NOT NULL,
is_default BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.2 商家管理系统
```sql
-- 商家信息表
CREATE TABLE merchants (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
shop_name VARCHAR(200) NOT NULL,
shop_logo TEXT,
shop_banner TEXT,
shop_description TEXT,
business_license VARCHAR(100),
contact_name VARCHAR(100),
contact_phone VARCHAR(20),
business_hours JSONB,
shop_status INTEGER DEFAULT 1,
rating DECIMAL(3,2) DEFAULT 5.0,
total_sales INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.3 商品管理系统
```sql
-- 商品分类表
CREATE TABLE categories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
parent_id UUID REFERENCES categories(id),
icon_url TEXT,
sort_order INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 商品表
CREATE TABLE products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
merchant_id UUID REFERENCES merchants(id),
category_id UUID REFERENCES categories(id),
name VARCHAR(200) NOT NULL,
description TEXT,
images JSONB,
price DECIMAL(10,2) NOT NULL,
original_price DECIMAL(10,2),
stock INTEGER DEFAULT 0,
sales INTEGER DEFAULT 0,
status INTEGER DEFAULT 1,
specifications JSONB,
attributes JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 商品SKU表
CREATE TABLE product_skus (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID REFERENCES products(id),
sku_code VARCHAR(100) UNIQUE NOT NULL,
specifications JSONB,
price DECIMAL(10,2) NOT NULL,
stock INTEGER DEFAULT 0,
image_url TEXT,
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.4 购物车系统
```sql
-- 购物车表
CREATE TABLE shopping_cart (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
product_id UUID REFERENCES products(id),
sku_id UUID REFERENCES product_skus(id),
quantity INTEGER NOT NULL DEFAULT 1,
selected BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(user_id, sku_id)
);
```
## 4. 优惠券系统详细设计
### 4.1 优惠券类型
1. **满减券**: 满X元减Y元
2. **折扣券**: 享受X折优惠
3. **免运费券**: 免配送费
4. **新人券**: 新用户专享
5. **会员券**: 会员等级专享
6. **品类券**: 特定商品分类可用
7. **商家券**: 指定商家可用
8. **限时券**: 限定时间内使用
### 4.2 优惠券数据模型
```sql
-- 优惠券模板表
CREATE TABLE coupon_templates (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(200) NOT NULL,
description TEXT,
coupon_type INTEGER NOT NULL,
discount_type INTEGER NOT NULL,
discount_value DECIMAL(10,2) NOT NULL,
min_order_amount DECIMAL(10,2) DEFAULT 0,
max_discount_amount DECIMAL(10,2),
total_quantity INTEGER,
per_user_limit INTEGER DEFAULT 1,
usage_limit INTEGER DEFAULT 1,
merchant_id UUID REFERENCES merchants(id),
category_ids JSONB,
product_ids JSONB,
user_type_limit INTEGER,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ NOT NULL,
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 用户优惠券表
CREATE TABLE user_coupons (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
template_id UUID REFERENCES coupon_templates(id),
coupon_code VARCHAR(50) UNIQUE NOT NULL,
status INTEGER DEFAULT 1,
used_at TIMESTAMPTZ,
order_id UUID,
received_at TIMESTAMPTZ DEFAULT NOW(),
expire_at TIMESTAMPTZ NOT NULL
);
-- 优惠券使用记录表
CREATE TABLE coupon_usage_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_coupon_id UUID REFERENCES user_coupons(id),
order_id UUID NOT NULL,
discount_amount DECIMAL(10,2) NOT NULL,
used_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 4.3 优惠券发放机制
1. **主动领取**: 用户在优惠券中心领取
2. **自动发放**: 注册、首单、生日等触发
3. **活动赠送**: 参与活动获得
4. **邀请奖励**: 邀请好友注册
5. **客服赠送**: 客服手动发放
6. **积分兑换**: 使用积分兑换
## 5. 订单管理系统
### 5.1 订单数据模型
```sql
-- 订单主表
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_no VARCHAR(50) UNIQUE NOT NULL,
user_id UUID REFERENCES users(id),
merchant_id UUID REFERENCES merchants(id),
status INTEGER NOT NULL DEFAULT 1,
total_amount DECIMAL(10,2) NOT NULL,
discount_amount DECIMAL(10,2) DEFAULT 0,
delivery_fee DECIMAL(10,2) DEFAULT 0,
actual_amount DECIMAL(10,2) NOT NULL,
payment_method INTEGER,
payment_status INTEGER DEFAULT 1,
delivery_address JSONB NOT NULL,
delivery_time TIMESTAMPTZ,
remark TEXT,
paid_at TIMESTAMPTZ,
shipped_at TIMESTAMPTZ,
delivered_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 订单商品表
CREATE TABLE order_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID REFERENCES orders(id),
product_id UUID REFERENCES products(id),
sku_id UUID REFERENCES product_skus(id),
product_name VARCHAR(200) NOT NULL,
sku_specifications JSONB,
price DECIMAL(10,2) NOT NULL,
quantity INTEGER NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 订单状态变更记录
CREATE TABLE order_status_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID REFERENCES orders(id),
status INTEGER NOT NULL,
remark TEXT,
operator_id UUID,
operator_type INTEGER,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 6. 配送系统详细设计
### 6.1 配送员管理
```sql
-- 配送员信息表
CREATE TABLE delivery_drivers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
real_name VARCHAR(100) NOT NULL,
id_card VARCHAR(20) NOT NULL,
driver_license VARCHAR(50),
vehicle_type INTEGER NOT NULL,
vehicle_number VARCHAR(20),
work_status INTEGER DEFAULT 1,
current_location POINT,
service_areas JSONB,
rating DECIMAL(3,2) DEFAULT 5.0,
total_orders INTEGER DEFAULT 0,
auth_status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 6.2 配送订单管理
```sql
-- 配送任务表
CREATE TABLE delivery_tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID REFERENCES orders(id),
driver_id UUID REFERENCES delivery_drivers(id),
pickup_address JSONB NOT NULL,
delivery_address JSONB NOT NULL,
distance DECIMAL(8,2),
estimated_time INTEGER,
delivery_fee DECIMAL(10,2) NOT NULL,
status INTEGER DEFAULT 1,
pickup_time TIMESTAMPTZ,
delivered_time TIMESTAMPTZ,
delivery_code VARCHAR(6),
remark TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 配送轨迹表
CREATE TABLE delivery_tracks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
task_id UUID REFERENCES delivery_tasks(id),
driver_id UUID REFERENCES delivery_drivers(id),
location POINT NOT NULL,
address_description TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 6.3 配送费计算规则
```sql
-- 配送费规则表
CREATE TABLE delivery_fee_rules (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
base_fee DECIMAL(10,2) NOT NULL,
base_distance DECIMAL(5,2) NOT NULL,
additional_fee_per_km DECIMAL(10,2) NOT NULL,
time_multiplier JSONB,
weather_multiplier DECIMAL(3,2) DEFAULT 1.0,
min_fee DECIMAL(10,2) NOT NULL,
max_fee DECIMAL(10,2),
service_areas JSONB,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 6.4 智能配送调度
**调度算法要素**:
1. **距离优先**: 就近分配配送员
2. **实时位置**: 基于GPS实时位置
3. **负载均衡**: 考虑配送员当前订单数
4. **时效要求**: 优先处理紧急订单
5. **用户评价**: 优先分配高评分配送员
6. **区域熟悉度**: 优先分配熟悉区域的配送员
## 7. 支付系统
### 7.1 支付方式
- 微信支付
- 支付宝
- 银联云闪付
- 平台余额支付
- 优惠券抵扣
### 7.2 支付数据模型
```sql
-- 支付记录表
CREATE TABLE payments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
payment_no VARCHAR(50) UNIQUE NOT NULL,
order_id UUID REFERENCES orders(id),
user_id UUID REFERENCES users(id),
payment_method INTEGER NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status INTEGER DEFAULT 1,
third_party_no VARCHAR(100),
paid_at TIMESTAMPTZ,
refunded_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 退款记录表
CREATE TABLE refunds (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
refund_no VARCHAR(50) UNIQUE NOT NULL,
payment_id UUID REFERENCES payments(id),
order_id UUID REFERENCES orders(id),
amount DECIMAL(10,2) NOT NULL,
reason TEXT,
status INTEGER DEFAULT 1,
operator_id UUID,
refunded_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 8. 评价系统
### 8.1 评价数据模型
```sql
-- 评价表
CREATE TABLE reviews (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_id UUID REFERENCES orders(id),
user_id UUID REFERENCES users(id),
merchant_id UUID REFERENCES merchants(id),
product_id UUID REFERENCES products(id),
driver_id UUID REFERENCES delivery_drivers(id),
rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5),
content TEXT,
images JSONB,
reply_content TEXT,
reply_time TIMESTAMPTZ,
is_anonymous BOOLEAN DEFAULT FALSE,
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 9. 消息通知系统
### 9.1 消息类型
- 订单状态变更通知
- 优惠券到期提醒
- 配送进度通知
- 营销活动推送
- 系统公告
### 9.2 消息数据模型
```sql
-- 消息模板表
CREATE TABLE message_templates (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(100) NOT NULL,
type INTEGER NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
push_channels JSONB,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 用户消息表
CREATE TABLE user_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
template_id UUID REFERENCES message_templates(id),
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
type INTEGER NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
extra_data JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 10. 数据统计分析
### 10.1 统计指标
**运营指标**:
- GMV(成交总额)
- 订单量和转化率
- 用户活跃度
- 客单价
- 复购率
**商家指标**:
- 销售额和利润
- 商品销量排行
- 评价和服务质量
- 库存周转率
**配送指标**:
- 配送时效
- 配送费用
- 配送员效率
- 客户满意度
### 10.2 统计数据模型
```sql
-- 日常统计表
CREATE TABLE daily_statistics (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
stat_date DATE NOT NULL,
merchant_id UUID REFERENCES merchants(id),
total_orders INTEGER DEFAULT 0,
total_amount DECIMAL(12,2) DEFAULT 0,
total_users INTEGER DEFAULT 0,
new_users INTEGER DEFAULT 0,
total_products INTEGER DEFAULT 0,
avg_order_amount DECIMAL(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(stat_date, merchant_id)
);
```
## 11. API接口设计
### 11.1 RESTful API规范
```http
GET /api/v1/products #
POST /api/v1/products #
GET /api/v1/products/:id #
PUT /api/v1/products/:id #
DELETE /api/v1/products/:id #
GET /api/v1/orders #
POST /api/v1/orders #
GET /api/v1/orders/:id #
PUT /api/v1/orders/:id/status #
GET /api/v1/coupons #
POST /api/v1/coupons/receive #
GET /api/v1/coupons/my #
```
### 11.2 实时推送接口
```text
# Supabase Realtime Channels
orders:user_id={user_id} # 用户订单状态推送
delivery:task_id={task_id} # 配送进度推送
messages:user_id={user_id} # 消息通知推送
```
## 12. 技术实现要点
### 12.1 前端技术栈 (uni-app-x)
- **组件库**: 自定义UI组件库
- **状态管理**: Pinia
- **路由管理**: uni-app页面路由
- **网络请求**: 封装的请求库
- **实时通信**: Supabase Realtime
- **地图服务**: 高德地图/百度地图
- **支付集成**: 微信支付/支付宝SDK
### 12.2 后端技术栈
```javascript
// Fastify服务器配置
const fastify = require('fastify')({ logger: true });
// 注册插件
await fastify.register(require('@fastify/cors'));
await fastify.register(require('@fastify/jwt'));
await fastify.register(require('@fastify/rate-limit'));
// 数据库连接
const { createClient } = require('@supabase/supabase-js');
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY);
// Kafka配置
const kafka = require('kafkajs').kafka({
clientId: 'mall-app',
brokers: [process.env.KAFKA_BROKER]
});
```
### 12.3 数据库优化
- 建立合适的索引
- 分区存储大表
- 读写分离
- 缓存热点数据
### 12.4 安全措施
- JWT身份认证
- API接口限流
- 数据加密传输
- 敏感信息脱敏
- 权限控制
## 13. 项目实施计划
### 13.1 第一阶段 (2个月) - 基础平台
- [ ] 用户系统 (注册/登录/权限)
- [ ] 商品管理系统
- [ ] 基础订单流程
- [ ] 支付系统集成
- [ ] 后台管理基础功能
### 13.2 第二阶段 (1.5个月) - 营销功能
- [ ] 优惠券系统完整实现
- [ ] 购物车优化
- [ ] 商家端完整功能
- [ ] 消息通知系统
- [ ] 评价系统
### 13.3 第三阶段 (2个月) - 配送系统
- [ ] 配送员管理
- [ ] 智能配送调度
- [ ] 实时位置追踪
- [ ] 配送费用计算
- [ ] 配送端App完整功能
### 13.4 第四阶段 (1个月) - 优化完善
- [ ] 数据统计分析
- [ ] 性能优化
- [ ] 压力测试
- [ ] 客服系统
- [ ] 上线部署
## 14. 风险评估与应对
### 14.1 技术风险
- **并发处理**: 使用Kafka消息队列处理高并发
- **数据一致性**: 采用事务和分布式锁
- **系统可用性**: 服务熔断和降级策略
### 14.2 业务风险
- **支付安全**: 严格的支付流程和风控
- **库存管理**: 实时库存同步机制
- **配送时效**: 智能调度和应急预案
### 14.3 合规风险
- **数据隐私**: 遵循数据保护法规
- **电商资质**: 确保平台运营资质
- **税务合规**: 完善的财务和税务系统
## 15. 后续扩展规划
### 15.1 功能扩展
- 直播带货功能
- 团购/秒杀活动
- 积分商城
- 会员体系
- 供应链管理
### 15.2 技术扩展
- 微服务架构升级
- 人工智能推荐
- 大数据分析平台
- 多租户支持
- 国际化支持
---
**文档版本**: v1.0
**更新时间**: 2025年6月8日
**负责人**: 开发团队
**审核人**: 产品经理
## 16. NFC校园应用扩展模块
### 16.1 项目整合架构
**统一用户系统**:
- 复用mall项目的users表作为基础用户表
- 扩展school_users表存储校园特有信息
- 统一认证和权限管理
**模块化设计**:
```
mall-project/
├── modules/
│ ├── ecommerce/ # 电商模块
│ ├── nfc-campus/ # NFC校园模块
│ └── shared/ # 共享模块
├── database/
│ ├── ecommerce.sql # 电商相关表
│ ├── nfc.sql # NFC相关表
│ └── shared.sql # 共享表(users等)
└── api/
├── ecommerce/ # 电商API
├── nfc/ # NFC API
└── auth/ # 统一认证API
```
### 16.2 统一用户数据模型
```sql
-- 扩展现有users表支持多种用户类型
ALTER TABLE users ADD COLUMN user_types JSONB DEFAULT '[]'; -- 用户可以有多种类型
ALTER TABLE users ADD COLUMN school_info JSONB; -- 学校相关信息
ALTER TABLE users ADD COLUMN parent_id UUID REFERENCES users(id); -- 家长关联
-- 学校用户扩展表复用users表
CREATE TABLE school_user_profiles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) UNIQUE,
student_number VARCHAR(20) UNIQUE, -- 学号/工号
department VARCHAR(100), -- 院系/部门
class_grade VARCHAR(50), -- 班级/年级
school_user_type INTEGER NOT NULL, -- 1:学生 2:教师 3:员工 4:家长
enrollment_date DATE, -- 入学/入职日期
graduation_date DATE, -- 毕业/离职日期
emergency_contact JSONB, -- 紧急联系人信息
medical_info JSONB, -- 健康信息(可选)
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- NFC卡片关联到统一用户系统
CREATE TABLE nfc_cards (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
card_number VARCHAR(32) UNIQUE NOT NULL,
user_id UUID REFERENCES users(id), -- 关联到统一用户表
card_type INTEGER NOT NULL DEFAULT 1,
balance DECIMAL(10,2) DEFAULT 0.00,
status INTEGER DEFAULT 1,
daily_limit DECIMAL(10,2) DEFAULT 100.00,
expire_date DATE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 16.3 业务场景整合
**电商+校园场景结合**:
1. **校园电商** - 学生可在校园商城购买学习用品、生活用品
2. **家长代付** - 家长为孩子的电商订单和NFC充值代付
3. **积分互通** - 电商积分可用于NFC消费NFC消费获得电商积分
4. **统一钱包** - 电商余额和NFC余额统一管理
5. **数据分析** - 综合分析学生消费行为(线上+线下)
### 16.4 扩展应用架构
```javascript
// 统一的应用入口配置
const appModules = {
ecommerce: {
enabled: true,
routes: '/mall/*',
permissions: ['consumer', 'merchant', 'admin']
},
nfcCampus: {
enabled: true,
routes: '/campus/*',
permissions: ['student', 'teacher', 'parent', 'canteen', 'admin']
},
unified: {
enabled: true,
routes: '/user/*',
permissions: ['all']
}
}
// 统一权限管理
const permissions = {
// 电商权限
'ecommerce.consumer': '电商消费者',
'ecommerce.merchant': '电商商家',
'ecommerce.delivery': '电商配送员',
// 校园权限
'campus.student': '学生',
'campus.teacher': '教师',
'campus.parent': '家长',
'campus.canteen': '餐厅商户',
'campus.librarian': '图书管理员',
// 统一权限
'system.admin': '系统管理员',
'finance.manager': '财务管理员'
}
```
### 16.5 移动端应用架构
**统一App方案**:
```
Mall+ App (超级应用)
├── 首页 (根据用户类型显示不同内容)
├── 电商模块
│ ├── 商品浏览
│ ├── 购物车
│ └── 订单管理
├── 校园模块
│ ├── NFC钱包
│ ├── 门禁权限
│ ├── 消费记录
│ └── 图书借阅
├── 统一功能
│ ├── 用户中心
│ ├── 消息通知
│ ├── 客服支持
│ └── 设置
└── 家长专区 (仅家长可见)
├── 孩子监控
├── 代付充值
└── 消费分析
```
**多端应用策略**:
- **消费者端**: 电商功能 + 学生校园功能
- **商户端**: 电商商户 + 校园商户(餐厅/小卖部)
- **管理端**: 统一管理电商和校园业务
- **家长端**: 专门的家长监控和代付功能
### 16.6 技术栈统一
**前端技术栈**:
- **框架**: uni-app-x (支持多端)
- **状态管理**: Pinia (模块化状态管理)
- **UI组件**: 统一设计系统
- **路由**: 模块化路由配置
**后端技术栈**:
- **框架**: Node.js + Fastify (复用现有)
- **数据库**: PostgreSQL + Supabase (扩展表结构)
- **缓存**: Redis (共享缓存)
- **消息队列**: Kafka (处理电商+NFC交易)
### 16.7 数据库整合方案
```sql
-- 统一订单系统支持电商订单和NFC消费
CREATE TABLE unified_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
order_no VARCHAR(50) UNIQUE NOT NULL,
order_type INTEGER NOT NULL, -- 1:电商订单 2:NFC消费 3:充值订单
user_id UUID REFERENCES users(id),
amount DECIMAL(10,2) NOT NULL,
status INTEGER NOT NULL,
payment_method INTEGER,
-- 电商订单特有字段
merchant_id UUID REFERENCES merchants(id),
delivery_address JSONB,
delivery_fee DECIMAL(10,2) DEFAULT 0,
-- NFC消费特有字段
terminal_id VARCHAR(50),
location VARCHAR(200),
card_id UUID REFERENCES nfc_cards(id),
-- 通用字段
extra_data JSONB, -- 存储特殊数据
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 统一钱包系统
CREATE TABLE unified_wallets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) UNIQUE,
ecommerce_balance DECIMAL(10,2) DEFAULT 0.00, -- 电商余额
nfc_balance DECIMAL(10,2) DEFAULT 0.00, -- NFC余额
points_balance INTEGER DEFAULT 0, -- 积分余额
frozen_amount DECIMAL(10,2) DEFAULT 0.00, -- 冻结金额
total_recharge DECIMAL(12,2) DEFAULT 0.00, -- 累计充值
total_consume DECIMAL(12,2) DEFAULT 0.00, -- 累计消费
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 统一消息系统
CREATE TABLE unified_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id),
message_type INTEGER NOT NULL, -- 1:电商 2:校园 3:系统
business_type INTEGER NOT NULL, -- 具体业务类型
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
extra_data JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 16.8 实施计划调整
**整合开发计划 (5个月)**:
**第一阶段 (1个月) - 用户系统整合**:
- [ ] 扩展现有users表支持多用户类型
- [ ] 创建school_user_profiles表
- [ ] 统一认证和权限系统
- [ ] 数据迁移和兼容性测试
**第二阶段 (1.5个月) - NFC核心功能**:
- [ ] NFC卡片管理系统
- [ ] 基础消费功能
- [ ] 充值系统整合
- [ ] 门禁管理基础功能
**第三阶段 (1.5个月) - 业务场景实现**:
- [ ] 饭堂消费系统
- [ ] 小卖部购物系统
- [ ] 完整门禁管理
- [ ] 图书借阅系统
**第四阶段 (1个月) - 整合优化**:
- [ ] 统一移动端App开发
- [ ] 电商+校园业务整合
- [ ] 数据分析和报表
- [ ] 性能优化和测试
### 16.9 成本效益分析
**整合方案 vs 独立项目**:
| 项目 | 整合方案 | 独立项目 |
|------|---------|----------|
| 开发成本 | 60% | 100% |
| 维护成本 | 40% | 100% |
| 用户体验 | 更好(统一) | 一般(分散) |
| 数据价值 | 更高(整合) | 较低(孤立) |
| 业务协同 | 强 | 弱 |
**节省成本**:
- 用户系统复用: 节省40万开发成本
- 基础设施共享: 节省每年50万运维成本
- 统一维护: 节省30%人力成本
- 业务协同: 预期增加20%业务收入
### 16.10 风险控制
**技术风险**:
- **模块耦合**: 采用微服务架构,模块间松耦合
- **性能影响**: 数据库分表分库,缓存优化
- **系统复杂度**: 完善的文档和测试覆盖
**业务风险**:
- **权限混乱**: 严格的权限隔离和审计
- **数据安全**: 按模块进行数据加密和访问控制
- **用户体验**: 模块化UI设计按用户类型展示
## 🎯 结论
**强烈推荐采用整合方案**将NFC校园应用作为Mall项目的一个核心模块来开发。这样不仅能最大化复用现有资源还能创造出更强的业务协同效应为未来的扩展奠定坚实基础。
整合后的项目将成为一个**校园+电商超级平台**,覆盖学生的学习、生活、消费全场景,具有更大的商业价值和发展潜力!