
本系统每年运行一次,已有很多年。由于原先将程序写在其它平台代码之中,采用的开发手段已很过时,且数据导入和维护不方便,因此从2024年下半年,我有空就用新的方法来重写这一系统。新系统采用的框架比较复杂,但却是当下流行的,因此在近期完工后的测试期间,将这个系统的维护及使用方法及时整理出来,非常有必要。
一、原理
用一副扑克牌来举例:
1. 将一副背面朝上,然后洗乱。
2. 再将这副乱牌分为若干组(组数由报名总人数及相关的参数进行指定,一般报名较多的如七年级分10组,一年级分5至6组)。
3. 在每张牌背面按组和当前顺序标上号,这就是当前牌的随机号。如01001-01113,04001-04113,10001-10113。
4. 现场嘉宾分组摇号,摇尾号。
规则:每一组按规定的数量和顺序,由摇号产生的尾号决定是否中签。即摇的是牌背面刚刚产生的随机号,与底牌无关。如果是正序,如第2组摇中8,则02008、02018、02028往后则至规定数量的尾号为8的中签。如果是反序,则从后往前,最后一个8如果是02108,往前 02098、02088、02078等等往前直至规定的数量的尾中为8的中签。
一般来说,为了满速,每组都不可能只摇一个号。因此前几次的尾号一般都会是摇中的全部尾号会中签。最后一次因全部中签数的限制,不会全部尾号相符的中签(即顺序一般只对最后一次的有效)。
规则提炼:计算机将所有报名记录进行随机,然后反向,在每个记录的背面产生随机号(含有分组及尾号)。最后由现场的嘉宾摇尾号。摇号摇的是现场随机产生的随机号(由尾号决定是否中签),与报名号及指定的人员目标无关。计算机只随机和分组,摇号者是现场嘉宾,两块进行了规则和技术隔离,嘉宾无法知道每张牌的底牌是啥,只负责摇尾号。
二、原系统(1.0)采用的框架及技术方案
采用了 Spring MVC + FreeMarker 模板引擎 + JSP + MySQL + Jquery + Layui,运行于 linux 平台。
三、现系统(2.0)采用的框架及技术方案
采用了 SpringCloud 微服务框架 + Vue 3 + MySQL ,运行于 linux 平台。