using Ninject; using System; using System.Collections.Generic; using WX.CRM.IBLL.Wx; using WX.CRM.WebHelper.UtilityModel; namespace WX.CRM.WebHelper.DoItems { public class WxXinUnlineNotice : IPopupMessage { private IWX_ALIVEIMEI _allocateRes; #region 单例 private static volatile WxXinUnlineNotice instance = null; private WxXinUnlineNotice() { _allocateRes = Infrastructure.NinjectControllerFactory.ninjectKernel.Get(); } // Lock对象,线程安全所用 private static object locked = new Object(); public static WxXinUnlineNotice Instance { get { if (instance == null) { lock (locked) { if (instance == null) instance = new WxXinUnlineNotice(); } } return instance; } } #endregion public string GetUrl() { return @"../WeiXin/WorkAccount/AliveIndex";// 分配资源提醒 } private Boolean NeedRefresh = true; private DateTime LastLoadTime = DateTime.Now; Dictionary UserRes = new Dictionary(); public void SetNeedRefresh() { NeedRefresh = true; } public string GetMessage(decimal UserId) { if (((TimeSpan)(DateTime.Now - LastLoadTime)).TotalMinutes >= 1) SetNeedRefresh(); if (NeedRefresh) LoadResource(UserId); if (!UserRes.ContainsKey(UserId)) return string.Empty; UnlineMsg ResInfo = UserRes[UserId]; return string.Format(ResInfo.message); } private void LoadResource(decimal UserId) { lock (this) { if (!NeedRefresh) return; //重新加载未查看分配资源到UserRes UserRes.Clear(); //查数据库 var lists = _allocateRes.UnlineNoticeGet(); foreach (var model in lists) { UnlineMsg resinfo = null; if (!UserRes.ContainsKey(model.userid)) { resinfo = new UnlineMsg(); resinfo.userid = model.userid; resinfo.message = model.content; UserRes.Add(model.userid, resinfo); } else { resinfo = UserRes[model.userid]; } } //把NeedRefresh置为false NeedRefresh = false; LastLoadTime = DateTime.Now; } } } }