《移动端签到》——统计

   最近小编在做一个签到统计项目,项目的大概需求是这样的:一个人每天可以打卡,上班的人需要每天最少打两次卡,上班打一次,下班打一次,但是一天可以打多次,只要打了多次卡,这时候问题就来,比如说一天一共员工打了十次卡,那哪一条算上班打卡,哪一条算下班打卡哪?经过领导审批,在这每一天的打卡记录中,我们按时间排序,第一条算上班,最后一条算下班。下面看看具体的代码功能实现吧。

   后台代码统计某个月里的所有打卡记录,并按时间排序,找出这一个月中每一天的第一条数据。PS:降序是下班打卡时间,升序是上班打卡时间。

    

 public List<EmployeeServices> LoadUserTask(string Sort, string CnName, string startTime, string endTime)
        {
            try
            {

                string sql = string.Format(@"SELECT CnName ,CreateTime from
                                (
                                SELECT Rank() over(PARTITION BY  Convert ( VARCHAR(10),  CreateTime,  120),CnName ORDER BY CreateTime {0} ) as rowno,  t.* FROM EmployeeServices t
                                WHERE  CnName='{1}' and  CreateTime BETWEEN '{2}' AND '{3}'
                                ) aa
                                WHERE rowno=1", Sort,CnName, startTime, endTime);

                List<EmployeeServices> list = new List<EmployeeServices>();
                //List<ComparePunch> listComparePunch = new List<ComparePunch>();
              

                foreach (var item in this.QueryData(sql))
                {
                    
                    list.Add(item);
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


   判断是否出勤,出勤后是否迟到,下午是否出勤,出勤后是否早退。并将查出来的上班打卡集合和下班打卡集合融合成一个集合。

   上午出勤情况统计 

#region 查询出勤情况
        /// <summary>
        /// 查询出勤情况
        /// </summary>
        /// <returns></returns>
        public List<ComparePunch> QueryComparePurchList()
        {
            var model = new EmployeeServicePunchList();
            var user = DeluxeIdentity.CurrentUser;
            model.DisplayName = user.DisplayName;
            string startTime;
            string endTime;
            string sort;

            HttpCookie cookie = Request.Cookies["queryMonth"];
            if (cookie != null)
            {
                startTime = DateTime.Parse(cookie["monthValue"]).ToString();
                DateTime end = DateTime.Parse(startTime);
                endTime = LastDayOfMonth(end).ToString();
                TimeSpan ts = new TimeSpan(0, 0, 0, 0);//时间跨度 
                Response.Cookies.Remove("cookie");//清除 
            }
            else
            {
                startTime = FirstDayOfMonth(DateTime.Now).ToString();
                endTime = LastDayOfMonth(DateTime.Now).ToString();
            }

            List<ComparePunch> list = new List<ComparePunch>();


            #region 上午出勤情况  查询每一天的第一条记录
            //查询每一天的第一条记录
            sort = "ASC";
            var data = ComparePunchAdapater.Instance.LoadUserTask(sort, model.DisplayName, startTime, endTime);
            sort = "DESC";
            var dataPM = ComparePunchAdapater.Instance.LoadUserTask(sort, model.DisplayName, startTime, endTime);

            ComparePunch cp = new ComparePunch();

            foreach (var item in data)
            {
                    //1.0判断上午是否出勤
                    var AM = IsInTimeInterval(item.CreateTime, Convert.ToDateTime(item.CreateTime.ToString("yyyy-MM-dd 06:00:00")), Convert.ToDateTime(item.CreateTime.ToString("yyyy-MM-dd 12:00:00")));
                    if (AM)
                    {
                        //2.0 判断上午是否迟到
                        var bl = ExecDateDiff(item.CreateTime, Convert.ToDateTime(item.CreateTime.ToString("yyyy-MM-dd 08:30:00")));
                        if (bl)
                        {
                            list.Add(new ComparePunch
                                    {
                                        CreatTime = item.CreateTime.ToString("MM-dd"),
                                        AMSignTime = item.CreateTime.ToString("HH:mm") + " " + "迟到"
                                    });
                        }
                        else
                        {
                            list.Add(new ComparePunch
                            {
                                CreatTime = item.CreateTime.ToString("MM-dd"),
                                AMSignTime = item.CreateTime.ToString("HH:mm") 
                            });
                        }
                    }
                    else
                    {
                        list.Add(new ComparePunch
                        {
                            CreatTime = item.CreateTime.ToString("MM-dd"),
                            AMSignTime = "未打卡"
                        });
                    }
            }

            #endregion

        

         下午出勤情况统计 

 #region 下午出勤情况  查询每一天的最后一条记录
            //查询每一天的最后一条记录

            for (int i = 0; i < list.Count; i++)
            {
                var PM = IsInTimeInterval(dataPM[i].CreateTime, Convert.ToDateTime(dataPM[i].CreateTime.ToString("yyyy-MM-dd 12:00:00")), Convert.ToDateTime(dataPM[i].CreateTime.ToString("yyyy-MM-dd 23:59:59")));
                if (PM)
                {
                    //2.0 判断下午是否早退
                    var b2 = ExecDateDiff(dataPM[i].CreateTime, Convert.ToDateTime(dataPM[i].CreateTime.ToString("yyyy-MM-dd 17:30:00")));
                    if (b2)
                    {
                        list[i].PMSignTime = dataPM[i].CreateTime.ToString("HH:mm");
                       
                    }
                    else  //没有早退
                    {
                        list[i].PMSignTime = dataPM[i].CreateTime.ToString("HH:mm") + " " + "早退";
                       
                    }
                }
                else   //没有出勤
                {
                    list[i].PMSignTime = "未打卡";
                }
            }
            #endregion


  以上是小编最近在忙的项目,上面的一些思维逻辑和需求给大家分享了一下,如果朋友没有想说的或者是一件可以给我留言。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值