《移动端签到》——统计

2024-08-27 20:48
文章标签 统计 移动 签到

本文主要是介绍《移动端签到》——统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

   后台代码统计某个月里的所有打卡记录,并按时间排序,找出这一个月中每一天的第一条数据。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 tWHERE  CnName='{1}' and  CreateTime BETWEEN '{2}' AND '{3}') aaWHERE 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


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

这篇关于《移动端签到》——统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1112739

相关文章

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程

《双系统电脑中把Ubuntu装进外接移动固态硬盘的全过程》:本文主要介绍如何在Windows11系统中使用VMware17创建虚拟机,并在虚拟机中安装Ubuntu22.04桌面版或Ubunt... 目录一、首先win11中安装vmware17二、磁盘分区三、保存四、使用虚拟机进行系统安装五、遇见的错误和解决

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Python重命名文件并移动到对应文件夹

《Python重命名文件并移动到对应文件夹》在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求,下面我们就来看看如何使用Python实现重命名文件并移动到对应文件夹吧... 目录检查并删除空文件夹1. 基本需求2. 实现代码解析3. 代码解释4. 代码执行结果5. 总结方法补充在

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量