1. 项目背景与需求分析
去年参加高中同学聚会时,组织者还在用微信群接龙统计人数,结果信息混乱不堪——有人重复报名、有人临时变更无法同步、还有人压根没看到消息。作为SSM212班的班长,我决定开发一个专属的同学聚会报名系统,让十年后的重聚能够井然有序。
这个系统需要解决三个核心痛点:
- 报名信息结构化(避免群聊刷屏导致的信息遗漏)
- 实时统计与可视化(组织者随时掌握参与情况)
- 多终端适配(方便不同使用习惯的同学操作)
2. 技术选型与架构设计
2.1 前端方案
采用Vue3+Element Plus组合,主要考虑因素:
- 响应式布局自动适配手机/PC(测试数据显示班级同学移动端使用率78%)
- 表单验证内置规则(如手机号、邮箱格式校验)
- 统计图表选用ECharts Lite版本,打包后体积仅180KB
关键代码示例:
// 报名表单验证规则 const rules = { name: [{ required: true, message: '请输入真实姓名', trigger: 'blur' }], phone: [ { pattern: /^1[3-9]\d{9}$/, message: '手机号格式错误' } ] }2.2 后端服务
使用Spring Boot 3.x + MyBatis Plus架构:
- 采用RESTful API设计,接口版本控制通过路径/v1/实现
- 数据库选择MySQL 8.0,配置连接池参数:
spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000 - 添加Swagger文档自动生成,方便后续维护
2.3 部署方案
为控制成本,选用轻量级方案:
- 2核4G云服务器(年费约600元)
- Nginx反向代理+HTTPS证书(Let's Encrypt免费版)
- 采用Docker Compose编排MySQL和Java服务
3. 核心功能实现细节
3.1 报名信息收集
设计字段时特别注意隐私保护:
- 必填项:姓名、届别、联系方式(三选一)
- 选填项:饮食禁忌、是否携带家属
- 敏感信息(如身份证号)明确说明不收集
数据库表设计:
CREATE TABLE `registration` ( `id` BIGINT AUTO_INCREMENT COMMENT '雪花ID', `real_name` VARCHAR(20) NOT NULL, `contact_type` ENUM('phone','email','wechat') NOT NULL, `contact_value` VARCHAR(50) NOT NULL, `diet_restriction` TEXT, `companion_count` TINYINT DEFAULT 0, `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_contact` (`contact_type`,`contact_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;3.2 实时统计看板
开发过程中发现两个技术难点:
- 并发更新问题:采用乐观锁控制报名人数统计
@Update("UPDATE event_info SET join_count=join_count+1 WHERE id=#{eventId} AND join_count=#{expectedCount}") int updateJoinCount(@Param("eventId") Long eventId, @Param("expectedCount") Integer expectedCount); - 图表性能优化:使用WebWorker处理大数据量渲染
3.3 消息通知模块
实现多通道通知策略:
- 短信通知(阿里云短信服务,模板需提前审核)
- 邮件提醒(配置Thymeleaf模板引擎)
- 微信模板消息(需同学关注服务号)
消息发送记录表设计包含重试机制字段:
ALTER TABLE `notification` ADD COLUMN `retry_count` TINYINT DEFAULT 0; ALTER TABLE `notification` ADD COLUMN `last_retry_time` DATETIME;4. 安全防护措施
4.1 防刷单机制
- IP限流:Guava RateLimiter实现每分钟5次请求限制
- 验证码:采用行为验证(滑动拼图)而非传统数字验证码
- 接口签名:关键API增加时间戳+MD5签名校验
4.2 数据安全
- 敏感字段加密:联系方式采用AES加密存储
- 日志脱敏:自定义Logback过滤器
- 定期备份:每天凌晨3点全量备份到OSS
5. 实际运营数据
上线两周后的关键指标:
- 报名完成率:92%(46/50人)
- 平均填写时间:2分18秒
- 移动端占比:81%
- 通知到达率:短信92%、邮件85%、微信98%
遇到的典型问题及解决方案:
部分同学收不到短信
- 原因:运营商黑名单策略
- 解决:增加"短信+邮件"双通道保障
日期选择器时区问题
- 现象:海外同学看到的时间错误
- 修复:前端统一使用UTC时间传输
6. 扩展优化方向
根据用户反馈计划的迭代项:
- 纪念品选择功能(接入微信支付)
- 活动相册模块(七牛云存储集成)
- 座位预选系统(SVG可视化选座)
关键经验:同学录类系统要特别注意"技术冷感"用户的使用体验,我们最终保留了电话报名通道,这是5位年长老师能成功报名的重要因素。