本人在系统中做一个考勤的模块,是医院用的考勤,有不同时间段的排班(
1、8:00--16:30(四次)
2、8:00--15:00(两次)
3、16:00--23:00(两次)
4、8:00--次日8:00(两次)
5、8:00--11:30(两次)
6、23:00--8:00(两次))
在打卡机里导出txt文件的打卡记录上传到服务器上,在根据排班表将每条记录循环存储至数据库里,因为排班的时间段的关系 要判断是打几次卡的,上班还是下班,是否重复打卡,是否迟到早退
数据库查询出来的某月排班表DataTable arrangetime = tool.GetArrangeTimeDate(date1, date2);date1开始日期每月的26日,date2次月的25日
导出的txt文件读取的打卡记录List<string[]> list = new List<string[]>();(如id 打卡时间 打卡人姓名 上班下班标示:I/O)
要求:上班迟到十分钟之内不记迟到,避免一个人的重复打卡(比如A打完卡B打,之后A又打了一遍)
我的思路是循环数据库里的排班日期时间表 在循环list 其中符合要求(人名,日期相同,人名不重复,上班打卡时间小于上班时间)的 记为未迟到 写入数据库 类推....
不知道我又没有叙述清楚,不知道如何完成这个程序了,求高人指教
我觉得 出退勤分开 不要限制重复打卡
上班时间,取最早打卡时间记录
下班时间,取最晚打卡时间记录
在遍历的时候我用了两个for 对 datatable里的数据和list里的数据分别比较的,怎么能取到你说的最早和最晚的呢,还要是这人的打卡呢
@W宁宁: 按照日期和是人进行分组,取最早的时间记录和最晚的时间记录
你描述的很不清楚,按我理解,打卡机里的txt记录应该是每打一次卡有一条记录
USERID USERNAME CHECKTIME
A0001 张三 2010-12-28 7:49:38
A0001 张三 2010-12-28 17:05:12
A0002 李四 2010-12-28 7:50:38
A0002 李四 2010-12-28 17:07:12
A0002 李四 2010-12-28 17:07:16
我给你的思路是:
1.先将txt的数据全部导入数据库
2.通过再写一个存储过程统计出某个ID当天的最早打卡时间及最后打卡时间,结果如下:
USERID USERNAME START TIME END TIME TIMES
A0001 张三 2010-12-28 7:49:38 2010-12-28 17:05:12 8
A0002 李四 2010-12-28 7:50:38 2010-12-28 17:07:16 8
3.根据统计出来的数据,再判断他是否迟到或早退
谢谢,是个思路,但是怎么避免有值夜班的跨了一天呢....
@W宁宁:
如果有跨天的话,这个应该就得手动操作了
不过这个还是要看你的同步时间,是每天同步一次,每周同步一次,还是每月同步一次
@Rich.T: 哦哦,是按月录入的,按月发工资嘛,嘻嘻