| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | using System.Linq; | 
					
						
							|  |  |  |  | using System.Timers; | 
					
						
							|  |  |  |  | using System.Configuration; | 
					
						
							|  |  |  |  | using System; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace BLL | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public class RealNameMonitorService | 
					
						
							|  |  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |         #region 启动监视器 系统启动5分钟 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监视组件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |         private static Timer messageTimer; | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |         public static void StartMonitor() | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2025-04-12 11:52:50 +08:00
										 |  |  |  |             int adTimeJ = Funs.GetNewInt(ConfigurationManager.AppSettings["Intervaltime"]) ?? 60; | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |             //var getSynchroSet = Funs.DB.RealName_SynchroSet.FirstOrDefault(); | 
					
						
							|  |  |  |  |             //if (getSynchroSet != null && getSynchroSet.Intervaltime.HasValue) | 
					
						
							|  |  |  |  |             //{ | 
					
						
							|  |  |  |  |             //    adTimeJ = getSynchroSet.Intervaltime.Value; | 
					
						
							|  |  |  |  |             //} | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |             if (messageTimer != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer.Stop(); | 
					
						
							|  |  |  |  |                 messageTimer.Dispose(); | 
					
						
							|  |  |  |  |                 messageTimer = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (adTimeJ > 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer = new Timer | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     AutoReset = true | 
					
						
							|  |  |  |  |                 }; | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 messageTimer.Elapsed += new ElapsedEventHandler(AdUserInProcess); | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 messageTimer.Interval = 1000 * 60 * adTimeJ;// 60分钟 60000 * adTimeJ; | 
					
						
							|  |  |  |  |                 messageTimer.Start(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-17 14:44:18 +08:00
										 |  |  |  |         public static void StartUpdateSitePerson() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             //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; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             messageTimer = new Timer | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 AutoReset = true | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  |             messageTimer.Elapsed += new ElapsedEventHandler(UpdateSitePerson); | 
					
						
							| 
									
										
										
										
											2025-04-09 18:54:44 +08:00
										 |  |  |  |             messageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ; | 
					
						
							| 
									
										
										
										
											2024-07-17 14:44:18 +08:00
										 |  |  |  |             messageTimer.Start(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |         private static void AdUserInProcess(object sender, ElapsedEventArgs e) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 SynchroSetService.PushCollCompany(); | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 var getRProjects = from x in Funs.DB.RealName_Project | 
					
						
							|  |  |  |  |                                    select x; | 
					
						
							|  |  |  |  |                 if (getRProjects.Count() > 0) | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                     foreach (var item in getRProjects) | 
					
						
							|  |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-06-06 09:20:51 +08:00
										 |  |  |  |                         var getSynchroSet = Funs.DB.RealName_SynchroSet.FirstOrDefault(x => x.ProCode == item.ProCode); | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                         if (getSynchroSet != null && !string.IsNullOrEmpty(item.JTproCode)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-06-06 09:20:51 +08:00
										 |  |  |  |                             SynchroSetService.InsertRealNamePushLog(null, item.ProCode, "实名制定时器", "sucess", "200", item.ProName, "成功", null); | 
					
						
							|  |  |  |  |                             SynchroSetService.PushProCollCompany(item.ProCode); | 
					
						
							|  |  |  |  |                             SynchroSetService.PushAttendance(item.ProCode); | 
					
						
							| 
									
										
										
										
											2025-04-12 11:52:50 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                             UpdateSitePerson(null, null); | 
					
						
							| 
									
										
										
										
											2025-04-11 18:55:24 +08:00
										 |  |  |  |                             //SynchroSetService.updatePersonsExitTime(item.ProCode); | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 StartMonitor(); | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |                 ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-07-17 14:44:18 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							|  |  |  |  |         private static void UpdateSitePerson(object sender, ElapsedEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     var persons = from x in db.SitePerson_Person | 
					
						
							|  |  |  |  |                                   join y in db.Base_Project on x.ProjectId equals y.ProjectId | 
					
						
							|  |  |  |  |                                   join z in db.RealName_Project on y.JTProjectCode equals z.ProCode | 
					
						
							|  |  |  |  |                                   join p in db.Project_ProjectUnit on new { x.UnitId, x.ProjectId } equals new { p.UnitId, p.ProjectId } | 
					
						
							|  |  |  |  |                                   join v in db.ProjectData_TeamGroup on x.TeamGroupId equals v.TeamGroupId | 
					
						
							|  |  |  |  |                                   join w in db.Base_WorkPost on x.WorkPostId equals w.WorkPostId | 
					
						
							|  |  |  |  |                                   where z.JTproCode != null && x.IsCardNoOK == true && v.TeamId.HasValue && !x.OutTime.HasValue | 
					
						
							|  |  |  |  |                                   && p.IsSynchro == true | 
					
						
							|  |  |  |  |                                   select x; | 
					
						
							|  |  |  |  |                     var personInOutNows = from x in db.RealName_PersonInOutNow select x; | 
					
						
							|  |  |  |  |                     foreach (var person in persons) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         var personInOutNow = personInOutNows.OrderByDescending(x => x.ChangeTime).FirstOrDefault(); | 
					
						
							|  |  |  |  |                         if (personInOutNow == null) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             person.OutTime = DateTime.Now; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                         else if (personInOutNow.ChangeTime < DateTime.Now.AddDays(-3)) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             person.OutTime = personInOutNow.ChangeTime; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     db.SubmitChanges(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 StartMonitor(); | 
					
						
							|  |  |  |  |                 ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         #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); | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |             InOutmessageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ; | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |             InOutmessageTimer.Start(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							|  |  |  |  |         private static void PersonInOutProcess(object sender, ElapsedEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |             int delCount = 0; | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 var result = (from x in Funs.DB.RealName_PersonInOutNow | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |                               select new | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |                               { | 
					
						
							|  |  |  |  |                                   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; | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                     var getInRecords = getDateRecords.Where(x => x.IsIn == true); | 
					
						
							|  |  |  |  |                     if (getInRecords.Count() > 1) | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |                         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) | 
					
						
							| 
									
										
										
										
											2024-07-17 14:44:18 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |                         return; | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2021-07-19 10:41:58 +08:00
										 |  |  |  |                 if (BLL.Funs.DBList.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     BLL.Funs.DBList.Remove(System.Threading.Thread.CurrentThread.ManagedThreadId); | 
					
						
							|  |  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-07-14 19:57:50 +08:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 启动监视器  定时清理推送日志 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监视组件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         private static Timer messageTimer1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 定时清理推送日志 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public static void StartMonitorDeletePushLog() | 
					
						
							|  |  |  |  |         { | 
					
						
							| 
									
										
										
										
											2024-07-17 14:44:18 +08:00
										 |  |  |  |             int adTimeJ = 60 * 4; | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |             if (messageTimer1 != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer1.Stop(); | 
					
						
							|  |  |  |  |                 messageTimer1.Dispose(); | 
					
						
							|  |  |  |  |                 messageTimer1 = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (adTimeJ > 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer1 = new Timer | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     AutoReset = true | 
					
						
							|  |  |  |  |                 }; | 
					
						
							|  |  |  |  |                 messageTimer1.Elapsed += new ElapsedEventHandler(DeletePushLog); | 
					
						
							|  |  |  |  |                 messageTimer1.Interval = 1000 * 60 * adTimeJ;// 60分钟 60000 * adTimeJ; | 
					
						
							|  |  |  |  |                 messageTimer1.Start(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							|  |  |  |  |         private static void DeletePushLog(object sender, ElapsedEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 /// 3天推送实名制日志 | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 var getPushLogs = Funs.DB.RealName_PushLog.Where(x => x.PushTime.Value.AddHours(6) < DateTime.Now); | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                 if (getPushLogs.Count() > 0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Funs.DB.RealName_PushLog.DeleteAllOnSubmit(getPushLogs); | 
					
						
							|  |  |  |  |                     Funs.DB.SubmitChanges(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 /// 3个月操作日志 | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 var getSys_Logs = Funs.DB.Sys_Log.Where(x => x.OperationTime.Value.AddDays(15) < DateTime.Now); | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                 if (getSys_Logs.Count() > 0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Funs.DB.Sys_Log.DeleteAllOnSubmit(getSys_Logs); | 
					
						
							|  |  |  |  |                     Funs.DB.SubmitChanges(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 /// 1个月推送消息日志 | 
					
						
							| 
									
										
										
										
											2022-06-01 14:27:42 +08:00
										 |  |  |  |                 var getSys_HttpLogs = Funs.DB.Sys_HttpLog.Where(x => x.LogTime.Value.AddDays(15) < DateTime.Now); | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                 if (getSys_HttpLogs.Count() > 0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     Funs.DB.Sys_HttpLog.DeleteAllOnSubmit(getSys_HttpLogs); | 
					
						
							|  |  |  |  |                     Funs.DB.SubmitChanges(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 启动监视器  定时清理推送日志 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 监视组件 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         private static Timer messageTimer2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 定时清理推送日志 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public static void StartMonitorCleanAttendance() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             int adTimeJ = 60 * 12; | 
					
						
							|  |  |  |  |             if (messageTimer2 != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer2.Stop(); | 
					
						
							|  |  |  |  |                 messageTimer2.Dispose(); | 
					
						
							|  |  |  |  |                 messageTimer2 = null; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (adTimeJ > 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 messageTimer2 = new Timer | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     AutoReset = true | 
					
						
							|  |  |  |  |                 }; | 
					
						
							|  |  |  |  |                 messageTimer2.Elapsed += new ElapsedEventHandler(CleanAttendance); | 
					
						
							|  |  |  |  |                 messageTimer2.Interval = 1000 * 60 * adTimeJ;// 60分钟 60000 * adTimeJ; | 
					
						
							|  |  |  |  |                 messageTimer2.Start(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							|  |  |  |  |         private static void CleanAttendance(object sender, ElapsedEventArgs e) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                     /// 清理实名制未同步历史数据 | 
					
						
							|  |  |  |  |                     var getLastList = from x in db.SitePerson_PersonInOutNow | 
					
						
							|  |  |  |  |                                       where x.ChangeTime <= DateTime.Now.AddHours(-48) | 
					
						
							|  |  |  |  |                                       select x; | 
					
						
							|  |  |  |  |                     if (getLastList.Count() > 0) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                         db.SitePerson_PersonInOutNow.DeleteAllOnSubmit(getLastList); | 
					
						
							|  |  |  |  |                         db.SubmitChanges(); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     /// 清理出入记录 | 
					
						
							|  |  |  |  |                     var getRecords = from x in db.T_d_facerecord where x.DateTimeRecord.Value.AddDays(1) < DateTime.Now select x; | 
					
						
							|  |  |  |  |                     if (getRecords.Count() > 0) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         foreach (var item in getRecords) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                             if (item.InOrOut == "进门") | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                                 var getDelRecordsIn = from x in db.T_d_facerecord | 
					
						
							|  |  |  |  |                                                       where x.ProjectId == item.ProjectId && x.EmployNO == item.EmployNO && x.InOrOut == item.InOrOut | 
					
						
							|  |  |  |  |                                                       && x.DateTimeRecord.Value.Year == item.DateTimeRecord.Value.Year | 
					
						
							|  |  |  |  |                                                       && x.DateTimeRecord.Value.Month == item.DateTimeRecord.Value.Month | 
					
						
							|  |  |  |  |                                                       && x.DateTimeRecord.Value.Day == item.DateTimeRecord.Value.Day | 
					
						
							|  |  |  |  |                                                       && x.DateTimeRecord > item.DateTimeRecord | 
					
						
							|  |  |  |  |                                                       select x; | 
					
						
							|  |  |  |  |                                 if (getDelRecordsIn.Count() > 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     db.T_d_facerecord.DeleteAllOnSubmit(getDelRecordsIn); | 
					
						
							|  |  |  |  |                                     db.SubmitChanges(); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                             else | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                                 var getDelRecordsOut = from x in db.T_d_facerecord | 
					
						
							|  |  |  |  |                                                        where x.ProjectId == item.ProjectId && x.EmployNO == item.EmployNO && x.InOrOut == item.InOrOut | 
					
						
							|  |  |  |  |                                                        && x.DateTimeRecord.Value.Year == item.DateTimeRecord.Value.Year | 
					
						
							|  |  |  |  |                                                        && x.DateTimeRecord.Value.Month == item.DateTimeRecord.Value.Month | 
					
						
							|  |  |  |  |                                                        && x.DateTimeRecord.Value.Day == item.DateTimeRecord.Value.Day | 
					
						
							|  |  |  |  |                                                        && x.DateTimeRecord < item.DateTimeRecord | 
					
						
							|  |  |  |  |                                                        select x; | 
					
						
							|  |  |  |  |                                 if (getDelRecordsOut.Count() > 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     db.T_d_facerecord.DeleteAllOnSubmit(getDelRecordsOut); | 
					
						
							|  |  |  |  |                                     db.SubmitChanges(); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                     var getVRecords = from x in db.T_d_validcardevent | 
					
						
							|  |  |  |  |                                       where x.RecordDateTime.Value.AddDays(1) < DateTime.Now | 
					
						
							|  |  |  |  |                                       select x; | 
					
						
							|  |  |  |  |                     if (getVRecords.Count() > 0) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                     { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                         foreach (var item in getVRecords) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                         { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                             if (item.InOrOut == 1) | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                                 var getDelVRecordsIn = from x in db.T_d_validcardevent | 
					
						
							|  |  |  |  |                                                        where x.ProjectId == item.ProjectId && x.IDCardNo == item.IDCardNo && x.InOrOut == item.InOrOut | 
					
						
							|  |  |  |  |                                                        && x.RecordDateTime.Value.Year == item.RecordDateTime.Value.Year | 
					
						
							|  |  |  |  |                                                        && x.RecordDateTime.Value.Month == item.RecordDateTime.Value.Month | 
					
						
							|  |  |  |  |                                                        && x.RecordDateTime.Value.Day == item.RecordDateTime.Value.Day | 
					
						
							|  |  |  |  |                                                        && x.RecordDateTime > item.RecordDateTime | 
					
						
							|  |  |  |  |                                                        select x; | 
					
						
							|  |  |  |  |                                 if (getDelVRecordsIn.Count() > 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     db.T_d_validcardevent.DeleteAllOnSubmit(getDelVRecordsIn); | 
					
						
							|  |  |  |  |                                     db.SubmitChanges(); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                             else | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             { | 
					
						
							| 
									
										
										
										
											2022-06-16 17:34:24 +08:00
										 |  |  |  |                                 var getDelVRecordsOut = from x in db.T_d_validcardevent | 
					
						
							|  |  |  |  |                                                         where x.ProjectId == item.ProjectId && x.IDCardNo == item.IDCardNo && x.InOrOut == item.InOrOut | 
					
						
							|  |  |  |  |                                                         && x.RecordDateTime.Value.Year == item.RecordDateTime.Value.Year | 
					
						
							|  |  |  |  |                                                         && x.RecordDateTime.Value.Month == item.RecordDateTime.Value.Month | 
					
						
							|  |  |  |  |                                                         && x.RecordDateTime.Value.Day == item.RecordDateTime.Value.Day | 
					
						
							|  |  |  |  |                                                         && x.RecordDateTime < item.RecordDateTime | 
					
						
							|  |  |  |  |                                                         select x; | 
					
						
							|  |  |  |  |                                 if (getDelVRecordsOut.Count() > 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     db.T_d_validcardevent.DeleteAllOnSubmit(getDelVRecordsOut); | 
					
						
							|  |  |  |  |                                     db.SubmitChanges(); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							| 
									
										
										
										
											2022-04-24 18:29:54 +08:00
										 |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							| 
									
										
										
										
											2022-09-28 15:14:24 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         #region 启动监视器 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         public static void StartMonitorProject() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     var getRProjects = from x in db.RealName_Project | 
					
						
							|  |  |  |  |                                        select x; | 
					
						
							|  |  |  |  |                     if (getRProjects.Count() > 0) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         foreach (var item in getRProjects) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             var getSynchroSet = db.RealName_SynchroSet.FirstOrDefault(x => x.ProCode == item.ProCode); | 
					
						
							|  |  |  |  |                             if (getSynchroSet != null && !string.IsNullOrEmpty(item.JTproCode)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 int adTimeJ = Funs.GetNewInt(ConfigurationManager.AppSettings["Intervaltime"]) ?? 30; | 
					
						
							|  |  |  |  |                                 Timer messageTimerProject = new Timer(); | 
					
						
							|  |  |  |  |                                 if (messageTimerProject != null) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     messageTimerProject.Stop(); | 
					
						
							|  |  |  |  |                                     messageTimerProject.Dispose(); | 
					
						
							|  |  |  |  |                                     messageTimerProject = null; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  |                                 if (adTimeJ > 0) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     messageTimerProject = new Timer | 
					
						
							|  |  |  |  |                                     { | 
					
						
							|  |  |  |  |                                         AutoReset = true | 
					
						
							|  |  |  |  |                                     }; | 
					
						
							|  |  |  |  |                                     messageTimerProject.Elapsed += (sender, args) => AdUserInProcess(sender, item.ProCode); | 
					
						
							|  |  |  |  |                                     //messageTimer.Elapsed += new ElapsedEventHandler(AdUserInProcess); | 
					
						
							|  |  |  |  |                                     messageTimerProject.Interval = 1000 * 60 * 5;// adTimeJ;// 60分钟 60000 * adTimeJ; | 
					
						
							|  |  |  |  |                                     messageTimerProject.Start(); | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 StartMonitorProject(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /// <summary> | 
					
						
							|  |  |  |  |         /// 流程确认 定时执行 系统启动5分钟 | 
					
						
							|  |  |  |  |         /// </summary> | 
					
						
							|  |  |  |  |         /// <param name="sender">Timer组件</param> | 
					
						
							|  |  |  |  |         /// <param name="e">事件参数</param> | 
					
						
							|  |  |  |  |         public static void AdUserInProcess(object sender, string ProCode) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             try | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 SynchroSetService.PushCollCompany(); | 
					
						
							|  |  |  |  |                 if (!string.IsNullOrEmpty(ProCode)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     SynchroSetService.InsertRealNamePushLog(null, ProCode, "实名制定时器", "sucess", "200", ProCode, "成功", null); | 
					
						
							|  |  |  |  |                     SynchroSetService.PushProCollCompany(ProCode); | 
					
						
							|  |  |  |  |                     SynchroSetService.PushAttendance(ProCode); | 
					
						
							|  |  |  |  |                     SynchroSetService.updatePersonsExitTime(ProCode); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             catch (Exception ex) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess"); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         #endregion | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-30 10:28:37 +08:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  | } |