StatService.cs 69 KB

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