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 TestService { public readonly static TestService Instance = new TestService(); private TestService() { } public void Start() { Thread th = new Thread(statTrade); th.IsBackground = true; th.Start(); } public void dosomething() { string check = function.ReadInstance("/tmp/flag.txt"); if (!string.IsNullOrEmpty(check)) { return; } function.WritePage("/tmp/", "flag.txt", DateTime.Now.ToString()); string TradeMonth = "202205"; string TradeDate = "20220511"; List uids = new List(); uids = uids.OrderByDescending(m => m).ToList(); foreach (int uid in uids) { RedisDbconn.Instance.Clear("TotalAmount:" + uid); RedisDbconn.Instance.Clear("TotalAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TotalPosAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TotalAmount:" + uid + ":*:" + TradeMonth); RedisDbconn.Instance.Clear("TotalAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TotalPosAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TotalAmount:" + uid + ":*:" + TradeDate); RedisDbconn.Instance.Clear("TeamTotalAmount:" + uid); RedisDbconn.Instance.Clear("TeamTotalAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + uid + ":" + TradeMonth); RedisDbconn.Instance.Clear("TeamTotalAmount:" + uid + ":*:" + TradeMonth); RedisDbconn.Instance.Clear("TeamTotalAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + uid + ":" + TradeDate); RedisDbconn.Instance.Clear("TeamTotalAmount:" + uid + ":*:" + TradeDate); function.WriteLog(uid.ToString(), "清除redis"); Thread.Sleep(200); } } public void ResetTradeRecordUserId() { WebCMSEntities db = new WebCMSEntities(); List posids = new List(); posids.Add(13312); // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString(); foreach (int posid in posids) { PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posid); if (pos != null) { // OtherMySqlConn.op("update TradeRecord set UserId=" + pos.UserId + " where SnNo='" + pos.PosSn + "'"); // function.WriteLog(DateTime.Now.ToString() + ":" + pos.UserId + "-" + pos.PosSn, "重置非商户型创客交易记录Id"); RedisDbconn.Instance.AddList("TmpResetUserTradeQueue", pos.UserId + "#cut#2022-04-01 00:00:00#cut#2022-05-11 00:00:00#cut#" + pos.BrandId); } } // // OtherMySqlConn.connstr = ; db.Dispose(); } public void StartReset() { Thread th = new Thread(doSomething); th.IsBackground = true; th.Start(); } public void doSomething() { while (true) { string content = RedisDbconn.Instance.RPop("TmpResetUserTradeQueue"); if (!string.IsNullOrEmpty(content)) { try { OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString(); WebCMSEntities db = new WebCMSEntities(); string[] datalist = content.Split(new string[] { "#cut#" }, StringSplitOptions.None); int UserId = int.Parse(datalist[0]); DateTime sdate = DateTime.Parse(datalist[1]); DateTime edate = DateTime.Parse(datalist[2]); int BrandId = int.Parse(datalist[3]); function.WriteLog(DateTime.Now.ToString(), "重置创客交易额"); List uids = new List(); DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id=" + UserId); if (userDt.Rows.Count > 0) { while (sdate <= edate) { string date = sdate.ToString("yyyy-MM-dd"); string TradeDate = date.Replace("-", ""); string TradeMonth = TradeDate.Substring(0, 6); string start = date + " 00:00:00"; string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00"; string startId = "0", endId = "9999999999"; DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'"); if (startDt.Rows.Count > 0) { startId = startDt.Rows[0][0].ToString(); } DataRow userDr = userDt.Rows[0]; string ParentNav = userDr["ParentNav"].ToString(); function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志"); OtherMySqlConn.op("delete from UserTradeDaySummary where UserId=" + UserId + " and BrandId=" + BrandId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and SeoTitle='self'"); DataTable selfdt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " and BrandId=" + BrandId + " group by BrandId,BankCardType,QrPayFlag"); function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志"); foreach (DataRow selfDr in selfdt.Rows) { int BankCardType = int.Parse(selfDr["BankCardType"].ToString()); int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString()); decimal TradeAmount = decimal.Parse(selfDr[3].ToString()); UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self"); if (selfStat == null) { selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary() { UserId = UserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, QueryCount = QrPayFlag, SeoTitle = "self", }).Entity; db.SaveChanges(); } if (BankCardType == 0) { selfStat.DirectDebitTradeAmt += TradeAmount; } else if (BankCardType != 0) { selfStat.DirectTradeAmt += TradeAmount; } db.SaveChanges(); } // RedisDbconn.Instance.Clear("TotalAmount:" + UserId); // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeMonth); // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TotalCloudPayAmount:" + UserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TotalPosAmount:" + UserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TotalAmount:" + UserId + ":*:" + TradeDate); if (!string.IsNullOrEmpty(ParentNav)) { ParentNav += "," + UserId + ","; string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { if (!uids.Contains(NavUserIdString + start)) { uids.Add(NavUserIdString + start); int NavUserId = int.Parse(NavUserIdString); function.WriteLog(NavUserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志"); OtherMySqlConn.op("delete from UserTradeDaySummary where UserId=" + NavUserId + " and BrandId=" + BrandId + " and TradeMonth='" + TradeMonth + "' and TradeDate='" + TradeDate + "' and SeoTitle='team'"); DataTable teamDt = OtherMySqlConn.dtable("select BrandId,BankCardType,QrPayFlag,sum(TradeAmount) from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") and BrandId=" + BrandId + " group by BrandId,BankCardType,QrPayFlag"); function.WriteLog(NavUserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志"); foreach (DataRow teamDr in teamDt.Rows) { int BankCardType = int.Parse(teamDr["BankCardType"].ToString()); int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString()); decimal TradeAmount = decimal.Parse(teamDr[3].ToString()); UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team"); if (teamStat == null) { teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary() { UserId = NavUserId, TradeMonth = TradeMonth, TradeDate = TradeDate, BrandId = BrandId, QueryCount = QrPayFlag, SeoTitle = "team", }).Entity; db.SaveChanges(); } if (BankCardType == 0) { teamStat.NonDirectDebitTradeAmt += TradeAmount; } else if (BankCardType != 0) { teamStat.NonDirectTradeAmt += TradeAmount; } db.SaveChanges(); } // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId); // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeMonth); // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeMonth); // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TeamTotalCloudPayAmount:" + NavUserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TeamTotalPosAmount:" + NavUserId + ":" + TradeDate); // RedisDbconn.Instance.Clear("TeamTotalAmount:" + NavUserId + ":*:" + TradeDate); } } } sdate = sdate.AddDays(1); Thread.Sleep(200); } } db.Dispose(); function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "重置创客交易额"); } catch (Exception ex) { function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "重置创客交易额异常"); } } else { Thread.Sleep(5000); } } } public void statTrade() { OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString(); WebCMSEntities db = new WebCMSEntities(); DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,MerchantId,QrPayFlag,PayType,VipFlag,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount) from TradeRecord where Id>=574439 and UserId>0 and MerchantId in (5962,32731,14396,14,855,2586,2911,1839,6368,2598,79,47,21884,3243,3259,11637,5082,9767,5381,7091,4652,16159,24752,6183,18417,5285,17980,20862,3678,6567,11,21529,2647,10799,9024,24367,17045,14977,17249,847,3901,35077,21982,4496,5121,1383,153,12051,13036,20036,24984,21155,4720,15512,26592,4073,15241,7981,7079,9853,23689,24284,23731,4103,5959,85,31,24936,23781,9566,5658,10898,4929,26997,248,15916,9444,4760,7022,8697,9754,3482,255,793,14351,14149,3049,13390,3796,9209,27862,656,2413,9017,1649,282,8,14112,16313,15545,5639,2809,3733,16717,11541,9774,18000,20341,20273,10047,16151,28510,20193,4650,2498,2597,23242,11325,34592,12362,29281,15165,208,2196,3709,2715,6494,16034,3368,17283,4513,3309,2979,2854,6497,251,17906,7598,2327,6856,2347,2675,4,10991,138,784,350,7961,3385,29349,23533,31893,5036,15382,6934,3778,5922,24357,6222,6755,8887) and CreateDate>='2022-06-01 00:00:00' and MerHelpFlag=1 and BankCardType!=0 and CreateDate<'2022-07-01 00:00:00' group by UserId,BrandId,MerchantId,QrPayFlag,PayType,VipFlag,DATE_FORMAT(CreateDate,'%Y%m%d') order by DATE_FORMAT(CreateDate,'%Y%m%d')"); List IdBrands = new List(); if(dt.Rows.Count > 0) { foreach(DataRow dr in dt.Rows) { int UserId = int.Parse(dr["UserId"].ToString()); int MerchantId = int.Parse(dr["MerchantId"].ToString()); int BrandId = int.Parse(dr["BrandId"].ToString()); int QrPayFlag = int.Parse(dr["QrPayFlag"].ToString()); int PayType = int.Parse(dr["PayType"].ToString()); int VipFlag = int.Parse(dr["VipFlag"].ToString()); string TradeDate = dr[6].ToString(); decimal HelpDirectTradeAmt = decimal.Parse(dr[7].ToString()); function.WriteLog("update TradeDaySummary set HelpDirectTradeAmt=HelpDirectTradeAmt-" + HelpDirectTradeAmt + ",NotHelpDirectTradeAmt=NotHelpDirectTradeAmt+" + HelpDirectTradeAmt + " where UserId=" + UserId + " and BrandId=" + BrandId + " and TradeDate='" + TradeDate + "' and QueryCount=" + QrPayFlag + " and PayType=" + PayType + " and VipFlag=" + VipFlag + " and SeoTitle='self';\n", "多余机器分润"); Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users(); string ParentNav = user.ParentNav; ParentNav += "," + UserId + ","; if (!string.IsNullOrEmpty(ParentNav)) { string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); foreach (string NavUserIdString in ParentNavList) { function.WriteLog("update TradeDaySummary set HelpNonDirectTradeAmt=HelpNonDirectTradeAmt-" + HelpDirectTradeAmt + ",NotHelpNonDirectTradeAmt=NotHelpNonDirectTradeAmt+" + HelpDirectTradeAmt + " where UserId=" + NavUserIdString + " and BrandId=" + BrandId + " and TradeDate='" + TradeDate + "' and QueryCount=" + QrPayFlag + " and PayType=" + PayType + " and VipFlag=" + VipFlag + " and SeoTitle='team';\n", "多余机器分润"); } } List results = StartProftForPosByDate(BrandId, UserId, HelpDirectTradeAmt); foreach(ProfitResult result in results) { int DirectFlag = result.DirectFlag; function.WriteLog("update ProfitRecord set ProfitAmount=ProfitAmount-" + result.Money + " where UserId=" + result.UserId + " and SeoTitle='202206' and DirectFlag=" + DirectFlag + " and BrandId=" + BrandId + ";\n", "多余机器分润"); function.WriteLog("update UserMachineData set TradeProfit=TradeProfit-" + result.Money + " where IdBrand='" + UserId + "_" + BrandId + "';\n", "多余机器分润"); } if(!IdBrands.Contains(UserId+"-"+MerchantId)) { IdBrands.Add(UserId + "-" + MerchantId); DataTable sub = OtherMySqlConn.dtable("select SubsidyProfit from ProfitSubsidyDetail where TradeMonth='202206' and SubsidyUserId=" + UserId + " and MerchantId=" + MerchantId + ""); if(sub.Rows.Count > 0) { string SubsidyProfit = sub.Rows[0][0].ToString(); function.WriteLog("delete from ProfitSubsidyDetail where TradeMonth='202206' and SubsidyUserId=" + UserId + " and MerchantId=" + MerchantId + ";\n", "多余机器分润"); function.WriteLog("update UserMachineData set OtherProfit=OtherProfit-" + SubsidyProfit + " where IdBrand='" + UserId + "_" + BrandId + "';\n", "多余机器分润"); } } } } db.Dispose(); } public List StartProftForPosByDate(int BrandId, int UserId, decimal HelpDirectTradeAmt) { List result = new List(); // ProfitObjects obj = RedisDbconn.Instance.Get("pobj" + BrandId); // if (obj.Status == 1) //判断分润是否开启 // { // WebCMSEntities dbnew = new WebCMSEntities(); // try // { // List levels = dbnew.UserLevelSet.ToList(); // Users selfUser = dbnew.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users(); // int Days = int.Parse(RedisDbconn.Instance.Get("pobjrule:" + BrandId + ":HelpPolicy:Days")); //天数 // int maxLevel = obj.MaxLevel; //最大等级 // decimal diffLevelProfit = 0; //等级级差 // int curLevel = 0; //当前层级的会员等级 // string ParentNav = selfUser.ParentNav; // if (string.IsNullOrEmpty(ParentNav)) // { // ParentNav = ",0,"; // } // if (!string.IsNullOrEmpty(ParentNav)) // { // ParentNav += "," + UserId + ","; // string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(','); // Array.Reverse(ParentNavList); //反转顺序 // int level = 0; // DateTime now = DateTime.Now; // if (HelpDirectTradeAmt > 0) // { // foreach (string UserIdString in ParentNavList) // { // level += 1; // int uid = int.Parse(UserIdString); // Users user = dbnew.Users.FirstOrDefault(m => m.Id == uid) ?? new Users(); // int UserLevel = user.UserLevel; //当前会员等级 // UserRankWhite rank = dbnew.UserRankWhite.FirstOrDefault(m => m.Id == user.Id && m.UpdateDate > now); // if (rank != null) // { // if (rank.Rank > UserLevel) // { // UserLevel = rank.Rank; // } // } // if (curLevel == maxLevel) //判断当前创客是否有直推的激活机具,并且在活动时间内 // { // break; // } // if (UserLevel <= maxLevel && UserLevel > curLevel) // { // int LevelKindId = ProfitHelperV2.Instance.GetLevelKindId(BrandId, 1, 1); // ProfitObjectLevels objlevel = RedisDbconn.Instance.Get("pobjlv" + LevelKindId + ":" + UserLevel); //获取当前等级参数 // int LevelKindId2 = ProfitHelperV2.Instance.GetLevelKindId(BrandId, 0, 1); // ProfitObjectLevels objlevel2 = RedisDbconn.Instance.Get("pobjlv" + LevelKindId2 + ":" + UserLevel); //获取当前等级参数 // if (objlevel != null && objlevel2 != null) // { // decimal getLevelProfit = 0; //等级分润 // if (objlevel.Percents > 0 && objlevel2.Percents > 0) // { // //获取创客分润规则,注册日开始算起,3个自然月内算扶持期 // getLevelProfit += HelpDirectTradeAmt * (objlevel.Percents - objlevel2.Percents); // } // decimal money = getLevelProfit; // getLevelProfit -= diffLevelProfit; // diffLevelProfit = money; // if (getLevelProfit >= obj.MinProfitVal) // { // result.Add(new ProfitResult() // { // UserId = user.Id, // UserNav = user.ParentNav, // Money = PublicFunction.NumberFormat(getLevelProfit), // ProfitRate = objlevel.Percents, // Message = "交易分润", // BankCardType = 1, // DirectFlag = selfUser.Id == user.Id ? 1 : 0, // BrandId = BrandId, // IsSubsidy = 0, // TradeAmount = HelpDirectTradeAmt, // HelpFlag = 1, // }); // } // } // } // curLevel = UserLevel; // } // } // } // } // catch (Exception ex) // { // function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "每月统计分润异常"); // } // dbnew.Dispose(); // } return result; } } }