using System.Linq; using System.Timers; using System.Configuration; using System; namespace BLL { public class RealNameMonitorService { #region 启动监视器 系统启动5分钟 /// /// 监视组件 /// private static Timer messageTimer; /// /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟 /// 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(); } } 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); messageTimer.Interval = 1000 * 60 * 30;// 60分钟 60000 * adTimeJ; messageTimer.Start(); } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 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.JTproCode)) { SynchroSetService.InsertRealNamePushLog(null, item.ProCode, "实名制定时器", "sucess", "200", item.ProName, "成功", null); SynchroSetService.PushProCollCompany(item.ProCode); SynchroSetService.PushAttendance(item.ProCode); SynchroSetService.updatePersonsExitTime(item.ProCode); } } } } catch (Exception ex) { StartMonitor(); ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess"); } } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 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"); } } #endregion #region 启动监视器 系统启动5分钟-实名制出入记录去重 /// /// 监视组件 /// private static Timer InOutmessageTimer; /// /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟 /// 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(); } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 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 #region 启动监视器 定时清理推送日志 /// /// 监视组件 /// private static Timer messageTimer1; /// /// 定时清理推送日志 /// public static void StartMonitorDeletePushLog() { int adTimeJ = 60 * 4; 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(); } } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 private static void DeletePushLog(object sender, ElapsedEventArgs e) { try { /// 3天推送实名制日志 var getPushLogs = Funs.DB.RealName_PushLog.Where(x => x.PushTime.Value.AddHours(6) < DateTime.Now); if (getPushLogs.Count() > 0) { Funs.DB.RealName_PushLog.DeleteAllOnSubmit(getPushLogs); Funs.DB.SubmitChanges(); } /// 3个月操作日志 var getSys_Logs = Funs.DB.Sys_Log.Where(x => x.OperationTime.Value.AddDays(15) < DateTime.Now); if (getSys_Logs.Count() > 0) { Funs.DB.Sys_Log.DeleteAllOnSubmit(getSys_Logs); Funs.DB.SubmitChanges(); } /// 1个月推送消息日志 var getSys_HttpLogs = Funs.DB.Sys_HttpLog.Where(x => x.LogTime.Value.AddDays(15) < DateTime.Now); if (getSys_HttpLogs.Count() > 0) { Funs.DB.Sys_HttpLog.DeleteAllOnSubmit(getSys_HttpLogs); Funs.DB.SubmitChanges(); } } catch (Exception ex) { } } #endregion #region 启动监视器 定时清理推送日志 /// /// 监视组件 /// private static Timer messageTimer2; /// /// 定时清理推送日志 /// 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(); } } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 private static void CleanAttendance(object sender, ElapsedEventArgs e) { try { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { /// 清理实名制未同步历史数据 var getLastList = from x in db.SitePerson_PersonInOutNow where x.ChangeTime <= DateTime.Now.AddHours(-48) select x; if (getLastList.Count() > 0) { 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) { if (item.InOrOut == "进门") { 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(); } } else { 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(); } } } } } using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { var getVRecords = from x in db.T_d_validcardevent where x.RecordDateTime.Value.AddDays(1) < DateTime.Now select x; if (getVRecords.Count() > 0) { foreach (var item in getVRecords) { if (item.InOrOut == 1) { 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(); } } else { 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(); } } } } } } catch (Exception ex) { } } #endregion #region 启动监视器 系统启动5分钟 /// /// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟 /// 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(); } } /// /// 流程确认 定时执行 系统启动5分钟 /// /// Timer组件 /// 事件参数 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 } }