using Api.Framework; using Api.Framework.Enums; using Api.Framework.Model; using Api.Framework.SDK; using Api.Framework.Tools; using Chat.Framework.WXSdk; using Chat.Framework.WXSdk.Implement; using CsharpHttpHelper; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using TBRebate.Entitys; using static TBRebate.Enums; namespace TBRebate { class MonitorThread : TimerTask { private static Dictionary CacheBind = new Dictionary(); public static void AddCache(cache_bind_orderid_temp cache_bind) { try { lock (CacheBind) { if (!CacheBind.ContainsKey(cache_bind.orderId)) CacheBind.Add(cache_bind.orderId, cache_bind); } } catch (Exception) { } } public static void RemoveCache(cache_bind_orderid_temp cache_bind) { RemoveCache(cache_bind.orderId); } public static void RemoveCache(string orderid) { try { lock (CacheBind) { if (CacheBind.ContainsKey(orderid)) CacheBind.Remove(orderid); } } catch (Exception) { } } /// /// 获取数据 /// /// 获取超时数据 /// public static List GetCacheList(DateTime time_out) { try { lock (CacheBind) { var _list = CacheBind.Values.ToList(); if (time_out != DateTime.MaxValue) return _list.Where(f => f.bind_time < time_out).ToList(); else return _list; //if (!CacheBind.ContainsKey(cache_bind.orderId)) CacheBind.Remove(cache_bind.orderId); } } catch (Exception) { } return new List(); } public static List GetCacheList() { return GetCacheList(DateTime.MaxValue); } public static void RemoveListCache(List orders) { foreach (var item in orders) RemoveCache(item); } public override void Run(object state, bool timedOut) { try { var session = ApiClient.GetSession(); //获得缓存数据 var list = GetCacheList(); if (list != null && list.Count != 0) { //var delList = new List();//需要删除的 var orders_temp = session.Find("select * from fl_order_alimama where (db_status != 1004 and db_status != 1003 and db_status != 999) and create_time > @time", new { time = DateTime.Now.AddHours(-5) }); if (orders_temp != null && orders_temp.Count != 0) { foreach (var item in list) { try { var order = orders_temp.FirstOrDefault(f => f.trade_parent_id == item.orderId); if (order != null && order.db_userid != 0) RemoveCache(item); } catch (Exception ex) { EventClient.OnEvent(this, "缓存处理异常:" + ex.Message + " - " + ex.StackTrace); } } //List orders = null; //foreach (var item in list) //{ // try // { // orders = orders_temp.Where(f => f.trade_parent_id == item.orderId).ToList(); // foreach (var order in orders) // { // //用户绑定订单 // order.db_robotname = item.db_robotname; // order.db_robottype = item.db_robottype; // order.msg_groupid = item.groupid; // order.db_userid = item.db_userid; // var member = session.FindMemberinfo(item.db_userid); // var itempoint = session.FindItemPoint(member, order.pub_share_pre_fee, order.item_num, CpsType.阿里妈妈); // if (itempoint != null) // { // order.db_point = HttpHelper.ObjectToJson(itempoint); // order.db_userpoint = itempoint.UserPoint; // session.SaveOrUpdate(order); // var robotInfo = session.FindRobotInfo(item.db_robotname, item.db_robottype); // if (member != null && robotInfo != null) // { // ApiClient.SendMessage(robotInfo, member.username, Class1._GetOrderStateMess(order.db_status, SettleType.未结算提示, order, member, robotInfo).Replace("[返利积分]", itempoint.UserPoint.ToString()), item.groupid); // Thread.Sleep(500); // } // } // } // } // catch (Exception) // { // } // //删除已存在订单 // if (orders.Count != 0) RemoveCache(item); //} } } //超过30分钟未绑定成功 - 应该给予客户提示 var time_out_list = GetCacheList(DateTime.Now.AddHours(-20)); foreach (var item in time_out_list) { RemoveCache(item); //if (item.db_robottype != ChatType.微信) continue; //var ipad = Chat.Framework.ChatClient.WXClient.FirstOrDefault(f=>f.Key == item.db_robotname).Value; //if (ipad == null) continue; ////给予超时提示语 ////ipad.SendMessage(); } } catch (System.Exception ex) { EventClient.OnEvent(this, $"缓存绑定异常:{ex.Message} - {ex.StackTrace}"); } } } }