StatService.cs 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222
  1. using System;
  2. using System.Collections.Generic;
  3. using Library;
  4. using LitJson;
  5. using System.Linq;
  6. using System.Data;
  7. using System.Threading;
  8. using MySystem.PxcModels;
  9. namespace MySystem
  10. {
  11. public class StatService
  12. {
  13. public readonly static StatService Instance = new StatService();
  14. private StatService()
  15. { }
  16. // 统计交易额V2
  17. public void StartEverDayV2()
  18. {
  19. Thread th = new Thread(StartEverDayV2Do);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. public void StartEverDayV2Do()
  24. {
  25. while (true)
  26. {
  27. if(DateTime.Now.Hour >= 3)
  28. {
  29. StatTradeAmountEverDayV2();
  30. StatBusinessService.Instance.StatTradeAmountEverDayV2();
  31. StatHelpProfitService.Instance.StatTradeAmountEverDayV2();
  32. }
  33. Thread.Sleep(30000);
  34. }
  35. }
  36. //补交易额
  37. public void StartOther()
  38. {
  39. Thread th = new Thread(StartOtherV2Do);
  40. th.IsBackground = true;
  41. th.Start();
  42. }
  43. public void StartOtherV2Do()
  44. {
  45. while (true)
  46. {
  47. string content = RedisDbconn.Instance.RPop<string>("AddTradeRecordByPosIdQueue");
  48. if(!string.IsNullOrEmpty(content))
  49. {
  50. int PosId = int.Parse(function.CheckInt(content));
  51. WebCMSEntities db = new WebCMSEntities();
  52. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1);
  53. if(pos != null)
  54. {
  55. var Trades = db.TradeRecord.Select(m => new { m.Id, m.SnNo, m.CreateDate, m.ActStatus, m.MerchantId, m.BrandId, m.TradeAmount }).Where(m => m.SnNo == pos.PosSn && m.CreateDate <= pos.ActivationTime && m.ActStatus == 0).ToList();
  56. foreach(var Trade in Trades)
  57. {
  58. //补创客交易
  59. StatTradeAmountEverDayV2(Trade.Id);
  60. //补商户交易
  61. if(Trade.CreateDate.Value < DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"))
  62. {
  63. string StatDate = Trade.CreateDate.Value.ToString("yyyyMMdd");
  64. string StatMonth = StatDate.Substring(0, 6);
  65. PosMerchantTradeSummay stat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.BrandId == Trade.BrandId && m.MerchantId == Trade.MerchantId && m.TradeMonth == StatMonth && m.TradeDate == StatDate);
  66. if(stat == null)
  67. {
  68. stat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
  69. {
  70. BrandId = Trade.BrandId,
  71. MerchantId = Trade.MerchantId,
  72. TradeMonth = StatMonth,
  73. TradeDate = StatDate,
  74. }).Entity;
  75. db.SaveChanges();
  76. }
  77. stat.TradeAmount += Trade.TradeAmount;
  78. db.SaveChanges();
  79. }
  80. //交易记录设置标记(已执行,激活标记为已激活)
  81. CustomerSqlConn.op("update TradeRecord set QueryCount=1,ActStatus=1 where Id=" + Trade.Id, AppConfig.Base.SqlConn);
  82. }
  83. }
  84. db.Dispose();
  85. Thread.Sleep(1000);
  86. }
  87. else
  88. {
  89. Thread.Sleep(60000);
  90. }
  91. }
  92. }
  93. public void StatTradeAmountEverDayV2(int Id = 0)
  94. {
  95. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  96. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行交易额V2日志");
  97. WebCMSEntities db = new WebCMSEntities();
  98. using (var tran = db.Database.BeginTransaction())
  99. {
  100. try
  101. {
  102. string startId = function.ReadInstance("/TradeRecord/Id.txt");
  103. if(string.IsNullOrEmpty(startId))
  104. {
  105. startId = "867041";
  106. }
  107. string sql = "select Id from TradeRecord where Id>=" + startId + " and QueryCount=0 and ActStatus=1 order by Id limit 50";
  108. if(Id > 0)
  109. {
  110. sql = "select Id from TradeRecord where Id=" + Id;
  111. }
  112. DataTable idsDt = OtherMySqlConn.dtable(sql);
  113. if(idsDt.Rows.Count > 0)
  114. {
  115. string ids = "";
  116. foreach (DataRow idsDr in idsDt.Rows)
  117. {
  118. ids += idsDr["Id"].ToString() + ",";
  119. if(Id == 0)
  120. {
  121. startId = idsDr["Id"].ToString();
  122. }
  123. }
  124. DataTable selfDt = OtherMySqlConn.dtable("select UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id) from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d')");
  125. if (selfDt.Rows.Count > 0)
  126. {
  127. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时执行交易额V2日志");
  128. foreach (DataRow selfDr in selfDt.Rows)
  129. {
  130. int UserId = int.Parse(selfDr["UserId"].ToString());
  131. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  132. string ParentNav = user.ParentNav; //selfDr["ParentNav"].ToString();
  133. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  134. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  135. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  136. int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
  137. int Version = int.Parse(selfDr["Version"].ToString());
  138. int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
  139. int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
  140. int PayType = int.Parse(selfDr["PayType"].ToString());
  141. string TradeDate = selfDr[10].ToString();
  142. decimal TradeAmount = decimal.Parse(selfDr[11].ToString());
  143. int TradeCount = int.Parse(selfDr[12].ToString());
  144. string TradeMonth = TradeDate.Substring(0, 6);
  145. TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "self");
  146. if (selfStat == null)
  147. {
  148. selfStat = db.TradeDaySummary.Add(new TradeDaySummary()
  149. {
  150. UserId = UserId,
  151. TradeMonth = TradeMonth,
  152. TradeDate = TradeDate,
  153. BrandId = BrandId,
  154. QueryCount = QrPayFlag,
  155. VipFlag = VipFlag,
  156. PayType = PayType,
  157. SeoTitle = "self",
  158. }).Entity;
  159. db.SaveChanges();
  160. }
  161. if (BankCardType == 0)
  162. {
  163. if (Version == 1)
  164. {
  165. selfStat.ProfitDirectDebitTradeAmt += TradeAmount;
  166. if (CapFlag == 1)
  167. {
  168. selfStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  169. selfStat.ProfitDirectDebitCapNum += TradeCount;
  170. }
  171. }
  172. else if (MerHelpFlag == 1)
  173. {
  174. selfStat.HelpDirectDebitTradeAmt += TradeAmount;
  175. if (CapFlag == 1)
  176. {
  177. selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  178. selfStat.HelpDirectDebitCapNum += TradeCount;
  179. }
  180. }
  181. else
  182. {
  183. selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
  184. if (CapFlag == 1)
  185. {
  186. selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  187. selfStat.NotHelpDirectDebitCapNum += TradeCount;
  188. }
  189. }
  190. }
  191. else if (BankCardType != 0)
  192. {
  193. if (Version == 1)
  194. {
  195. selfStat.ProfitDirectTradeAmt += TradeAmount;
  196. }
  197. else if (MerHelpFlag == 1)
  198. {
  199. selfStat.HelpDirectTradeAmt += TradeAmount;
  200. }
  201. else
  202. {
  203. selfStat.NotHelpDirectTradeAmt += TradeAmount;
  204. }
  205. }
  206. ParentNav += "," + UserId + ",";
  207. if (!string.IsNullOrEmpty(ParentNav))
  208. {
  209. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  210. foreach (string NavUserIdString in ParentNavList)
  211. {
  212. int NavUserId = int.Parse(NavUserIdString);
  213. TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "team");
  214. if (teamStat == null)
  215. {
  216. teamStat = db.TradeDaySummary.Add(new TradeDaySummary()
  217. {
  218. UserId = NavUserId,
  219. TradeMonth = TradeMonth,
  220. TradeDate = TradeDate,
  221. BrandId = BrandId,
  222. QueryCount = QrPayFlag,
  223. VipFlag = VipFlag,
  224. PayType = PayType,
  225. SeoTitle = "team",
  226. }).Entity;
  227. db.SaveChanges();
  228. }
  229. if (BankCardType == 0)
  230. {
  231. if (Version == 1)
  232. {
  233. teamStat.ProfitNonDirectDebitTradeAmt += TradeAmount;
  234. if (CapFlag == 1)
  235. {
  236. teamStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  237. teamStat.ProfitDirectDebitCapNum += TradeCount;
  238. }
  239. }
  240. else if (MerHelpFlag == 1)
  241. {
  242. teamStat.HelpNonDirectDebitTradeAmt += TradeAmount;
  243. if (CapFlag == 1)
  244. {
  245. teamStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  246. teamStat.HelpDirectDebitCapNum += TradeCount;
  247. }
  248. }
  249. else
  250. {
  251. teamStat.NotHelpNonDirectDebitTradeAmt += TradeAmount;
  252. if (CapFlag == 1)
  253. {
  254. teamStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  255. teamStat.NotHelpDirectDebitCapNum += TradeCount;
  256. }
  257. }
  258. }
  259. else if (BankCardType != 0)
  260. {
  261. if (Version == 1)
  262. {
  263. teamStat.ProfitNonDirectTradeAmt += TradeAmount;
  264. }
  265. else if (MerHelpFlag == 1)
  266. {
  267. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  268. }
  269. else
  270. {
  271. teamStat.NotHelpNonDirectTradeAmt += TradeAmount;
  272. }
  273. }
  274. }
  275. }
  276. Dictionary<string, object> statData = new Dictionary<string, object>();
  277. statData.Add("UserId", UserId);
  278. statData.Add("BrandId", BrandId);
  279. statData.Add("BankCardType", BankCardType);
  280. statData.Add("QrPayFlag", QrPayFlag);
  281. statData.Add("MerHelpFlag", MerHelpFlag);
  282. statData.Add("Version", Version);
  283. statData.Add("CapFlag", CapFlag);
  284. statData.Add("VipFlag", VipFlag);
  285. statData.Add("PayType", PayType);
  286. statData.Add("TradeDate", TradeDate);
  287. statData.Add("TradeAmount", TradeAmount);
  288. statData.Add("TradeCount", TradeCount);
  289. RedisDbconn.Instance.AddList("StatTradeAmountQueue", Newtonsoft.Json.JsonConvert.SerializeObject(statData));
  290. }
  291. OtherMySqlConn.op("update TradeRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  292. if(Id == 0)
  293. {
  294. function.WritePage("/TradeRecord/", "Id.txt", startId);
  295. }
  296. }
  297. db.SaveChanges();
  298. }
  299. tran.Commit();
  300. }
  301. catch (Exception ex)
  302. {
  303. tran.Rollback();
  304. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天交易额V2异常");
  305. }
  306. }
  307. db.Dispose();
  308. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行交易额V2日志");
  309. }
  310. // 每天统计头一天的交易额
  311. public void StartEverDay(string date)
  312. {
  313. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  314. // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
  315. // DateTime check = DateTime.Parse("2022-03-11");
  316. // while (check <= end)
  317. // {
  318. // Thread th = new Thread(StatTradeAmountEverDay);
  319. // th.IsBackground = true;
  320. // th.Start(check.ToString("yyyy-MM-dd"));
  321. // check = check.AddDays(1);
  322. // }
  323. if (DateTime.Now.Day == 2)
  324. {
  325. OtherMySqlConn.op("update Users set ThisMonthTrade=0 where ThisMonthTrade>0");
  326. DataTable list = OtherMySqlConn.dtable("select UserId,sum(NonDirectTradeAmt) from UserTradeDaySummary where TradeMonth='" + DateTime.Now.ToString("yyyyMM") + "' GROUP BY UserId");
  327. foreach (DataRow dr in list.Rows)
  328. {
  329. string UserId = dr["UserId"].ToString();
  330. string ThisMonthTrade = dr[1].ToString();
  331. OtherMySqlConn.op("update Users set ThisMonthTrade=" + ThisMonthTrade + " where Id=" + UserId);
  332. }
  333. }
  334. Thread th = new Thread(StatTradeAmountEverDay);
  335. th.IsBackground = true;
  336. th.Start(date);
  337. }
  338. public void StatTradeAmountEverDay(object sender)
  339. {
  340. string date = sender.ToString();
  341. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
  342. WebCMSEntities db = new WebCMSEntities();
  343. try
  344. {
  345. string TradeDate = date.Replace("-", "");
  346. string TradeMonth = TradeDate.Substring(0, 6);
  347. string start = date + " 00:00:00";
  348. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  349. string startId = "0", endId = "9999999999";
  350. List<string> uids = new List<string>();
  351. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
  352. if (startDt.Rows.Count > 0)
  353. {
  354. startId = startDt.Rows[0][0].ToString();
  355. }
  356. function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
  357. // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
  358. // if (endDt.Rows.Count > 0)
  359. // {
  360. // endId = endDt.Rows[0][0].ToString();
  361. // }
  362. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from TradeRecord where Id>=" + startId + " and Id<=" + endId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
  363. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
  364. foreach (DataRow userDr in userDt.Rows)
  365. {
  366. int UserId = int.Parse(userDr["Id"].ToString());
  367. string ParentNav = userDr["ParentNav"].ToString();
  368. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  369. 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 + " group by BrandId,BankCardType,QrPayFlag");
  370. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  371. foreach (DataRow selfDr in selfdt.Rows)
  372. {
  373. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  374. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  375. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  376. decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
  377. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  378. if (selfStat == null)
  379. {
  380. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  381. {
  382. UserId = UserId,
  383. TradeMonth = TradeMonth,
  384. TradeDate = TradeDate,
  385. BrandId = BrandId,
  386. QueryCount = QrPayFlag,
  387. SeoTitle = "self",
  388. }).Entity;
  389. db.SaveChanges();
  390. }
  391. if (BankCardType == 0)
  392. {
  393. selfStat.DirectDebitTradeAmt += TradeAmount;
  394. }
  395. else if (BankCardType != 0)
  396. {
  397. selfStat.DirectTradeAmt += TradeAmount;
  398. }
  399. db.SaveChanges();
  400. }
  401. if (!string.IsNullOrEmpty(ParentNav))
  402. {
  403. ParentNav += "," + UserId + ",";
  404. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  405. foreach (string NavUserIdString in ParentNavList)
  406. {
  407. if (!uids.Contains(NavUserIdString + start))
  408. {
  409. uids.Add(NavUserIdString + start);
  410. int NavUserId = int.Parse(NavUserIdString);
  411. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  412. 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 + ") group by BrandId,BankCardType,QrPayFlag");
  413. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  414. foreach (DataRow teamDr in teamDt.Rows)
  415. {
  416. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  417. int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
  418. int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
  419. decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
  420. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  421. if (teamStat == null)
  422. {
  423. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  424. {
  425. UserId = NavUserId,
  426. TradeMonth = TradeMonth,
  427. TradeDate = TradeDate,
  428. BrandId = BrandId,
  429. QueryCount = QrPayFlag,
  430. SeoTitle = "team",
  431. }).Entity;
  432. db.SaveChanges();
  433. }
  434. if (BankCardType == 0)
  435. {
  436. teamStat.NonDirectDebitTradeAmt += TradeAmount;
  437. }
  438. else if (BankCardType != 0)
  439. {
  440. teamStat.NonDirectTradeAmt += TradeAmount;
  441. }
  442. db.SaveChanges();
  443. }
  444. }
  445. }
  446. }
  447. }
  448. if (DateTime.Now.Day >= 2)
  449. {
  450. Thread.Sleep(5000);
  451. DataTable list = OtherMySqlConn.dtable("select UserId,sum(NonDirectTradeAmt) from UserTradeDaySummary where TradeDate='" + TradeDate + "' GROUP BY UserId");
  452. foreach (DataRow dr in list.Rows)
  453. {
  454. string UserId = dr["UserId"].ToString();
  455. string ThisMonthTrade = dr[1].ToString();
  456. OtherMySqlConn.op("update Users set ThisMonthTrade=ThisMonthTrade+" + ThisMonthTrade + " where Id=" + UserId);
  457. }
  458. }
  459. }
  460. catch (Exception ex)
  461. {
  462. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
  463. }
  464. db.Dispose();
  465. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  466. StatMerchantTrade(date);
  467. }
  468. public void StatTradeAmountEverDaySum()
  469. {
  470. // WebCMSEntities db = new WebCMSEntities();
  471. // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  472. // DataTable dt = OtherMySqlConn.dtable("select UserId,BrandId,QueryCount,TradeDate,TradeMonth,sum(DirectDebitTradeAmt) as DirectDebitTradeAmt,sum(DirectTradeAmt) as DirectTradeAmt,sum(NonDirectDebitTradeAmt) as NonDirectDebitTradeAmt,sum(NonDirectTradeAmt) as NonDirectTradeAmt from UserTradeDaySummary group by UserId,BrandId,QueryCount,TradeDate,TradeMonth order by UserId,BrandId,QueryCount");
  473. // string html = "<table>";
  474. // foreach (DataRow dr in dt.Rows)
  475. // {
  476. // html += "<tr>";
  477. // string TradeDate = dr["TradeDate"].ToString();
  478. // string TradeMonth = dr["TradeMonth"].ToString();
  479. // int UserId = int.Parse(dr["UserId"].ToString());
  480. // int BrandId = int.Parse(dr["BrandId"].ToString());
  481. // int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
  482. // decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
  483. // decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
  484. // decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
  485. // decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
  486. // decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
  487. // CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
  488. // CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
  489. // CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
  490. // CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
  491. // decimal TotalPosAmount = 0;
  492. // decimal TotalCloudPayAmount = 0;
  493. // decimal TeamTotalPosAmount = 0;
  494. // decimal TeamTotalCloudPayAmount = 0;
  495. // if (QrPayFlag == 1)
  496. // {
  497. // TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
  498. // TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
  499. // }
  500. // else
  501. // {
  502. // TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
  503. // TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
  504. // }
  505. // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  506. // html += "<td>应得</td>";
  507. // html += "<td>" + user.MakerCode + "</td>";
  508. // html += "<td>" + user.RealName + "</td>";
  509. // html += "<td>" + user.Mobile + "</td>";
  510. // html += "<td>" + BrandId + "</td>";
  511. // html += "<td>" + QrPayFlag + "</td>";
  512. // html += "<td>" + DirectDebitTradeAmt + "</td>";
  513. // html += "<td>" + DirectTradeAmt + "</td>";
  514. // html += "<td>" + NonDirectDebitTradeAmt + "</td>";
  515. // html += "<td>" + NonDirectTradeAmt + "</td>";
  516. // html += "</tr>";
  517. // html += "<tr>";
  518. // html += "<td>当前</td>";
  519. // html += "<td></td>";
  520. // html += "<td></td>";
  521. // html += "<td>当天品牌:" + CurAmount + "</td>";
  522. // html += "<td>总交易:" + CurTotalAmount + "</td>";
  523. // html += "<td>当月:" + CurMonthAmount + "</td>";
  524. // html += "<td>当天:" + CurDayAmount + "</td>";
  525. // html += "<td>" + TotalPosAmount + "</td>";
  526. // html += "<td>" + TotalCloudPayAmount + "</td>";
  527. // html += "<td>" + TeamTotalPosAmount + "</td>";
  528. // html += "<td>" + TeamTotalCloudPayAmount + "</td>";
  529. // html += "</tr>";
  530. // }
  531. // html += "</table>";
  532. // db.Dispose();
  533. // // OtherMySqlConn.connstr = ;
  534. // function.WritePage("/html/", "1.html", html);
  535. }
  536. //统计商户交易额
  537. private void StatMerchantTrade(string date)
  538. {
  539. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
  540. // WebCMSEntities db = new WebCMSEntities();
  541. try
  542. {
  543. string start = date + " 00:00:00";
  544. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  545. OtherMySqlConn.op("insert into PosMerchantTradeSummay (MerchantId,BrandId,TradeDate,TradeMonth,TradeAmount,CreateDate) select *,now() from (select MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d') as TradeDate,DATE_FORMAT(CreateDate,'%Y%m') as TradeMonth,sum(TradeAmount) as TradeAmount from TradeRecord where CreateDate>='" + start + "' and CreateDate<'" + end + "' group by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d'),TradeDate,DATE_FORMAT(CreateDate,'%Y%m') order by MerchantId,BrandId,DATE_FORMAT(CreateDate,'%Y%m%d')) tb");
  546. }
  547. catch (Exception ex)
  548. {
  549. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
  550. }
  551. // db.Dispose();
  552. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
  553. }
  554. // 统计创客激活数
  555. public void StartPosActNum()
  556. {
  557. Thread th = new Thread(StartPosActNumFor);
  558. th.IsBackground = true;
  559. th.Start();
  560. }
  561. public void StartPosActNumFor()
  562. {
  563. // DateTime end = DateTime.Parse("2022-06-15 00:00:00");
  564. // DateTime check = DateTime.Parse("2022-06-14");
  565. // while (check <= end)
  566. // {
  567. // StartPosActNumDo(check.ToString("yyyy-MM-dd"));
  568. // check = check.AddDays(1);
  569. // }
  570. while (true)
  571. {
  572. if(DateTime.Now.Hour >= 3)
  573. {
  574. StartPosActNumEverTime();
  575. StatBusinessService.Instance.StartPosActNumEverTime();
  576. }
  577. Thread.Sleep(120000);
  578. }
  579. }
  580. public void StartPosActNumDo(object sender)
  581. {
  582. string date = sender.ToString();
  583. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
  584. WebCMSEntities db = new WebCMSEntities();
  585. try
  586. {
  587. string TradeDate = date.Replace("-", "");
  588. string TradeMonth = TradeDate.Substring(0, 6);
  589. string start = date + " 00:00:00";
  590. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  591. List<string> uids = new List<string>();
  592. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT BuyUserId from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "')");
  593. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
  594. foreach (DataRow userDr in userDt.Rows)
  595. {
  596. int UserId = int.Parse(userDr["Id"].ToString());
  597. string ParentNav = userDr["ParentNav"].ToString();
  598. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  599. DataTable selfdt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId=" + UserId + " group by BrandId");
  600. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  601. foreach (DataRow selfDr in selfdt.Rows)
  602. {
  603. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  604. int QrPayFlag = 0;
  605. int ActCount = int.Parse(selfDr[1].ToString());
  606. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  607. if (selfStat == null)
  608. {
  609. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  610. {
  611. UserId = UserId,
  612. TradeMonth = TradeMonth,
  613. TradeDate = TradeDate,
  614. BrandId = BrandId,
  615. QueryCount = QrPayFlag,
  616. SeoTitle = "self",
  617. }).Entity;
  618. db.SaveChanges();
  619. }
  620. selfStat.DirectDebitCapNum += ActCount;
  621. db.SaveChanges();
  622. }
  623. if (!string.IsNullOrEmpty(ParentNav))
  624. {
  625. ParentNav += "," + UserId + ",";
  626. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  627. foreach (string NavUserIdString in ParentNavList)
  628. {
  629. if (!uids.Contains(NavUserIdString + start))
  630. {
  631. uids.Add(NavUserIdString + start);
  632. int NavUserId = int.Parse(NavUserIdString);
  633. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  634. DataTable teamDt = OtherMySqlConn.dtable("select BrandId,count(Id) from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "' and BuyUserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by BrandId");
  635. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  636. foreach (DataRow teamDr in teamDt.Rows)
  637. {
  638. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  639. int QrPayFlag = 0;
  640. int ActCount = int.Parse(teamDr[1].ToString());
  641. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  642. if (teamStat == null)
  643. {
  644. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  645. {
  646. UserId = NavUserId,
  647. TradeMonth = TradeMonth,
  648. TradeDate = TradeDate,
  649. BrandId = BrandId,
  650. QueryCount = QrPayFlag,
  651. SeoTitle = "team",
  652. }).Entity;
  653. db.SaveChanges();
  654. }
  655. teamStat.NonDirectDebitCapNum += ActCount;
  656. db.SaveChanges();
  657. }
  658. }
  659. }
  660. }
  661. }
  662. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
  663. }
  664. catch (Exception ex)
  665. {
  666. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
  667. }
  668. db.Dispose();
  669. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  670. Thread.Sleep(60000);
  671. }
  672. public void StartPosActNumEverTime()
  673. {
  674. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  675. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行创客激活数日志");
  676. WebCMSEntities db = new WebCMSEntities();
  677. try
  678. {
  679. DataTable idsDt = OtherMySqlConn.dtable("select Id from PosMachinesTwo where QueryCount=0 and ActivationState=1 and ActivationTime is not null and ActivationTime>='2022-06-01 00:00:00' and BuyUserId>0 limit 50");
  680. if(idsDt.Rows.Count > 0)
  681. {
  682. string ids = "";
  683. foreach (DataRow idsDr in idsDt.Rows)
  684. {
  685. ids += idsDr["Id"].ToString() + ",";
  686. }
  687. DataTable userDt = OtherMySqlConn.dtable("select BuyUserId,StoreId,BrandId,DATE_FORMAT(ActivationTime, '%Y%m%d'),count(Id) from PosMachinesTwo where Id in (" + ids.TrimEnd(',') + ") group by BuyUserId,StoreId,BrandId,DATE_FORMAT(ActivationTime, '%Y%m%d')");
  688. if (userDt.Rows.Count > 0)
  689. {
  690. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行创客激活数日志");
  691. foreach (DataRow userDr in userDt.Rows)
  692. {
  693. int UserId = int.Parse(userDr["BuyUserId"].ToString());
  694. int StoreId = int.Parse(userDr["StoreId"].ToString());
  695. int BrandId = int.Parse(userDr["BrandId"].ToString());
  696. string TradeDate = userDr[3].ToString();
  697. int ActCount = int.Parse(function.CheckInt(userDr[4].ToString()));
  698. int QrPayFlag = 0;
  699. string TradeMonth = TradeDate.Substring(0, 6);
  700. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  701. string start = date + " 00:00:00";
  702. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  703. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  704. string ParentNav = user.ParentNav;
  705. UserTradeMonthSummary selfStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  706. if (selfStat == null)
  707. {
  708. selfStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  709. {
  710. UserId = UserId,
  711. TradeMonth = TradeMonth,
  712. SeoKeyword = TradeDate,
  713. BrandId = BrandId,
  714. QueryCount = QrPayFlag,
  715. SeoTitle = "self",
  716. }).Entity;
  717. db.SaveChanges();
  718. }
  719. selfStat.ActiveBuddyMerStatus += ActCount;
  720. ParentNav += "," + UserId + ",";
  721. if (!string.IsNullOrEmpty(ParentNav))
  722. {
  723. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  724. foreach (string NavUserIdString in ParentNavList)
  725. {
  726. int NavUserId = int.Parse(NavUserIdString);
  727. UserTradeMonthSummary teamStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  728. if (teamStat == null)
  729. {
  730. teamStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  731. {
  732. UserId = NavUserId,
  733. TradeMonth = TradeMonth,
  734. SeoKeyword = TradeDate,
  735. BrandId = BrandId,
  736. QueryCount = QrPayFlag,
  737. SeoTitle = "team",
  738. }).Entity;
  739. db.SaveChanges();
  740. }
  741. teamStat.ActiveBuddyMerStatus += ActCount;
  742. }
  743. }
  744. //统计分仓激活数
  745. StoreSnActivateSummary storeStat = db.StoreSnActivateSummary.FirstOrDefault(m => m.StoreId == StoreId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
  746. if (storeStat == null)
  747. {
  748. storeStat = db.StoreSnActivateSummary.Add(new StoreSnActivateSummary()
  749. {
  750. StoreId = StoreId,
  751. TradeMonth = TradeMonth,
  752. TradeDate = TradeDate,
  753. BrandId = BrandId,
  754. }).Entity;
  755. db.SaveChanges();
  756. }
  757. storeStat.ActivateNum += ActCount;
  758. }
  759. db.SaveChanges();
  760. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  761. }
  762. }
  763. }
  764. catch (Exception ex)
  765. {
  766. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  767. }
  768. db.Dispose();
  769. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  770. }
  771. // 统计新增创客数
  772. public void StartNewUserNum()
  773. {
  774. Thread th = new Thread(StartNewUserNumFor);
  775. th.IsBackground = true;
  776. th.Start();
  777. }
  778. public void StartNewUserNumFor()
  779. {
  780. // DateTime end = DateTime.Parse("2022-06-15 00:00:00");
  781. // DateTime check = DateTime.Parse("2022-06-14");
  782. // while (check <= end)
  783. // {
  784. // StartNewUserNumDo(check.ToString("yyyy-MM-dd"));
  785. // check = check.AddDays(1);
  786. // }
  787. while (true)
  788. {
  789. if(DateTime.Now.Hour >= 3)
  790. {
  791. StartNewUserNumEverTime();
  792. }
  793. Thread.Sleep(120000);
  794. }
  795. }
  796. public void StartNewUserNumDo(object sender)
  797. {
  798. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  799. string date = sender.ToString();
  800. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
  801. WebCMSEntities db = new WebCMSEntities();
  802. try
  803. {
  804. string StatDate = date.Replace("-", "");
  805. string StatMonth = StatDate.Substring(0, 6);
  806. string start = date + " 00:00:00";
  807. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  808. List<string> uids = new List<string>();
  809. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  810. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行新增创客数日志");
  811. foreach (DataRow userDr in userDt.Rows)
  812. {
  813. int UserId = int.Parse(userDr["Id"].ToString());
  814. string ParentNav = userDr["ParentNav"].ToString();
  815. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  816. DataTable selfdt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentUserId=" + UserId + "");
  817. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  818. foreach (DataRow selfDr in selfdt.Rows)
  819. {
  820. int AddCount = int.Parse(selfDr[0].ToString());
  821. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  822. if (selfStat == null)
  823. {
  824. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  825. {
  826. UserId = UserId,
  827. StatMonth = StatMonth,
  828. StatDate = StatDate,
  829. SeoTitle = "self",
  830. }).Entity;
  831. db.SaveChanges();
  832. }
  833. selfStat.RecUserAuthNum += AddCount;
  834. db.SaveChanges();
  835. }
  836. if (!string.IsNullOrEmpty(ParentNav))
  837. {
  838. ParentNav += "," + UserId + ",";
  839. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  840. foreach (string NavUserIdString in ParentNavList)
  841. {
  842. if (!uids.Contains(NavUserIdString + start))
  843. {
  844. uids.Add(NavUserIdString + start);
  845. int NavUserId = int.Parse(NavUserIdString);
  846. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  847. DataTable teamDt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentNav like '%," + NavUserId + ",%'");
  848. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  849. foreach (DataRow teamDr in teamDt.Rows)
  850. {
  851. int AddCount = int.Parse(teamDr[0].ToString());
  852. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  853. if (teamStat == null)
  854. {
  855. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  856. {
  857. UserId = NavUserId,
  858. StatMonth = StatMonth,
  859. StatDate = StatDate,
  860. SeoTitle = "team",
  861. }).Entity;
  862. db.SaveChanges();
  863. }
  864. teamStat.RecUserAuthNum += AddCount;
  865. db.SaveChanges();
  866. }
  867. }
  868. }
  869. }
  870. }
  871. OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  872. }
  873. catch (Exception ex)
  874. {
  875. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
  876. }
  877. db.Dispose();
  878. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  879. Thread.Sleep(60000);
  880. }
  881. public void StartNewUserNumEverTime()
  882. {
  883. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  884. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行新增创客数日志");
  885. WebCMSEntities db = new WebCMSEntities();
  886. try
  887. {
  888. DataTable idsDt = OtherMySqlConn.dtable("select Id from Users where QueryCount=0 and AuthFlag=1 and AuthDate is not null limit 50");
  889. if(idsDt.Rows.Count > 0)
  890. {
  891. string ids = "";
  892. foreach (DataRow idsDr in idsDt.Rows)
  893. {
  894. ids += idsDr["Id"].ToString() + ",";
  895. }
  896. DataTable userDt = OtherMySqlConn.dtable("select ParentUserId,DATE_FORMAT(AuthDate, '%Y%m%d'),count(Id) from Users where Id in (" + ids.TrimEnd(',') + ") group by ParentUserId,DATE_FORMAT(AuthDate, '%Y%m%d')");
  897. if(userDt.Rows.Count > 0)
  898. {
  899. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行新增创客数日志");
  900. foreach (DataRow userDr in userDt.Rows)
  901. {
  902. string StatDate = userDr[1].ToString();
  903. int UserId = int.Parse(userDr["ParentUserId"].ToString());
  904. string StatMonth = StatDate.Substring(0, 6);
  905. string date = StatDate.Substring(0, 4) + "-" + StatDate.Substring(4, 2) + "-" + StatDate.Substring(6, 2);
  906. string start = date + " 00:00:00";
  907. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  908. int AddCount = int.Parse(userDr[2].ToString());
  909. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  910. string ParentNav = user.ParentNav;
  911. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  912. if (selfStat == null)
  913. {
  914. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  915. {
  916. UserId = UserId,
  917. StatMonth = StatMonth,
  918. StatDate = StatDate,
  919. SeoTitle = "self",
  920. }).Entity;
  921. db.SaveChanges();
  922. }
  923. selfStat.RecUserAuthNum += AddCount;
  924. ParentNav += "," + UserId + ",";
  925. if (!string.IsNullOrEmpty(ParentNav))
  926. {
  927. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  928. foreach (string NavUserIdString in ParentNavList)
  929. {
  930. int NavUserId = int.Parse(NavUserIdString);
  931. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  932. if (teamStat == null)
  933. {
  934. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  935. {
  936. UserId = NavUserId,
  937. StatMonth = StatMonth,
  938. StatDate = StatDate,
  939. SeoTitle = "team",
  940. }).Entity;
  941. db.SaveChanges();
  942. }
  943. teamStat.RecUserAuthNum += AddCount;
  944. }
  945. }
  946. }
  947. db.SaveChanges();
  948. OtherMySqlConn.op("update Users set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  949. }
  950. }
  951. }
  952. catch (Exception ex)
  953. {
  954. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行新增创客数异常");
  955. }
  956. db.Dispose();
  957. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行新增创客数日志");
  958. }
  959. // 每天统计头一天的收益
  960. public void StatProfit()
  961. {
  962. Thread th = new Thread(StatProfitDo);
  963. th.IsBackground = true;
  964. th.Start();
  965. }
  966. public void StatProfitDo()
  967. {
  968. // DateTime end = DateTime.Parse("2022-06-16 00:00:00");
  969. // DateTime check = DateTime.Parse("2022-06-16");
  970. // while (check <= end)
  971. // {
  972. // StatProfitEverDay(check.ToString("yyyy-MM-dd"));
  973. // Thread.Sleep(1000);
  974. // check = check.AddDays(1);
  975. // }
  976. while (true)
  977. {
  978. if(DateTime.Now.Hour >= 3)
  979. {
  980. StatProfitEverDayEverTime();
  981. }
  982. Thread.Sleep(120000);
  983. }
  984. }
  985. public void StatProfitEverDay(object sender)
  986. {
  987. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  988. string date = sender.ToString();
  989. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天收益日志");
  990. WebCMSEntities db = new WebCMSEntities();
  991. try
  992. {
  993. string TradeDate = date.Replace("-", "");
  994. string TradeMonth = TradeDate.Substring(0, 6);
  995. string start = date + " 00:00:00";
  996. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  997. string startId = "0";
  998. List<string> uids = new List<string>();
  999. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from UserAccountRecord where CreateDate>='" + start + "'");
  1000. if (startDt.Rows.Count > 0)
  1001. {
  1002. startId = startDt.Rows[0][0].ToString();
  1003. }
  1004. function.WriteLog(startId + "\n\n", "执行昨天收益日志");
  1005. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where Id in (select DISTINCT UserId from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "')");
  1006. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天收益日志");
  1007. foreach (DataRow userDr in userDt.Rows)
  1008. {
  1009. int UserId = int.Parse(userDr["Id"].ToString());
  1010. string ParentNav = userDr["ParentNav"].ToString();
  1011. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1012. DataTable selfdt = OtherMySqlConn.dtable("select ChangeType,ProductType,sum(ChangeAmount) from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId=" + UserId + " group by ChangeType,ProductType");
  1013. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1014. foreach (DataRow selfDr in selfdt.Rows)
  1015. {
  1016. int ChangeType = int.Parse(selfDr["ChangeType"].ToString());
  1017. int ProductType = int.Parse(selfDr["ProductType"].ToString());
  1018. decimal ProfitAmount = decimal.Parse(selfDr[2].ToString());
  1019. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  1020. if (selfStat == null)
  1021. {
  1022. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1023. {
  1024. UserId = UserId,
  1025. TradeMonth = TradeMonth,
  1026. TradeDate = TradeDate,
  1027. RebateType = ChangeType,
  1028. ProductType = ProductType,
  1029. SeoTitle = "self",
  1030. }).Entity;
  1031. db.SaveChanges();
  1032. }
  1033. selfStat.CreditRewardAmount += ProfitAmount;
  1034. db.SaveChanges();
  1035. }
  1036. if (!string.IsNullOrEmpty(ParentNav))
  1037. {
  1038. ParentNav += "," + UserId + ",";
  1039. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1040. foreach (string NavUserIdString in ParentNavList)
  1041. {
  1042. if (!uids.Contains(NavUserIdString + start))
  1043. {
  1044. uids.Add(NavUserIdString + start);
  1045. int NavUserId = int.Parse(NavUserIdString);
  1046. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1047. DataTable teamDt = OtherMySqlConn.dtable("select ChangeType,ProductType,sum(ChangeAmount) from UserAccountRecord where Id>=" + startId + " and CreateDate>='" + start + "' and CreateDate<'" + end + "' and UserId in (select Id from Users where ParentNav like '%," + NavUserId + ",%' or Id=" + NavUserId + ") group by ChangeType,ProductType");
  1048. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1049. foreach (DataRow teamDr in teamDt.Rows)
  1050. {
  1051. int ChangeType = int.Parse(teamDr["ChangeType"].ToString());
  1052. int ProductType = int.Parse(teamDr["ProductType"].ToString());
  1053. decimal ProfitAmount = decimal.Parse(teamDr[2].ToString());
  1054. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  1055. if (teamStat == null)
  1056. {
  1057. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1058. {
  1059. UserId = NavUserId,
  1060. TradeMonth = TradeMonth,
  1061. TradeDate = TradeDate,
  1062. RebateType = ChangeType,
  1063. ProductType = ProductType,
  1064. SeoTitle = "team",
  1065. }).Entity;
  1066. db.SaveChanges();
  1067. }
  1068. teamStat.CreditRewardAmount += ProfitAmount;
  1069. db.SaveChanges();
  1070. }
  1071. }
  1072. }
  1073. }
  1074. }
  1075. }
  1076. catch (Exception ex)
  1077. {
  1078. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天收益异常");
  1079. }
  1080. db.Dispose();
  1081. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1082. }
  1083. public void StatProfitEverDayEverTime()
  1084. {
  1085. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  1086. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时统计收益日志");
  1087. WebCMSEntities db = new WebCMSEntities();
  1088. try
  1089. {
  1090. string startId = function.ReadInstance("/UserAccountRecord/Id.txt");
  1091. if(string.IsNullOrEmpty(startId))
  1092. {
  1093. startId = "160653";
  1094. }
  1095. DataTable idsDt = OtherMySqlConn.dtable("select Id from UserAccountRecord where Id>=" + startId + " and QueryCount=0 order by Id limit 50");
  1096. if(idsDt.Rows.Count > 0)
  1097. {
  1098. string ids = "";
  1099. foreach (DataRow idsDr in idsDt.Rows)
  1100. {
  1101. ids += idsDr["Id"].ToString() + ",";
  1102. startId = idsDr["Id"].ToString();
  1103. }
  1104. DataTable userDt = OtherMySqlConn.dtable("select UserId,ChangeType,ProductType,DATE_FORMAT(CreateDate, '%Y%m%d'),sum(ChangeAmount) from UserAccountRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ChangeType,ProductType,DATE_FORMAT(CreateDate, '%Y%m%d')");
  1105. if (userDt.Rows.Count > 0)
  1106. {
  1107. function.WriteLog("收益人数:" + userDt.Rows.Count + "\n\n", "实时统计收益日志");
  1108. foreach (DataRow userDr in userDt.Rows)
  1109. {
  1110. int UserId = int.Parse(userDr["UserId"].ToString());
  1111. int ChangeType = int.Parse(userDr["ChangeType"].ToString());
  1112. int ProductType = int.Parse(userDr["ProductType"].ToString());
  1113. string TradeDate = userDr[3].ToString();
  1114. decimal ProfitAmount = decimal.Parse(userDr[4].ToString());
  1115. string TradeMonth = TradeDate.Substring(0, 6);
  1116. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  1117. string start = date + " 00:00:00";
  1118. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  1119. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  1120. string ParentNav = user.ParentNav;
  1121. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  1122. if (selfStat == null)
  1123. {
  1124. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1125. {
  1126. UserId = UserId,
  1127. TradeMonth = TradeMonth,
  1128. TradeDate = TradeDate,
  1129. RebateType = ChangeType,
  1130. ProductType = ProductType,
  1131. SeoTitle = "self",
  1132. }).Entity;
  1133. db.SaveChanges();
  1134. }
  1135. selfStat.CreditRewardAmount += ProfitAmount;
  1136. ParentNav += "," + UserId + ",";
  1137. if (!string.IsNullOrEmpty(ParentNav))
  1138. {
  1139. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1140. foreach (string NavUserIdString in ParentNavList)
  1141. {
  1142. int NavUserId = int.Parse(NavUserIdString);
  1143. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  1144. if (teamStat == null)
  1145. {
  1146. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1147. {
  1148. UserId = NavUserId,
  1149. TradeMonth = TradeMonth,
  1150. TradeDate = TradeDate,
  1151. RebateType = ChangeType,
  1152. ProductType = ProductType,
  1153. SeoTitle = "team",
  1154. }).Entity;
  1155. db.SaveChanges();
  1156. }
  1157. teamStat.CreditRewardAmount += ProfitAmount;
  1158. }
  1159. }
  1160. }
  1161. db.SaveChanges();
  1162. OtherMySqlConn.op("update UserAccountRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  1163. function.WritePage("/UserAccountRecord/", "Id.txt", startId);
  1164. }
  1165. }
  1166. }
  1167. catch (Exception ex)
  1168. {
  1169. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时统计收益异常");
  1170. }
  1171. db.Dispose();
  1172. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时统计收益日志");
  1173. }
  1174. #region 判断品牌互斥条件,根据身份证号
  1175. public bool CheckRepeatByBrand(WebCMSEntities db, int MerchantId)
  1176. {
  1177. int check = db.PosMachinesTwo.Count(m => m.Status > -1 && m.BindMerchantId == MerchantId);
  1178. return false;
  1179. }
  1180. #endregion
  1181. }
  1182. }