StatService.cs 73 KB

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