using System; using System.Collections.Generic; using System.Threading; using System.Linq; using System.Data; using MySystem; using MySystem.PxcModels; using Library; using LitJson; public class WifiTradeHelper { public readonly static WifiTradeHelper Instance = new WifiTradeHelper(); private WifiTradeHelper() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); } private void DoWorks() { while (true) { try { if(DateTime.Now.Day == 1 && DateTime.Now.Hour < 6) { string Month = DateTime.Now.ToString("yyyyMM"); string chk = function.ReadInstance("/wifi/trade" + Month + ".txt"); if(string.IsNullOrEmpty(chk)) { function.WritePage("/wifi/", "trade" + Month + ".txt", DateTime.Now.ToString()); DoSomething(Month); } } Thread.Sleep(3600000); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "WIFI发放交易额异常"); } } } public void DoSomething(string Month) { WebCMSEntities db = new WebCMSEntities(); MySystem.ReadModels.WebCMSEntities rdb = new MySystem.ReadModels.WebCMSEntities(); DateTime end = DateTime.Parse(Month + "-01 00:00:00").AddMonths(1); List SnNos = new List(); List trades = rdb.WifiTradeRecord.Where(m => m.Duration >= m.DoMonths && m.CreateDate < end).ToList(); List users = rdb.Users.Where(m => m.AuthFlag == 1).ToList(); List PosSns = trades.Select(m => m.SnNo).ToList(); List posList = db.PosMachinesTwo.Where(m => PosSns.Contains(m.PosSn)).ToList(); List merList = db.PosMerchantInfo.Where(m => PosSns.Contains(m.KqMerNo)).ToList(); List statTrade = new List(); List statTradeBefore = new List(); List statTradeAfter = new List(); foreach(MySystem.ReadModels.WifiTradeRecord trade in trades) { if(trade.Unit == "m" && trade.Duration > 0 && !SnNos.Contains(trade.SnNo)) { decimal TradeAmt = trade.TradeAmount / trade.Duration; TradeAmt = PublicFunction.NumberFormat(TradeAmt); PosMachinesTwo pos = posList.FirstOrDefault(m => m.PosSn == trade.SnNo) ?? new PosMachinesTwo(); PosMerchantInfo mer = merList.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo(); StatTrade(statTrade, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt); if (pos.BindingTime < trade.CreateDate.Value.AddMonths(-9)) { StatTradeBefore(statTradeBefore, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt); } else { StatTradeAfter(statTradeAfter, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt); } WifiTradeRecord edit = db.WifiTradeRecord.FirstOrDefault(m => m.Id == trade.Id); if(edit != null) { edit.DoMonths += 1; edit.LastMonth = Month.Replace("-", ""); //推送wifi交易给java PosPushDataNewHelper.Trade(new MySystem.SpModels.TradeRecord() { TradeSnNo = edit.SnNo, MerNo = edit.Remark, TradeAmount = TradeAmt, TradeSerialNo = Guid.NewGuid().ToString(), CreateDate = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00"), ProductType = edit.BrandId.ToString(), }); } SnNos.Add(trade.SnNo); } } int index = 0; foreach(TradeDaySummary sub in statTrade) { index += 1; db.TradeDaySummary.Add(sub); if(index % 200 == 0) { db.SaveChanges(); } } db.SaveChanges(); index = 0; foreach(TradeDaySummaryBefore sub in statTradeBefore) { index += 1; db.TradeDaySummaryBefore.Add(sub); if(index % 200 == 0) { db.SaveChanges(); } } db.SaveChanges(); index = 0; foreach(TradeDaySummaryAfter sub in statTradeAfter) { index += 1; db.TradeDaySummaryAfter.Add(sub); if(index % 200 == 0) { db.SaveChanges(); } } db.SaveChanges(); db.Dispose(); } public void DoSomethingNew(string Month) { WebCMSEntities db = new WebCMSEntities(); MySystem.ReadModels.WebCMSEntities rdb = new MySystem.ReadModels.WebCMSEntities(); DateTime end = DateTime.Parse(Month + "-01 00:00:00").AddMonths(1); List SnNos = new List(); List trades = rdb.WifiTradeRecord.Where(m => m.Duration >= m.DoMonths && m.CreateDate < end).ToList(); foreach(MySystem.ReadModels.WifiTradeRecord trade in trades) { if(trade.Unit == "m" && trade.Duration > 0 && !SnNos.Contains(trade.SnNo)) { DoOne(db, trade.Id, Month); SnNos.Add(trade.SnNo); } } db.SaveChanges(); db.Dispose(); } public void DoOne(WebCMSEntities db, int Id, string Month) { WifiTradeRecord edit = db.WifiTradeRecord.FirstOrDefault(m => m.Id == Id); if(edit != null) { if(edit.LastMonth != Month.Replace("-", "")) { decimal TradeAmt = edit.TradeAmount / edit.Duration; TradeAmt = PublicFunction.NumberFormat(TradeAmt); edit.DoMonths += 1; edit.LastMonth = Month.Replace("-", ""); //推送wifi交易给java PosPushDataNewHelper.Trade(new MySystem.SpModels.TradeRecord() { TradeSnNo = edit.SnNo, MerNo = edit.SnNo, TradeAmount = TradeAmt, TradeSerialNo = Guid.NewGuid().ToString(), CreateDate = DateTime.Parse(Month + "-01 00:00:00"), ProductType = edit.BrandId.ToString(), ErrorMsg = edit.DoMonths == 1 ? edit.TradeAmount.ToString() : "0", }); } } } public void StatTrade(List statTrade, List users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; TradeDaySummary selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { statTrade.Add(new TradeDaySummary() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", HelpDirectTradeAmt = TradeAmount, }); } else { selfStat.HelpDirectTradeAmt += TradeAmount; } if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); TradeDaySummary teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { statTrade.Add(new TradeDaySummary() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", HelpNonDirectTradeAmt = TradeAmount, }); } else { teamStat.HelpNonDirectTradeAmt += TradeAmount; } } } } public void StatTradeBefore(List statTrade, List users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; TradeDaySummaryBefore selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { statTrade.Add(new TradeDaySummaryBefore() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", HelpDirectTradeAmt = TradeAmount, }); } else { selfStat.HelpDirectTradeAmt += TradeAmount; } if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); TradeDaySummaryBefore teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { statTrade.Add(new TradeDaySummaryBefore() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", HelpNonDirectTradeAmt = TradeAmount, }); } else { teamStat.HelpNonDirectTradeAmt += TradeAmount; } } } } public void StatTradeAfter(List statTrade, List users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; TradeDaySummaryAfter selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { statTrade.Add(new TradeDaySummaryAfter() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", HelpDirectTradeAmt = TradeAmount, }); } else { selfStat.HelpDirectTradeAmt += TradeAmount; } if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); TradeDaySummaryAfter teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { statTrade.Add(new TradeDaySummaryAfter() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", HelpNonDirectTradeAmt = TradeAmount, }); } else { teamStat.HelpNonDirectTradeAmt += TradeAmount; } } } } }