using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
namespace FangYar.WebUI.WebCommon
{
///
/// 后台线程处理程序
///
public class WebThreadUtil
{
///
/// 后台线程开关控制:true、线程正常运行;false、线程停止;
///
public static bool threadSwitch = true;
///
/// 缓存当前日期是否已经执行
///
private static Dictionary dicDayCache = new Dictionary();
///
/// 初始化启动线程
///
public static void InitStart()
{
new Thread(() =>
{
try
{
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = "初始化后台线程并运行", msgType = FangYar.Common.EnumLogMsgTypeEnum.Info, path = "ThreadLog" });
while (threadSwitch)
{
try
{
// 获取当前时间
var dtm = DateTime.Now;
var dayStr = dtm.ToString("yyyy-MM-dd");
//判断当天任务是否已经执行
if (!dicDayCache.Keys.Contains(dayStr))
{
//当天任务尚未执行
// 凌晨三点
if (dtm.Hour == 03)
{
// 执行三点数据更新任务
new Thread(() =>
{
try
{
// 更新西藏总队机关勤务大队车辆状态
string sqlStr = " UPDATE tbl_sys_car SET ISAPPLY='0',ISRUN='0' WHERE ORG_ID='734389c7ae364584aea9918693bba3de' and DEPT_ID='0192a6228fca4ed2bea225ad3bbf0dc9' ";
var num = FangYar.Common.MySqlHelper.Execute(sqlStr);
string str = "更新西藏总队车辆状态信息Sql: " + sqlStr;
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo()
{
message = str,
msgType = FangYar.Common.EnumLogMsgTypeEnum.Info,
path = "ThreadLog"
});
str = "更新西藏总队车辆状态更新数据: " + num;
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo()
{
message = str,
msgType = FangYar.Common.EnumLogMsgTypeEnum.Info,
path = "ThreadLog"
});
dicDayCache.Add(dayStr, true);
}
catch (Exception ex)
{
string str = "凌晨三点定时任务执行异常:" + ex;
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo()
{
message = str,
msgType = FangYar.Common.EnumLogMsgTypeEnum.Error,
path = "ThreadLog"
});
}
}).Start();
}
}
}
catch (Exception ex)
{
string str = "后台线程内部循环处理异常:" + ex;
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = str, msgType = FangYar.Common.EnumLogMsgTypeEnum.Error, path = "ThreadLog" });
}
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = "后台线程运行", msgType = FangYar.Common.EnumLogMsgTypeEnum.Info, path = "ThreadLog" });
// 间隔一分钟执行
Thread.Sleep(1000 * 60 * 10);
}
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = "后台线程退出", msgType = FangYar.Common.EnumLogMsgTypeEnum.Info, path = "ThreadLog" });
}
catch (Exception ex)
{
string str = "后台线程处理异常:" + ex;
FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = str, msgType = FangYar.Common.EnumLogMsgTypeEnum.Error, path = "ThreadLog" });
}
}).Start();
}
}
}