关于计算加班调休时间的问题
最近对一个老项目提升改造,碰到个计算加班调休的事:
1.普通加班,调休期限加班结束后一个月内,如果是2014-11-07 20:00加班2小时到22:00,那可以在12-07前调休任意时间调休2小时。
2.紧急项目赶工加班,调休期限为赶工结束后三个月内,比如2014-05-01加班了8个小时,赶工结束时间为6-1,那这8个小时可以在5-1到9-1号任意时间内调休8小时。
3.该年度内所有的加班,如果超限未调休的,可以最多保留2天就是16个小时到年底前任意使用,也就是说你5-1普通加班了8小时,但6-1前没调休,那你可以在6-2到年底任意时间调休8小时,如果5-1 5-2 5-3普通加班了24小时,没有调休过,那6-4到年底任意时间可调休16小时。超限调休一年最多16小时。
以前运行了多年的系统就是个记录数据,加班和调休没关联,现在要在每次调休时计算可用的调休小时数。
如果是新项目,那实现起来很简单,每条加班记录加一个已使用时长的字段,每次调休可以遍历前面的加班,修改该字段值,后续的计算就会很方便,但现在肯定不适用,已经有好几年的数据了。
下面是我的思路,但在实现上有问题:如果我要11-5 8:00~17:00调休8个小时。
第一步,计算11-5前符合期限内的加班数,这个比较容易实现,11-5在加班结束时间~期限截止时间内所有的加班时长合计。
第二步,计算这段时间内的调休时长。
第三步,计算今年超限未使用过的加班时长,超过16小时,统一变成16小时,不足16小时,取实际值。
第四步,计算今年已经使用过的超限调休时长。
第二步开始就有疑问了,该段时间如何定义,如果是第一步里的最早结束时间到最晚截止时间范围内所有的调休,比如最早结束时间是7-1(7-1是个赶工的加班,赶工结束是9-1,那截止日期是12-1),最晚的截止时间是12-3(11-3有个普通加班)。也就是7-1到12-3之间的所有调休合计,问题来了,如果7-5有个普通加班,在8-5前已经调休了,第二步会统计进调休,但第一步不会统计其加班。这个时间段该如何来定义?
第三步,遍历本年度所有的加班和调休记录,调休在可使用的期限内的加班就不纳入合计,这里逻辑也貌似有点问题。
第四步,遍历11-5前本年度所有的调休,调休开始时间不在任意一条加班结束时间到截止时间内的所有调休合计。
如果四步都实现了应该可以计算出来,但二三两步都有疑问。
各位是否有好的逻辑可以比较方便的计算出来,脑子都搞混了。