StatService.cs 65 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  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(100);
  32. }
  33. }
  34. public void StatTradeAmountEverDayV2()
  35. {
  36. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].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 = "718574";
  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["Pxc1SqlConnStr"].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["Pxc1SqlConnStr"].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(100);
  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["Pxc1SqlConnStr"].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 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,BrandId,DATE_FORMAT(ActivationTime, '%Y%m%d'),count(Id) from PosMachinesTwo where Id in (" + ids.TrimEnd(',') + ") group by BuyUserId,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 BrandId = int.Parse(userDr["BrandId"].ToString());
  583. string TradeDate = userDr[2].ToString();
  584. int ActCount = int.Parse(function.CheckInt(userDr[3].ToString()));
  585. int QrPayFlag = 0;
  586. string TradeMonth = TradeDate.Substring(0, 6);
  587. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  588. string start = date + " 00:00:00";
  589. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  590. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  591. string ParentNav = user.ParentNav;
  592. UserTradeMonthSummary selfStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  593. if (selfStat == null)
  594. {
  595. selfStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  596. {
  597. UserId = UserId,
  598. TradeMonth = TradeMonth,
  599. SeoKeyword = TradeDate,
  600. BrandId = BrandId,
  601. QueryCount = QrPayFlag,
  602. SeoTitle = "self",
  603. }).Entity;
  604. db.SaveChanges();
  605. }
  606. selfStat.ActiveBuddyMerStatus += ActCount;
  607. ParentNav += "," + UserId + ",";
  608. if (!string.IsNullOrEmpty(ParentNav))
  609. {
  610. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  611. foreach (string NavUserIdString in ParentNavList)
  612. {
  613. int NavUserId = int.Parse(NavUserIdString);
  614. UserTradeMonthSummary teamStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  615. if (teamStat == null)
  616. {
  617. teamStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  618. {
  619. UserId = NavUserId,
  620. TradeMonth = TradeMonth,
  621. SeoKeyword = TradeDate,
  622. BrandId = BrandId,
  623. QueryCount = QrPayFlag,
  624. SeoTitle = "team",
  625. }).Entity;
  626. db.SaveChanges();
  627. }
  628. teamStat.ActiveBuddyMerStatus += ActCount;
  629. }
  630. }
  631. }
  632. db.SaveChanges();
  633. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  634. }
  635. }
  636. }
  637. catch (Exception ex)
  638. {
  639. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  640. }
  641. db.Dispose();
  642. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  643. }
  644. // 统计新增创客数
  645. public void StartNewUserNum()
  646. {
  647. Thread th = new Thread(StartNewUserNumFor);
  648. th.IsBackground = true;
  649. th.Start();
  650. }
  651. public void StartNewUserNumFor()
  652. {
  653. // DateTime end = DateTime.Parse("2022-06-15 00:00:00");
  654. // DateTime check = DateTime.Parse("2022-06-14");
  655. // while (check <= end)
  656. // {
  657. // StartNewUserNumDo(check.ToString("yyyy-MM-dd"));
  658. // check = check.AddDays(1);
  659. // }
  660. while (true)
  661. {
  662. if(DateTime.Now.Hour >= 3)
  663. {
  664. StartNewUserNumEverTime();
  665. }
  666. Thread.Sleep(120000);
  667. }
  668. }
  669. public void StartNewUserNumDo(object sender)
  670. {
  671. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  672. string date = sender.ToString();
  673. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
  674. WebCMSEntities db = new WebCMSEntities();
  675. try
  676. {
  677. string StatDate = date.Replace("-", "");
  678. string StatMonth = StatDate.Substring(0, 6);
  679. string start = date + " 00:00:00";
  680. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  681. List<string> uids = new List<string>();
  682. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  683. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行新增创客数日志");
  684. foreach (DataRow userDr in userDt.Rows)
  685. {
  686. int UserId = int.Parse(userDr["Id"].ToString());
  687. string ParentNav = userDr["ParentNav"].ToString();
  688. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  689. DataTable selfdt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentUserId=" + UserId + "");
  690. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  691. foreach (DataRow selfDr in selfdt.Rows)
  692. {
  693. int AddCount = int.Parse(selfDr[0].ToString());
  694. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  695. if (selfStat == null)
  696. {
  697. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  698. {
  699. UserId = UserId,
  700. StatMonth = StatMonth,
  701. StatDate = StatDate,
  702. SeoTitle = "self",
  703. }).Entity;
  704. db.SaveChanges();
  705. }
  706. selfStat.RecUserAuthNum += AddCount;
  707. db.SaveChanges();
  708. }
  709. if (!string.IsNullOrEmpty(ParentNav))
  710. {
  711. ParentNav += "," + UserId + ",";
  712. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  713. foreach (string NavUserIdString in ParentNavList)
  714. {
  715. if (!uids.Contains(NavUserIdString + start))
  716. {
  717. uids.Add(NavUserIdString + start);
  718. int NavUserId = int.Parse(NavUserIdString);
  719. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  720. 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 + ",%'");
  721. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  722. foreach (DataRow teamDr in teamDt.Rows)
  723. {
  724. int AddCount = int.Parse(teamDr[0].ToString());
  725. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  726. if (teamStat == null)
  727. {
  728. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  729. {
  730. UserId = NavUserId,
  731. StatMonth = StatMonth,
  732. StatDate = StatDate,
  733. SeoTitle = "team",
  734. }).Entity;
  735. db.SaveChanges();
  736. }
  737. teamStat.RecUserAuthNum += AddCount;
  738. db.SaveChanges();
  739. }
  740. }
  741. }
  742. }
  743. }
  744. OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  745. }
  746. catch (Exception ex)
  747. {
  748. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
  749. }
  750. db.Dispose();
  751. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  752. Thread.Sleep(60000);
  753. }
  754. public void StartNewUserNumEverTime()
  755. {
  756. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  757. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行新增创客数日志");
  758. WebCMSEntities db = new WebCMSEntities();
  759. try
  760. {
  761. DataTable idsDt = OtherMySqlConn.dtable("select Id from Users where QueryCount=0 and AuthFlag=1 and AuthDate is not null limit 50");
  762. if(idsDt.Rows.Count > 0)
  763. {
  764. string ids = "";
  765. foreach (DataRow idsDr in idsDt.Rows)
  766. {
  767. ids += idsDr["Id"].ToString() + ",";
  768. }
  769. 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')");
  770. if(userDt.Rows.Count > 0)
  771. {
  772. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行新增创客数日志");
  773. foreach (DataRow userDr in userDt.Rows)
  774. {
  775. string StatDate = userDr[1].ToString();
  776. int UserId = int.Parse(userDr["ParentUserId"].ToString());
  777. string StatMonth = StatDate.Substring(0, 6);
  778. string date = StatDate.Substring(0, 4) + "-" + StatDate.Substring(4, 2) + "-" + StatDate.Substring(6, 2);
  779. string start = date + " 00:00:00";
  780. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  781. int AddCount = int.Parse(userDr[2].ToString());
  782. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  783. string ParentNav = user.ParentNav;
  784. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  785. if (selfStat == null)
  786. {
  787. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  788. {
  789. UserId = UserId,
  790. StatMonth = StatMonth,
  791. StatDate = StatDate,
  792. SeoTitle = "self",
  793. }).Entity;
  794. db.SaveChanges();
  795. }
  796. selfStat.RecUserAuthNum += AddCount;
  797. ParentNav += "," + UserId + ",";
  798. if (!string.IsNullOrEmpty(ParentNav))
  799. {
  800. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  801. foreach (string NavUserIdString in ParentNavList)
  802. {
  803. int NavUserId = int.Parse(NavUserIdString);
  804. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  805. if (teamStat == null)
  806. {
  807. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  808. {
  809. UserId = NavUserId,
  810. StatMonth = StatMonth,
  811. StatDate = StatDate,
  812. SeoTitle = "team",
  813. }).Entity;
  814. db.SaveChanges();
  815. }
  816. teamStat.RecUserAuthNum += AddCount;
  817. }
  818. }
  819. }
  820. db.SaveChanges();
  821. OtherMySqlConn.op("update Users set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  822. }
  823. }
  824. }
  825. catch (Exception ex)
  826. {
  827. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行新增创客数异常");
  828. }
  829. db.Dispose();
  830. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行新增创客数日志");
  831. }
  832. // 每天统计头一天的收益
  833. public void StatProfit()
  834. {
  835. Thread th = new Thread(StatProfitDo);
  836. th.IsBackground = true;
  837. th.Start();
  838. }
  839. public void StatProfitDo()
  840. {
  841. // DateTime end = DateTime.Parse("2022-06-16 00:00:00");
  842. // DateTime check = DateTime.Parse("2022-06-16");
  843. // while (check <= end)
  844. // {
  845. // StatProfitEverDay(check.ToString("yyyy-MM-dd"));
  846. // Thread.Sleep(1000);
  847. // check = check.AddDays(1);
  848. // }
  849. while (true)
  850. {
  851. if(DateTime.Now.Hour >= 2)
  852. {
  853. StatProfitEverDayEverTime();
  854. }
  855. Thread.Sleep(120000);
  856. }
  857. }
  858. public void StatProfitEverDay(object sender)
  859. {
  860. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  861. string date = sender.ToString();
  862. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天收益日志");
  863. WebCMSEntities db = new WebCMSEntities();
  864. try
  865. {
  866. string TradeDate = date.Replace("-", "");
  867. string TradeMonth = TradeDate.Substring(0, 6);
  868. string start = date + " 00:00:00";
  869. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  870. string startId = "0";
  871. List<string> uids = new List<string>();
  872. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from UserAccountRecord where CreateDate>='" + start + "'");
  873. if (startDt.Rows.Count > 0)
  874. {
  875. startId = startDt.Rows[0][0].ToString();
  876. }
  877. function.WriteLog(startId + "\n\n", "执行昨天收益日志");
  878. 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 + "')");
  879. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天收益日志");
  880. foreach (DataRow userDr in userDt.Rows)
  881. {
  882. int UserId = int.Parse(userDr["Id"].ToString());
  883. string ParentNav = userDr["ParentNav"].ToString();
  884. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  885. 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");
  886. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  887. foreach (DataRow selfDr in selfdt.Rows)
  888. {
  889. int ChangeType = int.Parse(selfDr["ChangeType"].ToString());
  890. int ProductType = int.Parse(selfDr["ProductType"].ToString());
  891. decimal ProfitAmount = decimal.Parse(selfDr[2].ToString());
  892. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  893. if (selfStat == null)
  894. {
  895. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  896. {
  897. UserId = UserId,
  898. TradeMonth = TradeMonth,
  899. TradeDate = TradeDate,
  900. RebateType = ChangeType,
  901. ProductType = ProductType,
  902. SeoTitle = "self",
  903. }).Entity;
  904. db.SaveChanges();
  905. }
  906. selfStat.CreditRewardAmount += ProfitAmount;
  907. db.SaveChanges();
  908. }
  909. if (!string.IsNullOrEmpty(ParentNav))
  910. {
  911. ParentNav += "," + UserId + ",";
  912. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  913. foreach (string NavUserIdString in ParentNavList)
  914. {
  915. if (!uids.Contains(NavUserIdString + start))
  916. {
  917. uids.Add(NavUserIdString + start);
  918. int NavUserId = int.Parse(NavUserIdString);
  919. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  920. 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");
  921. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  922. foreach (DataRow teamDr in teamDt.Rows)
  923. {
  924. int ChangeType = int.Parse(teamDr["ChangeType"].ToString());
  925. int ProductType = int.Parse(teamDr["ProductType"].ToString());
  926. decimal ProfitAmount = decimal.Parse(teamDr[2].ToString());
  927. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  928. if (teamStat == null)
  929. {
  930. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  931. {
  932. UserId = NavUserId,
  933. TradeMonth = TradeMonth,
  934. TradeDate = TradeDate,
  935. RebateType = ChangeType,
  936. ProductType = ProductType,
  937. SeoTitle = "team",
  938. }).Entity;
  939. db.SaveChanges();
  940. }
  941. teamStat.CreditRewardAmount += ProfitAmount;
  942. db.SaveChanges();
  943. }
  944. }
  945. }
  946. }
  947. }
  948. }
  949. catch (Exception ex)
  950. {
  951. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天收益异常");
  952. }
  953. db.Dispose();
  954. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  955. }
  956. public void StatProfitEverDayEverTime()
  957. {
  958. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
  959. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时统计收益日志");
  960. WebCMSEntities db = new WebCMSEntities();
  961. try
  962. {
  963. string startId = function.ReadInstance("/UserAccountRecord/Id.txt");
  964. if(string.IsNullOrEmpty(startId))
  965. {
  966. startId = "160653";
  967. }
  968. DataTable idsDt = OtherMySqlConn.dtable("select Id from UserAccountRecord where Id>=" + startId + " and QueryCount=0 order by Id limit 50");
  969. if(idsDt.Rows.Count > 0)
  970. {
  971. string ids = "";
  972. foreach (DataRow idsDr in idsDt.Rows)
  973. {
  974. ids += idsDr["Id"].ToString() + ",";
  975. startId = idsDr["Id"].ToString();
  976. }
  977. 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')");
  978. if (userDt.Rows.Count > 0)
  979. {
  980. function.WriteLog("收益人数:" + userDt.Rows.Count + "\n\n", "实时统计收益日志");
  981. foreach (DataRow userDr in userDt.Rows)
  982. {
  983. int UserId = int.Parse(userDr["UserId"].ToString());
  984. int ChangeType = int.Parse(userDr["ChangeType"].ToString());
  985. int ProductType = int.Parse(userDr["ProductType"].ToString());
  986. string TradeDate = userDr[3].ToString();
  987. decimal ProfitAmount = decimal.Parse(userDr[4].ToString());
  988. string TradeMonth = TradeDate.Substring(0, 6);
  989. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  990. string start = date + " 00:00:00";
  991. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  992. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  993. string ParentNav = user.ParentNav;
  994. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  995. if (selfStat == null)
  996. {
  997. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  998. {
  999. UserId = UserId,
  1000. TradeMonth = TradeMonth,
  1001. TradeDate = TradeDate,
  1002. RebateType = ChangeType,
  1003. ProductType = ProductType,
  1004. SeoTitle = "self",
  1005. }).Entity;
  1006. db.SaveChanges();
  1007. }
  1008. selfStat.CreditRewardAmount += ProfitAmount;
  1009. ParentNav += "," + UserId + ",";
  1010. if (!string.IsNullOrEmpty(ParentNav))
  1011. {
  1012. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1013. foreach (string NavUserIdString in ParentNavList)
  1014. {
  1015. int NavUserId = int.Parse(NavUserIdString);
  1016. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  1017. if (teamStat == null)
  1018. {
  1019. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1020. {
  1021. UserId = NavUserId,
  1022. TradeMonth = TradeMonth,
  1023. TradeDate = TradeDate,
  1024. RebateType = ChangeType,
  1025. ProductType = ProductType,
  1026. SeoTitle = "team",
  1027. }).Entity;
  1028. db.SaveChanges();
  1029. }
  1030. teamStat.CreditRewardAmount += ProfitAmount;
  1031. }
  1032. }
  1033. }
  1034. db.SaveChanges();
  1035. OtherMySqlConn.op("update UserAccountRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  1036. function.WritePage("/UserAccountRecord/", "Id.txt", startId);
  1037. }
  1038. }
  1039. }
  1040. catch (Exception ex)
  1041. {
  1042. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时统计收益异常");
  1043. }
  1044. db.Dispose();
  1045. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时统计收益日志");
  1046. }
  1047. #region 判断品牌互斥条件,根据身份证号
  1048. public bool CheckRepeatByBrand(WebCMSEntities db, int MerchantId)
  1049. {
  1050. int check = db.PosMachinesTwo.Count(m => m.Status > -1 && m.BindMerchantId == MerchantId);
  1051. return false;
  1052. }
  1053. #endregion
  1054. }
  1055. }