CNCEC_SUBQHSE_WUHUAN/SGGL/BLL/ZHGL/RealName/RealNameMonitorService.cs

526 lines
23 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();
}
}
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();
}
/// <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.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");
}
}
/// <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");
}
}
#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
#region
/// <summary>
/// 监视组件
/// </summary>
private static Timer messageTimer1;
/// <summary>
/// 定时清理推送日志
/// </summary>
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();
}
}
/// <summary>
/// 流程确认 定时执行 系统启动5分钟
/// </summary>
/// <param name="sender">Timer组件</param>
/// <param name="e">事件参数</param>
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
/// <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
{
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
/// <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
}
}