180 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System.Linq;
 | |
| using System.Timers;
 | |
| using System.Configuration;
 | |
| using System;
 | |
| 
 | |
| namespace BLL
 | |
| {
 | |
|     public class RealNameMonitorService
 | |
|     {
 | |
|         #region 启动监视器 系统启动5分钟
 | |
|         /// <summary>
 | |
|         /// 监视组件
 | |
|         /// </summary>
 | |
|         private static Timer messageTimer;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟
 | |
|         /// </summary>
 | |
|         public static void StartMonitor()
 | |
|         {
 | |
|             int adTimeJ = Funs.GetNewInt(ConfigurationManager.AppSettings["Intervaltime"]) ?? 30;
 | |
|             //var getSynchroSet = Funs.DB.RealName_SynchroSet.FirstOrDefault();
 | |
|             //if (getSynchroSet != null && getSynchroSet.Intervaltime.HasValue)
 | |
|             //{
 | |
|             //    adTimeJ = getSynchroSet.Intervaltime.Value;
 | |
|             //}
 | |
|             if (messageTimer != null)
 | |
|             {
 | |
|                 messageTimer.Stop();
 | |
|                 messageTimer.Dispose();
 | |
|                 messageTimer = null;
 | |
|             }
 | |
|             if (adTimeJ > 0)
 | |
|             {
 | |
|                 messageTimer = new Timer
 | |
|                 {
 | |
|                     AutoReset = true
 | |
|                 };
 | |
|                 messageTimer.Elapsed += new ElapsedEventHandler(AdUserInProcess);
 | |
|                 messageTimer.Interval = 1000 * 60 * adTimeJ;// 60分钟 60000 * adTimeJ;
 | |
|                 messageTimer.Start();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 流程确认 定时执行 系统启动5分钟
 | |
|         /// </summary>
 | |
|         /// <param name="sender">Timer组件</param>
 | |
|         /// <param name="e">事件参数</param>
 | |
|         private static void AdUserInProcess(object sender, ElapsedEventArgs e)
 | |
|         {
 | |
|             try
 | |
|             {
 | |
|                 SynchroSetService.PushCollCompany();
 | |
|                 var getRProjects = from x in Funs.DB.RealName_Project
 | |
|                                    select x;
 | |
|                 if (getRProjects.Count() > 0)
 | |
|                 {
 | |
|                     foreach (var item in getRProjects)
 | |
|                     {
 | |
|                         var getSynchroSet = Funs.DB.RealName_SynchroSet.FirstOrDefault(x => x.ProCode == item.ProCode);
 | |
|                         if (getSynchroSet != null && !string.IsNullOrEmpty(item.ProCode))
 | |
|                         {
 | |
|                             SynchroSetService.PushProCollCompany(item.ProCode);
 | |
|                             //SynchroSetService.PushCollTeam(item.ProCode);
 | |
|                             //SynchroSetService.getCollTeam(item.ProCode);
 | |
|                             //SynchroSetService.PushPersons(Const.BtnAdd, item.ProCode);
 | |
|                             //SynchroSetService.PushPersons(Const.BtnModify, item.ProCode);
 | |
|                             SynchroSetService.PushAttendance(item.ProCode);
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 StartMonitor();
 | |
|                 ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess");
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region 启动监视器 系统启动5分钟-实名制出入记录去重
 | |
|         /// <summary>
 | |
|         /// 监视组件
 | |
|         /// </summary>
 | |
|         private static Timer InOutmessageTimer;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟
 | |
|         /// </summary>
 | |
|         public static void StartInOutMonitor()
 | |
|         {
 | |
|             if (InOutmessageTimer != null)
 | |
|             {
 | |
|                 InOutmessageTimer.Stop();
 | |
|                 InOutmessageTimer.Dispose();
 | |
|                 InOutmessageTimer = null;
 | |
|             }
 | |
| 
 | |
|             InOutmessageTimer = new Timer
 | |
|             {
 | |
|                 AutoReset = true
 | |
|             };
 | |
|             InOutmessageTimer.Elapsed += new ElapsedEventHandler(PersonInOutProcess);
 | |
|             InOutmessageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ;
 | |
|             InOutmessageTimer.Start();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 流程确认 定时执行 系统启动5分钟
 | |
|         /// </summary>
 | |
|         /// <param name="sender">Timer组件</param>
 | |
|         /// <param name="e">事件参数</param>
 | |
|         private static void PersonInOutProcess(object sender, ElapsedEventArgs e)
 | |
|         {
 | |
|             int delCount = 0;
 | |
|             try
 | |
|             {
 | |
|                 var result = (from x in Funs.DB.RealName_PersonInOutNow
 | |
|                               select new
 | |
|                               {
 | |
|                                   x.ProjectId,
 | |
|                                   date = x.ChangeTime.Value.Date,
 | |
|                                   x.IdcardNumber,
 | |
|                                   x.IsIn
 | |
|                               }).Distinct();
 | |
|                 foreach (var item in result)
 | |
|                 {
 | |
|                     var getDateRecords = from x in Funs.DB.RealName_PersonInOutNow
 | |
|                                          where x.ProjectId == item.ProjectId && x.ChangeTime.Value >= item.date.Date && x.ChangeTime.Value < item.date.Date.AddDays(1)
 | |
|                                          && x.IdcardNumber == item.IdcardNumber
 | |
|                                          select x;
 | |
| 
 | |
|                     var getInRecords = getDateRecords.Where(x => x.IsIn == true);
 | |
|                     if (getInRecords.Count() > 1)
 | |
|                     {
 | |
|                         DateTime? minChangeTime = getInRecords.Min(x => x.ChangeTime);
 | |
|                         var getDeleteInR = from x in getInRecords
 | |
|                                            where x.ChangeTime != minChangeTime
 | |
|                                            select x;
 | |
|                         if (getDeleteInR.Count() > 0)
 | |
|                         {
 | |
|                             delCount += getDeleteInR.Count();
 | |
|                             Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteInR);
 | |
|                             Funs.DB.SubmitChanges();
 | |
|                         }
 | |
|                     }
 | |
|                     var getOutRecords = getDateRecords.Where(x => x.IsIn == false);
 | |
|                     if (getOutRecords.Count() > 1)
 | |
|                     {
 | |
|                         DateTime? maxChangeTime = getOutRecords.Max(x => x.ChangeTime);
 | |
|                         var getDeleteOutR = from x in getOutRecords
 | |
|                                             where x.ChangeTime != maxChangeTime
 | |
|                                             select x;
 | |
|                         if (getDeleteOutR.Count() > 0)
 | |
|                         {
 | |
|                             delCount += getDeleteOutR.Count();
 | |
|                             Funs.DB.RealName_PersonInOutNow.DeleteAllOnSubmit(getDeleteOutR);
 | |
|                             Funs.DB.SubmitChanges();
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     if (delCount >= 10000)
 | |
|                     {                        
 | |
|                         return;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 if (BLL.Funs.DBList.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId))
 | |
|                 {
 | |
|                     BLL.Funs.DBList.Remove(System.Threading.Thread.CurrentThread.ManagedThreadId);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| }
 |