在一些赛事评分中,传统打分的方式是评委给每个参赛选手手写评分,评分完成后还必须手动计算分数,再由主持人宣布最终得分,这种方式容易评委错误地给选手打分,加之人工计算分数难免存在误差,这种方式既费时又无法保证精准,容易造成不公平的情况发生。为此,需要借助互联网方便快捷的特性,制作一个实时评分系统,来解决传统评分方式评分慢,计算不准的缺点。该系统可通过大屏展示实时评分,评委可以手机扫码对选手进行实时评分,根据计分规则,再实时展示到大屏。
| 参与者 | 需求 | 详细需求 |
|---|---|---|
| 超级管理员 | 维护活动负责人 | 生成随机6位账号和密码作为活动负责人(账号为纯数字、密码为数字加字母),为活动负责人账号设置有效时间。 |
| 活动负责人 | 维护比赛信息 | 修改比赛名称、评分规则(可选择3种规则:总分、平均分、去最高值和最低值的平均分;确定分制)。 |
| 维护参赛团队信息 | 对参赛团队的批量导入、增删查改、确定比赛顺序。 | |
| 维护评委信息 | 选择评委人数,根据评委人数生成评委账号,并选择第一位评委账号为主评委 | |
| 主评委 | 打分 | 主评委关闭通道时,系统更新下一个比赛队伍信息;评委界面轮询系统查询当前比赛队伍,如果与当前界面的比赛队伍比较不一致,则刷新比赛信息以及打分按钮。 |
| 开启或关闭打分通道 | 主评委开启通道后,所有评委才能打分;关闭通道后,其他评委不能继续给当前队伍打分。 | |
| 评委 | 打分 | 评委根据当前显示的选手进行打分,打分完毕显示提示信息为等待主评委开启评分通道。 |
| 观众 | 大屏展示 | 前端大屏实时展示选手得分,动态展示选手排名情况;如果选手过多则滚动显示 |
国内已有比较成熟的解决方案,他们提供功能已经有评委评分、现场投票、打赏点赞、匿名评分可选、对评分对象进行多维度ABC测评、自定义指标类别、指标题型和权重分数、评分对象和评分人员,但大多面向大型赛事,针对小型赛事就有些复杂了。
该项目需求少,使用在特定场景中,要求实时性、安全性高,并发小,并且可根据后续的需求进行修改增加新功能。由于未来可能的需求扩展,需要观众评分来活跃现场气氛,可能需要并发高的场景,需要考虑高并发的架构设计。为防止比赛时系统被恶意攻击,还需准备一些技术手段防止攻击,最坏情况下需要准备比赛评分备用方案以保证比赛的顺利进行。
用户表
| 字段名 | 数据类型 | 数据长度 | 是否为空 | 主键 | 默认值 | 是否自增 | 备注 |
|---|---|---|---|---|---|---|---|
| user_id | int | 11 | 0 | 1 | 1 | 序号 | |
| user_name | int | 6 | 0 | 0 | 0 | 账号 | |
| user_pwd | varchar | 6 | 0 | 0 | 0 | 密码 | |
| user_type | char | 2 | 0 | 0 | 0 | 0为超级管理员,1为活动负责人,2为主评委,3为评委 | |
| start_time | datetime | 0 | 0 | 0 | 0 | 开始时间 | |
| end_time | datetime | 0 | 0 | 0 | 0 | 结束时间 | |
| nick_name | varchar | 6 | 0 | 0 | 0 | 姓名 | |
| create_time | datetime | 创建时间 | |||||
| create_by | varchar | 6 | 0 | 0 | 0 | 创建人 | |
| update_time | datetime | 修改时间 | |||||
| update_by | varchar | 6 | 0 | 0 | 0 | 修改人 |
用户比赛表
| 字段名 | 数据类型 | 数据长度 | 是否为空 | 主键 | 默认值 | 是否自增 | 备注 |
|---|---|---|---|---|---|---|---|
| user_id | int | 11 | 0 | 1 | 0 | 用户id | |
| match_id | int | 11 | 0 | 1 | 0 | 比赛id |
比赛表
| 字段名 | 数据类型 | 数据长度 | 是否为空 | 主键 | 默认值 | 是否自增 | 备注 |
|---|---|---|---|---|---|---|---|
| match_id | int | 11 | 0 | 1 | 0 | 比赛id | |
| match_name | varchar | 255 | 0 | 0 | 0 | 比赛名称 | |
| info | varchar | 255 | 0 | 0 | 0 | 比赛简介 | |
| max_score | int | 5 | 0 | 0 | 100 | 0 | 最高分,默认100 |
| score_rule_name | int | 11 | 0 | 0 | 0 | 评分规则名称 | |
| create_time | datetime | 创建时间 | |||||
| create_by | varchar | 6 | 0 | 0 | 0 | 创建人 | |
| update_time | datetime | 修改时间 | |||||
| update_by | varchar | 6 | 0 | 0 | 0 | 修改人 |
参赛团队信息表
| 字段名 | 数据类型 | 数据长度 | 是否为空 | 主键 | 默认值 | 是否自增 | 备注 |
|---|---|---|---|---|---|---|---|
| contestent_id | int | 11 | 0 | 1 | 0 | 参赛者id | |
| match_id | int | 11 | 0 | 0 | 0 | 比赛id | |
| match_order | int | 4 | 1 | 0 | 0 | 比赛顺序 | |
| is_open | bool | 1 | 0 | 0 | 0 | 0 | 是否开启评分通道 |
| name | varchar | 255 | 0 | 0 | 0 | 参赛者名称 | |
| info | varchar | 255 | 0 | 0 | 0 | 参赛者简介 | |
| score | int | 5 | 0 | 0 | 0 | 得分 | |
| rank | int | 11 | 0 | 0 | 0 | 排名 | |
| create_time | datetime | 0 | 创建时间 | ||||
| create_by | varchar | 6 | 0 | 0 | 0 | 创建人 | |
| update_time | datetime | 0 | 修改时间 | ||||
| update_by | varchar | 6 | 0 | 0 | 0 | 修改人 |
评委评分表
| 字段名 | 数据类型 | 数据长度 | 是否为空 | 主键 | 默认值 | 是否自增 | 备注 |
|---|---|---|---|---|---|---|---|
| user_id | int | 11 | 0 | 1 | 1 | 用户id | |
| contestent_id | int | 11 | 0 | 1 | 0 | 参赛者id | |
| score | int | 5 | 0 | 0 | 0 | 得分 | |
| create_time | datetime | 创建时间 | |||||
| create_by | varchar | 6 | 0 | 0 | 0 | 创建人 | |
| update_time | datetime | 修改时间 | |||||
| update_by | varchar | 6 | 0 | 0 | 0 | 修改人 |
| 工具 | 版本 |
|---|---|
| jdk | 1.8 |
| maven | 3.6.3 |
| SpringBoot | 2.3.7.RELEASE |
| Mybatis | 2.1.4 |
| pagehelper | 1.2.12 |
| fastjson | 1.2.31 |
| druid | 1.2.6 |
| Mysql驱动 | 8.0.26 |
| Mysql | 5.7.21 |
| Redis | 3.0.504 |



