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

34 KiB
Raw Permalink Blame History

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卡片管理系统

-- 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 防欺诈机制

风控规则:

  1. 单笔限额: 根据卡片类型设置单笔消费上限
  2. 日消费限额: 每日总消费额度控制
  3. 异常交易检测: 短时间内多次交易告警
  4. 地理位置验证: 不合理的位置跳跃检测
  5. 设备指纹: 绑定常用消费终端

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()
);

资金安全措施:

  1. 银行存管: 与银行合作,资金存管分离
  2. 实时对账: 每小时自动对账,发现差异立即告警
  3. 风险准备金: 设立5%风险准备金,防范资金风险
  4. 多重审批: 大额资金变动需要多级审批
  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()
);

交易风控策略:

  1. 实时风控: 每笔交易实时风险评估
  2. 机器学习: AI模型识别异常交易模式
  3. 黑名单机制: 高风险用户和设备黑名单
  4. 交易限额: 动态调整个人交易限额
  5. 异常冻结: 可疑交易自动冻结,人工审核

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 业务连续性保障

关键业务优先级:

  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 消费行为分析

-- 消费统计表
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项目组
审核人: 技术总监