Ejemplo n.º 1
0
        /// <summary>
        /// 分析某个员工对象一天的打卡数据
        /// </summary>
        /// <param name="infos">当天员工所有的打卡记录</param>
        /// <returns></returns>
        public static List <AnalysisOfDay> GetAnalysisOfDayList(List <AttendanceInfo> one_emp_month_infos, AnalysisOfMonth analysis_of_month)
        {
            List <AnalysisOfDay> one_emp_day_analysis_list = new List <AnalysisOfDay>();

            List <List <AttendanceInfo> > one_emp_day_infos_group = analysisUtil.GetSliceOfDayFromMonth(one_emp_month_infos.First().inout_time.Date, one_emp_month_infos);

            foreach (var one_emp_day_infos in one_emp_day_infos_group)
            {
                AnalysisOfDay analysis_result_of_one_day = GetAnalysisResultOfOneDay(one_emp_day_infos);
                one_emp_day_analysis_list.Add(analysis_result_of_one_day);
            }

            return(one_emp_day_analysis_list);
        }
Ejemplo n.º 2
0
        public static AnalysisOfDay GetAnalysisResultOfOneDay(List <AttendanceInfo> day_infos)
        {
            AnalysisOfDay analysis_of_day = new AnalysisOfDay();

            AttendanceInfo first_info = day_infos.First();
            AttendanceInfo last_info  = day_infos.Last();

            analysis_of_day.date     = first_info.inout_time.Date;
            analysis_of_day.week     = Convert.ToInt32(first_info.inout_time.DayOfWeek);
            analysis_of_day.card_id  = first_info.card_id;
            analysis_of_day.job_num  = first_info.job_num;
            analysis_of_day.emp_name = first_info.emp_name;
            analysis_of_day.first_tm = first_info.inout_time;
            analysis_of_day.last_tm  = last_info.inout_time;

            TimeSpan timespan = first_info.inout_time.TimeOfDay;

            analysis_of_day.first_hr = timespan.Minutes % 60 > 30 ? timespan.Hours + 1 : timespan.Hours;
            timespan = last_info.inout_time.TimeOfDay;
            analysis_of_day.last_hr = timespan.Minutes % 60 > 30 ? timespan.Hours + 1 : timespan.Hours;
            if (analysis_of_day.last_tm.Day > analysis_of_day.first_tm.Day)
            {
                analysis_of_day.last_hr += 24;
            }
            analysis_of_day.shift = analysisUtil.GetShift(analysis_of_day.first_hr);

            FirstAndLastPunchCardAnalysisResult result = analysisUtil.GetFirstAndLastPunchCardAnalysis(analysis_of_day.first_tm, analysis_of_day.last_tm, analysis_of_day.first_hr, analysis_of_day.last_hr, analysis_of_day.shift);

            analysis_of_day.punch_card_hour           = result.punch_card_hour;
            analysis_of_day.punch_card_time           = result.punch_card_time;
            analysis_of_day.punch_card_hour_compare   = result.punch_card_hour_compare;
            analysis_of_day.punch_card_minute_compare = result.punch_card_minute_compare;
            analysis_of_day.perfect             = result.perfect;
            analysis_of_day.half_late           = result.half_late;
            analysis_of_day.half_late_tm        = result.half_late_tm;
            analysis_of_day.late                = result.late;
            analysis_of_day.late_tm             = result.late_tm;
            analysis_of_day.half_leave_early    = result.half_leave_early;
            analysis_of_day.half_leave_early_tm = result.half_leave_early_tm;
            analysis_of_day.leave_early         = result.leave_early;
            analysis_of_day.leave_early_tm      = result.leave_early_tm;

            analysis_of_day.punch_card_count_total = day_infos.Count;
            analysis_of_day.punch_card_count_valid = analysisUtil.GetValidPunchCardCount(day_infos);


            return(analysis_of_day);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 入口方法
        /// </summary>
        public void AnalysisResultsToMySQL()
        {
            using (var context = new Context())
            {
                //获取一个月内所有员工的打卡信息
                List <AttendanceInfo> attendance_info_all_list = context.AttendanceInfo
                                                                 .OrderBy(x => x.inout_time)
                                                                 .AsNoTracking()
                                                                 .ToList();

                if (attendance_info_all_list.Count == 0)
                {
                    Console.WriteLine("数据表数据为空,停止分析");
                    return;
                }

                //确认数据表里的数据是同年同月的
                if (attendance_info_all_list.First().inout_time.Year != attendance_info_all_list.Last().inout_time.Year&& attendance_info_all_list.First().inout_time.Month != attendance_info_all_list.Last().inout_time.Month)
                {
                    Console.WriteLine("此数据表横跨多个月份,请提供一个月的员工打卡数据");
                    return;
                }

                int year  = attendance_info_all_list.First().inout_time.Year;
                int month = attendance_info_all_list.First().inout_time.Month;

                //获取工作日列表
                List <int> work_day_list = analysisUtil.GetWorkDayListOfMonth(year, month);
                //获取周末日期列表(排除周末加班)
                List <int> weekend_day_list = analysisUtil.GetWeekendDayListOfMonth(year, month);
                //获取所有不需要分析的人员
                List <SkipEmployee> skip_employee_list = context.SkipEmployee.AsNoTracking().ToList();

                AnalysisResult analysis_result = GetAnalysisResult(attendance_info_all_list, skip_employee_list, work_day_list, weekend_day_list);

                AnalysisOfMonth first_analysis_of_month = analysis_result.analysis_of_month.First();
                int             month_exist_count       = context.AnalysisOfMonth.Where(x => x.job_num == first_analysis_of_month.job_num && x.emp_name == first_analysis_of_month.emp_name && x.date == first_analysis_of_month.date).Count();
                if (month_exist_count == 0)
                {
                    context.AnalysisOfMonth.AddRange(analysis_result.analysis_of_month);
                    var month_count = context.SaveChanges();
                    Console.WriteLine("存储员工月度打卡分析记录:" + month_count + "条");
                }
                else
                {
                    Console.WriteLine("月度分析结果中的第一条在数据库中已存在,放弃录入");
                }

                AnalysisOfDay first_analysis_of_day = analysis_result.analysis_of_day.First();
                int           day_exist_count       = context.AnalysisOfDay.Where(x => x.job_num == first_analysis_of_day.job_num && x.emp_name == first_analysis_of_day.emp_name && x.date == first_analysis_of_day.date).Count();
                if (day_exist_count == 0)
                {
                    TimeSpan             zero = new TimeSpan(0, 0, 0);
                    List <AnalysisOfDay> a    = analysis_result.analysis_of_day.Where(x => x.half_late_tm < zero || x.late_tm < zero || x.half_leave_early_tm < zero || x.leave_early_tm < zero).ToList();
                    context.AnalysisOfDay.AddRange(a);

                    context.AnalysisOfDay.AddRange(analysis_result.analysis_of_day);
                    var day_count = context.SaveChanges();
                    Console.WriteLine("存储员工每天打卡分析记录:" + day_count + "条");
                }
                else
                {
                    Console.WriteLine("员工每天打卡记录分析结果中的第一条在数据库中已存在,放弃录入");
                }
            }
        }