using System;
using System.Timers;
using System.DirectoryServices;
namespace BLL
{
public class ADDataInService
{
#region 启动监视器 系统启动5分钟
///
/// 监视组件
///
private static Timer messageTimer;
///
/// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟
///
public static void StartMonitor()
{
var adomain = ADomainService.getADomain();
if (adomain != null && adomain.Intervaltime.HasValue)
{
int adTimeJ = adomain.Intervaltime ?? 600;
if (messageTimer != null)
{
messageTimer.Stop();
messageTimer.Dispose();
messageTimer = null;
}
messageTimer = new Timer
{
AutoReset = true
};
messageTimer.Elapsed += new ElapsedEventHandler(AdUserInProcess);
messageTimer.Interval = 60000 * adTimeJ;
messageTimer.Start();
}
}
///
/// 流程确认 定时执行 系统启动5分钟
///
/// Timer组件
/// 事件参数
private static void AdUserInProcess(object sender, ElapsedEventArgs e)
{
if (messageTimer != null)
{
messageTimer.Stop();
}
BLL.ADomainService.ADomainUserIn();
if (messageTimer != null)
{
messageTimer.Dispose();
messageTimer = null;
}
}
#endregion
#region 启动监视器 定时0:05执行
///
/// 监视组件
///
private static Timer messageTimerEve;
///
/// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 定时
///
public static void StartMonitorEve()
{
if (messageTimerEve != null)
{
messageTimerEve.Stop();
messageTimerEve.Dispose();
messageTimerEve = null;
}
messageTimerEve = new Timer
{
AutoReset = true
};
messageTimerEve.Elapsed += new ElapsedEventHandler(ColligateFormConfirmProcessEve);
messageTimerEve.Interval = GetMessageTimerEveNextInterval();
messageTimerEve.Start();
}
///
/// 流程确认 定时执行 定时00:05 执行
///
/// Timer组件
/// 事件参数
private static void ColligateFormConfirmProcessEve(object sender, ElapsedEventArgs e)
{
try
{
if (messageTimerEve != null)
{
messageTimerEve.Stop();
}
BLL.ADomainService.ADomainUserIn();
}
catch (Exception ex)
{
ErrLogInfo.WriteLog("获取AD域", ex);
}
finally
{
messageTimerEve.Interval = GetMessageTimerEveNextInterval();
messageTimerEve.Start();
}
}
///
/// 计算MessageTimerEve定时器的执行间隔
///
/// 执行间隔
private static double GetMessageTimerEveNextInterval()
{
double returnValue = 0;
TimeSpan curentTime = DateTime.Now.TimeOfDay;
int hour = 10;
//if (!String.IsNullOrEmpty(Funs.AdTimeD))
//{
// hour = int.Parse(Funs.AdTimeD);
//}
TimeSpan triggerTime = new TimeSpan(hour, 07, 0);
if (curentTime > triggerTime)
{
// 超过了执行时间
returnValue = (new TimeSpan(23, 59, 59) - curentTime + triggerTime.Add(new TimeSpan(0, 0, 1))).TotalMilliseconds;
}
else
{
returnValue = (triggerTime - curentTime).TotalMilliseconds;
}
if (returnValue <= 0)
{
// 误差纠正
returnValue = 1;
}
return returnValue;
}
#endregion
}
}