StatService.cs 66 KB

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