using System; using System.Collections.Generic; using Library; using LitJson; using System.Linq; using System.Data; using System.Threading; using MySystem.PxcModels; namespace MySystem { public class StatTradeCheckService { public readonly static StatTradeCheckService Instance = new StatTradeCheckService(); private StatTradeCheckService() { } // 统计交易额 public void StartCheck() { Thread th = new Thread(StartCheckDo); th.IsBackground = true; th.Start(); } public void StartCheckDo() { while (true) { string content = RedisDbconn.Instance.RPop("StatTradeCheck2Queue"); if(!string.IsNullOrEmpty(content)) { StatTradeAmountCheckDo(content); // StatTradeAmountCheck2Do(content); Thread.Sleep(100); } else { Thread.Sleep(10000); } } } public void StatTradeAmountCheckDo(string date) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); try { date = date.Replace("-", ""); WebCMSEntities db = new WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); List list = db.UserAmountSummary.Where(m => m.TradeDate == date).ToList(); List uids = list.Select(m => m.UserId).Distinct().ToList(); var users = kxsdb.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList(); db.Dispose(); foreach(UserAmountSummary sub in list.Where(m => m.SeoTitle == "team").ToList()) { string puidstr = "," + sub.UserId + ","; List subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList(); bool op = list.Any(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct); if(op) { decimal TotalAmount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TotalAmount); int TradeCount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TradeCount); string setField = ""; if(sub.TotalAmount != TotalAmount) { setField += "TotalAmount=" + TotalAmount + ","; } if(sub.TradeCount != TradeCount) { setField += "TradeCount=" + TradeCount + ","; } if(!string.IsNullOrEmpty(setField)) { function.WriteLog("UserId:" + sub.UserId + "; TradeDate:" + sub.TradeDate + "; TotalAmount:" + sub.TotalAmount + "--" + TotalAmount + "; TradeCount:" + sub.TradeCount + "--" + TradeCount + ";", "交易不一致的创客"); function.WriteLog("update UserAmountSummary set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本"); } } } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常"); } function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); } public void StatTradeAmountCheck2Do(string date) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); try { date = date.Replace("-", ""); PxcModels2.WebCMSEntities db = new PxcModels2.WebCMSEntities(); KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities(); List list = db.UserAmountSummary.Where(m => m.TradeDate == date).ToList(); List uids = list.Select(m => m.UserId).Distinct().ToList(); var users = kxsdb.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList(); db.Dispose(); foreach(PxcModels2.UserAmountSummary sub in list.Where(m => m.SeoTitle == "team").ToList()) { string puidstr = "," + sub.UserId + ","; List subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList(); bool op = list.Any(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct); if(op) { decimal TotalAmount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TotalAmount); int TradeCount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TradeCount); string setField = ""; if(sub.TotalAmount != TotalAmount) { setField += "TotalAmount=" + TotalAmount + ","; } if(sub.TradeCount != TradeCount) { setField += "TradeCount=" + TradeCount + ","; } if(!string.IsNullOrEmpty(setField)) { function.WriteLog("UserId:" + sub.UserId + "; TradeDate:" + sub.TradeDate + "; TotalAmount:" + sub.TotalAmount + "--" + TotalAmount + "; TradeCount:" + sub.TradeCount + "--" + TradeCount + ";", "交易不一致的创客2"); function.WriteLog("update UserAmountSummary set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本2"); } } } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常"); } function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); } } }