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

181 lines
7.3 KiB
C#
Raw Normal View History

2021-04-30 10:28:37 +08:00
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))
2021-04-30 10:28:37 +08:00
{
SynchroSetService.PushProCollCompany(item.JTproCode);
2021-04-30 10:28:37 +08:00
//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);
2021-04-30 10:28:37 +08:00
}
}
}
}
catch (Exception ex)
{
StartMonitor();
ErrLogInfo.WriteLog(ex, "数据接口定时器", "RealNameMonitorService.AdUserInProcess");
}
}
#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)
{
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
2021-04-30 10:28:37 +08:00
}
}