StatService.cs 66 KB

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