立项背景和目标 本项目 Motion Vote 面向高校及线下辩论赛事场景,旨在为赛事组织者提供一套低成本、高可用的实时投票互动解决方案。立项目标包括:降低活动组织与运营成本,提升观众参与度,提供可追溯的数据分析与防舞弊保障,从而实现“现场互动便捷化、数据实时可视化与投票结果可信化”。
2、软件功能、核心功能模块的介绍 系统包含以下核心模块:用户管理(注册、登录、基于角色的权限控制);活动/赛事管理(创建活动、协作管理、参与者导入与票务编码);辩题/动议管理(添加辩题、状态控制与一键切换);实时投票系统(参会者通过票证二维码或活动码入场、初始投票与在辩论过程中实时改票、改票次数限制与投票锁定);大屏展示(通过 WebSocket/Socket.io 实时推送投票数据、丰富可视化主题与远程操控);数据统计与报表(实时看板、活动报告导出)。同时结合多重防作弊策略:IP 限流(示例:每 IP 每分钟上限 10 次)、设备指纹识别与异常行为监控,确保投票公平性。
3、业务流程、功能路径描述 典型业务流程为:组织者在后台创建活动并配置规则(是否允许改票、最大改票次数、展示主题等)→ 批量导入/手动添加参与者并生成票证/二维码 → 观众扫描二维码或输入活动码进入投票界面 → 在辩论不同阶段进行初始投票与实时改票(每次投票事件通过后端校验并计入变更历史)→ 管理端在需要时切换当前辩题或触发最终投票并锁定结果 → 大屏通过 WebSocket 实时同步并展示投票统计与可视化图表 → 比赛结束后导出投票明细与分析报告。整个路径强调低门槛参与(免注册扫码)、实时性(WebSocket 延迟 <1s)与可审计性(全量改票历史与导出)。
1、整体架构和设计思路,不同模块使用的技术栈 系统采用前后端分离架构:前端基于 Vue 3 + TypeScript(Vite)、Pinia 做状态管理,ECharts 负责可视化,socket.io-client 负责实时通信;后端采用 Python + FastAPI,使用 SQLAlchemy 操作 PostgreSQL(或 MySQL 可选)作为关系型存储,Redis 作为缓存与会话/速率限制存储,Celery 负责异步任务(如导出报表、邮件推送等),JWT 做鉴权,WebSocket/Socket.io 实现实时推送。部署使用 Docker 与 Nginx(静态资源托管 + API/WS 反向代理),通过 Redis/Socket.io 的适配实现多实例水平扩展。设计思路以“数据一致性与低延迟并重”为核心:热数据走 Redis,持久化走数据库,并对投票操作做幂等与限流设计。