using System; using System.Collections.Generic; using System.Linq; using System.Data; using MySystem.PxcModels; using Library; using LitJson; using System.Threading; using GraphQL; namespace MySystem { public class RecommandKingHelper { public readonly static RecommandKingHelper Instance = new RecommandKingHelper(); private RecommandKingHelper() { } public void Start() { Thread th = new Thread(StartFor); th.IsBackground = true; th.Start(); } public void StartFor() { while (true) { if(DateTime.Now.Hour > 0 && DateTime.Now.Hour < 23) { Recommend(); } Thread.Sleep(600000); } } public void Recommend() { string today = DateTime.Now.ToString("yyyy-MM-dd"); // string checkFlag = function.ReadInstance("/RecommandKing/" + today + ".txt"); // if(!string.IsNullOrEmpty(checkFlag)) // { // return; // } // function.WritePage("/RecommandKing/", today + ".txt", DateTime.Now.ToString()); List Historys = new List(); Historys.Add(565); Historys.Add(139473); Historys.Add(173790); Historys.Add(174506); Historys.Add(127023); string TradeMonth = DateTime.Now.AddMonths(-0).ToString("yyyyMM"); DateTime check = DateTime.Parse("2023-10-01 00:00:00"); DateTime checke = DateTime.Parse("2024-04-29 00:00:00"); DateTime start = DateTime.Parse(DateTime.Now.AddMonths(-0).ToString("yyyy-MM") + "-01 00:00:00"); DateTime end = start.AddMonths(1); CustomerSqlConn.op("delete from RecommendDirectUser where TradeMonth='" + TradeMonth + "'", MysqlConn.SqlConnStr); string PreTradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM"); List ProductIds = new List(); ProductIds.Add(10); ProductIds.Add(11); ProductIds.Add(77); ProductIds.Add(78); ProductIds.Add(79); ProductIds.Add(27); ProductIds.Add(28); ProductIds.Add(39); ProductIds.Add(40); List users = new List(); // Dictionary PreMonthAmt = GetTradeAmtList(PreTradeMonth); WebCMSEntities db = new WebCMSEntities(); ReadModels.WebCMSEntities readdb = new ReadModels.WebCMSEntities(); MpMainModels.WebCMSEntities mpdb = new MpMainModels.WebCMSEntities(); MpMainModels2.WebCMSEntities mpdb2 = new MpMainModels2.WebCMSEntities(); //统计当月下单名单 // List checkIds = readdb.Users.Where(m => (m.ParentNav.Contains(",609,") || m.Id == 609) && m.AuthFlag == 1).ToList().Select(m => m.Id).ToList(); var orders = readdb.Orders.Where(m => m.PayDate >= check && m.PayDate < checke && m.Status > 0 && m.Sort == 0 && m.UserId > 1 && ProductIds.Contains(m.ProductId)).ToList(); List uids = orders.Select(m => m.UserId).Distinct().ToList(); foreach(int uid in uids) { ReadModels.Users user = readdb.Users.FirstOrDefault(m => m.Id == uid); if(user != null) { if(!users.Any(m => m.UserId == user.Id)) { users.Add(new RecommandKingItem() { UserId = user.Id, ParentUserId = user.ParentUserId, ParentNav = user.ParentNav, // PreAmount = PreMonthAmt.ContainsKey(user.Id) ? PreMonthAmt[user.Id] : 0, Level = user.ParentNav.Replace(",,", ",").Trim(',').Split(',').Length + 1, UserLevel = user.UserLevel, Kind = 1, Op = false, }); } } } foreach(RecommandKingItem user in users) { int uid = user.UserId; int ActCount = 0; if(ActCount == 0) { if(readdb.UserTradeMonthSummary.Any(m => m.UserId == uid && m.TradeMonth == TradeMonth && m.SeoTitle == "self")) { ActCount += readdb.UserTradeMonthSummary.Where(m => m.UserId == uid && m.TradeMonth == TradeMonth && m.SeoTitle == "self").Sum(m => m.ActiveBuddyMerStatus); // if(readdb.UserSimActSummary.Any(m => m.UserId == uid && m.Kind == 1)) // { // ActCount -= readdb.UserSimActSummary.Where(m => m.UserId == uid && m.Kind == 1).Sum(m => m.ActCount); //减去注销的用户 // } } } // if(ActCount == 0) // { // ActCount += mpdb.MerchantDepositOrder.Count(m => m.UserId == uid && m.CreateDate >= start && m.CreateDate < end && m.Status > 0 && m.UserId == uid); // } // if(ActCount == 0) // { // ActCount += mpdb2.MerchantDepositOrder.Count(m => m.UserId == uid && m.CreateDate >= start && m.CreateDate < end && m.Status > 0 && m.UserId == uid); // } if(ActCount > 0) { user.Op = true; function.WriteLog(user.UserId.ToString(), "推荐王达标创客名单"); } // RedisDbconn.Instance.AddList("userstmp2024", user); } // int Cou = RedisDbconn.Instance.GetList("userstmp2024", 1, 99999999).Count(m => m.Op); foreach(int uid in uids) { ReadModels.Users user = readdb.Users.FirstOrDefault(m => m.Id == uid); if(user != null) { string[] ParentIds = user.ParentNav.Replace(",,", ",").Trim(',').Split(','); foreach(string ParentId in ParentIds) { int ParentUserId = int.Parse(ParentId); ReadModels.Users puser = readdb.Users.FirstOrDefault(m => m.Id == ParentUserId && m.Id > 1); if(puser != null) { if(!users.Any(m => m.UserId == puser.Id)) { users.Add(new RecommandKingItem() { UserId = puser.Id, ParentUserId = puser.ParentUserId, ParentNav = puser.ParentNav, // PreAmount = PreMonthAmt.ContainsKey(puser.Id) ? PreMonthAmt[puser.Id] : 0, Level = puser.ParentNav.Replace(",,", ",").Trim(',').Split(',').Length + 1, UserLevel = puser.UserLevel, Kind = 2, Op = false, }); } } } } } users = users.OrderBy(m => m.Level).ToList(); foreach(RecommandKingItem user in users) { string UserIdStr = "," + user.UserId + ","; int Count = users.Count(m => m.ParentNav.Contains(UserIdStr) && m.Op); user.ActCount = Count; user.ChkActCount = Count; function.WriteLog(user.UserId + ":" + Count, "推荐王总的达标创客数量"); } foreach(RecommandKingItem user in users) { string UserIdStr = "," + user.UserId + ","; function.WriteLog(user.UserId.ToString(), "推荐王最终的达标创客数量分析"); if(users.Any(m => m.ParentNav.Contains(UserIdStr) && (m.ChkActCount >= 50 || m.UserLevel >= 5 || Historys.Contains(m.UserId)))) { List subs = users.Where(m => m.ParentUserId == user.UserId).ToList(); foreach(RecommandKingItem sub in subs) { function.WriteLog(sub.UserId + ":" + sub.ActCount, "推荐王最终的达标创客数量分析"); string subUserIdStr = "," + sub.UserId + ","; if(sub.ChkActCount >= 50 || sub.UserLevel >= 5 || Historys.Contains(sub.UserId)) { // user.ActCount -= sub.ChkActCount; List mysubs = users.Where(m => m.ParentNav.Contains(subUserIdStr) && (m.ChkActCount >= 50)).ToList(); foreach(RecommandKingItem mysub in mysubs) { List mysubChildren = users.Where(m => m.ParentUserId == mysub.UserId).ToList(); foreach(RecommandKingItem mysubChild in mysubChildren) { if(mysubChild.ChkActCount >= 50) { user.ActCount -= mysubChild.ChkActCount; } } } function.WriteLog("减去" + sub.ChkActCount, "推荐王最终的达标创客数量分析"); } else if(users.Any(m => m.ParentNav.Contains(subUserIdStr) && (m.ChkActCount >= 50 || m.UserLevel >= 5 || Historys.Contains(sub.UserId)))) { RecommandKingItem tar = users.Where(m => m.ParentNav.Contains(subUserIdStr) && (m.ChkActCount >= 50 || m.UserLevel >= 5)).OrderBy(m => m.Level).FirstOrDefault(); user.ActCount -= tar.ChkActCount; function.WriteLog("减去" + tar.UserId + ":" + sub.ChkActCount, "推荐王最终的达标创客数量分析"); } } } function.WriteLog("\n\n\n", "推荐王最终的达标创客数量分析"); } int num = 0; foreach(RecommandKingItem user in users) { num += 1; RecommendDirectUser item = db.RecommendDirectUser.FirstOrDefault(m => m.UserId == user.UserId && m.TradeMonth == TradeMonth); if(item == null) { item = db.RecommendDirectUser.Add(new RecommendDirectUser() { UserId = user.UserId, TradeMonth = TradeMonth, QueryCount = user.ActCount > 50 ? 50 : user.ActCount, }).Entity; if(num % 200 == 0) { db.SaveChanges(); } } } db.SaveChanges(); db.Dispose(); readdb.Dispose(); mpdb.Dispose(); mpdb2.Dispose(); } public decimal GetTradeAmt(int UserId, string TradeMonth) { ReadModels.WebCMSEntities rdb = new ReadModels.WebCMSEntities(); MpMainModels.WebCMSEntities mpmaindb = new MpMainModels.WebCMSEntities(); MpMainModels2.WebCMSEntities mpmaindb2 = new MpMainModels2.WebCMSEntities(); decimal TradeAmount = 0; //创客团队交易额 bool check = rdb.TradeDaySummary.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { TradeAmount += rdb.TradeDaySummary.Where(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.HelpNonDirectTradeAmt + m.HelpNonDirectDebitTradeAmt + m.NotHelpNonDirectTradeAmt + m.NotHelpNonDirectDebitTradeAmt + m.ProfitNonDirectTradeAmt + m.ProfitNonDirectDebitTradeAmt); } check = rdb.TradeDaySummary2.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { TradeAmount += rdb.TradeDaySummary2.Where(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team").Sum(m => m.ProfitTradeAmt + m.ProfitDebitTradeAmt); } //码牌团队交易额(直联) check = mpmaindb.UserAmountSummary.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { TradeAmount += mpmaindb.UserAmountSummary.Where(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).Sum(m => m.TotalAmount) * 4; } //码牌团队交易额(银联) check = mpmaindb2.UserAmountSummary.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { TradeAmount += mpmaindb2.UserAmountSummary.Where(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).Sum(m => m.TotalAmount) * 4; } //广电卡扶持期按1万/张计入职级 check = rdb.UserTradeMonthSummary.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14); if (check) { TradeAmount += rdb.UserTradeMonthSummary.Where(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14).Sum(m => m.ActiveBuddyMerStatus) * 10000; } return TradeAmount; } public Dictionary GetTradeAmtList(string TradeMonth) { Dictionary dic = new Dictionary(); ReadModels.WebCMSEntities rdb = new ReadModels.WebCMSEntities(); MpMainModels.WebCMSEntities mpmaindb = new MpMainModels.WebCMSEntities(); MpMainModels2.WebCMSEntities mpmaindb2 = new MpMainModels2.WebCMSEntities(); //创客团队交易额 bool check = rdb.TradeDaySummary.Any(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { var list = rdb.TradeDaySummary.Where(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team").ToList().GroupBy(m => m.UserId); foreach(var item in list) { int UserId = item.Key; decimal Amt = item.Sum(m => m.HelpNonDirectTradeAmt + m.HelpNonDirectDebitTradeAmt + m.NotHelpNonDirectTradeAmt + m.NotHelpNonDirectDebitTradeAmt + m.ProfitNonDirectTradeAmt + m.ProfitNonDirectDebitTradeAmt); if(!dic.ContainsKey(UserId)) { dic.Add(UserId, Amt); } else { dic[UserId] += Amt; } } } check = rdb.TradeDaySummary2.Any(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { var list = rdb.TradeDaySummary2.Where(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team").ToList().GroupBy(m => m.UserId); foreach(var item in list) { int UserId = item.Key; decimal Amt = item.Sum(m => m.ProfitTradeAmt + m.ProfitDebitTradeAmt); if(!dic.ContainsKey(UserId)) { dic.Add(UserId, Amt); } else { dic[UserId] += Amt; } } } //码牌团队交易额(直联) check = mpmaindb.UserAmountSummary.Any(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { var list = mpmaindb.UserAmountSummary.Where(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).ToList().GroupBy(m => m.UserId); foreach(var item in list) { int UserId = item.Key; decimal Amt = item.Sum(m => m.TotalAmount) * 4; if(!dic.ContainsKey(UserId)) { dic.Add(UserId, Amt); } else { dic[UserId] += Amt; } } } //码牌团队交易额(银联) check = mpmaindb2.UserAmountSummary.Any(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team"); if (check) { var list = mpmaindb2.UserAmountSummary.Where(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.IsAct == 1).ToList().GroupBy(m => m.UserId); foreach(var item in list) { int UserId = item.Key; decimal Amt = item.Sum(m => m.TotalAmount) * 4; if(!dic.ContainsKey(UserId)) { dic.Add(UserId, Amt); } else { dic[UserId] += Amt; } } } //广电卡扶持期按1万/张计入职级 check = rdb.UserTradeMonthSummary.Any(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14); if (check) { var list = rdb.UserTradeMonthSummary.Where(m => m.TradeMonth == TradeMonth && m.SeoTitle == "team" && m.BrandId == 14).ToList().GroupBy(m => m.UserId); foreach(var item in list) { int UserId = item.Key; decimal Amt = item.Sum(m => m.ActiveBuddyMerStatus) * 10000; if(!dic.ContainsKey(UserId)) { dic.Add(UserId, Amt); } else { dic[UserId] += Amt; } } } return dic; } } }