第6代考勤系统优化升级

关于配置文件的改造

配置整体布局

  1. 将五一之前和十一之前的标准时间和校准时间合并到一个Sheet中,以不同区域表示,新系统将根据考勤时间自动选取对应区域的校准时间和校准时间。
  2. 读入停止考勤表
  3. 读入请假表 ,请假表含自动探测的宏,宏不需调整。
  4. 读入调课表 , 调课表含自动探测的宏,宏不需调整。
  5. 读入自习表 , 自习表含自动探测的宏,宏不需调整。
  6. 读入二次校准表 ,二次校准表也含自动探测宏,宏不需调整。
  7. 在调入调课表二次校准表自习表后,立即先用调课表校准自习表.再将自习表转换为单项的校准表,然后再用二次校准表校准校准表(含修改已经存在的项和添加新项)
  8. 关于标准时间表的构成,分为十月一五月一日两个表,因为学校在这两个时间点会调整作息时间。

标准考勤时间表

此表记录了不同职位员工上班的时间节点,按职务编码和考勤节点编码,此处0000为教师,0001为班主任 ,同时00为上午,01为下午 ,02为晚上,不同职务按列分区,存放于配置表中的标准时间 Sheet中,具体内容如下:

0000 签到B 签到A 签退B 签退A 0001 签到B 签到A 签退B 签退A
00 7:59:59 8:00:59 10:59:59 11:00:59 00 6:09:59 6:10:59 10:59:59 11:00:59
01 14:09:59 14:10:59 17:09:59 17:10:59 01 13:59:59 14:00:59 17:09:59 17:10:59
02 18:19:59 18:20:59 21:54:59 21:55:59 02 18:19:59 18:20:59 21:54:59 21:55:59

自习校准时间表

自习分别以英文字母表示,对应关系如下

字母 B C D E
自习 第1节 第5节 第6节 第9节

自习标准时间表格式如下

自习 时间 节点 +到 -到 +退 -退
B 07:20:00 00 00:40:00
C 11:50:00 00 00:50:00
D 14:10:00 01 00:20:00
E 17:50:00 01 00:20:00

注意:由于自习校准时间是根据自习时间与标准考勤时间做差计算出来的,所以此表应当追加一个自动计算的宏,根据当前考勤时间首先判断是十月一之后还是五月一之后,然后读取标准时间自动填写表格。

自习表的格式

ID 姓名 周一 周二 周三 周四 周五
0001000100011 张三 B C
0001000100021 李四 BC E D

自习表转校准表

转换方法

  1. 定位到 周一
  2. 探测BC,如果存在之一,增加校准表中一行,写入00(上午)的时间校准
  3. 探测E和BC,如果存在之一,增加校准表中一行,写入01(下午)签到时间校准
  4. 探测E和D,如果存在之一,增加校准表中一行,写入01(下午)签退时间校准
  5. 依次定位到周二,周三,周四,周五 ,重复步骤 3,4,5

校准表的格式

ID 姓名 日期 周次 节点 +到 -到 +退 -退
0001000100011 张三 00 00:40:00
0001000100011 张三 01 00:20:00
0001000100011 张三 00 00:50:00
0001000100011 张三 01 00:20:00
0001000100030 王五 2021/7/12 00 00:40:00

在上述校准表中,无日期的记录是常规的自习标准,含有日期的是二次校准时追加的记录,由于日期的作用,只对此日期下起作用,此种情况是少数。在处理统计数据时,首先应当校准日期,当日期符合时执行含日期的时间校准,然后如果无符合日期的源表记录,则比对无日期自习,存在记录时,则执行对应的时间校准,如果都没有则不再校准时间,直接和标准时间比对即可。

获取规范的源表

不同考勤机的源数据可能设置不同,所以在考勤之前需要获取规范的源表。具体包括:

  1. 由考勤机下载签到签退的Excel表格。
  2. 根据停止考勤表 过滤停止考勤的人员(比如哺乳期的员工、一些特殊情况人员等等)
  3. 请假表追加到源表,同时对于签到签退的数据为空的情况填入漏签,如此在进入统计操作时不必再单独考虑漏签问题,实现了模块的独立化。

考勤核心程序

本次升级考虑到提速的要求,所以尽可能的减少匹配的次数,因为数据一多,每匹配一次全部数据就会消耗更多的计算量,所以减少匹配次数可以有效提高效率。

整体考勤处理过程

  1. 选中源表中的待处理行,然后匹配校准表中的行,获得签到签退的校准时间并校准源表
  2. 调用考勤核心Kernel,处理当前校准后的源表信息,生成统计结果。(已经包含标注颜色信息)
  3. 待生成统计数据后,立刻根据当前的校准时间,将源表中的签到签退时间恢复为原始时间。
  4. 将源表数据下移一行,重复上述1,2,3步骤,一直处理到最后。

考勤核心的构成

  1. 分别编写每个职务的考勤标准,依次命名为kernel0,kernel1,kernel2 ...
  2. kernel0,kernel1,kernel2 等每一职务的处理,均有相同结构,使用Select Case 语句依次生成考勤节点00(上午),01(下午),02(晚上) ... 等的统计结果,并标注好上色信息,分别以0,1,2表示绿色,黄色,红色用于在最后标注颜色,这样子在标注颜色阶段就又省去了一次比对和计算,极大的提高了效率。
  3. 据考勤人员ID的前四位确定职务,依次Call 对应的kernel0,kernel1,kernel2 ... , 生成一个整体的Kernel ,考勤核心模块。
  4. 据上述设置,则Kernel必须存在二个参数,即:考勤人员ID , 考勤节点ID

提速分析

按照当前的设计思路,系统只匹配了一次源表和校准表数据,这正是升级改造提速的核心内容。而旧版考勤系统分了三次匹配,分别完成不同的任务,同时上色过程又进行了一次匹配和统计结果判断,而新版系统只进行一次匹配则记录到了所有的信息,这样分析来看,新系统至少提速4倍。

考勤人员ID

为了应对不同职务,不同部门以及重名的情况,需设置考勤人员的ID,如此可以唯一的定位人员。目前考虑设置13位ID,编码方案为:

  1. 前四位是职务,编码从0000一直到9999
  2. 中间四位是学科组 ,编码从0000一直到9999
  3. 后四位是个人,编码从0000一直到9999
  4. 最后一位是识别码,奇数为表示男,偶数表示女。
  5. 考勤人员ID的生成,在配置文件中,根据教师分组将职位一项按编码方案生成对应的ID,在智能通讯录中可以查询(解析出职位),在通讯录中用宏实现。
  6. 考勤人员ID的录入,有二个方案:
  • 在考勤机上直接录入,此做法较为方便,可以直接获取数据。
  • 不在考勤机录入,在考勤系统追加一个考勤人员ID模块处理此种情况。

排班ID

在学校的排班中主要有上午下午晚上以及教师班主任不同职位的划分,但是如果是企业或公司,则这个做法不是很通用,所以这里增加了排班ID.排版ID为6位编码,规则为:

  1. 前四位是考勤人员ID的前四位,即职务
  2. 后两位是考勤时间节点,两位数从0099共计100个考勤节点,这足够使用了。
  3. 排班ID的录入,也有二个方案
  • 在考勤机上直接录入,此做法较为方便,可以直接获取数据。
  • 不在考勤机录入,在考勤系统追加一个排班ID模块处理此种情况。

注意:在最后生成的展示考勤结果表格中,需将排班ID转换成本单位所设置的考勤名称,这样最终结果才算是完成。