using Common.Models.UnqTables; using Common.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Common.DbExtends.Extends; using Common.Requests.Lianmengs; using Common.Models.SubValueTables; using SqlSugar; using System.Threading; using Common.Models.SubTables; using Common.Utils.Extends; namespace Server.Timers { public class TbSpecialTimer : MyTimer { private DateTime DeleteTime = DateTime.MinValue; private Client client = Client.SingleClient; private int UpdaetCount = 0; private SqlSugar.SqlSugarClient Db { get { return client.Db; } } protected override void Run(object state, bool timedOut) { try { UpdaetCount++; var time = DateTime.Now.AddMinutes(-60); //第一步:每天删除一次三天以前的查询记录 if (DeleteTime.Day != DateTime.Now.Day) { DeleteTime = DateTime.Now; Db.Deleteable().Where(f => f.CreateTime < DateTime.Now.AddDays(-3)); } //第二步:筛选时间,优先把最近30分钟筛选出来,其他的一天查一次 var exp = Expressionable.Create(); if (UpdaetCount == 600) //10小时了,同步下当天的 { exp.And(f => f.CreateTime >= DateTime.Now.AddDays(-1)); } else if (UpdaetCount != 1440) //没到24小时,仅同步最近30分钟的 { exp.And(f => f.CreateTime >= DateTime.Now.AddMinutes(-30)); } var list = Db.Queryable().Where(exp.ToExpression()).OrderBy(f => f.Id, SqlSugar.OrderByType.Asc).ToList(); if (list.Count > 0) { foreach (var item in list) { var lm = Db.GetLianmeng(item.LianmengId); if (lm != null && lm.ExpirationTime > DateTime.Now) { var req = new TaobaoRequest(lm); var type = item.UserType.ToExternalType(); var data = req.QuerySpecial($"{item.Username}", type); if (data != null && data["inviter_list"] != null && data["inviter_list"].Count() > 0) { foreach (var v in data["inviter_list"]) { var special_id = (long)data["special_id"]; var tableName = Db.GetTableName(req.Lianmeng.Id); var rst = Db.GetTbSpecial(item.UserId, item.LianmengId); if (rst == null) { rst = new TbSpecial() { SpecialId = special_id, LianmengId = item.LianmengId, UpdateTime = DateTime.Now, UserId = item.UserId }; Db.Save(rst); } //删掉 Db.Deleteable(item).ExecuteCommand(); break; } } else { item.SyncTime = DateTime.Now; Db.Updateable(item).ExecuteCommand(); } } Thread.Sleep(1000); } } } catch (Exception ex) { Db.OnLog("淘宝会员关系同步", ex); } } } }