• 考勤系统之计算工作小时数


    /// <summary>
            /// 计算今天有效工作小时数
            /// </summary>
            public static Decimal GetWorkHour(CheckOnModel todayCheckOn)
            {
                //计算今天有效工作小时数
                //正常情况上下班 早上早与9:00 下班晚于18:00
    
                DateTime amTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 09:01");
                DateTime pmTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 18:00");
    
                DateTime noonBreakStartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 12:30");
                DateTime noonBreakEndTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 13:30");
    
    
                CheckOnModel copyCheckOn = CheckOnModel.DeepCopy(todayCheckOn);
    
                //扣除一个小时午休
                bool subtractOneHour = true;
                //早于9:05分上班 上班打卡时间从9点起算
                if (todayCheckOn.OnDutyTime.Value <= amTime)
                {
                    copyCheckOn.OnDutyTime = amTime.AddMinutes(-1);
                }
                //在午休时间上班 从午休结束时开始算
                if (todayCheckOn.OnDutyTime.Value >= noonBreakStartTime && todayCheckOn.OnDutyTime.Value <= noonBreakEndTime)
                {
                    copyCheckOn.OnDutyTime = noonBreakEndTime;
                    subtractOneHour = false;//不再扣除午休时间
                }
    
                //从午休结束后开始上班
                if (todayCheckOn.OnDutyTime.Value >= noonBreakEndTime)
                {
                    subtractOneHour = false;//不再扣除午休时间
                }
    
                //下班打卡时间从18点起算
                if (todayCheckOn.OffDutyTime.Value >= pmTime)
                {
                    copyCheckOn.OffDutyTime = pmTime;
                }
                //下班时间介于午休时间
                if (copyCheckOn.OffDutyTime.Value >= noonBreakStartTime && copyCheckOn.OffDutyTime.Value < noonBreakEndTime)
                {
                    copyCheckOn.OffDutyTime = noonBreakStartTime;
                    subtractOneHour = false;//不再扣除午休时间
                }
                //下班时间早于午休时间
                if (copyCheckOn.OffDutyTime.Value < noonBreakStartTime)
                {
                    subtractOneHour = false;//不再扣除午休时间
                }
    
                if (subtractOneHour)
                {
                    copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn.OnDutyTime.Value).TotalHours - 1);
                }
                else
                {
                    copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn.OnDutyTime.Value).TotalHours);
                }
                //午休时间打卡走人的,可能为负数
                if (copyCheckOn.WorkHour < 0)
                {
                    copyCheckOn.WorkHour = 0;
                }
    
                //补签成功的 视为正常打卡 但要减去扣除小时数
                if (copyCheckOn.Status == "Y" && copyCheckOn.EditMan != new Guid())
                {
                    copyCheckOn.WorkHour = 8 - copyCheckOn.SubtractHour;
                }
    
                return copyCheckOn.WorkHour;
            }
  • 相关阅读:
    POSIX共享内存
    jsp 传值jsp 数据库 乱码解决的攻略 全套
    遗传奥秘的伟大揭秘者:J.Watson
    js这些代码你都不会,你还有什么好说的!!!
    Android编程获取手机型号,本机电话号码,sdk版本号及firmware版本号号(即系统版本号号)
    广域网使用的常见设备
    门户系统整合sso cookie共享及显示用户信息
    cookie中的path与domain属性详解
    taotao用户登录(及登录成功后的回调url处理)
    taotao用户注册前台页面
  • 原文地址:https://www.cnblogs.com/dongh/p/6603887.html
Copyright © 2020-2023  润新知