时间管理中的算法整理--------------------------------加班加班单据归属:根据工作日历,找出某张加班单所属的工作日*1.首先寻找与此加班单时间段有时间交叉的第一个工作日,如果找到了,则归属于此工作日*2.如果第一步没找到,则把加班单开始时间往前推一天,看这个时间点是否属于某个工作日,如果找到了,则归属于此工作日;否则到3*3.如果第二步也没找到,则把加班单结束时间往后推一天,看这个时间点是否属于某个工作日,如果找到了,则归属于此工作日;否则到4*4.把加班单开始时间往前推两天,看这个时间点是否属于某个工作日,如果找到了,则归属于此工作日;否则到5*5.把加班单结束时间往后推两天,看这个时间点是否属于某个工作日,如果找到了,则归属于此工作日;否则不再找了,返回空加班单据生成算法(暂不考虑加班校验)1.有签到、签退标识的系统刷卡数据延时加班的计算逻辑:寻找下班时间点,如果没有下班时间点或者下班时间点在下班时间之前则判定该员工没有加班;否则,判定该员工加班,延时加班的开始时间为下班时间,延时加班的结束时间为下班时间点。提前加班的计算逻辑:寻找上班时间点,如果没有上班时间点或者上班时间点在上班时间之后则判定该员工没有加班;否则,判定该员工加班,提前加班的开始时间为上班时间点,提前加班的结束时间为上班时间非工作日加班的计算逻辑:非工作日的有效刷卡时间段从前一个工作日的班别结束时间+1至后一个工作日的班别开始时间-1。例如:周六为非工作日,周五为夜班,夜班结束的时间为周六8:00:00,考勤结束时间为10:00:00,此时,周六的有效刷卡时间段为:10:00:01至23:59:59。在有效刷卡时间段内,寻找第一次签到记录和最后一次签退记录,如果存在签到记录、和签退记录,并且第一次签到记录在最后一次签退记录之前,则判定第一次签到记录为加班开始时间,最后一次签退记录为加班结束时间;否则,判定该员工未加班。2.没有签到、签退标识的系统刷卡数据延时加班的计算逻辑:寻找加班结束时间:由考勤结束时间向前寻找直到下班时间,找到的第一个刷卡记录为延时加班的结束时间,如果未找到则认为该员工没有加班。寻找加班开始时间:如果该员工存在延时加班的结束时间,需判断该时间点是否为下班时间点(根据作息时间表和判定规则被判定为下班的系统刷卡记录),如果是下班时间点,则认为延时加班的开始时间为下班时间;如果该时间点不是下班时间点,则从下班时间点向后查找直到延时加班的结束时间,如果未发现刷卡记录则认为该员工加班缺卡,不生成加班记录;如果存在刷卡记录则,则看第一条刷卡记录是否在下班时间之前,如果在下班时间之前,则判定加班开始时间为下班时间,如果在下班时间之后,则判定加班开始时间为该刷卡记录的时间。提前加班的计算逻辑:寻找加班开始时间:由考勤开始时间向后寻找直到上班时间,找到的第一个刷卡记录为提前加班的开始时间,如果未找到则认为该员工没有加班。寻找加班开始时间:如果该员工存在提前加班的开始时间,需判断该时间点是否为上班时间点(根据作息时间表和判定规则被判定为上班的系统刷卡记录),如果是上班时间点,则认为提前加班的结束时间为上班时间;如果该时间点不是上班时间点,则从上班时间点向前查找直到提前加班的开始时间,如果未发现刷卡记录则认为该员工加班缺卡,不生成加班记录;如果存在刷卡记录,则看第一条刷卡记录是否在上班时间之后,如果在上班时间之后,则判定加班结束时间为上班时间,如果在上班时间之前,则判定加班结束时间为该刷卡记录的时间。非工作日加班的计算逻辑:非工作日的有效刷卡时间段从前一个工作日的班别结束时间+1至后一个工作日的班别开始时间-1。在有效刷卡时间段内,寻找刷卡记录,如果存在两条或两条以上的刷卡记录,则判定倒数第二条刷卡记录为加班开始时间,最后一条刷卡记录为加班结束时间;否则,判定该员工未加班。举例:17:00为下班刷卡时间,23:00为班别结束时间1.刷卡记录为17:50,18:20:,21:00,则生成加班时间段是18:20至21:00,17:00至17:502.刷卡记录为22:00,则生成加班时间段是17:00至22:003.刷卡记录为17:10,17:50,18:00,22:30,23:30,则生成加班时间段是18:00至22:30,17:00至17:104.刷卡记录为17:00,21:00,则没有加班,不生成加班记录