热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《移动端签到》——统计

最近小编在做一个签到统计项目,项目的大概需求是这样的:一个人每天可以打卡,上班的人需要每天最少打两次卡,上班打一次,下班打一次,但是一天可以打多次,只要打了多次卡,这时候问题就来,比如说一天一共

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

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

    

 public List 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 list = new List();
//List listComparePunch = new List();


foreach (var item in this.QueryData(sql))
{

list.Add(item);
}
return list;
}
catch (Exception ex)
{
throw ex;
}
}


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

   上午出勤情况统计 

#region 查询出勤情况
///
/// 查询出勤情况
///

///
public List 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 list = new List();


#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 {
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


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


推荐阅读
author-avatar
Yafei2702933480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有