34 KiB
34 KiB
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卡片/手机快速支付
- 菜品选择和计价
- 营养分析和建议
- 消费记录查询
- 家长消费监控
- 食堂营收统计
业务流程:
- 学生持NFC卡/手机到饭堂
- 选择菜品,POS机显示金额
- 刷卡/碰一碰完成支付
- 系统自动扣款并记录
- 打印小票或推送电子凭证
2.2 小卖部购物系统
应用场景: 校内便利店商品购买
主要功能:
- 商品扫码或手动录入
- NFC快速结算
- 库存实时更新
- 促销活动支持
- 会员积分累积
- 销售数据分析
业务流程:
- 商品扫码添加到购物车
- 确认购买清单和金额
- NFC支付完成交易
- 库存自动减少
- 生成销售记录
2.3 门禁管理系统
应用场景: 宿舍、教学楼、实验室等区域门禁
主要功能:
- 身份识别和权限验证
- 进出记录实时记录
- 访客临时授权
- 异常行为告警
- 门禁日志查询
- 安全统计报告
业务流程:
- 学生/教职工刷卡/手机
- 系统验证身份和权限
- 门禁设备执行开门/拒绝
- 记录进出时间和地点
- 异常情况实时告警
2.4 图书借阅系统
应用场景: 图书馆图书借还
主要功能:
- 图书借阅和归还
- 借阅期限管理
- 逾期费用计算
- 预约排队功能
- 阅读记录统计
- 推荐书目推送
业务流程:
- 扫描图书条码/RFID
- 刷学生卡确认身份
- 系统检查借阅权限
- 自动记录借阅信息
- 设置归还提醒
3. 核心功能模块
3.1 NFC卡片管理系统
-- 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 消费记录系统
-- 消费交易表
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 门禁系统
-- 门禁设备表
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 充值系统
-- 充值记录表
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 图书借阅系统
-- 图书信息表
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 饭堂管理
-- 饭堂商户表
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 小卖部管理
-- 小卖部商户表
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安全协议
-- 安全密钥表
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 防欺诈机制
风控规则:
- 单笔限额: 根据卡片类型设置单笔消费上限
- 日消费限额: 每日总消费额度控制
- 异常交易检测: 短时间内多次交易告警
- 地理位置验证: 不合理的位置跳跃检测
- 设备指纹: 绑定常用消费终端
5.3 银行级安全保护方案
5.3.1 多层安全架构
第一层 - 网络安全:
- VPN专网: 所有终端设备通过专用VPN连接
- 防火墙集群: 多重防火墙过滤异常流量
- 入侵检测: 24小时实时监控异常访问
- DDoS防护: 分布式拒绝服务攻击防护
-- 网络安全配置表
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 资金安全保障
-- 资金池管理表
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()
);
资金安全措施:
- 银行存管: 与银行合作,资金存管分离
- 实时对账: 每小时自动对账,发现差异立即告警
- 风险准备金: 设立5%风险准备金,防范资金风险
- 多重审批: 大额资金变动需要多级审批
- 资金监控: 24小时资金流水监控,异常冻结
5.3.3 交易安全机制
-- 风控规则表
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()
);
交易风控策略:
- 实时风控: 每笔交易实时风险评估
- 机器学习: AI模型识别异常交易模式
- 黑名单机制: 高风险用户和设备黑名单
- 交易限额: 动态调整个人交易限额
- 异常冻结: 可疑交易自动冻结,人工审核
5.3.4 数据加密存储
-- 加密配置表
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 数据备份策略
-- 备份任务配置表
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 灾难恢复方案
-- 灾难恢复配置表
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 业务连续性保障
关键业务优先级:
- P0 - 核心交易: NFC支付、余额查询(必须99.9%可用)
- P1 - 门禁管理: 身份验证、进出记录(必须99.5%可用)
- P2 - 充值服务: 在线充值、资金管理(必须99%可用)
- 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 成本优化建议
阶段性部署:
- 第一年: 部署核心安全措施(60%成本)
- 第二年: 完善监控和备份(30%成本)
- 第三年: 高级安全功能(10%成本)
共享资源:
- 与其他校园系统共享基础设施
- 多个学校联合采购降低成本
- 使用云服务替代部分硬件投资
关键安全投入优先级:
- 核心数据加密: 必须投入
- 实时备份系统: 必须投入
- 基础监控告警: 必须投入
- 高级威胁检测: 可后续升级
- AI风控模型: 可后续升级
这个方案在保证银行级安全的前提下,通过合理的分期投入和资源共享,将年度安全投入控制在合理范围内,同时确保了资金安全和业务连续性。
6. 数据分析与报表
6.1 消费行为分析
-- 消费统计表
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 门禁分析
-- 门禁统计表
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交易接口
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 门禁验证接口
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 余额查询接口
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项目组
审核人: 技术总监