# 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项目组 **审核人**: 技术总监