StatService.cs 66 KB

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