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() { } // 统计交易额V2 public void Start() { Thread th = new Thread(StartDo); th.IsBackground = true; th.Start(); } public void StartDo() { while (true) { string content = RedisDbconn.Instance.RPop("StatTradeCheckQueue"); if(!string.IsNullOrEmpty(content)) { StatTradeAmountDo(content); Thread.Sleep(1); } else { Thread.Sleep(10000); } } } public void StatTradeAmountDo(string date) { function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); try { int pageNum = 0; bool check = true; while(check) { string sql = ""; function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----start", "统计交易额日志"); DataTable dt = CustomerSqlConn.dtable("select UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id),SnNo,TradeDate from TradeRecord where Id>20000000 and ActStatus=1 and BrandId!=14 and UserId>0 and CreateDate>='" + date + " 00:00:00' and CreateDate<='" + date + " 23:59:59' group by UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),SnNo,TradeDate order by UserId limit " + pageNum + ",500", AppConfig.Base.TmpReadSqlConn); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----query", "统计交易额日志"); if(dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { int UserId = int.Parse(dr["UserId"].ToString()); string SnNo = dr["SnNo"].ToString(); string BindingTime = dr["TradeDate"].ToString(); string ParentNav = dr["ParentNav"].ToString(); int BrandId = int.Parse(dr["BrandId"].ToString()); int BankCardType = int.Parse(dr["BankCardType"].ToString()); int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); int MerHelpFlag = int.Parse(dr["MerHelpFlag"].ToString()); int Version = int.Parse(dr["Version"].ToString()); int CapFlag = int.Parse(dr["CapFlag"].ToString()); int VipFlag = int.Parse(dr["VipFlag"].ToString()); int PayType = int.Parse(dr["PayType"].ToString()); string TradeDate = dr[10].ToString(); decimal TradeAmount = decimal.Parse(dr[11].ToString()); int TradeCount = 1; string TradeMonth = TradeDate.Substring(0, 6); ParentNav += "," + UserId + ","; string ParentNavString = ParentNav.Trim(',').Replace(",,", ","); string[] UserIdList = ParentNavString.Split(','); if(Version < 2) { //个人业绩 decimal ProfitDirectDebitTradeAmt = 0; decimal ProfitDirectDebitCapTradeAmt = 0; decimal ProfitDirectDebitCapNum = 0; decimal HelpDirectDebitTradeAmt = 0; decimal HelpDirectDebitCapTradeAmt = 0; decimal HelpDirectDebitCapNum = 0; decimal NotHelpDirectDebitTradeAmt = 0; decimal NotHelpDirectDebitCapTradeAmt = 0; decimal NotHelpDirectDebitCapNum = 0; decimal ProfitDirectTradeAmt = 0; decimal HelpDirectTradeAmt = 0; decimal NotHelpDirectTradeAmt = 0; if (BankCardType == 0) { if (Version == 1) { ProfitDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { ProfitDirectDebitCapTradeAmt += TradeAmount; ProfitDirectDebitCapNum += TradeCount; } } else if (MerHelpFlag == 1) { HelpDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { HelpDirectDebitCapTradeAmt += TradeAmount; HelpDirectDebitCapNum += TradeCount; } } else { NotHelpDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { NotHelpDirectDebitCapTradeAmt += TradeAmount; NotHelpDirectDebitCapNum += TradeCount; } } } else if (BankCardType != 0) { if (Version == 1) { ProfitDirectTradeAmt += TradeAmount; } else if (MerHelpFlag == 1) { HelpDirectTradeAmt += TradeAmount; } else { NotHelpDirectTradeAmt += TradeAmount; } } sql += InsertOrUpdate("TradeDaySummary", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00")) { sql += InsertOrUpdate("TradeDaySummaryBefore", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); } else { sql += InsertOrUpdate("TradeDaySummaryAfter", "ProfitDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitDirectTradeAmt,HelpDirectTradeAmt,NotHelpDirectTradeAmt", ProfitDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitDirectTradeAmt + "," + HelpDirectTradeAmt + "," + NotHelpDirectTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); } //团队业绩 foreach(string SubUserId in UserIdList) { decimal ProfitNonDirectDebitTradeAmt = 0; ProfitDirectDebitCapTradeAmt = 0; ProfitDirectDebitCapNum = 0; decimal HelpNonDirectDebitTradeAmt = 0; HelpDirectDebitCapTradeAmt = 0; HelpDirectDebitCapNum = 0; decimal NotHelpNonDirectDebitTradeAmt = 0; NotHelpDirectDebitCapTradeAmt = 0; NotHelpDirectDebitCapNum = 0; decimal ProfitNonDirectTradeAmt = 0; decimal HelpNonDirectTradeAmt = 0; decimal NotHelpNonDirectTradeAmt = 0; if (BankCardType == 0) { if (Version == 1) { ProfitNonDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { ProfitDirectDebitCapTradeAmt += TradeAmount; ProfitDirectDebitCapNum += TradeCount; } } else if (MerHelpFlag == 1) { HelpNonDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { HelpDirectDebitCapTradeAmt += TradeAmount; HelpDirectDebitCapNum += TradeCount; } } else { NotHelpNonDirectDebitTradeAmt += TradeAmount; if (CapFlag == 1) { NotHelpDirectDebitCapTradeAmt += TradeAmount; NotHelpDirectDebitCapNum += TradeCount; } } } else if (BankCardType != 0) { if (Version == 1) { ProfitNonDirectTradeAmt += TradeAmount; } else if (MerHelpFlag == 1) { HelpNonDirectTradeAmt += TradeAmount; } else { NotHelpNonDirectTradeAmt += TradeAmount; } } sql += InsertOrUpdate("TradeDaySummary", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00")) { sql += InsertOrUpdate("TradeDaySummaryBefore", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); } else { sql += InsertOrUpdate("TradeDaySummaryAfter", "ProfitNonDirectDebitTradeAmt,ProfitDirectDebitCapTradeAmt,ProfitDirectDebitCapNum,HelpNonDirectDebitTradeAmt,HelpDirectDebitCapTradeAmt,HelpDirectDebitCapNum,NotHelpNonDirectDebitTradeAmt,NotHelpDirectDebitCapTradeAmt,NotHelpDirectDebitCapNum,ProfitNonDirectTradeAmt,HelpNonDirectTradeAmt,NotHelpNonDirectTradeAmt", ProfitNonDirectDebitTradeAmt + "," + ProfitDirectDebitCapTradeAmt + "," + ProfitDirectDebitCapNum + "," + HelpNonDirectDebitTradeAmt + "," + HelpDirectDebitCapTradeAmt + "," + HelpDirectDebitCapNum + "," + NotHelpNonDirectDebitTradeAmt + "," + NotHelpDirectDebitCapTradeAmt + "," + NotHelpDirectDebitCapNum + "," + ProfitNonDirectTradeAmt + "," + HelpNonDirectTradeAmt + "," + NotHelpNonDirectTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); } } } else { decimal ProfitDebitTradeAmt = 0; decimal ProfitDebitCapTradeAmt = 0; decimal ProfitDebitCapNum = 0; decimal ProfitTradeAmt = 0; if (BankCardType == 0) { if (Version == 2) { ProfitDebitTradeAmt += TradeAmount; if (CapFlag == 1) { ProfitDebitCapTradeAmt += TradeAmount; ProfitDebitCapNum += TradeCount; } } } else if (BankCardType != 0) { if (Version == 2) { ProfitTradeAmt += TradeAmount; } } sql += InsertOrUpdate("TradeDaySummary2", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00")) { sql += InsertOrUpdate("TradeDaySummary2Before", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); } else { sql += InsertOrUpdate("TradeDaySummary2After", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + UserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='self'"); } foreach(string SubUserId in UserIdList) { sql += InsertOrUpdate("TradeDaySummary2", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); if (DateTime.Parse(BindingTime) < DateTime.Parse("2023-07-01 00:00:00")) { sql += InsertOrUpdate("TradeDaySummary2Before", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); } else { sql += InsertOrUpdate("TradeDaySummary2After", "ProfitDebitTradeAmt,ProfitDebitCapTradeAmt,ProfitDebitCapNum,ProfitTradeAmt", ProfitDebitTradeAmt + "," + ProfitDebitCapTradeAmt + "," + ProfitDebitCapNum + "," + ProfitTradeAmt, "UserId=" + SubUserId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and BrandId=" + BrandId + " and QueryCount=" + QrPayFlag + " and VipFlag=" + VipFlag + " and PayType=" + PayType + " and SeoTitle='team'"); } } } } pageNum += 1; } else { check = false; } function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----end", "统计交易额日志"); // function.WriteLog(sql, "SQL脚本"); CustomerSqlConn.op(sql, AppConfig.Base.SqlConn); function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "---" + pageNum + "----fiinsh\n\n", "统计交易额日志"); } } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常"); } function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志"); } List rediskeys = new List(); public string InsertOrUpdate(string table, string fields, string vals, string condition) { string sql = ""; // string check = RedisDbconn.Instance.Get("statreset:" + table + ":" + function.MD5_16(condition)); // if(string.IsNullOrEmpty(check)) if(!rediskeys.Contains(table + ":" + function.MD5_16(condition))) { rediskeys.Add(table + ":" + function.MD5_16(condition)); // RedisDbconn.Instance.Set("statreset:" + table + ":" + function.MD5_16(condition), fields + "#cut#" + vals); // RedisDbconn.Instance.SetExpire("statreset:" + table + ":" + function.MD5_16(condition), 3600); string[] conditionList = condition.Split(new string[]{ " and " }, StringSplitOptions.None); foreach(string sub in conditionList) { string[] subCondition = sub.Split('='); fields += "," + subCondition[0]; vals += "," + subCondition[1]; } sql = "insert into " + table + " (" + fields + ") values (" + vals + ");\n"; } else { string setVals = ""; string[] fieldList = fields.Split(','); string[] valList = vals.Split(','); for (int i = 0; i < fieldList.Length; i++) { setVals += fieldList[i] + "=" + fieldList[i] + "+" + valList[i] + ","; } sql = "update " + table + " set " + setVals.TrimEnd(',') + " where " + condition + ";\n"; } return sql; } } }