河北工程技术学院新生手机号选号系统

为新生提供便捷的手机号码选择服务,简化线下流程,提高工作效率

项目概述

河北工程技术学院新生手机号选号系统是为新生提供手机号码选择服务的平台,系统分为管理后台和微信小程序两部分。

系统组成

管理后台
管理员使用,提供数据管理、选号控制、数据统计等功能
微信小程序
新生使用,提供手机号浏览、选择、确认等功能
后端服务
基于Spring Boot构建的核心业务逻辑

核心目标

微信小程序体验版

微信小程序二维码

扫描二维码体验选号系统

测试账号

学号 姓名 身份证后6位 预留手机号
000101 学生000101 000101 10000000101
000102 学生000102 000102 10000000102
000103 学生000103 000103 10000000103
000104 学生000104 000104 10000000104
000105 学生000105 000105 10000000105

注:如果验证所需信息不匹配实际需求(例如录取通知书中不包含学号、新生在入学前也没有渠道获知学号),系统中的"学号"和"身份证号后6位"可以比较容易地更改为其它信息,例如考生号。

使用教程

管理面板
管理面板 登录管理面板

登录管理面板

通过此功能登录到系统后台管理界面。

默认用户名为HBGCxsxh-ADMIN123

默认密码为HBGCxsxh-PWD123

当前账号123

当前密码123

登录认证 - 管理员需要输入用户名和密码进行身份验证

  • 访问系统管理后台登录页面
  • 输入正确的管理员账号和密码
  • 点击"登录"按钮进入系统
  • 账号或密码错误或未输入时具有反馈
  • 登录成功后自动跳转到控制面板
  • 登录成功但无法加载页面时会显示错误界面
  • 登录尝试(失败)限制每分钟允许5次
  • 管理面板 侧边栏与页眉

    侧边栏与页眉

    控制页面切换与退出。

    页面切换 - 点击侧边栏以切换页面

    退出登录 - 点击右上角的退出按钮以退出

  • 点击右上角按钮以收放页眉
  • 30分钟无操作后自动退出登录
  • 在页面切换后页眉保持页眉状态
  • 页面切换时显示加载动画
  • 管理面板 控制面板

    控制面板

    系统核心数据概览,实时展示关键指标和统计信息。

    数据概览 - 显示学生总数、已验证学生数、已选号学生数等关键指标

    选号趋势 - 以图表形式展示每日选号进度和趋势

    号码状态分布 - 展示不同状态号码的分布情况

    全屏模式 - 全屏展示各项选号数据

  • 登录后默认进入控制面板页面
  • 以醒目的进度条展示选号进度
  • 查看选号指标概览
  • 分析选号趋势图表
  • 了解号码池状态分布
  • 管理面板 数据统计

    数据统计

    提供全面的数据分析和统计功能,帮助管理员了解系统使用情况。

    选号操作统计 - 统计学生的选号行为数据

    号码池分析 - 显示已选号码和可用号码的分布情况

    用户行为分析 - 分析用户操作频率和模式

  • 在导航栏选择"数据统计"菜单
  • 查看系统整体数据概览
  • 系统每天自动更新数据
  • 点击按钮手动更新数据
  • 向下滚动显示“更新全部数据”按钮
  • 数据更新完成后右上角弹出提示
  • 管理面板 学生数据导入

    学生数据导入

    导入学生数据和查看格式要求。

    学生信息导入 - 批量导入新生数据

  • 点击文件上传区或拖动文件到上传区
  • 支持XLSX/CSV/JSON格式(需要表头),可以查看格式示例
  • 系统立刻验证文件内容合法性并反馈
  • 点击开始导入按钮
  • 系统显示进度条实时展示导入进度
  • 导入完成后,系统显示导入用时
  • 管理面板 号码数据导入

    号码数据导入

    导入号码数据和查看格式要求。

    号码信息导入 - 批量导入号码数据

  • 点击文件上传区或拖动文件到上传区
  • 支持XLSX/CSV/JSON/TXT格式(有无表头均可),可以查看格式示例
  • 系统立刻验证文件内容合法性并反馈
  • 点击开始导入按钮
  • 系统显示进度条实时展示导入进度
  • 导入完成后,系统显示导入用时
  • 管理面板 学生管理

    学生管理

    管理系统中的学生信息,包括查看、搜索和删除学生数据,解除学生选号。

    搜索学生信息 - 在全部数据中模糊搜索

    分页展示信息 - 点击按钮切换或直接输入页码

    学生信息删除 - 删除单条学生信息

    删除选中信息 - 批量删除学生信息

    删除全部信息 - 直接重建数据表实现一秒删除全部数据

    学生选号解除 - 解除单条学生选号

    解除选中学生选号 - 批量解除学生选号

  • 页码组件右边会显示信息总条数
  • 各个操作都有二次确认步骤
  • 确认删除全部操作时需要输入管理员密码
  • 管理面板 号码管理

    号码管理

    管理系统中的号码信息,包括查看、搜索和删除号码数据。

    搜索号码信息 - 在全部数据中模糊搜索

    分页展示信息 - 点击按钮切换或直接输入页码

    号码信息删除 - 删除单条号码信息

    删除选中信息 - 批量删除号码信息

    删除全部信息 - 直接重建数据表实现一秒删除全部数据

  • 页码组件右边会显示信息总条数
  • 各个操作都有二次确认步骤
  • 确认删除全部操作时需要输入管理员密码
  • 管理面板 选号控制

    选号控制

    设置和管理学生选号的时间规则和控制策略。

    时间规则设置 - 配置选号时间段

    全局控制 - 启用/禁用所有学生的选号功能

    规则管理 - 添加、删除、激活选号控制规则

  • 可以设置每天某时段允许选号
  • 可以设置一对允许选号起止时间
  • flatpickr.js提供的日期选择框,操作方便
  • 管理面板 数据导出

    数据导出

    将系统中的选号结果导出为多种格式,方便后续处理和分析。

    筛选条件 - 根据状态和时间范围筛选数据

    字段选择 - 选择需要导出的数据字段

    多格式支持 - 支持导出为Excel、CSV、JSON等共8种格式

    前五条数据预览 - 预览5条将要导出的数据

    导出记录 - 非持久化的导出记录,点击后再次执行相同的导出

  • 一般每10000条数据的导出小于5秒
  • 一般xlsx格式导出最慢
  • 导出完成后自动弹出浏览器下载框
  • 管理面板 日志统计

    日志统计

    查看系统操作日志的统计信息、选号操作的部分信息。

    操作类型分析 - 统计各类系统操作的数量和比例

    查看IP - 查看学生操作的IP地址分布

  • 系统每日自动更新1次
  • 可以点击“立即更新”按钮进行手动更新
  • 界面中显示一个操作频率最高的用户的多种信息
  • 查看操作频率最高的学生IP地址详情
  • 管理面板 操作记录

    操作记录

    查看详细的学生选号操作和系统管理操作记录。

    选号操作记录 - 查看学生选号过程中的所有操作

    系统操作记录 - 查看管理员的系统管理操作

    筛选与搜索 - 按类型、时间等条件筛选记录

  • 只允许查看,不允许删除
  • 预计每届新生产生的操作记录为80k~3000k条,不超过800MB
  • 记录内容包含IP
  • 微信小程序

    小程序演示

    微信授权 - 获取微信用户基本信息

    学生信息验证 - 验证学号和身份证信息

    号码浏览 - 查看系统提供的可选号码

    随机刷新 - 刷新获取新一批可选号码(15秒间隔)

    选号结果查看 - 显示已选号码

    选号失败反馈 - 当号码已被抢选时,显示提示

    取消选号 - 选号后可以取消,取消后30分钟内不允许选号

    学生首次使用时需要通过身份验证才能使用选号功能。

    学生可以浏览并选择合适的手机号码。

    学生可以查看自己已选的号码信息及选号状态。

  • 打开微信小程序
  • 点击"微信一键登录"按钮
  • 输入信息进行验证
  • 进入"选号"界面
  • 浏览系统展示的号码列表
  • 点击"重新抽取"刷新号码
  • 选择心仪号码并确认选择
  • 进入"首页"界面
  • 查看已选号码详情
  • 选号后在“选号”界面可以取消选号
  • 部署与运维

    运行环境要求

    Java 环境

    JDK 17+

    数据库

    MySQL 8.0+ (需要区分大小写,开发时使用8.4.5)

    操作系统

    Linux (推荐Rocky Linux 9.0) 或 Windows Server 2008+

    网络要求

    公网IP,开放80/443端口;微信小程序需HTTPS支持

    JAR启动参数配置

    多种配置方式示例(命令行参数、JVM参数、环境变量、配置文件):

    展示参数使用,非实际参数格式

    1. 命令行参数

    java -jar FMNS.jar \
        # 后台账号密码配置与小程序配置
        --login.name=admin \          # 管理员账号
        --login.pwd=your_strong_password \ # 管理员密码
        --wx.appid=your_wx_appid \    # 微信小程序APPID
        --wx.secret=your_wx_secret \  # 微信小程序密钥
    
        # 数据库连接
        --spring.datasource.url=jdbc:mysql://localhost:3306/hbgcxsxh_demo \
        --spring.datasource.username=dbuser \
        --spring.datasource.password=dbpassword \
    
        # 服务器配置
        --server.port=8080 \          # 服务端口
        --server.servlet.context-path=/ \ # 上下文路径

    2. JVM系统参数

    java \
    
        # 应用配置参数
        -Dlogin.name=admin \
        -Dlogin.pwd=your_strong_password \
        -Dwx.appid=your_wx_appid \
        -Dwx.secret=your_wx_secret \
    
        -jar FMNS.jar

    3. 环境变量方式

    # Linux/MacOS
    export LOGIN_NAME=admin
    export LOGIN_PWD=your_strong_password
    export WX_APPID=your_wx_appid
    export WX_SECRET=your_wx_secret
    export SPRING_DATASOURCE_PASSWORD=dbpassword
    
    java -jar FMNS.jar
    
    # Windows (CMD)
    set LOGIN_NAME=admin
    set LOGIN_PWD=your_strong_password
    set WX_APPID=your_wx_appid
    set WX_SECRET=your_wx_secret
    set SPRING_DATASOURCE_PASSWORD=dbpassword
    
    java -jar FMNS.jar
    
    # Windows (PowerShell)
    $env:LOGIN_NAME = "admin"
    $env:LOGIN_PWD = "your_strong_password"
    $env:WX_APPID = "your_wx_appid"
    $env:WX_SECRET = "your_wx_secret"
    $env:SPRING_DATASOURCE_PASSWORD = "dbpassword"
    
    java -jar FMNS.jar

    4. Docker容器部署

    docker run -d --name FMNS \
        -p 8080:8080 \
        -e LOGIN_NAME=admin \
        -e LOGIN_PWD=your_strong_password \
        -e WX_APPID=your_wx_appid \
        -e WX_SECRET=your_wx_secret \
        -e SPRING_DATASOURCE_PASSWORD=dbpassword \
        -v /path/to/config:/config \
        FMNS:latest

    提示:

    不配置账号密码则使用默认账号密码

    默认用户名为HBGCxsxh-ADMIN123

    默认密码为HBGCxsxh-PWD123

    建议硬件配置

    并发规模 CPU要求 内存要求 磁盘要求 网络要求
    1,000用户以下 2核 (Xeon E5 v4或同等性能) 2GB (Java应用<0.8GB + MySQL<1.2GB) 15GB SSD (IOPS 200+) 8Mbps带宽
    10,000用户峰值 4核 (Xeon Silver 4210/AMD EPYC 7262) 3GB (Java应用<1GB + MySQL<2GB) 20GB SSD (IOPS 1,500+) 32Mbps带宽

    性能测试报告(本地测试)

    20,000+
    请求/小时
    650MB
    最大数据量/天
    1.1GB
    MySQL峰值内存
    25.8MB/s
    磁盘IO峰值

    测试环境

    • 硬件: AMD R7 6800H, 32GB DDR5, RTX3060, PCIe 4.0 SSD
    • 数据库: MySQL 8.0.12 (phpstudyPro), 最大连接1000, 线程缓存16
    • 测试工具: Python模拟10,000用户 (5,000并发)

    关键指标

    成功率 99.97%
    平均响应时间 ≤200ms
    MySQL CPU占用 峰值<20%
    JVM内存占用 580MB (JAR模式)

    测试结论:瓶颈主要出现在测试客户端而非服务端,高并发时可能导致管理面板响应缓慢(>5秒)

    系统优化建议

    CPU

    推荐使用高主频CPU(≥3.0GHz)提升单线程性能

    内存配置

    为MySQL分配足够innodb_buffer_pool_size

    磁盘选择

    使用SSD确保高IOPS(≥1,500),避免机械硬盘成为瓶颈

    MySQL调优

    innodb_flush_log_at_trx_commit = 2
    innodb_flush_method = O_DIRECT
    innodb_io_capacity = 2000

    项目代码分析

    170
    总文件数
    16,971
    总代码行数
    563.53 KB
    总代码大小(排除开源库)
    9
    文件类型

    语言组成分布

    文件类型大小占比

    详细文件类型统计

    与实际存在细微差异,因为存在后期改动,如BUG修复
    文件类型 文件数 行数 大小 占比
    JAVA 85 6,026 231.21 KB 41.0%
    HTML 26 3,840 146.16 KB 25.9%
    JS 19 3,231 109.21 KB 19.4%
    CSS 25 3,149 60.06 KB 10.7%
    WXML 2 154 4.36 KB 0.8%
    WXSS 3 253 3.83 KB 0.7%
    XML 1 107 3.43 KB 0.6%
    JSON 6 126 3.27 KB 0.6%
    YML 3 85 2.00 KB 0.4%

    技术架构

    后端技术栈

    Spring Boot
    Spring MVC
    MyBatis
    MySQL
    Thymeleaf

    前端技术栈

    HTML5
    CSS3
    JavaScript
    微信小程序
    Font Awesome
    ECharts.js
    flatpickr.js

    系统架构图

    系统采用典型的三层架构设计:

    表示层 (Presentation Layer)
    ├── 管理后台 (Thymeleaf)
    └── 微信小程序
    
    业务逻辑层 (Business Logic Layer)
    ├── 控制器 (Controllers)
    ├── 服务 (Services)
    └── 数据访问对象 (DAOs)
    
    数据访问层 (Data Access Layer)
    ├── MySQL 数据库
    └── 数据映射 (MyBatis)
                    

    数据库设计

    以下是系统的数据库表结构设计,包含主要表及其字段说明。

    STUDENTS - 学生信息表

    字段名 类型 说明
    student_id varchar(20) 学号 - 学生唯一标识
    name varchar(50) 姓名 - 学生姓名
    id_number varchar(18) 身份证号 - 取后几位
    open_id varchar(64) Open ID - 微信用户唯一标识
    status enum 状态 - 身份验证状态(未验证/已验证/冻结)
    reserved_phone varchar(11) 预留号码 - 报考时预留的手机号
    allow_selection_time datetime 允许选号时间

    PHONE_NUMBERS - 手机号码表

    字段名 类型 说明
    phone_number varchar(11) 号码 - 联通手机号
    status enum 状态 - 号码生命周期状态(未选/占用/已选/回收)
    selected_time datetime 被选时间 - 号码被最终选中的时间
    refresh_count int 被抽次数
    occupied_time datetime 占用过期时间
    student_id varchar(20) 学号 - 关联学生(若被占用/已选)

    SELECTION_LOGS - 选号日志表

    字段名 类型 说明
    log_id varchar(32) 记录ID - UUID格式唯一标识
    student_id varchar(20) 学号 - 关联学生
    operation_time datetime 操作时间 - 操作发生时间
    operation_type varchar(20) 操作类型
    affected_number varchar(11) 影响的号码 - 操作涉及的号码
    device_type varchar(20) 设备类型 - 如微信小程序-iOS、PC管理端
    ip_address varchar(45) IP地址 - 操作来源IP(IPv4/IPv6)

    SELECTION_CONTROL - 选号控制表

    字段名 类型 说明
    id int 自增ID
    control_type enum 控制类型(每日/特定时间)
    start_time datetime 开始时间
    end_time datetime 结束时间
    is_active tinyint(1) 是否激活

    存储过程

    系统包含多个存储过程用于数据维护和统计:

    • cleanup_orphaned_records - 清理孤儿记录
    • delete_student_and_cleanup - 删除学生及相关数据
    • update_all_stats - 更新所有统计数据
    • update_SELECTION_STATS - 更新选号统计数据
    • update_SYSTEM_OPERATION_STATS - 更新系统操作统计

    API 文档

    以下是系统API接口概览:

    管理后台API

    所属功能 方法 路径 描述
    仪表盘 GET /mt/dashboard 获取仪表盘页面数据
    GET /mt/dashboard/data 获取仪表盘数据(JSON格式)
    手机号管理 GET /mt/phone-data 获取手机号数据列表(分页)
    POST /mt/phone-data/delete/{phoneNumber} 删除单个手机号
    POST /mt/phone-data/delete 批量删除手机号
    POST /mt/phone-data/delete-all 清空所有手机号数据
    GET /mt/phone-import 访问手机号导入页面
    POST /mt/phone-import/upload 导入手机号数据文件
    学生管理 GET /mt/student-data 获取学生数据列表(分页)
    POST /mt/student-data/delete/{studentId} 删除单个学生
    POST /mt/student-data/delete 批量删除学生
    POST /mt/student-data/delete-all 清空所有学生数据
    POST /mt/student-data/release/{studentId} 解除单个学生的选号
    POST /mt/student-data/release 批量解除学生选号
    POST /mt/student-import/upload 导入学生数据文件
    选号控制 GET /mt/selection-ctrl 获取选号控制规则
    POST /mt/selection-ctrl/add 添加选号控制规则
    POST /mt/selection-ctrl/update 更新选号控制规则
    POST /mt/selection-ctrl/delete/{id} 删除选号控制规则
    POST /mt/selection-ctrl/disable-all 禁用所有规则
    POST /mt/selection-ctrl/disable-selection 禁止所有学生选号
    POST /mt/selection-ctrl/enable-selection 允许所有学生选号
    POST /mt/selection-ctrl/apply-rules 应用选号时间规则
    POST /mt/selection-ctrl/apply-rule/{id} 应用指定规则
    日志统计 GET /mt/logs-stats 获取日志统计数据
    GET /mt/logs-stats/ip-details 获取学生IP详情
    POST /mt/logs-stats/update-stats 更新日志统计数据
    GET /mt/all-stats 获取全局统计数据
    数据导出 GET /mt/data-export 访问数据导出页面
    POST /mt/data-export/preview 更新导出预览
    POST /mt/data-export/export 执行数据导出
    GET /mt/data-export/download/{fileName} 下载导出的文件
    POST /mt/data-export/count 统计导出记录数
    操作日志 GET /mt/sysop 获取系统操作日志
    GET /mt/stuop 获取学生操作日志
    系统设置 GET /mt/login 访问登录页面
    POST /mt/login 执行登录操作
    POST /mt/logout 执行注销操作
    POST /mt/header/toggle 切换页眉状态

    微信小程序API

    方法 路径 描述
    POST /stu/auth/wxLogin 微信登录,获取openId并检查是否已绑定学生信息
    POST /stu/auth/verify 验证学生信息并绑定微信
    GET /stu/auth/info 获取已绑定的学生信息(脱敏)
    GET /stu/phone/random 获取随机号码列表(开始选号)
    POST /stu/phone/confirm 确认选号
    POST /stu/phone/cancel 取消选号
    GET /stu/phone/selected 获取已选号码
    GET /stu/phone/stats 获取号码池统计信息