第6代考勤系统优化升级
关于配置文件的改造
配置整体布局
- 将五一之前和十一之前的标准时间和校准时间合并到一个Sheet中,以不同区域表示,新系统将根据考勤时间自动选取对应区域的校准时间和校准时间。
- 读入
停止考勤表
- 读入
请假表
,请假表含自动探测的宏,宏不需调整。 - 读入
调课表
, 调课表含自动探测的宏,宏不需调整。 - 读入
自习表
, 自习表含自动探测的宏,宏不需调整。 - 读入
二次校准表
,二次校准表也含自动探测宏,宏不需调整。 - 在调入
调课表
、二次校准表
和自习表
后,立即先用调课表
校准自习表
.再将自习表
转换为单项的校准表
,然后再用二次校准表
校准校准表
(含修改已经存在的项和添加新项) - 关于标准时间表的构成,分为
十月一
和五月一
日两个表,因为学校在这两个时间点会调整作息时间。
标准考勤时间表
此表记录了不同职位员工上班的时间节点,按职务编码和考勤节点编码,此处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 |
自习表转校准表
转换方法
- 定位到
周一
- 探测BC,如果存在之一,增加校准表中一行,写入00(上午)的时间校准
- 探测E和BC,如果存在之一,增加校准表中一行,写入01(下午)签到时间校准
- 探测E和D,如果存在之一,增加校准表中一行,写入01(下午)签退时间校准
- 依次定位到周二,周三,周四,周五 ,重复步骤 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 |
在上述校准表中,无日期的记录是常规的自习标准,含有日期的是二次校准时追加的记录,由于日期的作用,只对此日期下起作用,此种情况是少数。在处理统计数据时,首先应当校准日期,当日期符合时执行含日期的时间校准,然后如果无符合日期的源表记录,则比对无日期自习,存在记录时,则执行对应的时间校准,如果都没有则不再校准时间,直接和标准时间比对即可。
获取规范的源表
不同考勤机的源数据可能设置不同,所以在考勤之前需要获取规范的源表。具体包括:
- 由考勤机下载签到签退的Excel表格。
- 根据
停止考勤表
过滤停止考勤的人员(比如哺乳期的员工、一些特殊情况人员等等) - 将
请假表
追加到源表
,同时对于签到
和签退
的数据为空的情况填入漏签
,如此在进入统计操作时不必再单独考虑漏签问题,实现了模块的独立化。
考勤核心程序
本次升级考虑到提速的要求,所以尽可能的减少匹配的次数,因为数据一多,每匹配一次全部数据就会消耗更多的计算量,所以减少匹配次数可以有效提高效率。
整体考勤处理过程
- 选中
源表
中的待处理行
,然后匹配校准表
中的行,获得签到签退的校准时间并校准源表
。 - 调用考勤核心Kernel,处理当前校准后的源表信息,生成统计结果。(已经包含标注颜色信息)
- 待生成统计数据后,
立刻
根据当前的校准时间,将源表
中的签到签退时间恢复为原始时间。 - 将源表数据下移一行,重复上述
1,2,3
步骤,一直处理到最后。
考勤核心的构成
- 分别编写每个职务的考勤标准,依次命名为kernel0,kernel1,kernel2 ...
- kernel0,kernel1,kernel2 等每一职务的处理,均有相同结构,使用Select Case 语句依次生成考勤节点00(上午),01(下午),02(晚上) ... 等的统计结果,并标注好上色信息,分别以0,1,2表示绿色,黄色,红色用于在最后标注颜色,这样子在标注颜色阶段就又省去了一次比对和计算,极大的提高了效率。
- 据考勤人员ID的前四位确定职务,依次Call 对应的kernel0,kernel1,kernel2 ... , 生成一个整体的Kernel ,考勤核心模块。
- 据上述设置,则Kernel必须存在二个参数,即:考勤人员ID , 考勤节点ID
提速分析
按照当前的设计思路,系统只匹配了一次源表和校准表数据,这正是升级改造提速的核心内容。而旧版考勤系统分了三次匹配,分别完成不同的任务,同时上色过程又进行了一次匹配和统计结果判断,而新版系统只进行一次匹配则记录到了所有的信息,这样分析来看,新系统至少提速4倍。
考勤人员ID
为了应对不同职务,不同部门以及重名的情况,需设置考勤人员的ID,如此可以唯一的定位人员。目前考虑设置13
位ID,编码方案为:
- 前四位是
职务
,编码从0000
一直到9999
。 - 中间四位是
学科组
,编码从0000
一直到9999
。 - 后四位是
个人
,编码从0000
一直到9999
- 最后一位是识别码,奇数为表示男,偶数表示女。
- 考勤人员ID的生成,在配置文件中,根据教师分组将职位一项按编码方案生成对应的ID,在智能通讯录中可以查询(解析出职位),在通讯录中用宏实现。
考勤人员ID
的录入,有二个方案:
- 在考勤机上直接录入,此做法较为方便,可以直接获取数据。
- 不在考勤机录入,在考勤系统追加一个
考勤人员ID模块
处理此种情况。
排班ID
在学校的排班中主要有上午
、下午
和晚上
以及教师
和班主任
不同职位的划分,但是如果是企业或公司,则这个做法不是很通用,所以这里增加了排班ID.排版ID为6
位编码,规则为:
- 前四位是考勤人员ID的前四位,即
职务
- 后两位是考勤时间节点,两位数从
00
到99
共计100
个考勤节点,这足够使用了。 排班ID
的录入,也有二个方案
- 在考勤机上直接录入,此做法较为方便,可以直接获取数据。
- 不在考勤机录入,在考勤系统追加一个
排班ID
模块处理此种情况。
注意:在最后生成的展示考勤结果表格中,需将排班ID
转换成本单位所设置的考勤名称,这样最终结果才算是完成。