using AY.CRM.BLL.Wx; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using AY.CRM.BLL.Wx; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using DAL.Redis; using Newtonsoft.Json; using WeChatServerServices.WeiXin.GenHtml; using WX.CRM.BLL.Base; using WX.CRM.BLL.Wx; using WX.CRM.Common; using WX.CRM.DAL; using WX.CRM.DAL.Redis; using message = WeChatServerServices.Model.message; using rcontact = WeChatServerServices.Model.rcontact; using WX.CRM.DataSynFactory.Templates; using WX.CRM.DataSynFactory; namespace WeChatServerServices.WxJob { public class Wx_AliveRedisToOracle { private readonly WX_ALIVEIMEI_BL _aliveImeiBll = new WX_ALIVEIMEI_BL(); private readonly WX_ALIVE_BL _aliveBll = new WX_ALIVE_BL(); private readonly PubSub _sub = new PubSub(); public void Start() { SubMessage("alive", WxAlive); } private async void SubMessage(string key, Action action) { await SubMessageAsync(key, action); } /// /// 轮训读取Redis数据Alive,并入库 /// private async Task SubMessageAsync(string key, Action action) { RedisList redisList = new RedisList(); WX.CRM.Common.LogHelper.Info("sub:"); await _sub.SubscribeAsync("sub:" + key, async (c, v) => { WX.CRM.Common.LogHelper.Info("sub:"+key); alive info = null; do { info = await redisList.RightPopLeftPushAsync(key, key + "bak"); if (info != null) WxAlive(info); } while (info != null); }); } private void WxAlive(alive info) { try { WX.CRM.Common.LogHelper.Info("userame:" + info.username); #region imei if (!string.IsNullOrWhiteSpace(info.imei)) { var model = _aliveImeiBll.Get(p => p.IMEI == info.imei); if (model != null) { model.USERNAME = info.username; model.LASTTIME = DateTime.Parse(info.lasttime); _aliveImeiBll.Update(model); } else { model = new WX_ALIVEIMEI() { IMEI = info.imei, USERNAME = info.username, LASTTIME = DateTime.Parse(info.lasttime) }; _aliveImeiBll.Add(model); } } #endregion #region alive if (!string.IsNullOrWhiteSpace(info.username)) { var model = _aliveBll.Get(p => p.USERNAME == info.username); if (model != null) { model.LASTTIME = DateTime.Parse(info.lasttime); _aliveBll.Update(model); } else { model = new WX_ALIVE { USERNAME = info.username, LASTTIME = DateTime.Parse(info.lasttime) }; _aliveBll.Add(model); } } #endregion } catch (Exception ex) { LogHelper.Error(ex.ToString()); } } } }