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(); } } }