using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using System.Linq; using Microsoft.Extensions.Hosting; using MySystem; using MySystem.PxcModels; using LitJson; using Library; public class TradeStatTimer { public readonly static TradeStatTimer Instance = new TradeStatTimer(); private TradeStatTimer() { } public void Start() { Thread th = new Thread(DoWorks); th.IsBackground = true; th.Start(); } private void DoWorks() { while (true) { string content = RedisDbconn.Instance.RPop("TradeStatQueue"); if (!string.IsNullOrEmpty(content)) { JsonData jsonObj = JsonMapper.ToObject(content); string DateString = jsonObj["DateString"].ToString(); int UserId = int.Parse(jsonObj["UserId"].ToString()); //创客ID int BrandId = int.Parse(jsonObj["BrandId"].ToString()); //品牌 int BankCardType = int.Parse(jsonObj["BankCardType"].ToString()); //卡类型 int MerchantId = int.Parse(jsonObj["MerchantId"].ToString()); //商户Id int QrPayFlag = int.Parse(jsonObj["QrPayFlag"].ToString()); //云闪付 decimal TradeAmount = decimal.Parse(jsonObj["TradeAmount"].ToString()); //当日交易额 string TradeMonth = DateTime.Parse(DateString).ToString("yyyyMM"); string TradeDate = DateTime.Parse(DateString).ToString("yyyyMMdd"); WebCMSEntities db = new WebCMSEntities(); var tran = db.Database.BeginTransaction(); try { PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo(); MachineForMerNo machineFor = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == merchant.KqMerNo) ?? new MachineForMerNo(); PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machineFor.SnId) ?? new PosMachinesTwo(); int MerchantTypeUserId = int.Parse(function.CheckInt(pos.SeoTitle)); if (MerchantTypeUserId > 0) { Users merchantUser = db.Users.FirstOrDefault(m => m.Id == MerchantTypeUserId && m.MerchantType == 1); if (merchantUser != null) { UserId = MerchantTypeUserId; } } RedisDbconn.Instance.AddNumber("MerTotalAmount:" + MerchantId, TradeAmount); RedisDbconn.Instance.AddNumber("MerTotalAmount:" + MerchantId + ":" + TradeMonth, TradeAmount); //商户当月交易 RedisDbconn.Instance.AddNumber("MerTotalAmount:" + MerchantId + ":" + TradeDate, TradeAmount); //商户当日交易 Users user = db.Users.FirstOrDefault(m => m.Id == UserId); if (user != null) { if (user.AuthFlag == 1) { // UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.Sort == MerchantId && m.SeoTitle == "self"); // if (selfStat == null) // { // selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary() // { // UserId = UserId, // TradeMonth = TradeMonth, // TradeDate = TradeDate, // BrandId = BrandId, // QueryCount = QrPayFlag, // Sort = MerchantId, // SeoTitle = "self", // }).Entity; // db.SaveChanges(); // } // if (BankCardType == 0) // { // selfStat.DirectDebitTradeAmt += TradeAmount; // } // else if (BankCardType == 1) // { // selfStat.DirectTradeAmt += TradeAmount; // } // db.SaveChanges(); RedisDbconn.Instance.AddNumber("TotalAmount:" + UserId, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TotalAmount:" + UserId + ":" + TradeDate, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TotalAmount:" + UserId + ":" + TradeMonth, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeMonth, TradeAmount); //总交易 if (QrPayFlag == 1) { RedisDbconn.Instance.AddNumber("TotalCloudPayAmount:" + UserId + ":" + TradeDate, TradeAmount); //云闪付小额交易额 RedisDbconn.Instance.AddNumber("TotalCloudPayAmount:" + UserId + ":" + TradeMonth, TradeAmount); //云闪付小额交易额 } else { RedisDbconn.Instance.AddNumber("TotalPosAmount:" + UserId + ":" + TradeDate, TradeAmount); //POS机刷卡交易额 RedisDbconn.Instance.AddNumber("TotalPosAmount:" + UserId + ":" + TradeMonth, TradeAmount); //POS机刷卡交易额 } string ParentNav = user.ParentNav; if (UserId != pos.UserId) { user = db.Users.FirstOrDefault(m => m.Id == pos.UserId); if (user != null) { ParentNav = user.ParentNav; UserId = pos.UserId; } } if (!string.IsNullOrEmpty(ParentNav)) { ParentNav += "," + UserId + ","; string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string UserIdString in ParentNavList) { int ParentUserId = int.Parse(UserIdString); // UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == ParentUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.Sort == MerchantId && m.SeoTitle == "team"); // if (teamStat == null) // { // teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary() // { // UserId = ParentUserId, // TradeMonth = TradeMonth, // TradeDate = TradeDate, // BrandId = BrandId, // QueryCount = QrPayFlag, // Sort = MerchantId, // SeoTitle = "team", // }).Entity; // db.SaveChanges(); // } // if (BankCardType == 0) // { // teamStat.NonDirectDebitTradeAmt += TradeAmount; // } // else if (BankCardType == 1) // { // teamStat.NonDirectTradeAmt += TradeAmount; // } // db.SaveChanges(); RedisDbconn.Instance.AddNumber("TeamTotalAmount:" + ParentUserId, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TeamTotalAmount:" + ParentUserId + ":" + TradeDate, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TeamTotalAmount:" + ParentUserId + ":" + TradeMonth, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TeamTotalAmount:" + ParentUserId + ":" + BrandId + ":" + TradeDate, TradeAmount); //总交易 RedisDbconn.Instance.AddNumber("TeamTotalAmount:" + ParentUserId + ":" + BrandId + ":" + TradeMonth, TradeAmount); //总交易 if (QrPayFlag == 1) { RedisDbconn.Instance.AddNumber("TeamTotalCloudPayAmount:" + ParentUserId + ":" + TradeDate, TradeAmount); //云闪付小额交易额 RedisDbconn.Instance.AddNumber("TeamTotalCloudPayAmount:" + ParentUserId + ":" + TradeMonth, TradeAmount); //云闪付小额交易额 } else { RedisDbconn.Instance.AddNumber("TeamTotalPosAmount:" + ParentUserId + ":" + TradeDate, TradeAmount); //POS机刷卡交易额 RedisDbconn.Instance.AddNumber("TeamTotalPosAmount:" + ParentUserId + ":" + TradeMonth, TradeAmount); //POS机刷卡交易额 } } } } } tran.Commit(); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + content + "\n" + ex.ToString(), "统计交易额异常"); tran.Rollback(); } tran.Dispose(); db.Dispose(); } else { Thread.Sleep(900000); } } } }