372 lines
16 KiB
C#
372 lines
16 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.JTproCode);
|
|
if (getSynchroSet != null && !string.IsNullOrEmpty(item.JTproCode))
|
|
{
|
|
SynchroSetService.PushProCollCompany(item.JTproCode);
|
|
//SynchroSetService.PushCollTeam(item.ProCode);
|
|
//SynchroSetService.getCollTeam(item.ProCode);
|
|
//SynchroSetService.PushPersons(Const.BtnAdd, item.JTproCode, null);
|
|
//SynchroSetService.PushPersons(Const.BtnModify, item.JTproCode, null);
|
|
SynchroSetService.PushAttendance(item.JTproCode);
|
|
SynchroSetService.updatePersonsExitTime(item.JTproCode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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
|
|
{
|
|
/// 清理出入记录
|
|
var getRecords = from x in Funs.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 Funs.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)
|
|
{
|
|
Funs.DB.T_d_facerecord.DeleteAllOnSubmit(getDelRecordsIn);
|
|
Funs.DB.SubmitChanges();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var getDelRecordsOut = from x in Funs.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)
|
|
{
|
|
Funs.DB.T_d_facerecord.DeleteAllOnSubmit(getDelRecordsOut);
|
|
Funs.DB.SubmitChanges();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var getVRecords = from x in Funs.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 Funs.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)
|
|
{
|
|
Funs.DB.T_d_validcardevent.DeleteAllOnSubmit(getDelVRecordsIn);
|
|
Funs.DB.SubmitChanges();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var getDelVRecordsOut = from x in Funs.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)
|
|
{
|
|
Funs.DB.T_d_validcardevent.DeleteAllOnSubmit(getDelVRecordsOut);
|
|
Funs.DB.SubmitChanges();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|