using System; using System.Collections.Generic; using System.Linq; using MySystem.SpModels; using Library; using LitJson; using System.Threading; namespace MySystem { public class SycnSpTradeWifiService { public readonly static SycnSpTradeWifiService Instance = new SycnSpTradeWifiService(); private SycnSpTradeWifiService() { } public void Start() { Thread th = new Thread(StartDo); th.IsBackground = true; th.Start(); } public void StartDo() { while (true) { try { WebCMSEntities spdb = new WebCMSEntities(); PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities(); DateTime start = DateTime.Now.AddDays(-10); DateTime end = DateTime.Now.AddMinutes(-1); int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/TradeRecordId.txt"))); IQueryable trades = spdb.TradeRecord.Where(m => m.Id >= StartId && m.ProductType == "23" && m.CreateDate >= start && m.Status == 1).OrderBy(m => m.CreateDate).Take(20); foreach (TradeRecord trade in trades.ToList()) { //推送数据给java PosPushDataNewHelper.Trade(trade); bool check = db.SpOrderNos.Any(m => m.OrderNo == trade.TradeSerialNo); if (!check && trade.SerEntryMode != "1") { decimal TradeAmount = trade.TradeAmount; if(trade.SeoTitle != "v2") TradeAmount = TradeAmount / 100; bool statFlag = false; PxcModels.WifiTradeRecord add = new PxcModels.WifiTradeRecord(); PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == trade.TradeSnNo); if (pos != null) { statFlag = db.WifiTradeRecord.Any(m => m.SnNo == trade.TradeSnNo); add = db.WifiTradeRecord.Add(new PxcModels.WifiTradeRecord() { CreateDate = trade.CreateDate, UpdateDate = trade.UpdateDate, SnNo = trade.TradeSnNo, //渠道SN号 TradeAmount = TradeAmount, //交易金额 BrandId = pos.BrandId, //品牌 Remark = trade.MerNo, //备注 }).Entity; } db.SpOrderNos.Add(new PxcModels.SpOrderNos() { OrderNo = trade.TradeSerialNo }); db.SaveChanges(); //开始统计 int Months = 0; if(trade.SeoTitle == "v2") { if(trade.SerEntryMode == "1") //判断是否是押金 { pos.SeoKeyword = trade.TradeAmount.ToString("f2"); pos.PrizeParams = trade.TradeAmount.ToString("f2"); db.SaveChanges(); } else { string duration = trade.Field2; //设备套餐时长 string unit = trade.Field3; //套餐单位 0:按天 1:按月 if(unit == "1") Months = int.Parse(function.CheckInt(duration)); else Months = int.Parse(function.CheckInt(duration)) / 30; pos.ActivationState = 1; pos.ActivationTime = DateTime.Now; PxcModels.PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo(); mer.ActiveStatus = 1; mer.MerStandardDate = DateTime.Now; db.SaveChanges(); //检查交易状态,并发奖励 SycnSpMerchantService.Instance.WifiSendPrize(db, pos, mer); //发放奖励MQ PrizeSetHelper.Do("6", pos.PosSn); } } else { if(pos.BrandId == 23 && TradeAmount == 49) Months = 1; if(pos.BrandId == 23 && TradeAmount == 79) Months = 3; if(pos.BrandId == 23 && TradeAmount == 119) Months = 12; if(pos.BrandId == 23 && TradeAmount == 199) Months = 24; if(pos.BrandId == 24 && TradeAmount == 59) Months = 1; if(pos.BrandId == 24 && TradeAmount == 159) Months = 3; if(pos.BrandId == 24 && TradeAmount == 399) Months = 12; if(pos.BrandId == 24 && TradeAmount == 699) Months = 24; if(pos.BrandId == 25 && TradeAmount == 69) Months = 1; if(pos.BrandId == 25 && TradeAmount == 199) Months = 3; if(pos.BrandId == 25 && TradeAmount == 499) Months = 12; if(pos.BrandId == 25 && TradeAmount == 799) Months = 24; if(pos.BrandId == 26 && TradeAmount == 219) Months = 1; if(pos.BrandId == 26 && TradeAmount == 449) Months = 3; if(pos.BrandId == 26 && TradeAmount == 1399) Months = 12; if(pos.BrandId == 26 && TradeAmount == 2698) Months = 24; } string TradeMonth = DateTime.Now.ToString("yyyyMM"); add.Duration = Months; // add.LastMonth = TradeMonth; // add.DoMonths = 1; add.Unit = "m"; db.SaveChanges(); // if(Months > 0) // { // decimal TradeAmt = TradeAmount / Months; // TradeAmt = PublicFunction.NumberFormat(TradeAmt); // if(statFlag) // { // PxcModels.TradeDaySummary stat = db.TradeDaySummary.Where(m => m.UserId == pos.BuyUserId && m.BrandId == pos.BrandId).OrderByDescending(m => m.Id).FirstOrDefault() ?? new PxcModels.TradeDaySummary(); // TradeMonth = string.IsNullOrEmpty(stat.TradeMonth) ? DateTime.Now.AddMonths(-1).ToString("yyyyMM") : stat.TradeMonth; // } // DateTime StartMonth = DateTime.Parse(TradeMonth.Substring(0, 4) + "-" + TradeMonth.Substring(4, 2) + "-01 00:00:00"); // for (int i = 1; i <= Months; i++) // { // StartMonth = StartMonth.AddMonths(1); // StatTrade(db, pos.BuyUserId, pos.BrandId, TradeMonth, TradeAmt); // if (pos.BindingTime < DateTime.Now.AddMonths(-9)) // { // StatTradeBefore(db, pos.BuyUserId, pos.BrandId, TradeMonth, TradeAmt); // } // else // { // StatTradeAfter(db, pos.BuyUserId, pos.BrandId, TradeMonth, TradeAmt); // } //推送延时队列 // TimeSpan ts = DateTime.Now - StartMonth; // RabbitMQClientV2.Instance.SendMsg("{\"pos_sn\":\"" + pos.PosSn + "\",\"amt\":\"" + TradeAmt + "\"}", "KXS_WIFI_TRADE_QUEUE", (uint)ts.TotalMilliseconds); // } // } //检查交易状态,并发奖励 if(pos.ActivationState == 1) { PxcModels.PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo(); SycnSpMerchantService.Instance.WifiSendPrize(db, pos, mer); } TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id); if (edit != null) { edit.Status = 2; spdb.SaveChanges(); } } if(trade.SerEntryMode == "1") { PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == trade.TradeSnNo); if (pos != null) { pos.SeoKeyword = trade.TradeAmount.ToString(); pos.PrizeParams = trade.TradeAmount.ToString(); db.SaveChanges(); } TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id); if (edit != null) { edit.Status = 2; spdb.SaveChanges(); } } else { TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id); if (edit != null) { edit.Status = 2; spdb.SaveChanges(); } } } spdb.Dispose(); db.Dispose(); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常"); } Thread.Sleep(500); } } public void StatTrade(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; PxcModels.TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { selfStat = db.TradeDaySummary.Add(new PxcModels.TradeDaySummary() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", }).Entity; db.SaveChanges(); } selfStat.HelpDirectTradeAmt += TradeAmount; if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); PxcModels.TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { teamStat = db.TradeDaySummary.Add(new PxcModels.TradeDaySummary() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", }).Entity; db.SaveChanges(); } teamStat.HelpNonDirectTradeAmt += TradeAmount; db.SaveChanges(); } } } public void StatTradeBefore(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; PxcModels.TradeDaySummaryBefore selfStat = db.TradeDaySummaryBefore.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { selfStat = db.TradeDaySummaryBefore.Add(new PxcModels.TradeDaySummaryBefore() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", }).Entity; db.SaveChanges(); } selfStat.HelpDirectTradeAmt += TradeAmount; if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); PxcModels.TradeDaySummaryBefore teamStat = db.TradeDaySummaryBefore.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { teamStat = db.TradeDaySummaryBefore.Add(new PxcModels.TradeDaySummaryBefore() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", }).Entity; db.SaveChanges(); } teamStat.HelpNonDirectTradeAmt += TradeAmount; db.SaveChanges(); } } } public void StatTradeAfter(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount) { PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users(); string ParentNav = user.ParentNav; string TradeDate = TradeMonth + "01"; ParentNav += "," + UserId + ","; PxcModels.TradeDaySummaryAfter selfStat = db.TradeDaySummaryAfter.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self"); if (selfStat == null) { selfStat = db.TradeDaySummaryAfter.Add(new PxcModels.TradeDaySummaryAfter() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "self", }).Entity; db.SaveChanges(); } selfStat.HelpDirectTradeAmt += TradeAmount; if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { int NavUserId = int.Parse(NavUserIdString); PxcModels.TradeDaySummaryAfter teamStat = db.TradeDaySummaryAfter.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team"); if (teamStat == null) { teamStat = db.TradeDaySummaryAfter.Add(new PxcModels.TradeDaySummaryAfter() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, SeoTitle = "team", }).Entity; db.SaveChanges(); } teamStat.HelpNonDirectTradeAmt += TradeAmount; db.SaveChanges(); } } } //推送wifi每月交易到java public void PushMsgToJava(string MsgContent) { PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities(); try { JsonData jsonObj = JsonMapper.ToObject(MsgContent); string PosSn = jsonObj["pos_sn"].ToString(); decimal TradeAmount = decimal.Parse(jsonObj["amt"].ToString()); PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PxcModels.PosMachinesTwo(); if(pos.Status > -1 && pos.BuyUserId > 0 && pos.ActivationState == 1) { PxcModels.PosMerchantInfo mer = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo(); PosPushDataNewHelper.Trade(new TradeRecord() { TradeSnNo = pos.PosSn, MerNo = mer.KqMerNo, TradeSerialNo = Guid.NewGuid().ToString(), TradeAmount = TradeAmount, CreateDate = DateTime.Now, ProductType = pos.BrandId.ToString(), }); } } catch(Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "推送wifi每月交易到java异常"); } db.Dispose(); } } }