有如下数据:
工作时段:
上午:08:30~12:00
下午:14:00~18:006 1 0 周承杰 2008-09-19 17:44:32 1200735872000
19 1 0 陈子兰 2008-09-19 17:50:20 1200736220000
12 1 0 成程 2008-09-19 17:51:36 1200736296000
21 1 0 颜枝军 2008-09-19 17:57:05 1200736625000
16 1 0 黄建强 2008-09-19 17:57:09 1200736629000
16 1 0 黄建强 2008-09-19 17:59:23 1200736763000
17 1 0 王伟 2008-09-19 18:01:54 1200736914000
22 1 0 陈勇 2008-09-19 18:08:21 1200737301000
9 1 0 杨关云 2008-09-19 18:39:12 1200739152000
8 1 0 白玉明 2008-09-19 19:29:03 1200742143000
10 1 0 曹之浩 2008-09-19 20:32:29 1200745949000
22 1 0 陈勇 2008-09-22 08:23:36 1200961416000
19 1 0 陈子兰 2008-09-22 08:24:00 1200961440000需要解决的问题:
1、如何过滤掉重复刷卡的记录(如上班时刷了两次)
2、如何判断迟到、早退、加班等情况!求助各位大师!
工作时段:
上午:08:30~12:00
下午:14:00~18:006 1 0 周承杰 2008-09-19 17:44:32 1200735872000
19 1 0 陈子兰 2008-09-19 17:50:20 1200736220000
12 1 0 成程 2008-09-19 17:51:36 1200736296000
21 1 0 颜枝军 2008-09-19 17:57:05 1200736625000
16 1 0 黄建强 2008-09-19 17:57:09 1200736629000
16 1 0 黄建强 2008-09-19 17:59:23 1200736763000
17 1 0 王伟 2008-09-19 18:01:54 1200736914000
22 1 0 陈勇 2008-09-19 18:08:21 1200737301000
9 1 0 杨关云 2008-09-19 18:39:12 1200739152000
8 1 0 白玉明 2008-09-19 19:29:03 1200742143000
10 1 0 曹之浩 2008-09-19 20:32:29 1200745949000
22 1 0 陈勇 2008-09-22 08:23:36 1200961416000
19 1 0 陈子兰 2008-09-22 08:24:00 1200961440000需要解决的问题:
1、如何过滤掉重复刷卡的记录(如上班时刷了两次)
2、如何判断迟到、早退、加班等情况!求助各位大师!
只HashMap中有key,表示已经刷过卡了,刷卡就无效.下班时再刷一次卡,放到另一个HashMap中.
迟到、早退根据两次刷卡时间来判断.日常加班也好做.
不好做的是假日加班.比如春节,中秋节之类的农历加班.
不能放MAP啊~~因为数据量太大~我没放完出来,时间不止是当天的啊~~
那就查询数据库好.
1. 首先有个配置的文档,用来设置上午上班时间、迟到时间、上午下班时间、下午上班时间、早退时间、下午下班时间2. 当上午某个人打卡之后,再次做打卡操作时,显示已打卡,当然就不会二次记录了;下午如果提前打卡,会记录为早退,当下班时间到了,再次打卡了,将早退记录去除。3. 要有个定时的东西,主要时针对某个人如果不打卡的情况,要将其的记录补上。4. 考虑统计的问题
首先要明确的一点是:我们是在打卡的时候进行过滤判断等等一些操作,还是数据录入之后进行判断。很显然,楼主是要对录入后的数据进行统计。所以,上面绝大多数的回复都没有意义。这个数据结构让人挺郁闷的,但是不管怎么说,总该有一列是可以区分重名的主键吧。
我个人觉得,这样的数据必须每天处理(最主要的就是算法简单,而且把任务平均分配到每一天,不会到集中的某一天被老板追着骂^^)。如果是很多天都要统计,那就循环查询吧)。
前面讨论了更多的是漏打开和加班到第二天才打卡的情况。毫无疑问:漏打卡是需要提交申请审批的,并且会限制一个月只能允许漏打卡几次,超过了就要按照早退处理。而这时候存在一种很特殊的情况:这小子上班只打过一次卡,o.o这怎么算就涉及到业务逻辑了。至于加班的问题,公司是不允许随便加班的,加班同样需要审批,或许你早上5点打卡,那我可以给你判断是加班了。要是倒霉孩子加班到早上10点呢?如果有坏小子早上不睡觉偷偷的跑来早早的打卡……。你的数据库查询、导出数据不是万能的,这一步的职责就是处理简单的逻辑,然后导出数据,至于更复杂的判断,肯定涉及到审批了。所以那些更复杂的逻辑,交给助理或者其他相关人员去手动处理。
其实很多人的思维都进了一个误区,需要明白的是:程序不是万能的,有些东西根本没办法交给程序去进行逻辑判断(如果说前一天下班没打卡,第二天早上N点之前打卡就算是通宵加班,这个逻辑的漏洞就比较恐怖了吧o.o,想不明白的自觉靠墙边站着去),复杂的逻辑,必然要拆分成更多的合理步骤去处理。
http://photo2.bababian.com/upload2/20090718/4148E7132FE377D45A22930318574F46_500.jpg