这次项目做的考勤系统,由于存在多种考勤规则,因此在时间判定上相当复杂,费了很 大的一番功夫,本来应该在考勤的时候用当前考勤时间参照考勤规则来判断考勤状态,但是由于项目时间比较紧张,就直接将所有的考勤时间存入数据库中了,这导致后面再显示个人考勤月报的时候,数据冗余带来的规则判断困难,因此记录一下在拿到总的记录时间处理的思路,同时避免下次出现同类情况。
首先判断是排班制还是双休值,在这里为了保证放假时每个人也会有记录方便状况判断,因此利用脚本自动对人员数据库遍历,同时在考勤记录里每天晚上12点自动生成每个人的特殊时间“00:00:00”,默认所有人都是旷工,如果是双休制则在休息规则上考虑周末和指定的工作日上班以及上班日休息的情况,然后在矿工的基础上判断当天是否该休息还是上班,如果是排班制的话,则只用考虑指定的上班日休息情况,周末可以不用考虑。接着是判断正常的上班时间区间,由于是总共的考勤时间,因此将每个人的名字和日期为键,考勤状态为值,放入空列表中,以此更新考勤状态,这样可以在之后判断特殊情况“早上迟到,下午正常”以及更新“早上迟到,下午早退”为早退,本来可以不用这样写, 只需要多建一个状态表就好了,不过由于项目时间,后期优化可以放在后面进行了,时间判断上,由于夜班很特殊,是跨天的存在,所以需要先对上下班时间进行判断,所以总的来说,判断流程可以分为:一、双休:①白班 ②夜班 二、调休:①白班 ②夜班这样来算。时间区间上,白班选择“00:00:01”到“23:59:59”来判断迟到还是早退,夜班分为晚上和白天两种状态来判断,晚上为“下午”到“23:59:59”来判断上班情况,白天为“00:00:01”到“下班时间”来判断。
在数据处理上,由于是在原始数据上进行处理,因此用pandas对当天个人的考勤状态进行判断,并取最新的一条状态为判断,pd.drop_duplicates(keep=last)。所以之前对每次考勤时间判断的时候进行状态添加就很重要了。
总的来说走了一些弯路,不过学到的东西还挺多的,在时间类型datetime使用上有了自己的心得,接下来就是部署了,应该还会遇到一些问题,到时候再记录一下。