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

1175 lines
34 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.
# NFC校园应用系统完整需求文档
## 1. 项目概述
### 📋 文档内容概览
### 🎯 核心特性
- **4个应用场景**: 饭堂消费、小卖部购物、门禁管理、图书借阅
- **3种支付方式**: NFC卡片、手机NFC、二维码扫码
- **完整管理系统**: 卡片管理、消费记录、充值系统、权限控制
- **多端应用**: 学生端、商户端、管理端、家长端
### 🗄️ 数据库设计
- **12+核心数据表**: NFC卡片、消费记录、门禁日志、充值记录等
- **完整SQL建表语句**: 每个表都包含详细字段定义
- **安全设计**: 加密存储、权限控制、交易验证
### 🛠️ 技术栈
- **前端**: uni-app-x + NFC API + 自定义组件
- **后端**: Node.js + Fastify + Redis
- **数据库**: PostgreSQL (Supabase)
- **硬件集成**: NFC读卡器、门禁设备、POS机
- **安全**: AES加密、数字签名、防重放攻击
### 🚀 实施计划
- **3个阶段**: 总计4个月开发周期
- **详细时间线**: 从基础NFC到完整校园应用
- **硬件配置**: NFC设备选型和部署方案
### 📈 扩展规划
- **功能扩展**: 考勤打卡、健康码、停车管理
- **技术升级**: 生物识别、AI分析、IoT集成
## 2. NFC应用场景详细设计
### 2.1 饭堂消费系统
**应用场景**: 学校食堂就餐支付
**主要功能**:
- NFC卡片/手机快速支付
- 菜品选择和计价
- 营养分析和建议
- 消费记录查询
- 家长消费监控
- 食堂营收统计
**业务流程**:
1. 学生持NFC卡/手机到饭堂
2. 选择菜品POS机显示金额
3. 刷卡/碰一碰完成支付
4. 系统自动扣款并记录
5. 打印小票或推送电子凭证
### 2.2 小卖部购物系统
**应用场景**: 校内便利店商品购买
**主要功能**:
- 商品扫码或手动录入
- NFC快速结算
- 库存实时更新
- 促销活动支持
- 会员积分累积
- 销售数据分析
**业务流程**:
1. 商品扫码添加到购物车
2. 确认购买清单和金额
3. NFC支付完成交易
4. 库存自动减少
5. 生成销售记录
### 2.3 门禁管理系统
**应用场景**: 宿舍、教学楼、实验室等区域门禁
**主要功能**:
- 身份识别和权限验证
- 进出记录实时记录
- 访客临时授权
- 异常行为告警
- 门禁日志查询
- 安全统计报告
**业务流程**:
1. 学生/教职工刷卡/手机
2. 系统验证身份和权限
3. 门禁设备执行开门/拒绝
4. 记录进出时间和地点
5. 异常情况实时告警
### 2.4 图书借阅系统
**应用场景**: 图书馆图书借还
**主要功能**:
- 图书借阅和归还
- 借阅期限管理
- 逾期费用计算
- 预约排队功能
- 阅读记录统计
- 推荐书目推送
**业务流程**:
1. 扫描图书条码/RFID
2. 刷学生卡确认身份
3. 系统检查借阅权限
4. 自动记录借阅信息
5. 设置归还提醒
## 3. 核心功能模块
### 3.1 NFC卡片管理系统
```sql
-- NFC卡片主表
CREATE TABLE nfc_cards (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
card_number VARCHAR(32) UNIQUE NOT NULL,
card_type INTEGER NOT NULL DEFAULT 1, -- 1:学生卡 2:教师卡 3:访客卡
user_id UUID REFERENCES users(id),
user_type INTEGER NOT NULL, -- 1:学生 2:教师 3:员工 4:访客
balance DECIMAL(10,2) DEFAULT 0.00,
status INTEGER DEFAULT 1, -- 1:正常 2:挂失 3:冻结 4:注销
expire_date DATE,
encrypted_data TEXT, -- 加密的卡片数据
security_code VARCHAR(64), -- 安全校验码
daily_limit DECIMAL(10,2) DEFAULT 100.00,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
last_used_at TIMESTAMPTZ
);
-- 卡片权限表
CREATE TABLE card_permissions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
card_id UUID REFERENCES nfc_cards(id),
permission_type INTEGER NOT NULL, -- 1:门禁 2:消费 3:借阅
location_id UUID, -- 具体位置ID如特定门禁点
start_time TIME, -- 允许使用开始时间
end_time TIME, -- 允许使用结束时间
valid_days JSONB, -- 有效星期 [1,2,3,4,5] 周一到周五
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 用户信息表(学生/教师)
CREATE TABLE school_users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_number VARCHAR(20) UNIQUE NOT NULL, -- 学号/工号
name VARCHAR(100) NOT NULL,
id_card VARCHAR(20),
phone VARCHAR(20),
email VARCHAR(100),
department VARCHAR(100), -- 院系/部门
class_grade VARCHAR(50), -- 班级/年级
user_type INTEGER NOT NULL, -- 1:学生 2:教师 3:员工
status INTEGER DEFAULT 1,
avatar_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.2 消费记录系统
```sql
-- 消费交易表
CREATE TABLE nfc_transactions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
transaction_no VARCHAR(50) UNIQUE NOT NULL,
card_id UUID REFERENCES nfc_cards(id),
user_id UUID REFERENCES school_users(id),
merchant_id UUID, -- 商户ID饭堂、小卖部等
transaction_type INTEGER NOT NULL, -- 1:消费 2:充值 3:退款
amount DECIMAL(10,2) NOT NULL,
balance_before DECIMAL(10,2) NOT NULL,
balance_after DECIMAL(10,2) NOT NULL,
location VARCHAR(100), -- 消费地点
terminal_id VARCHAR(50), -- 终端设备ID
description TEXT,
extra_data JSONB, -- 额外数据(如购买商品详情)
status INTEGER DEFAULT 1, -- 1:成功 2:失败 3:撤销
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 消费明细表(用于详细商品记录)
CREATE TABLE transaction_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
transaction_id UUID REFERENCES nfc_transactions(id),
item_type INTEGER NOT NULL, -- 1:菜品 2:商品 3:服务费
item_id UUID, -- 商品/菜品ID
item_name VARCHAR(200) NOT NULL,
quantity INTEGER DEFAULT 1,
unit_price DECIMAL(10,2) NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.3 门禁系统
```sql
-- 门禁设备表
CREATE TABLE access_devices (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
device_id VARCHAR(50) UNIQUE NOT NULL,
device_name VARCHAR(100) NOT NULL,
location VARCHAR(200) NOT NULL,
building VARCHAR(100),
floor INTEGER,
room VARCHAR(50),
device_type INTEGER NOT NULL, -- 1:刷卡器 2:人脸识别 3:指纹
ip_address INET,
status INTEGER DEFAULT 1, -- 1:在线 2:离线 3:故障
firmware_version VARCHAR(20),
last_heartbeat TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 门禁记录表
CREATE TABLE access_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
device_id UUID REFERENCES access_devices(id),
card_id UUID REFERENCES nfc_cards(id),
user_id UUID REFERENCES school_users(id),
access_type INTEGER NOT NULL, -- 1:进入 2:离开
access_result INTEGER NOT NULL, -- 1:成功 2:权限不足 3:卡片异常 4:设备故障
location VARCHAR(200),
door_name VARCHAR(100),
access_time TIMESTAMPTZ DEFAULT NOW(),
photo_url TEXT, -- 抓拍照片URL
remark TEXT
);
-- 访客管理表
CREATE TABLE visitors (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
visitor_name VARCHAR(100) NOT NULL,
id_card VARCHAR(20) NOT NULL,
phone VARCHAR(20) NOT NULL,
company VARCHAR(200),
visit_purpose TEXT,
host_user_id UUID REFERENCES school_users(id),
temp_card_id UUID REFERENCES nfc_cards(id),
visit_start_time TIMESTAMPTZ NOT NULL,
visit_end_time TIMESTAMPTZ NOT NULL,
actual_leave_time TIMESTAMPTZ,
status INTEGER DEFAULT 1, -- 1:预约 2:已到达 3:已离开 4:逾期
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.4 充值系统
```sql
-- 充值记录表
CREATE TABLE recharge_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
recharge_no VARCHAR(50) UNIQUE NOT NULL,
card_id UUID REFERENCES nfc_cards(id),
user_id UUID REFERENCES school_users(id),
recharge_type INTEGER NOT NULL, -- 1:现金 2:银行卡 3:微信 4:支付宝 5:批量
amount DECIMAL(10,2) NOT NULL,
balance_before DECIMAL(10,2) NOT NULL,
balance_after DECIMAL(10,2) NOT NULL,
operator_id UUID, -- 操作员ID
terminal_id VARCHAR(50), -- 充值终端
payment_method INTEGER,
third_party_no VARCHAR(100), -- 第三方支付单号
remark TEXT,
status INTEGER DEFAULT 1, -- 1:成功 2:失败 3:退款
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 充值终端表
CREATE TABLE recharge_terminals (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
terminal_id VARCHAR(50) UNIQUE NOT NULL,
terminal_name VARCHAR(100) NOT NULL,
location VARCHAR(200) NOT NULL,
terminal_type INTEGER NOT NULL, -- 1:自助机 2:人工窗口 3:手机充值
status INTEGER DEFAULT 1,
operator_id UUID REFERENCES school_users(id),
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 3.5 图书借阅系统
```sql
-- 图书信息表
CREATE TABLE books (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
isbn VARCHAR(20) UNIQUE,
title VARCHAR(300) NOT NULL,
author VARCHAR(200),
publisher VARCHAR(200),
category_id UUID,
location VARCHAR(100), -- 书架位置
total_copies INTEGER DEFAULT 1,
available_copies INTEGER DEFAULT 1,
status INTEGER DEFAULT 1, -- 1:正常 2:维修 3:下架
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 借阅记录表
CREATE TABLE book_borrowings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
book_id UUID REFERENCES books(id),
card_id UUID REFERENCES nfc_cards(id),
user_id UUID REFERENCES school_users(id),
borrow_date DATE DEFAULT CURRENT_DATE,
due_date DATE NOT NULL,
return_date DATE,
renew_count INTEGER DEFAULT 0,
overdue_fee DECIMAL(10,2) DEFAULT 0,
status INTEGER DEFAULT 1, -- 1:借阅中 2:已归还 3:逾期 4:丢失
librarian_id UUID,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 4. 商户管理系统
### 4.1 饭堂管理
```sql
-- 饭堂商户表
CREATE TABLE canteen_merchants (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
merchant_code VARCHAR(20) UNIQUE NOT NULL,
merchant_name VARCHAR(100) NOT NULL,
location VARCHAR(200) NOT NULL,
business_hours JSONB, -- 营业时间
contact_person VARCHAR(100),
contact_phone VARCHAR(20),
settlement_account VARCHAR(100), -- 结算账户
commission_rate DECIMAL(5,4) DEFAULT 0.0200, -- 佣金比例
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 菜品管理表
CREATE TABLE canteen_dishes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
merchant_id UUID REFERENCES canteen_merchants(id),
dish_code VARCHAR(20),
dish_name VARCHAR(100) NOT NULL,
category VARCHAR(50), -- 荤菜、素菜、汤、主食等
price DECIMAL(8,2) NOT NULL,
nutrition_info JSONB, -- 营养成分信息
allergen_info JSONB, -- 过敏原信息
is_available BOOLEAN DEFAULT TRUE,
daily_limit INTEGER, -- 每日限量
sold_count INTEGER DEFAULT 0, -- 已售数量
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- POS终端表
CREATE TABLE pos_terminals (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
terminal_id VARCHAR(50) UNIQUE NOT NULL,
merchant_id UUID REFERENCES canteen_merchants(id),
terminal_name VARCHAR(100),
location VARCHAR(200),
nfc_reader_id VARCHAR(50), -- NFC读卡器设备ID
ip_address INET,
status INTEGER DEFAULT 1, -- 1:在线 2:离线 3:故障
last_heartbeat TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 4.2 小卖部管理
```sql
-- 小卖部商户表
CREATE TABLE shop_merchants (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
merchant_code VARCHAR(20) UNIQUE NOT NULL,
merchant_name VARCHAR(100) NOT NULL,
location VARCHAR(200) NOT NULL,
business_hours JSONB,
contact_person VARCHAR(100),
contact_phone VARCHAR(20),
license_number VARCHAR(100), -- 营业执照号
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 商品管理表
CREATE TABLE shop_products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
merchant_id UUID REFERENCES shop_merchants(id),
product_code VARCHAR(50) UNIQUE NOT NULL,
barcode VARCHAR(50), -- 商品条码
product_name VARCHAR(200) NOT NULL,
category VARCHAR(100),
brand VARCHAR(100),
specification VARCHAR(100), -- 规格
purchase_price DECIMAL(10,2), -- 进价
selling_price DECIMAL(10,2) NOT NULL, -- 售价
stock_quantity INTEGER DEFAULT 0,
min_stock INTEGER DEFAULT 0, -- 最低库存预警
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 库存记录表
CREATE TABLE inventory_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID REFERENCES shop_products(id),
record_type INTEGER NOT NULL, -- 1:入库 2:出库 3:盘点 4:损耗
quantity INTEGER NOT NULL,
unit_cost DECIMAL(10,2),
total_cost DECIMAL(10,2),
stock_before INTEGER,
stock_after INTEGER,
operator_id UUID,
remark TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 5. 安全与加密机制
### 5.1 NFC安全协议
```sql
-- 安全密钥表
CREATE TABLE security_keys (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
key_type INTEGER NOT NULL, -- 1:主密钥 2:会话密钥 3:设备密钥
key_name VARCHAR(100) NOT NULL,
key_value TEXT NOT NULL, -- 加密存储的密钥
algorithm VARCHAR(50) DEFAULT 'AES-256',
expire_date DATE,
status INTEGER DEFAULT 1,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 交易验证表
CREATE TABLE transaction_verifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
transaction_id UUID REFERENCES nfc_transactions(id),
verification_code VARCHAR(64) NOT NULL,
mac_value VARCHAR(64), -- 消息认证码
timestamp_signature VARCHAR(64), -- 时间戳签名(防重放)
device_signature VARCHAR(64), -- 设备签名
verification_result INTEGER, -- 1:通过 2:失败 3:可疑
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 5.2 防欺诈机制
**风控规则**:
1. **单笔限额**: 根据卡片类型设置单笔消费上限
2. **日消费限额**: 每日总消费额度控制
3. **异常交易检测**: 短时间内多次交易告警
4. **地理位置验证**: 不合理的位置跳跃检测
5. **设备指纹**: 绑定常用消费终端
## 5.3 银行级安全保护方案
### 5.3.1 多层安全架构
**第一层 - 网络安全**:
- **VPN专网**: 所有终端设备通过专用VPN连接
- **防火墙集群**: 多重防火墙过滤异常流量
- **入侵检测**: 24小时实时监控异常访问
- **DDoS防护**: 分布式拒绝服务攻击防护
```sql
-- 网络安全配置表
CREATE TABLE network_security_configs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
config_type INTEGER NOT NULL, -- 1:防火墙规则 2:VPN配置 3:访问白名单
config_name VARCHAR(100) NOT NULL,
config_value JSONB NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 安全事件日志表
CREATE TABLE security_incident_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
incident_type INTEGER NOT NULL, -- 1:异常登录 2:可疑交易 3:系统入侵 4:数据泄露
severity_level INTEGER NOT NULL, -- 1:低 2:中 3:高 4:严重
source_ip INET,
target_system VARCHAR(100),
attack_method VARCHAR(200),
detected_by VARCHAR(100), -- 检测系统
status INTEGER DEFAULT 1, -- 1:待处理 2:处理中 3:已解决 4:误报
description TEXT,
response_actions JSONB,
resolved_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
**第二层 - 应用安全**:
- **双因子认证**: 手机短信+密码/生物识别
- **JWT令牌**: 30分钟自动过期刷新机制
- **API签名**: 所有接口请求数字签名验证
- **权限最小化**: 基于角色的细粒度权限控制
**第三层 - 数据安全**:
- **字段级加密**: 敏感数据AES-256加密存储
- **密钥分离**: 加密密钥与数据分离存储
- **数据脱敏**: 日志和备份中敏感信息脱敏
- **审计追踪**: 所有操作完整审计日志
### 5.3.2 资金安全保障
```sql
-- 资金池管理表
CREATE TABLE fund_pools (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
pool_type INTEGER NOT NULL, -- 1:在途资金 2:备付金 3:风险准备金
bank_account VARCHAR(50) NOT NULL,
bank_name VARCHAR(100) NOT NULL,
balance DECIMAL(15,2) DEFAULT 0.00,
frozen_amount DECIMAL(15,2) DEFAULT 0.00,
daily_limit DECIMAL(15,2) NOT NULL,
status INTEGER DEFAULT 1,
last_reconcile_time TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 资金变动记录表
CREATE TABLE fund_movements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
movement_no VARCHAR(50) UNIQUE NOT NULL,
pool_id UUID REFERENCES fund_pools(id),
movement_type INTEGER NOT NULL, -- 1:充值入账 2:消费出账 3:退款 4:调账
amount DECIMAL(12,2) NOT NULL,
balance_before DECIMAL(15,2) NOT NULL,
balance_after DECIMAL(15,2) NOT NULL,
related_transaction_id UUID,
bank_serial_no VARCHAR(100), -- 银行流水号
operator_id UUID,
approval_status INTEGER DEFAULT 1, -- 1:待审核 2:已审核 3:已拒绝
approved_by UUID,
approved_at TIMESTAMPTZ,
remark TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 对账记录表
CREATE TABLE reconciliation_records (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
reconcile_date DATE NOT NULL,
reconcile_type INTEGER NOT NULL, -- 1:日对账 2:周对账 3:月对账
system_balance DECIMAL(15,2) NOT NULL,
bank_balance DECIMAL(15,2) NOT NULL,
difference_amount DECIMAL(12,2) DEFAULT 0.00,
transaction_count INTEGER DEFAULT 0,
discrepancy_count INTEGER DEFAULT 0,
status INTEGER DEFAULT 1, -- 1:平账 2:不平账 3:调账中
reconcile_file_url TEXT,
operator_id UUID,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
**资金安全措施**:
1. **银行存管**: 与银行合作,资金存管分离
2. **实时对账**: 每小时自动对账,发现差异立即告警
3. **风险准备金**: 设立5%风险准备金,防范资金风险
4. **多重审批**: 大额资金变动需要多级审批
5. **资金监控**: 24小时资金流水监控异常冻结
### 5.3.3 交易安全机制
```sql
-- 风控规则表
CREATE TABLE risk_control_rules (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
rule_name VARCHAR(100) NOT NULL,
rule_type INTEGER NOT NULL, -- 1:用户行为 2:交易金额 3:设备指纹 4:时间窗口
rule_conditions JSONB NOT NULL, -- 规则条件配置
risk_level INTEGER NOT NULL, -- 1:低风险 2:中风险 3:高风险
action_type INTEGER NOT NULL, -- 1:放行 2:人工审核 3:自动拒绝 4:临时冻结
is_active BOOLEAN DEFAULT TRUE,
hit_count INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- 风险评估记录表
CREATE TABLE risk_assessments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
transaction_id UUID REFERENCES nfc_transactions(id),
user_id UUID REFERENCES school_users(id),
risk_score DECIMAL(5,2) NOT NULL, -- 风险评分 0-100
risk_level INTEGER NOT NULL,
triggered_rules JSONB, -- 触发的风险规则
assessment_result INTEGER NOT NULL, -- 1:通过 2:人工审核 3:拒绝
manual_review_by UUID,
review_result INTEGER,
review_reason TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
**交易风控策略**:
1. **实时风控**: 每笔交易实时风险评估
2. **机器学习**: AI模型识别异常交易模式
3. **黑名单机制**: 高风险用户和设备黑名单
4. **交易限额**: 动态调整个人交易限额
5. **异常冻结**: 可疑交易自动冻结,人工审核
### 5.3.4 数据加密存储
```sql
-- 加密配置表
CREATE TABLE encryption_configs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
table_name VARCHAR(100) NOT NULL,
column_name VARCHAR(100) NOT NULL,
encryption_algorithm VARCHAR(50) DEFAULT 'AES-256-GCM',
key_version INTEGER DEFAULT 1,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 密钥管理表密钥本身加密存储在专用HSM中
CREATE TABLE encryption_keys (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
key_name VARCHAR(100) UNIQUE NOT NULL,
key_version INTEGER NOT NULL,
key_type INTEGER NOT NULL, -- 1:数据加密 2:传输加密 3:签名密钥
algorithm VARCHAR(50) NOT NULL,
key_status INTEGER DEFAULT 1, -- 1:活跃 2:轮换中 3:已废弃
created_at TIMESTAMPTZ DEFAULT NOW(),
expires_at TIMESTAMPTZ NOT NULL,
last_rotated_at TIMESTAMPTZ
);
```
**加密策略**:
- **卡号加密**: 所有卡号AES-256-GCM加密存储
- **余额加密**: 账户余额字段加密,防止篡改
- **身份信息**: 姓名、身份证号等PII信息加密
- **密钥轮换**: 每3个月自动轮换密钥
- **HSM设备**: 硬件安全模块管理密钥
## 5.4 容灾备份方案
### 5.4.1 数据备份策略
```sql
-- 备份任务配置表
CREATE TABLE backup_configurations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
backup_name VARCHAR(100) NOT NULL,
backup_type INTEGER NOT NULL, -- 1:全量备份 2:增量备份 3:差异备份
backup_scope INTEGER NOT NULL, -- 1:全库 2:关键表 3:指定表
target_tables JSONB,
schedule_cron VARCHAR(50) NOT NULL, -- cron表达式
retention_days INTEGER DEFAULT 30,
storage_location VARCHAR(200),
encryption_enabled BOOLEAN DEFAULT TRUE,
compression_enabled BOOLEAN DEFAULT TRUE,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 备份执行记录表
CREATE TABLE backup_execution_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
config_id UUID REFERENCES backup_configurations(id),
backup_file_path TEXT NOT NULL,
backup_size_mb DECIMAL(10,2),
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ,
status INTEGER NOT NULL, -- 1:成功 2:失败 3:部分成功
error_message TEXT,
verification_status INTEGER, -- 1:已验证 2:验证失败 3:未验证
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
**备份方案**:
| 备份类型 | 频率 | 保留期 | 存储位置 | 加密 |
|---------|------|--------|----------|------|
| 实时备份 | 每5分钟 | 24小时 | 本地SSD | AES-256 |
| 增量备份 | 每小时 | 7天 | 异地机房 | AES-256 |
| 全量备份 | 每日3:00 | 30天 | 云存储 | AES-256 |
| 归档备份 | 每月 | 7年 | 冷存储 | AES-256 |
### 5.4.2 灾难恢复方案
```sql
-- 灾难恢复配置表
CREATE TABLE disaster_recovery_configs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
site_name VARCHAR(100) NOT NULL,
site_type INTEGER NOT NULL, -- 1:主站点 2:热备站点 3:冷备站点
location VARCHAR(200) NOT NULL,
capacity_percentage INTEGER DEFAULT 100, -- 容量百分比
rto_minutes INTEGER NOT NULL, -- 恢复时间目标(分钟)
rpo_minutes INTEGER NOT NULL, -- 恢复点目标(分钟)
auto_failover BOOLEAN DEFAULT FALSE,
health_check_url TEXT,
last_health_check TIMESTAMPTZ,
status INTEGER DEFAULT 1, -- 1:正常 2:异常 3:维护中
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 故障切换记录表
CREATE TABLE failover_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
failover_type INTEGER NOT NULL, -- 1:计划内切换 2:自动故障切换 3:手动紧急切换
source_site_id UUID REFERENCES disaster_recovery_configs(id),
target_site_id UUID REFERENCES disaster_recovery_configs(id),
trigger_reason TEXT,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ,
data_loss_minutes INTEGER DEFAULT 0,
recovery_status INTEGER NOT NULL, -- 1:成功 2:失败 3:部分成功
affected_services JSONB,
operator_id UUID,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
**容灾架构**:
- **主数据中心**: 承载100%业务流量
- **热备中心**: 实时数据同步RTO<15分钟
- **冷备中心**: 定期数据同步RTO<4小时
- **云备份**: 每日备份到云存储RTO<24小时
### 5.4.3 业务连续性保障
**关键业务优先级**:
1. **P0 - 核心交易**: NFC支付、余额查询必须99.9%可用)
2. **P1 - 门禁管理**: 身份验证、进出记录必须99.5%可用)
3. **P2 - 充值服务**: 在线充值、资金管理必须99%可用)
4. **P3 - 统计报表**: 数据分析、运营报表(可降级)
**降级策略**:
- **离线模式**: 终端设备本地缓存,网络恢复后同步
- **只读模式**: 故障时只允许查询,禁止交易
- **限流模式**: 高峰时段限制并发交易数量
- **人工模式**: 极端情况下切换到人工处理
## 5.5 成本合理的安全方案
### 5.5.1 基础设施成本3年总成本
| 项目 | 配置 | 数量 | 单价(万元) | 总价(万元) |
|------|------|------|-----------|-----------|
| **数据库服务器** | 64核/512GB/SSD 10TB | 2台 | 15 | 30 |
| **应用服务器** | 32核/128GB/SSD 2TB | 4台 | 8 | 32 |
| **备份服务器** | 16核/64GB/HDD 20TB | 2台 | 5 | 10 |
| **网络安全设备** | 防火墙+IDS+VPN | 1套 | 25 | 25 |
| **HSM硬件** | 密钥管理设备 | 1台 | 35 | 35 |
| **机房托管** | 电力+网络+维护 | 3年 | 8/年 | 24 |
| **云备份存储** | 100TB冷存储 | 3年 | 2/年 | 6 |
| **安全软件许可** | 防病毒+监控+审计 | 3年 | 10/年 | 30 |
| **基础设施总计** | - | - | - | **192万** |
### 5.5.2 人力成本(年)
| 岗位 | 人数 | 年薪(万元) | 总计(万元) |
|------|------|-----------|-----------|
| 安全架构师 | 1 | 45 | 45 |
| 运维工程师 | 2 | 25 | 50 |
| 安全运营师 | 1 | 35 | 35 |
| DBA工程师 | 1 | 40 | 40 |
| **人力年成本** | 5 | - | **170万** |
### 5.5.3 运营成本(年)
| 项目 | 费用(万元/年) |
|------|-------------|
| 电费网费 | 15 |
| 安全审计 | 12 |
| 渗透测试 | 8 |
| 保险费用 | 20 |
| 应急响应 | 10 |
| **运营年成本** | **65万** |
### 5.5.4 总成本汇总3年
| 成本类型 | 金额(万元) | 占比 |
|---------|-----------|------|
| 基础设施(3年) | 192 | 26% |
| 人力成本(3年) | 510 | 69% |
| 运营成本(3年) | 195 | 26% |
| **总计** | **897万** | 100% |
| **年平均成本** | **299万** | - |
### 5.5.5 投资回报分析
**成本节省**:
- 现金管理成本节省: 20万/年
- 人工对账成本节省: 15万/年
- 错账纠纷处理节省: 10万/年
- 审计合规成本节省: 8万/年
**风险防范价值**:
- 避免资金损失: 预期防范损失100万/年
- 避免合规罚款: 预期避免罚款50万/年
- 品牌声誉保护: 无法量化,价值巨大
**总收益**: 年节省成本53万 + 风险防范价值150万 = 203万/年
**ROI**: (203-299)/299 = -32%(第一年)
**盈亏平衡点**: 约1.5年
### 5.5.6 成本优化建议
**阶段性部署**:
1. **第一年**: 部署核心安全措施60%成本)
2. **第二年**: 完善监控和备份30%成本)
3. **第三年**: 高级安全功能10%成本)
**共享资源**:
- 与其他校园系统共享基础设施
- 多个学校联合采购降低成本
- 使用云服务替代部分硬件投资
**关键安全投入优先级**:
1. **核心数据加密**: 必须投入
2. **实时备份系统**: 必须投入
3. **基础监控告警**: 必须投入
4. **高级威胁检测**: 可后续升级
5. **AI风控模型**: 可后续升级
这个方案在保证银行级安全的前提下,通过合理的分期投入和资源共享,将年度安全投入控制在合理范围内,同时确保了资金安全和业务连续性。
## 6. 数据分析与报表
### 6.1 消费行为分析
```sql
-- 消费统计表
CREATE TABLE consumption_statistics (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
stat_date DATE NOT NULL,
user_id UUID REFERENCES school_users(id),
merchant_id UUID,
total_transactions INTEGER DEFAULT 0,
total_amount DECIMAL(10,2) DEFAULT 0,
avg_amount DECIMAL(10,2) DEFAULT 0,
peak_hour INTEGER, -- 消费高峰时段
favorite_category VARCHAR(100), -- 偏好品类
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 商户营收统计
CREATE TABLE merchant_revenue_stats (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
stat_date DATE NOT NULL,
merchant_id UUID NOT NULL,
total_transactions INTEGER DEFAULT 0,
total_revenue DECIMAL(12,2) DEFAULT 0,
commission_amount DECIMAL(10,2) DEFAULT 0,
top_selling_items JSONB,
peak_hours JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
### 6.2 门禁分析
```sql
-- 门禁统计表
CREATE TABLE access_statistics (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
stat_date DATE NOT NULL,
device_id UUID REFERENCES access_devices(id),
total_accesses INTEGER DEFAULT 0,
successful_accesses INTEGER DEFAULT 0,
failed_accesses INTEGER DEFAULT 0,
peak_hour INTEGER,
unique_users INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
```
## 7. 移动应用设计
### 7.1 学生端 App
**主要功能**:
- 卡片余额查询
- 消费记录查看
- 在线充值
- 门禁权限查看
- 图书借阅记录
- 营养报告
- 消费分析
**NFC功能**:
- 手机NFC支付
- 虚拟校园卡
- 快速身份验证
### 7.2 家长端 App
**主要功能**:
- 孩子消费监控
- 余额不足提醒
- 充值代缴
- 消费限额设置
- 营养分析报告
- 进出校门提醒
### 7.3 商户端 App
**主要功能**:
- 收银结算
- 销售统计
- 库存管理
- 营业分析
- 设备状态监控
### 7.4 管理端 Web
**主要功能**:
- 用户管理
- 卡片管理
- 商户管理
- 设备管理
- 财务结算
- 数据报表
- 系统配置
## 8. 硬件设备集成
### 8.1 NFC读卡器
**技术规格**:
- 支持ISO14443 Type A/B
- 支持Mifare Classic/Plus/DESFire
- 支持NFC Forum Type 1-4
- 读卡距离: 0-10cm
- 通信接口: USB/RS232/TCP/IP
**设备清单**:
- 饭堂POS机: 50台
- 小卖部收银机: 20台
- 门禁读卡器: 200台
- 图书馆设备: 10台
- 充值终端: 30台
### 8.2 门禁设备
**设备类型**:
- 单门门禁控制器
- 双门门禁控制器
- 闸机通道设备
- 电子门锁
**功能特性**:
- 支持多种识别方式
- 防跟随功能
- 强制关门功能
- 远程控制开门
- 实时状态监控
### 8.3 充值设备
**自助充值机**:
- 现金收款模块
- 银行卡读卡器
- NFC读写器
- 凭条打印机
- 触摸显示屏
## 9. API接口设计
### 9.1 NFC交易接口
```http
POST /api/v1/nfc/transaction
Content-Type: application/json
{
"card_number": "1234567890123456",
"amount": 15.50,
"merchant_id": "canteen001",
"terminal_id": "pos001",
"items": [
{
"item_id": "dish001",
"name": "",
"quantity": 1,
"price": 12.00
},
{
"item_id": "dish002",
"name": "",
"quantity": 1,
"price": 3.50
}
],
"timestamp": "2025-07-16T12:30:00Z",
"signature": "abc123def456..."
}
```
### 9.2 门禁验证接口
```http
POST /api/v1/access/verify
Content-Type: application/json
{
"device_id": "door001",
"card_number": "1234567890123456",
"access_type": 1,
"timestamp": "2025-07-16T08:00:00Z",
"signature": "xyz789uvw012..."
}
```
### 9.3 余额查询接口
```http
GET /api/v1/nfc/balance?card_number=1234567890123456
Response:
{
"status": "success",
"data": {
"card_number": "1234567890123456",
"balance": 156.80,
"status": 1,
"daily_used": 25.50,
"daily_limit": 100.00
}
}
```
## 10. 数据同步与备份
### 10.1 实时同步机制
- **Redis缓存**: 热点数据缓存
- **消息队列**: 异步处理交易
- **数据库同步**: 主从复制
- **离线缓存**: 网络异常时本地缓存
### 10.2 备份策略
- **全量备份**: 每日凌晨全量备份
- **增量备份**: 每小时增量备份
- **异地备份**: 关键数据异地存储
- **恢复测试**: 定期恢复测试
## 11. 项目实施计划
### 11.1 第一阶段 (1.5个月) - 基础平台
- [ ] NFC卡片管理系统
- [ ] 用户身份管理
- [ ] 基础消费功能
- [ ] 充值系统
- [ ] 安全加密机制
### 11.2 第二阶段 (1.5个月) - 应用场景
- [ ] 饭堂消费系统
- [ ] 小卖部购物系统
- [ ] 门禁管理系统
- [ ] 移动端App开发
### 11.3 第三阶段 (1个月) - 扩展功能
- [ ] 图书借阅系统
- [ ] 数据分析报表
- [ ] 家长监控功能
- [ ] 系统优化测试
## 12. 成本预算
### 12.1 硬件成本
| 设备类型 | 数量 | 单价(元) | 总价(元) |
|---------|------|----------|----------|
| NFC读卡器 | 100台 | 800 | 80,000 |
| 门禁控制器 | 200台 | 1,200 | 240,000 |
| POS终端 | 70台 | 2,500 | 175,000 |
| 自助充值机 | 30台 | 8,000 | 240,000 |
| 网络设备 | 1套 | 50,000 | 50,000 |
| **硬件总计** | - | - | **785,000** |
### 12.2 软件开发成本
| 项目 | 人月 | 单价(元/月) | 总价(元) |
|------|------|-------------|----------|
| 后端开发 | 8 | 25,000 | 200,000 |
| 前端开发 | 6 | 20,000 | 120,000 |
| 移动端开发 | 4 | 22,000 | 88,000 |
| 测试 | 2 | 18,000 | 36,000 |
| **软件总计** | - | - | **444,000** |
### 12.3 运维成本 (年)
| 项目 | 费用(元/年) |
|------|-------------|
| 服务器托管 | 120,000 |
| 带宽费用 | 60,000 |
| 维护服务 | 100,000 |
| **年运维总计** | **280,000** |
## 13. 风险评估
### 13.1 技术风险
- **NFC兼容性**: 不同设备间兼容性问题
- **网络稳定性**: 校园网络中断影响
- **数据安全**: 敏感信息泄露风险
### 13.2 运营风险
- **用户接受度**: 师生使用习惯培养
- **设备故障**: 硬件设备维护保养
- **资金安全**: 充值资金监管
### 13.3 应对措施
- 多重备份和容灾机制
- 完善的培训和支持体系
- 严格的资金监管制度
- 24小时技术支持服务
## 14. 效益分析
### 14.1 经济效益
- **减少现金管理成本**: 每年节省约20万元
- **提高收银效率**: 缩短排队时间50%
- **减少差错率**: 避免找零错误
- **数据化管理**: 提升运营效率
### 14.2 社会效益
- **提升用户体验**: 快速便捷的消费体验
- **健康饮食指导**: 营养分析和建议
- **校园安全**: 完善的门禁管理
- **绿色环保**: 减少纸质票据
## 15. 后续扩展
### 15.1 功能扩展
- **考勤打卡**: 教师员工考勤管理
- **健康码集成**: 防疫健康管理
- **停车管理**: 校园车辆管理
- **会议签到**: 会议活动管理
### 15.2 技术升级
- **生物识别**: 人脸、指纹识别
- **AI分析**: 智能推荐和预测
- **IoT集成**: 物联网设备管理
- **区块链**: 交易数据不可篡改
---
**文档版本**: v1.0
**更新时间**: 2025年7月16日
**负责人**: NFC项目组
**审核人**: 技术总监