问题描述
最近对一个老项目提升改造,碰到个计算加班调休的事:1.普通加班,调休期限加班结束后一个月内,如果是2014-11-0720: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-15-25-3普通加班了24小时,没有调休过,那6-4到年底任意时间可调休16小时。超限调休一年最多16小时。以前运行了多年的系统就是个记录数据,加班和调休没关联,现在要在每次调休时计算可用的调休小时数。如果是新项目,那实现起来很简单,每条加班记录加一个已使用时长的字段,每次调休可以遍历前面的加班,修改该字段值,后续的计算就会很方便,但现在肯定不适用,已经有好几年的数据了。下面是我的思路,但在实现上有问题:如果我要11-58: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前本年度所有的调休,调休开始时间不在任意一条加班结束时间到截止时间内的所有调休合计。如果四步都实现了应该可以计算出来,但二三两步都有疑问。各位是否有好的逻辑可以比较方便的计算出来,脑子都搞混了。
解决方案
解决方案二:
方法就是多定义一个字段,至于既有数据,可以用人工或者程序的办法一次性导入,规则问甲方。
解决方案三:
明显是设计一个一对多关系的数据表2个字段表示一个是记录调休的一个是记录加班的之后就是读数据进行判断即是
解决方案四:
引用1楼caozhy的回复:
方法就是多定义一个字段,至于既有数据,可以用人工或者程序的办法一次性导入,规则问甲方。
规则就是前面3点啊
解决方案五:
引用2楼xianfajushi的回复:
明显是设计一个一对多关系的数据表2个字段表示一个是记录调休的一个是记录加班的之后就是读数据进行判断即是
设计类似的表也是基于新数据的基础上,现在我的问题更多的是如何对老数据进行整理,判断某人现在剩余几天可正常调休,几天可超限调休。
解决方案六:
那就看你自己的思路了,原来数据是什么样的,现在的表又是怎么设计的,才知道怎么整理.
解决方案七:
我昨天请人FB花了3k,结账时人家给了一个优惠卡,在下个月几号到几号过来消费能打8折,同时还能抵扣380的酒水ok,其实你的系统就和我上面说的基本是一模一样的抽象逻辑。所以别搞复杂了,只要达到规则“发张卡”,下次消费滴时候查询有卡没有(并且判定这个卡是什么规则,过期没有就ok了)至于旧数据可以不管(新规则运行,那里管的了旧数据,而且那些卡是已经消费了,还是继续存着这个谁知道?)ps:建议别搞一个字段,而是搞一个发卡表。一个字段加来减去麻烦,而且容易错,错了还不知道怎么错滴
解决方案八:
引用6楼wanghui0380的回复:
我昨天请人FB花了3k,结账时人家给了一个优惠卡,在下个月几号到几号过来消费能打8折,同时还能抵扣380的酒水ok,其实你的系统就和我上面说的基本是一模一样的抽象逻辑。所以别搞复杂了,只要达到规则“发张卡”,下次消费滴时候查询有卡没有(并且判定这个卡是什么规则,过期没有就ok了)至于旧数据可以不管(新规则运行,那里管的了旧数据,而且那些卡是已经消费了,还是继续存着这个谁知道?)ps:建议别搞一个字段,而是搞一个发卡表。一个字段加来减去麻烦,而且容易错,错了还不知道怎么错滴
旧数据怎么可能不管,以前的可以不管,今年的不能不管啊,人家一年加班下来,平时偶尔用用,攒到年前能用的肯定是有个几天的,我现在要做的就是要把今年已经用掉的调休剔除掉,剩余还有多少天调休可以用。