StatService.cs 68 KB

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