关于考勤数据处理,邀请大家来参与讨论

ffeitian 2014-04-09 03:48:19
最近为工作在写一套考勤系统。
考勤数据采集、请假单、出差单、加班单,还有班次时间段管理、人员管理等都写好了。
最后冲关考勤日报的生成处理,思考了三天,头脑还是一片迷糊,上来CSDN放松放松,看看有没有处理过和考勤系统的指点一下。
头脑纠结的地方:
1、每天四次卡:上班上下班、下午下下班。
2、如果中午只打了一次,那这个得根据上、下午是否请假或出差来放到相应时间点。
3、加班起始或结束的时间可能是跟正常下班或上班的时间连到一起的。
4、加班会加到隔天去。
5、公司是大小周制,一周上6天,一周上5天。
6、正常情况下周日是休息日,如果碰上国家放假调整,可能就会出现反常。
7、部分部门采用加班单跟上班间双重确认的方式来认定是否计加班,另外的部分则不写加班单,只按实际打卡时间。

如果取当天离上班时间最近的刷卡时间做为上班卡,也会出现因夜间加班到早上4、5点,故上午不去上班的状况,就会错把加班的下班卡当做上午的上班卡了。
如果取下班最近的时间点,则会把加班时间给丢了。如果加班到隔天,这个又要怎么取。
每个时间点都很好几个因素挂上关系,绕来绕去。

脑子里头越想越多,越想越复杂,越想越不知道从何着手。
连大方向都迷失了
唉。。。。。。工厂的考勤比一般公司复杂多了。
求救命啊,脑子要炸开了

我就是想给每个员工每天生成一记录,记录他的上班各个时间段的打卡时间,加班的打卡时间,加班时长、请假时长、迟到时间、早退时长
判断究意是节假日呢还是正常工作日,加班开始时间如果跟下班时间重叠则不计异常

哪怕是最没效率,最笨的方法都想不到了。
写了几年的程序,第一次这么纠结,非常膜拜那些专业的HR系统开发人员
...全文
5460 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ijlo584p 2016-09-05
  • 打赏
  • 举报
回复
专门负责考勤门控数据库的路过,我公司2W多人的考勤是采用了存储过程来计算考勤的。 主要有 实际考勤表和每日排班表去比较然后计算出实际考勤时间。而且加班也是有小时限制的。 还有一个班次表,这个是关键。 每日排班表是通过存储过程每天由班次表和人事表自动生成,如果修改人事表中的班次,就会得到不同的每日排班表。 考勤记录的时间不得提前每日排班时间30分,否则打卡无效。 还有很多规则等等。
lyhoo163 2016-08-19
  • 打赏
  • 举报
回复
关于加班: 1、设置正常时间段; 2、确认加班时间段; 3、私自加班时间段; 4、上岗时间段。 这样,比较时间段,才能得到加班时间,私自加班。公司私自加班不认账的。
zhyxluoyong 2016-08-18
  • 打赏
  • 举报
回复
我也正在做考勤程序,我用的死办法, 1.一个班段:(07:00)开始刷卡-----(08:00)上班,(12:00)下班------(12:30)截止刷卡,捕捉这两个时间段有没有刷卡记录,当上下班刷卡都有就记考勤 2.加班用弹性时间,设置固定上班时间,下班可截止到下一天,取这段时间最后的刷卡为下班时间,再用两个时间差取加班工时. 但让我头晕的是请假,会影响上班下班的刷卡时间,因为请假不可能刚好上下班请,有可能上班请中途回来上班/中途请一个小时又回来/中途请下班不回来,各种时间段请假太难算,还没头绪,请大神们指点.
JohnYale 2016-08-14
  • 打赏
  • 举报
回复
做个记号 以后仔细看一看
reverzeng 2016-08-13
  • 打赏
  • 举报
回复
最笨的最简单的方法是上班、下班的考勤设备分开,多不了多少钱,省却了很多事,少了很多问题
mumaxwell7 2016-08-04
  • 打赏
  • 举报
回复
请问楼主最后是怎么完成的,,,在下最近也在做这个考勤的模块
mjp1234airen4385 2014-04-18
  • 打赏
  • 举报
回复
核心算法申请专利
金卯刀 2014-04-17
  • 打赏
  • 举报
回复
引用 3 楼 ffeitian 的回复:
[quote=引用 1 楼 SmallHand 的回复:] 考勤最核心的内容就是考勤算法,考勤时间段的设置直接影响考勤算法的效率。 。。。。。。。。。。。。。。。。。。。
一看就是高人啊,可惜满脑子浆糊,有极多的疑问,可就是不知道从何问起。 不知道方不方便给个处理流程(有点过分了)[/quote] 试着自己画业务模型图——业务对象设计——类时序图 用存储过程是方便,但会影响可移植性,不建议使用。这样业务逻辑实现+可参数化配置 会更通用。
Andy-88 2014-04-17
  • 打赏
  • 举报
回复
在后台写过程 函数,其它据逻辑,写好,如 getValidtime(Tady:datetime)..... 这个肯定要写好多过程,函数 ,这样规则变时 只修改后台就OK 了,前台就一些公式规则的录入 ,计算全部后台,前台仅报表呈现…………一点点想法 真正也没乍写过考勤
勉励前行 2014-04-17
  • 打赏
  • 举报
回复
班段(确定上下班时间点) 班次(确定每天上下班时间点,及工作天如何分割) 排班(确认个人每天上下班时间点) 请假及出差(影响上下班时间点,假别影响薪资) 加班(影响上下班时间点,加班类型可能影响薪资) 异常上下班(时间点修正,也可以通过重建一个班次来实现,但异常是有原因备查的,修改月排班则往往没有原因说明) 以上可推算出每天每个班段的上下班时间点,通过匹配算法,匹配每天打卡,每次打卡。 这是固定时间点上下班的算法,是必须支持的。 另外的浮动时间点上下班的匹配算法则不需要具体的上下班时间点,请假与加班方式影响也不一样。 迟到早退计法(迟到早退另计还是在班段工时中直接扣,还是每天累加......)、 加班工时计法(固定班段为加班,还是超8小时为加班,周日工时回补平时上班,跨天加班计法.....) 旷工计法(打一次卡是否为旷工,还是当天工时为0就旷工?...因为需要做旷工统计及旷工提醒) 自动补卡规则(出差自动补卡,缺卡批量自动补卡,补卡统计影响薪资) 周日算法(周日双倍,何为周日,这个有多种解释,需要制定具体规则,然后依规则计算周日) 国假日算法( 法定国假日不支持跨天,固定为0时交割。) 夜班津贴计法(也就是分时段计工时) ...... 除了这些的算法规则外,还得应付使用上的一些要求: 自动倒班,依打卡时间定班次,当班查岗支持,班次复制修改,批量作业,入职离职当天特别打卡支持及识别离职时间点。 检测与处理不合理现象(如:时间冲突(加班与上班冲突,排班冲突.....),请假期间代打卡(可能录入错误的请假时间),跨天加班异常.....)。 多种多样的考勤规则,业务逻辑复杂。当前实现支持到哪一步,是考勤软件需要考虑的。 我不建议用SQL语言实现全部考勤计算过程,当支持的规则多了,实测结果SQL实现的计算速度也比不上App计算。
ffeitian 2014-04-16
  • 打赏
  • 举报
回复
引用 10 楼 zjenfon 的回复:
楼主可以借鉴一下主流的HR系统供应商,多了解几家HR系统的处理流程,依我看,考勤的核心计算基本上都是通过庞大的SQL存储过程来实现的,不防往这方面下功夫,Delphi界面不外呼就是一些数据控件
确实在存储过程中来实现是比较有效率的。 第一次做这个考勤处理,先在delphi中来实现,有了成熟的处理过程再过去。
jozosoft 2014-04-14
  • 打赏
  • 举报
回复
一些GGYY的设置,建议放在SP中去搞。
LoveInCoding 2014-04-13
  • 打赏
  • 举报
回复
楼主可以借鉴一下主流的HR系统供应商,多了解几家HR系统的处理流程,依我看,考勤的核心计算基本上都是通过庞大的SQL存储过程来实现的,不防往这方面下功夫,Delphi界面不外呼就是一些数据控件
勉励前行 2014-04-11
  • 打赏
  • 举报
回复
没有加班单的自由加班制度不好处理。 如18:00下班后自由加班,19:30打卡一次 20:30打卡一次,就不好判定. 员工说原因:19:30打卡下班,可是马上被叫回来,继续加班到20:30才下班。 如果没有加班单,如何判定加班时长,按最短时间算员工会造反,按最长时间算,员工太容易造假,受害的是企业。 有加班单同时通过打卡时间确认,就不存在这种问题。 班段之间的加班也是,如果没有加班单,班段之间的加班受影响因素更多。我建议不要直接支持自由加班制度,最多是支持依据打卡时间自动检索生成待确认的加班单。 同样,无需排班的自动班次检测机制也是难免错漏,要支持也是做是依据打卡时间纠正排班的手动处理机制。 个人对考勤的认知:没有规矩不成方圆。如果世上没有这条道,就给它划出一条道来。 刚好这段时间,回头修改以前的考勤软件.....
ffeitian 2014-04-11
  • 打赏
  • 举报
回复
    if dstCLog['fCheckTime'] <= T11 then
    begin
      X1 := dstCLog['fCheckTime']
    end
    else
    begin
      if (dstCLog['fCheckTime'] > T11) and (dstCLog['fCheckTime'] < T2) then
      begin
        if C1 = '' then
          C1 := dstCLog['fCheckTime'];
        C2 := dstCLog['fCheckTime'];
      end
      else
        if (dstCLog['fCheckTime'] >= T2) and (dstCLog['fCheckTime'] <= T3) then
        begin
          if X2 = '' then
            X2 := dstCLog['fCheckTime'];
          X3 := dstCLog['fCheckTime'];
        end
        else
          if (dstCLog['fCheckTime'] > T3) and (dstCLog['fCheckTime'] < T44) then
          begin
            if C3 = '' then
              C3 := dstCLog['fCheckTime'];
            C4 := dstCLog['fCheckTime'];
          end
          else
            if dstCLog['fCheckTime'] >= T44 then
              X4 := dstCLog['fCheckTime']
    end;
    dstCLog.Next;
  end;
ffeitian 2014-04-11
  • 打赏
  • 举报
回复
我想不到什么有效率的方法,只能把该员工当天的记录取出来,然后把这些记录分别传到变量:当天最早、离早班上班前最近、离早班上班后最近,离早班上班前最近,离早班下班后最近,离下午班上班前最近、离下午班上班后最近,离下午班下班前最近,离下午班下班后最近,当天最晚。 然后根据班次起始时间,把可能异常一一提出判断,把相应变量传给员工考勤日报表。 if then else if then else if then else . . . 头都晕了。。。。。。。。。。。。。。。。。
lhy 2014-04-09
  • 打赏
  • 举报
回复
加班较晚第二天上午不上班也可以作为规则。
lhy 2014-04-09
  • 打赏
  • 举报
回复
很多部分可以让人手工设置,比如何时放假之类,你不可能一个算法就能模拟假日办的活人的想法。 你可以设一个脚本系统以便动态添加规则。而且可以手动调整。 #1 说得很好,最主要的规则是时间段,但是有可能少打卡,所以建议优先匹配和正常上下午上下班完全匹配的时间段,然后推广到邻近的时间段。
ffeitian 2014-04-09
  • 打赏
  • 举报
回复
引用 2 楼 lyhoo163 的回复:
是有点头痛,但抓好关键点,才是.... 帮顶
这个关键点就是抓不住,不知道从哪开始着手算,不知道这路该怎么一步步走下去,没有方向。
ffeitian 2014-04-09
  • 打赏
  • 举报
回复
引用 1 楼 SmallHand 的回复:
考勤最核心的内容就是考勤算法,考勤时间段的设置直接影响考勤算法的效率。 。。。。。。。。。。。。。。。。。。。
一看就是高人啊,可惜满脑子浆糊,有极多的疑问,可就是不知道从何问起。 不知道方不方便给个处理流程(有点过分了)
加载更多回复(2)
一、项目简介本课程演示的是一套基于SSM实现的考勤管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。课程包含:1. 项目源码、项目文档、数据库脚本、软件工具等所有资料2. 带你从零开始部署运行本套系统3. 该项目附带的源码资料可作为毕设使用4. 提供技术答疑二、技术实现后台框架:Spring、SpringMVC、MyBatisUI界面:JSP、jQuery 、H-ui数据库:MySQL 三、系统功能该系统共包含两种角色:员工、管理员,主要分为前台和后台两大模块。1.前台模块 前台首页、新闻公告、员工活动、职位招聘、留言板、用户注册、用户登录、个人中心、我的考勤、我的奖惩、我的培训、我的薪资、修改密码等功能。2.后台模块 系统后台登陆、管理员管理、员工信息管理、部门管理、职务管理、考勤类别管理、员工考勤管理、员工奖惩管理、员工培训管理、员工薪资管理、网站栏目管理、网站内容管理、职位招聘管理、求职简历管理、留言交流管理、留言回复管理等功能。该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 四、项目截图1)前台首面2)个人信息页面3)员工信息管理4)考勤类别管理5)考勤信息管理6)员工薪资管理  更多Java毕设项目请关注【毕设系列课程】https://edu.csdn.net/lecturer/2104   

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧