《移动端签到》——统计

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

相关文章

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

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

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

hdu4267区间统计

题意:给一些数,有两种操作,一种是在[a,b] 区间内,对(i - a)% k == 0 的加value,另一种操作是询问某个位置的值。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import

hdu4417区间统计

给你一个数列{An},然后有m次查询,每次查询一段区间 [l,r] <= h 的值的个数。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRead

hdu3333区间统计

题目大意:求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo