一个变态的考勤难题(倒班+无上班、下班指示)
某公司电子考勤系统主要有两张表,一张《考勤记录表》,一张《刷卡记录表》。要实现统计迟到、早退和矿工
现在困难有两点:
1.公司是常白班和四班三运转制(0:00——8:00 夜班;8:00——16:00 白班;16:00——24:00 中班),上班时间必须提前15分钟刷卡,否则为迟到。下班必须在下班时间后刷卡,否则为早退。如果不迟到早退,则夜班和中班的上班刷卡和下班刷卡就跨越半夜12点了,而刷卡记录是按日存储的。
2.刷卡记录只是简单地记录了某人某天的刷卡记录(第一次刷卡时间和最后一次刷卡时间),并不知道上班、下班。而且还存在漏刷情况。
/***考勤记录表**/
ID工号姓名日期出勤
120013001丁*2013-09-01休
220013002高**2013-09-01常
320013003张**2013-09-01夜
420013004蔡**2013-09-01白
520013008李**2013-09-01中
......................
记录每日所有人应该的考勤记录,每人对应一个工号,此表由人工维护。
出勤定义为:
休——请假、出差、节假日、休息日等不需要上班的情况
常——常白班,7:45——17:00
夜——倒班夜班,先天23:45——8:00
白——倒班白班,7:45——16:00
中——倒班中班,15:45——24:00
/****刷卡记录表*******/
ID工号日期刷卡1刷卡2
1200130022013-09-017:2518:00/*说明*/ 早上 7:25上班,晚上 18:00 下班
2200130032013-09-018:1523:36/*说明*/上夜班 早上 8:15 下班,晚上 23:36上班
3200130042013-09-017:5516:01/*说明*/ 早上 7:45上班,晚上 16:01 下班
4200130082013-09-0115:30/*说明*/ 上中班 15:30 上班,无刷卡2表明第二天下班签退
刷卡记录表示日期当天的记录
对于倒班的来说,夜班、中班正常情况下(无迟到早退)签到在今天,签退则在次日
刷卡1、刷卡2 仅按时间显示当天第一次刷卡时间和最后一次刷卡时间,除了白班和常白班外不能对应上班、下班
存在漏刷情况:1、上班漏刷;2、下班漏刷;3、上下班都漏刷
若某天无某人无刷卡,则次日无该人记录。
考勤?电子?倒班
[解决办法]
一定有很多规则要预先确定的,比如某人某天打一次卡,你当是上班还是下班卡?
有的跨天打卡,那么上班时间在一天,下班时间在第二天,这是很正常的
这是设计问题,也不是什么变态问题
[解决办法]
考勤记录表如有人维护,对考勤系统并不是件难事,只要根据考勤记录表的员工班次+原始刷卡判断,
如果没有人工维护每天的班次,或者员工上班随意性很大,让系统智能根据刷卡分析出员工的班次,
难度增加N倍。
[解决办法]
数据库就保存最简单的数据,谁在什么时间打了一次卡,
各种考勤的统计放到程序语言比如jsp、c#里面去做
写存储过程都可能会吃力不讨好
[解决办法]