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