StatService.cs 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429
  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(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  28. {
  29. StatTradeAmountEverDayV2();
  30. // StatSimTradeAmount();
  31. StatBusinessService.Instance.StatTradeAmountEverDayV2();
  32. StatHelpProfitService.Instance.StatTradeAmountEverDayV2();
  33. }
  34. Thread.Sleep(30000);
  35. }
  36. }
  37. //补交易额
  38. public void StartOther()
  39. {
  40. Thread th = new Thread(StartOtherV2Do);
  41. th.IsBackground = true;
  42. th.Start();
  43. }
  44. public void StartOtherV2Do()
  45. {
  46. while (true)
  47. {
  48. string content = RedisDbconn.Instance.RPop<string>("AddTradeRecordByPosIdQueue");
  49. if(!string.IsNullOrEmpty(content))
  50. {
  51. function.WriteLog("content:" + content, "补录同步未激活交易额");
  52. int PosId = int.Parse(function.CheckInt(content));
  53. WebCMSEntities db = new WebCMSEntities();
  54. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1);
  55. if(pos != null)
  56. {
  57. function.WriteLog("1", "补录同步未激活交易额");
  58. var Trades = db.TradeRecord.Select(m => new { m.Id, m.SnNo, m.CreateDate, m.ActStatus, m.MerchantId, m.BrandId, m.TradeAmount }).Where(m => m.Id > 10228440 && m.SnNo == pos.PosSn && m.CreateDate <= pos.ActivationTime && m.ActStatus == 0).ToList();
  59. function.WriteLog("未激活记录数:" + Trades.Count, "补录同步未激活交易额");
  60. foreach(var Trade in Trades)
  61. {
  62. //补创客交易
  63. StatTradeAmountEverDayV2(Trade.Id);
  64. //补商户交易
  65. if(Trade.CreateDate.Value < DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00"))
  66. {
  67. string StatDate = Trade.CreateDate.Value.ToString("yyyyMMdd");
  68. string StatMonth = StatDate.Substring(0, 6);
  69. PosMerchantTradeSummay stat = db.PosMerchantTradeSummay.FirstOrDefault(m => m.BrandId == Trade.BrandId && m.MerchantId == Trade.MerchantId && m.TradeMonth == StatMonth && m.TradeDate == StatDate);
  70. if(stat == null)
  71. {
  72. stat = db.PosMerchantTradeSummay.Add(new PosMerchantTradeSummay()
  73. {
  74. BrandId = Trade.BrandId,
  75. MerchantId = Trade.MerchantId,
  76. TradeMonth = StatMonth,
  77. TradeDate = StatDate,
  78. }).Entity;
  79. db.SaveChanges();
  80. }
  81. stat.TradeAmount += Trade.TradeAmount;
  82. db.SaveChanges();
  83. }
  84. //交易记录设置标记(已执行,激活标记为已激活)
  85. CustomerSqlConn.op("update TradeRecord set QueryCount=1,ActStatus=1 where Id=" + Trade.Id, AppConfig.Base.SqlConn);
  86. }
  87. }
  88. db.Dispose();
  89. Thread.Sleep(1000);
  90. }
  91. else
  92. {
  93. Thread.Sleep(60000);
  94. }
  95. }
  96. }
  97. public void StatTradeAmountEverDayV2(int Id = 0)
  98. {
  99. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  100. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行交易额V2日志");
  101. WebCMSEntities db = new WebCMSEntities();
  102. using (var tran = db.Database.BeginTransaction())
  103. {
  104. try
  105. {
  106. string startId = function.ReadInstance("/TradeRecord/Id.txt");
  107. if(string.IsNullOrEmpty(startId))
  108. {
  109. startId = "867041";
  110. }
  111. string sql = "select Id from TradeRecord where Id>=" + startId + " and QueryCount=0 and ActStatus=1 and BrandId!=14 order by Id limit 50";
  112. if(Id > 0)
  113. {
  114. sql = "select Id from TradeRecord where Id=" + Id;
  115. }
  116. DataTable idsDt = OtherMySqlConn.dtable(sql);
  117. if(idsDt.Rows.Count > 0)
  118. {
  119. string ids = "";
  120. foreach (DataRow idsDr in idsDt.Rows)
  121. {
  122. ids += idsDr["Id"].ToString() + ",";
  123. if(Id == 0)
  124. {
  125. startId = idsDr["Id"].ToString();
  126. }
  127. }
  128. DataTable selfDt = OtherMySqlConn.dtable("select UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount),count(Id),SnNo from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ParentNav,BrandId,BankCardType,QrPayFlag,MerHelpFlag,Version,CapFlag,VipFlag,PayType,DATE_FORMAT(CreateDate,'%Y%m%d'),SnNo");
  129. if (selfDt.Rows.Count > 0)
  130. {
  131. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时执行交易额V2日志");
  132. foreach (DataRow selfDr in selfDt.Rows)
  133. {
  134. int UserId = int.Parse(selfDr["UserId"].ToString());
  135. string SnNo = selfDr["SnNo"].ToString();
  136. if(UserId == 0)
  137. {
  138. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == SnNo);
  139. if(pos != null)
  140. {
  141. UserId = pos.UserId;
  142. }
  143. }
  144. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  145. string ParentNav = user.ParentNav; //selfDr["ParentNav"].ToString();
  146. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  147. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  148. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  149. int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
  150. int Version = int.Parse(selfDr["Version"].ToString());
  151. int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
  152. int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
  153. int PayType = int.Parse(selfDr["PayType"].ToString());
  154. string TradeDate = selfDr[10].ToString();
  155. decimal TradeAmount = decimal.Parse(selfDr[11].ToString());
  156. int TradeCount = int.Parse(selfDr[12].ToString());
  157. string TradeMonth = TradeDate.Substring(0, 6);
  158. if(Version < 2)
  159. {
  160. 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");
  161. if (selfStat == null)
  162. {
  163. selfStat = db.TradeDaySummary.Add(new TradeDaySummary()
  164. {
  165. UserId = UserId,
  166. TradeMonth = TradeMonth,
  167. TradeDate = TradeDate,
  168. BrandId = BrandId,
  169. QueryCount = QrPayFlag,
  170. VipFlag = VipFlag,
  171. PayType = PayType,
  172. SeoTitle = "self",
  173. }).Entity;
  174. db.SaveChanges();
  175. }
  176. if (BankCardType == 0)
  177. {
  178. if (Version == 1)
  179. {
  180. selfStat.ProfitDirectDebitTradeAmt += TradeAmount;
  181. if (CapFlag == 1)
  182. {
  183. selfStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  184. selfStat.ProfitDirectDebitCapNum += TradeCount;
  185. }
  186. }
  187. else if (MerHelpFlag == 1)
  188. {
  189. selfStat.HelpDirectDebitTradeAmt += TradeAmount;
  190. if (CapFlag == 1)
  191. {
  192. selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  193. selfStat.HelpDirectDebitCapNum += TradeCount;
  194. }
  195. }
  196. else
  197. {
  198. selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
  199. if (CapFlag == 1)
  200. {
  201. selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  202. selfStat.NotHelpDirectDebitCapNum += TradeCount;
  203. }
  204. }
  205. }
  206. else if (BankCardType != 0)
  207. {
  208. if (Version == 1)
  209. {
  210. selfStat.ProfitDirectTradeAmt += TradeAmount;
  211. }
  212. else if (MerHelpFlag == 1)
  213. {
  214. selfStat.HelpDirectTradeAmt += TradeAmount;
  215. }
  216. else
  217. {
  218. selfStat.NotHelpDirectTradeAmt += TradeAmount;
  219. }
  220. }
  221. ParentNav += "," + UserId + ",";
  222. if (!string.IsNullOrEmpty(ParentNav))
  223. {
  224. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  225. foreach (string NavUserIdString in ParentNavList)
  226. {
  227. int NavUserId = int.Parse(NavUserIdString);
  228. 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");
  229. if (teamStat == null)
  230. {
  231. teamStat = db.TradeDaySummary.Add(new TradeDaySummary()
  232. {
  233. UserId = NavUserId,
  234. TradeMonth = TradeMonth,
  235. TradeDate = TradeDate,
  236. BrandId = BrandId,
  237. QueryCount = QrPayFlag,
  238. VipFlag = VipFlag,
  239. PayType = PayType,
  240. SeoTitle = "team",
  241. }).Entity;
  242. db.SaveChanges();
  243. }
  244. if (BankCardType == 0)
  245. {
  246. if (Version == 1)
  247. {
  248. teamStat.ProfitNonDirectDebitTradeAmt += TradeAmount;
  249. if (CapFlag == 1)
  250. {
  251. teamStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  252. teamStat.ProfitDirectDebitCapNum += TradeCount;
  253. }
  254. }
  255. else if (MerHelpFlag == 1)
  256. {
  257. teamStat.HelpNonDirectDebitTradeAmt += TradeAmount;
  258. if (CapFlag == 1)
  259. {
  260. teamStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  261. teamStat.HelpDirectDebitCapNum += TradeCount;
  262. }
  263. }
  264. else
  265. {
  266. teamStat.NotHelpNonDirectDebitTradeAmt += TradeAmount;
  267. if (CapFlag == 1)
  268. {
  269. teamStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  270. teamStat.NotHelpDirectDebitCapNum += TradeCount;
  271. }
  272. }
  273. }
  274. else if (BankCardType != 0)
  275. {
  276. if (Version == 1)
  277. {
  278. teamStat.ProfitNonDirectTradeAmt += TradeAmount;
  279. }
  280. else if (MerHelpFlag == 1)
  281. {
  282. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  283. }
  284. else
  285. {
  286. teamStat.NotHelpNonDirectTradeAmt += TradeAmount;
  287. }
  288. }
  289. }
  290. }
  291. }
  292. else
  293. {
  294. //盈利期,费率0.6
  295. TradeDaySummary2 selfStat2 = db.TradeDaySummary2.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");
  296. if (selfStat2 == null)
  297. {
  298. selfStat2 = db.TradeDaySummary2.Add(new TradeDaySummary2()
  299. {
  300. UserId = UserId,
  301. TradeMonth = TradeMonth,
  302. TradeDate = TradeDate,
  303. BrandId = BrandId,
  304. QueryCount = QrPayFlag,
  305. VipFlag = VipFlag,
  306. PayType = PayType,
  307. SeoTitle = "self",
  308. }).Entity;
  309. db.SaveChanges();
  310. }
  311. if (BankCardType == 0)
  312. {
  313. if (Version == 2)
  314. {
  315. selfStat2.ProfitDebitTradeAmt += TradeAmount;
  316. if (CapFlag == 1)
  317. {
  318. selfStat2.ProfitDebitCapTradeAmt += TradeAmount;
  319. selfStat2.ProfitDebitCapNum += TradeCount;
  320. }
  321. }
  322. }
  323. else if (BankCardType != 0)
  324. {
  325. if (Version == 2)
  326. {
  327. selfStat2.ProfitTradeAmt += TradeAmount;
  328. }
  329. }
  330. ParentNav += "," + UserId + ",";
  331. if (!string.IsNullOrEmpty(ParentNav))
  332. {
  333. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  334. foreach (string NavUserIdString in ParentNavList)
  335. {
  336. int NavUserId = int.Parse(NavUserIdString);
  337. TradeDaySummary2 teamStat2 = db.TradeDaySummary2.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");
  338. if (teamStat2 == null)
  339. {
  340. teamStat2 = db.TradeDaySummary2.Add(new TradeDaySummary2()
  341. {
  342. UserId = NavUserId,
  343. TradeMonth = TradeMonth,
  344. TradeDate = TradeDate,
  345. BrandId = BrandId,
  346. QueryCount = QrPayFlag,
  347. VipFlag = VipFlag,
  348. PayType = PayType,
  349. SeoTitle = "team",
  350. }).Entity;
  351. db.SaveChanges();
  352. }
  353. if (BankCardType == 0)
  354. {
  355. if (Version == 2)
  356. {
  357. teamStat2.ProfitDebitTradeAmt += TradeAmount;
  358. if (CapFlag == 1)
  359. {
  360. teamStat2.ProfitDebitCapTradeAmt += TradeAmount;
  361. teamStat2.ProfitDebitCapNum += TradeCount;
  362. }
  363. }
  364. }
  365. else if (BankCardType != 0)
  366. {
  367. if (Version == 2)
  368. {
  369. teamStat2.ProfitTradeAmt += TradeAmount;
  370. }
  371. }
  372. }
  373. }
  374. }
  375. Dictionary<string, object> statData = new Dictionary<string, object>();
  376. statData.Add("UserId", UserId);
  377. statData.Add("BrandId", BrandId);
  378. statData.Add("BankCardType", BankCardType);
  379. statData.Add("QrPayFlag", QrPayFlag);
  380. statData.Add("MerHelpFlag", MerHelpFlag);
  381. statData.Add("Version", Version);
  382. statData.Add("CapFlag", CapFlag);
  383. statData.Add("VipFlag", VipFlag);
  384. statData.Add("PayType", PayType);
  385. statData.Add("TradeDate", TradeDate);
  386. statData.Add("TradeAmount", TradeAmount);
  387. statData.Add("TradeCount", TradeCount);
  388. RedisDbconn.Instance.AddList("StatTradeAmountQueue", Newtonsoft.Json.JsonConvert.SerializeObject(statData));
  389. // RedisDbconn.Instance.AddList("ProfitTradeAmountQueue", Newtonsoft.Json.JsonConvert.SerializeObject(statData));
  390. }
  391. OtherMySqlConn.op("update TradeRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  392. if(Id == 0)
  393. {
  394. function.WritePage("/TradeRecord/", "Id.txt", startId);
  395. }
  396. }
  397. db.SaveChanges();
  398. }
  399. tran.Commit();
  400. }
  401. catch (Exception ex)
  402. {
  403. tran.Rollback();
  404. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天交易额V2异常");
  405. }
  406. }
  407. db.Dispose();
  408. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行交易额V2日志");
  409. }
  410. public void StatSimTradeAmount(int Id = 0)
  411. {
  412. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  413. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行广电卡交易额日志");
  414. WebCMSEntities db = new WebCMSEntities();
  415. using (var tran = db.Database.BeginTransaction())
  416. {
  417. try
  418. {
  419. string startId = function.ReadInstance("/TradeRecord/SimId.txt");
  420. if(string.IsNullOrEmpty(startId))
  421. {
  422. startId = "10000000";
  423. }
  424. string sql = "select Id from TradeRecord where Id>=" + startId + " and QueryCount=0 and ActStatus=1 and BrandId=14 order by Id limit 50";
  425. if(Id > 0)
  426. {
  427. sql = "select Id from TradeRecord where Id=" + Id;
  428. }
  429. DataTable idsDt = OtherMySqlConn.dtable(sql);
  430. if(idsDt.Rows.Count > 0)
  431. {
  432. string ids = "";
  433. foreach (DataRow idsDr in idsDt.Rows)
  434. {
  435. ids += idsDr["Id"].ToString() + ",";
  436. if(Id == 0)
  437. {
  438. startId = idsDr["Id"].ToString();
  439. }
  440. }
  441. DataTable selfDt = OtherMySqlConn.dtable("select UserId,ParentNav,MerHelpFlag,SnNo,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(TradeAmount) from TradeRecord where Id in (" + ids.TrimEnd(',') + ") group by UserId,ParentNav,MerHelpFlag,SnNo,DATE_FORMAT(CreateDate,'%Y%m%d')");
  442. if (selfDt.Rows.Count > 0)
  443. {
  444. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "实时执行广电卡交易额日志");
  445. foreach (DataRow selfDr in selfDt.Rows)
  446. {
  447. int UserId = int.Parse(selfDr["UserId"].ToString());
  448. string SnNo = selfDr["SnNo"].ToString();
  449. if(UserId == 0)
  450. {
  451. PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == SnNo);
  452. if(pos != null)
  453. {
  454. UserId = pos.UserId;
  455. }
  456. }
  457. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  458. string ParentNav = user.ParentNav;
  459. int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
  460. string TradeDate = selfDr[4].ToString();
  461. decimal TradeAmount = decimal.Parse(selfDr[5].ToString());
  462. string TradeMonth = TradeDate.Substring(0, 6);
  463. SimCardDaySummary selfStat = db.SimCardDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDay == TradeDate && m.SeoTitle == "self");
  464. if (selfStat == null)
  465. {
  466. selfStat = db.SimCardDaySummary.Add(new SimCardDaySummary()
  467. {
  468. UserId = UserId,
  469. TradeMonth = TradeMonth,
  470. TradeDay = TradeDate,
  471. SeoTitle = "self",
  472. }).Entity;
  473. db.SaveChanges();
  474. }
  475. selfStat.TradeAmount += TradeAmount;
  476. if (MerHelpFlag == 1)
  477. {
  478. selfStat.HelpTradeAmount += TradeAmount;
  479. }
  480. else
  481. {
  482. selfStat.NotHelpTradeAmount += TradeAmount;
  483. }
  484. ParentNav += "," + UserId + ",";
  485. if (!string.IsNullOrEmpty(ParentNav))
  486. {
  487. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  488. foreach (string NavUserIdString in ParentNavList)
  489. {
  490. int NavUserId = int.Parse(NavUserIdString);
  491. SimCardDaySummary teamStat = db.SimCardDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDay == TradeDate && m.SeoTitle == "team");
  492. if (teamStat == null)
  493. {
  494. teamStat = db.SimCardDaySummary.Add(new SimCardDaySummary()
  495. {
  496. UserId = NavUserId,
  497. TradeMonth = TradeMonth,
  498. TradeDay = TradeDate,
  499. SeoTitle = "team",
  500. }).Entity;
  501. db.SaveChanges();
  502. }
  503. teamStat.TradeAmount += TradeAmount;
  504. if (MerHelpFlag == 1)
  505. {
  506. teamStat.HelpTradeAmount += TradeAmount;
  507. }
  508. else
  509. {
  510. teamStat.NotHelpTradeAmount += TradeAmount;
  511. }
  512. }
  513. }
  514. }
  515. OtherMySqlConn.op("update TradeRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  516. if(Id == 0)
  517. {
  518. function.WritePage("/TradeRecord/", "SimId.txt", startId);
  519. }
  520. }
  521. db.SaveChanges();
  522. }
  523. tran.Commit();
  524. }
  525. catch (Exception ex)
  526. {
  527. tran.Rollback();
  528. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行广电卡交易额异常");
  529. }
  530. }
  531. db.Dispose();
  532. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行广电卡交易额日志");
  533. }
  534. // 每天统计头一天的交易额
  535. public void StartEverDay(string date)
  536. {
  537. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  538. // DateTime end = DateTime.Parse("2022-04-19 00:00:00");
  539. // DateTime check = DateTime.Parse("2022-03-11");
  540. // while (check <= end)
  541. // {
  542. // Thread th = new Thread(StatTradeAmountEverDay);
  543. // th.IsBackground = true;
  544. // th.Start(check.ToString("yyyy-MM-dd"));
  545. // check = check.AddDays(1);
  546. // }
  547. if (DateTime.Now.Day == 2)
  548. {
  549. OtherMySqlConn.op("update Users set ThisMonthTrade=0 where ThisMonthTrade>0");
  550. DataTable list = OtherMySqlConn.dtable("select UserId,sum(NonDirectTradeAmt) from UserTradeDaySummary where TradeMonth='" + DateTime.Now.ToString("yyyyMM") + "' GROUP BY UserId");
  551. foreach (DataRow dr in list.Rows)
  552. {
  553. string UserId = dr["UserId"].ToString();
  554. string ThisMonthTrade = dr[1].ToString();
  555. OtherMySqlConn.op("update Users set ThisMonthTrade=" + ThisMonthTrade + " where Id=" + UserId);
  556. }
  557. }
  558. Thread th = new Thread(StatTradeAmountEverDay);
  559. th.IsBackground = true;
  560. th.Start(date);
  561. }
  562. public void StatTradeAmountEverDay(object sender)
  563. {
  564. string date = sender.ToString();
  565. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天交易额日志");
  566. WebCMSEntities db = new WebCMSEntities();
  567. try
  568. {
  569. string TradeDate = date.Replace("-", "");
  570. string TradeMonth = TradeDate.Substring(0, 6);
  571. string start = date + " 00:00:00";
  572. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  573. string startId = "0", endId = "9999999999";
  574. List<string> uids = new List<string>();
  575. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from TradeRecord where CreateDate>='" + start + "'");
  576. if (startDt.Rows.Count > 0)
  577. {
  578. startId = startDt.Rows[0][0].ToString();
  579. }
  580. function.WriteLog(startId + "\n\n", "执行昨天交易额日志");
  581. // DataTable endDt = OtherMySqlConn.dtable("select max(Id) from TradeRecord where CreateDate<'" + end + "'");
  582. // if (endDt.Rows.Count > 0)
  583. // {
  584. // endId = endDt.Rows[0][0].ToString();
  585. // }
  586. 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 + "')");
  587. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天交易额日志");
  588. foreach (DataRow userDr in userDt.Rows)
  589. {
  590. int UserId = int.Parse(userDr["Id"].ToString());
  591. string ParentNav = userDr["ParentNav"].ToString();
  592. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  593. 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");
  594. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  595. foreach (DataRow selfDr in selfdt.Rows)
  596. {
  597. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  598. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  599. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  600. decimal TradeAmount = decimal.Parse(selfDr[3].ToString());
  601. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  602. if (selfStat == null)
  603. {
  604. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  605. {
  606. UserId = UserId,
  607. TradeMonth = TradeMonth,
  608. TradeDate = TradeDate,
  609. BrandId = BrandId,
  610. QueryCount = QrPayFlag,
  611. SeoTitle = "self",
  612. }).Entity;
  613. db.SaveChanges();
  614. }
  615. if (BankCardType == 0)
  616. {
  617. selfStat.DirectDebitTradeAmt += TradeAmount;
  618. }
  619. else if (BankCardType != 0)
  620. {
  621. selfStat.DirectTradeAmt += TradeAmount;
  622. }
  623. db.SaveChanges();
  624. }
  625. if (!string.IsNullOrEmpty(ParentNav))
  626. {
  627. ParentNav += "," + UserId + ",";
  628. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  629. foreach (string NavUserIdString in ParentNavList)
  630. {
  631. if (!uids.Contains(NavUserIdString + start))
  632. {
  633. uids.Add(NavUserIdString + start);
  634. int NavUserId = int.Parse(NavUserIdString);
  635. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  636. 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");
  637. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  638. foreach (DataRow teamDr in teamDt.Rows)
  639. {
  640. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  641. int BankCardType = int.Parse(teamDr["BankCardType"].ToString());
  642. int QrPayFlag = int.Parse(teamDr["QrPayFlag"].ToString());
  643. decimal TradeAmount = decimal.Parse(teamDr[3].ToString());
  644. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  645. if (teamStat == null)
  646. {
  647. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  648. {
  649. UserId = NavUserId,
  650. TradeMonth = TradeMonth,
  651. TradeDate = TradeDate,
  652. BrandId = BrandId,
  653. QueryCount = QrPayFlag,
  654. SeoTitle = "team",
  655. }).Entity;
  656. db.SaveChanges();
  657. }
  658. if (BankCardType == 0)
  659. {
  660. teamStat.NonDirectDebitTradeAmt += TradeAmount;
  661. }
  662. else if (BankCardType != 0)
  663. {
  664. teamStat.NonDirectTradeAmt += TradeAmount;
  665. }
  666. db.SaveChanges();
  667. }
  668. }
  669. }
  670. }
  671. }
  672. if (DateTime.Now.Day >= 2)
  673. {
  674. Thread.Sleep(5000);
  675. DataTable list = OtherMySqlConn.dtable("select UserId,sum(NonDirectTradeAmt) from UserTradeDaySummary where TradeDate='" + TradeDate + "' GROUP BY UserId");
  676. foreach (DataRow dr in list.Rows)
  677. {
  678. string UserId = dr["UserId"].ToString();
  679. string ThisMonthTrade = dr[1].ToString();
  680. OtherMySqlConn.op("update Users set ThisMonthTrade=ThisMonthTrade+" + ThisMonthTrade + " where Id=" + UserId);
  681. }
  682. }
  683. }
  684. catch (Exception ex)
  685. {
  686. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天的交易额异常");
  687. }
  688. db.Dispose();
  689. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天交易额日志");
  690. StatMerchantTrade(date);
  691. }
  692. public void StatTradeAmountEverDaySum()
  693. {
  694. // WebCMSEntities db = new WebCMSEntities();
  695. // OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  696. // 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");
  697. // string html = "<table>";
  698. // foreach (DataRow dr in dt.Rows)
  699. // {
  700. // html += "<tr>";
  701. // string TradeDate = dr["TradeDate"].ToString();
  702. // string TradeMonth = dr["TradeMonth"].ToString();
  703. // int UserId = int.Parse(dr["UserId"].ToString());
  704. // int BrandId = int.Parse(dr["BrandId"].ToString());
  705. // int QrPayFlag = int.Parse(dr["QueryCount"].ToString());
  706. // decimal DirectDebitTradeAmt = decimal.Parse(dr["DirectDebitTradeAmt"].ToString());
  707. // decimal DirectTradeAmt = decimal.Parse(dr["DirectTradeAmt"].ToString());
  708. // decimal NonDirectDebitTradeAmt = decimal.Parse(dr["NonDirectDebitTradeAmt"].ToString());
  709. // decimal NonDirectTradeAmt = decimal.Parse(dr["NonDirectTradeAmt"].ToString());
  710. // decimal CurAmount = 0, CurTotalAmount = 0, CurMonthAmount = 0, CurDayAmount = 0;
  711. // CurTotalAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId); //总交易
  712. // CurMonthAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeDate); //总交易
  713. // CurDayAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + TradeMonth); //总交易
  714. // CurAmount = RedisDbconn.Instance.Get<decimal>("TotalAmount:" + UserId + ":" + BrandId + ":" + TradeDate); //总交易
  715. // decimal TotalPosAmount = 0;
  716. // decimal TotalCloudPayAmount = 0;
  717. // decimal TeamTotalPosAmount = 0;
  718. // decimal TeamTotalCloudPayAmount = 0;
  719. // if (QrPayFlag == 1)
  720. // {
  721. // TotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TotalCloudPayAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
  722. // TeamTotalCloudPayAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalCloudPayAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
  723. // }
  724. // else
  725. // {
  726. // TotalPosAmount = RedisDbconn.Instance.Get<decimal>("TotalPosAmount:" + UserId + ":" + TradeDate); //POS机刷卡交易额
  727. // TeamTotalPosAmount = RedisDbconn.Instance.Get<decimal>("TeamTotalPosAmount:" + UserId + ":" + TradeDate); //云闪付小额交易额
  728. // }
  729. // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  730. // html += "<td>应得</td>";
  731. // html += "<td>" + user.MakerCode + "</td>";
  732. // html += "<td>" + user.RealName + "</td>";
  733. // html += "<td>" + user.Mobile + "</td>";
  734. // html += "<td>" + BrandId + "</td>";
  735. // html += "<td>" + QrPayFlag + "</td>";
  736. // html += "<td>" + DirectDebitTradeAmt + "</td>";
  737. // html += "<td>" + DirectTradeAmt + "</td>";
  738. // html += "<td>" + NonDirectDebitTradeAmt + "</td>";
  739. // html += "<td>" + NonDirectTradeAmt + "</td>";
  740. // html += "</tr>";
  741. // html += "<tr>";
  742. // html += "<td>当前</td>";
  743. // html += "<td></td>";
  744. // html += "<td></td>";
  745. // html += "<td>当天品牌:" + CurAmount + "</td>";
  746. // html += "<td>总交易:" + CurTotalAmount + "</td>";
  747. // html += "<td>当月:" + CurMonthAmount + "</td>";
  748. // html += "<td>当天:" + CurDayAmount + "</td>";
  749. // html += "<td>" + TotalPosAmount + "</td>";
  750. // html += "<td>" + TotalCloudPayAmount + "</td>";
  751. // html += "<td>" + TeamTotalPosAmount + "</td>";
  752. // html += "<td>" + TeamTotalCloudPayAmount + "</td>";
  753. // html += "</tr>";
  754. // }
  755. // html += "</table>";
  756. // db.Dispose();
  757. // // OtherMySqlConn.connstr = ;
  758. // function.WritePage("/html/", "1.html", html);
  759. }
  760. //统计商户交易额
  761. private void StatMerchantTrade(string date)
  762. {
  763. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行商户交易额日志");
  764. // WebCMSEntities db = new WebCMSEntities();
  765. try
  766. {
  767. string start = date + " 00:00:00";
  768. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  769. 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");
  770. }
  771. catch (Exception ex)
  772. {
  773. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户的交易额");
  774. }
  775. // db.Dispose();
  776. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行商户交易额日志");
  777. }
  778. // 统计创客激活数
  779. public void StartPosActNum()
  780. {
  781. Thread th = new Thread(StartPosActNumFor);
  782. th.IsBackground = true;
  783. th.Start();
  784. }
  785. public void StartPosActNumFor()
  786. {
  787. while (true)
  788. {
  789. if(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  790. {
  791. StartPosActNumEverTime();
  792. StatBusinessService.Instance.StartPosActNumEverTime();
  793. }
  794. Thread.Sleep(120000);
  795. }
  796. }
  797. public void StartPosActNumDo(object sender)
  798. {
  799. string date = sender.ToString();
  800. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行创客激活数日志");
  801. WebCMSEntities db = new WebCMSEntities();
  802. try
  803. {
  804. string TradeDate = date.Replace("-", "");
  805. string TradeMonth = TradeDate.Substring(0, 6);
  806. string start = date + " 00:00:00";
  807. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  808. List<string> uids = new List<string>();
  809. 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 + "')");
  810. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行创客激活数日志");
  811. foreach (DataRow userDr in userDt.Rows)
  812. {
  813. int UserId = int.Parse(userDr["Id"].ToString());
  814. string ParentNav = userDr["ParentNav"].ToString();
  815. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  816. 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");
  817. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  818. foreach (DataRow selfDr in selfdt.Rows)
  819. {
  820. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  821. int QrPayFlag = 0;
  822. int ActCount = int.Parse(selfDr[1].ToString());
  823. UserTradeDaySummary selfStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  824. if (selfStat == null)
  825. {
  826. selfStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  827. {
  828. UserId = UserId,
  829. TradeMonth = TradeMonth,
  830. TradeDate = TradeDate,
  831. BrandId = BrandId,
  832. QueryCount = QrPayFlag,
  833. SeoTitle = "self",
  834. }).Entity;
  835. db.SaveChanges();
  836. }
  837. selfStat.DirectDebitCapNum += ActCount;
  838. db.SaveChanges();
  839. }
  840. if (!string.IsNullOrEmpty(ParentNav))
  841. {
  842. ParentNav += "," + UserId + ",";
  843. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  844. foreach (string NavUserIdString in ParentNavList)
  845. {
  846. if (!uids.Contains(NavUserIdString + start))
  847. {
  848. uids.Add(NavUserIdString + start);
  849. int NavUserId = int.Parse(NavUserIdString);
  850. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  851. 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");
  852. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  853. foreach (DataRow teamDr in teamDt.Rows)
  854. {
  855. int BrandId = int.Parse(teamDr["BrandId"].ToString());
  856. int QrPayFlag = 0;
  857. int ActCount = int.Parse(teamDr[1].ToString());
  858. UserTradeDaySummary teamStat = db.UserTradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  859. if (teamStat == null)
  860. {
  861. teamStat = db.UserTradeDaySummary.Add(new UserTradeDaySummary()
  862. {
  863. UserId = NavUserId,
  864. TradeMonth = TradeMonth,
  865. TradeDate = TradeDate,
  866. BrandId = BrandId,
  867. QueryCount = QrPayFlag,
  868. SeoTitle = "team",
  869. }).Entity;
  870. db.SaveChanges();
  871. }
  872. teamStat.NonDirectDebitCapNum += ActCount;
  873. db.SaveChanges();
  874. }
  875. }
  876. }
  877. }
  878. }
  879. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where QueryCount=0 and ActivationState=1 and ActivationTime>='" + start + "' and ActivationTime<'" + end + "'");
  880. }
  881. catch (Exception ex)
  882. {
  883. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行创客激活数异常");
  884. }
  885. db.Dispose();
  886. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行创客激活数日志");
  887. Thread.Sleep(60000);
  888. }
  889. public void StartPosActNumEverTime()
  890. {
  891. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  892. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行创客激活数日志");
  893. WebCMSEntities db = new WebCMSEntities();
  894. try
  895. {
  896. 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");
  897. if(idsDt.Rows.Count > 0)
  898. {
  899. string ids = "";
  900. foreach (DataRow idsDr in idsDt.Rows)
  901. {
  902. ids += idsDr["Id"].ToString() + ",";
  903. }
  904. 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')");
  905. if (userDt.Rows.Count > 0)
  906. {
  907. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行创客激活数日志");
  908. foreach (DataRow userDr in userDt.Rows)
  909. {
  910. int UserId = int.Parse(userDr["BuyUserId"].ToString());
  911. int StoreId = int.Parse(userDr["StoreId"].ToString());
  912. int BrandId = int.Parse(userDr["BrandId"].ToString());
  913. string TradeDate = userDr[3].ToString();
  914. int ActCount = int.Parse(function.CheckInt(userDr[4].ToString()));
  915. int QrPayFlag = 0;
  916. string TradeMonth = TradeDate.Substring(0, 6);
  917. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  918. string start = date + " 00:00:00";
  919. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  920. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  921. string ParentNav = user.ParentNav;
  922. UserTradeMonthSummary selfStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "self");
  923. if (selfStat == null)
  924. {
  925. selfStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  926. {
  927. UserId = UserId,
  928. TradeMonth = TradeMonth,
  929. SeoKeyword = TradeDate,
  930. BrandId = BrandId,
  931. QueryCount = QrPayFlag,
  932. SeoTitle = "self",
  933. }).Entity;
  934. db.SaveChanges();
  935. }
  936. selfStat.ActiveBuddyMerStatus += ActCount;
  937. ParentNav += "," + UserId + ",";
  938. if (!string.IsNullOrEmpty(ParentNav))
  939. {
  940. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  941. foreach (string NavUserIdString in ParentNavList)
  942. {
  943. int NavUserId = int.Parse(NavUserIdString);
  944. UserTradeMonthSummary teamStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.SeoTitle == "team");
  945. if (teamStat == null)
  946. {
  947. teamStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  948. {
  949. UserId = NavUserId,
  950. TradeMonth = TradeMonth,
  951. SeoKeyword = TradeDate,
  952. BrandId = BrandId,
  953. QueryCount = QrPayFlag,
  954. SeoTitle = "team",
  955. }).Entity;
  956. db.SaveChanges();
  957. }
  958. teamStat.ActiveBuddyMerStatus += ActCount;
  959. }
  960. }
  961. //统计分仓激活数
  962. StoreSnActivateSummary storeStat = db.StoreSnActivateSummary.FirstOrDefault(m => m.StoreId == StoreId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId);
  963. if (storeStat == null)
  964. {
  965. storeStat = db.StoreSnActivateSummary.Add(new StoreSnActivateSummary()
  966. {
  967. StoreId = StoreId,
  968. TradeMonth = TradeMonth,
  969. TradeDate = TradeDate,
  970. BrandId = BrandId,
  971. }).Entity;
  972. db.SaveChanges();
  973. }
  974. storeStat.ActivateNum += ActCount;
  975. }
  976. db.SaveChanges();
  977. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  978. }
  979. }
  980. }
  981. catch (Exception ex)
  982. {
  983. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  984. }
  985. db.Dispose();
  986. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  987. }
  988. // 统计新增创客数
  989. public void StartNewUserNum()
  990. {
  991. Thread th = new Thread(StartNewUserNumFor);
  992. th.IsBackground = true;
  993. th.Start();
  994. }
  995. public void StartNewUserNumFor()
  996. {
  997. while (true)
  998. {
  999. if(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  1000. {
  1001. StartNewUserNumEverTime();
  1002. }
  1003. Thread.Sleep(120000);
  1004. }
  1005. }
  1006. public void StartNewUserNumDo(object sender)
  1007. {
  1008. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  1009. string date = sender.ToString();
  1010. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行新增创客数日志");
  1011. WebCMSEntities db = new WebCMSEntities();
  1012. try
  1013. {
  1014. string StatDate = date.Replace("-", "");
  1015. string StatMonth = StatDate.Substring(0, 6);
  1016. string start = date + " 00:00:00";
  1017. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  1018. List<string> uids = new List<string>();
  1019. DataTable userDt = OtherMySqlConn.dtable("select Id,ParentNav from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  1020. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "执行新增创客数日志");
  1021. foreach (DataRow userDr in userDt.Rows)
  1022. {
  1023. int UserId = int.Parse(userDr["Id"].ToString());
  1024. string ParentNav = userDr["ParentNav"].ToString();
  1025. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  1026. DataTable selfdt = OtherMySqlConn.dtable("select count(Id) from Users where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "' and ParentUserId=" + UserId + "");
  1027. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  1028. foreach (DataRow selfDr in selfdt.Rows)
  1029. {
  1030. int AddCount = int.Parse(selfDr[0].ToString());
  1031. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  1032. if (selfStat == null)
  1033. {
  1034. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  1035. {
  1036. UserId = UserId,
  1037. StatMonth = StatMonth,
  1038. StatDate = StatDate,
  1039. SeoTitle = "self",
  1040. }).Entity;
  1041. db.SaveChanges();
  1042. }
  1043. selfStat.RecUserAuthNum += AddCount;
  1044. db.SaveChanges();
  1045. }
  1046. if (!string.IsNullOrEmpty(ParentNav))
  1047. {
  1048. ParentNav += "," + UserId + ",";
  1049. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1050. foreach (string NavUserIdString in ParentNavList)
  1051. {
  1052. if (!uids.Contains(NavUserIdString + start))
  1053. {
  1054. uids.Add(NavUserIdString + start);
  1055. int NavUserId = int.Parse(NavUserIdString);
  1056. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  1057. 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 + ",%'");
  1058. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  1059. foreach (DataRow teamDr in teamDt.Rows)
  1060. {
  1061. int AddCount = int.Parse(teamDr[0].ToString());
  1062. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  1063. if (teamStat == null)
  1064. {
  1065. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  1066. {
  1067. UserId = NavUserId,
  1068. StatMonth = StatMonth,
  1069. StatDate = StatDate,
  1070. SeoTitle = "team",
  1071. }).Entity;
  1072. db.SaveChanges();
  1073. }
  1074. teamStat.RecUserAuthNum += AddCount;
  1075. db.SaveChanges();
  1076. }
  1077. }
  1078. }
  1079. }
  1080. }
  1081. OtherMySqlConn.op("update Users set QueryCount=1 where QueryCount=0 and AuthFlag=1 and AuthDate>='" + start + "' and AuthDate<'" + end + "'");
  1082. }
  1083. catch (Exception ex)
  1084. {
  1085. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "执行新增创客数异常");
  1086. }
  1087. db.Dispose();
  1088. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行新增创客数日志");
  1089. Thread.Sleep(60000);
  1090. }
  1091. public void StartNewUserNumEverTime()
  1092. {
  1093. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  1094. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行新增创客数日志");
  1095. WebCMSEntities db = new WebCMSEntities();
  1096. try
  1097. {
  1098. DataTable idsDt = OtherMySqlConn.dtable("select Id from Users where QueryCount=0 and AuthFlag=1 and AuthDate is not null limit 50");
  1099. if(idsDt.Rows.Count > 0)
  1100. {
  1101. string ids = "";
  1102. foreach (DataRow idsDr in idsDt.Rows)
  1103. {
  1104. ids += idsDr["Id"].ToString() + ",";
  1105. }
  1106. 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')");
  1107. if(userDt.Rows.Count > 0)
  1108. {
  1109. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行新增创客数日志");
  1110. foreach (DataRow userDr in userDt.Rows)
  1111. {
  1112. string StatDate = userDr[1].ToString();
  1113. int UserId = int.Parse(userDr["ParentUserId"].ToString());
  1114. string StatMonth = StatDate.Substring(0, 6);
  1115. string date = StatDate.Substring(0, 4) + "-" + StatDate.Substring(4, 2) + "-" + StatDate.Substring(6, 2);
  1116. string start = date + " 00:00:00";
  1117. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  1118. int AddCount = int.Parse(userDr[2].ToString());
  1119. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  1120. string ParentNav = user.ParentNav;
  1121. PullnewSummary selfStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == UserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "self");
  1122. if (selfStat == null)
  1123. {
  1124. selfStat = db.PullnewSummary.Add(new PullnewSummary()
  1125. {
  1126. UserId = UserId,
  1127. StatMonth = StatMonth,
  1128. StatDate = StatDate,
  1129. SeoTitle = "self",
  1130. }).Entity;
  1131. db.SaveChanges();
  1132. }
  1133. selfStat.RecUserAuthNum += AddCount;
  1134. ParentNav += "," + UserId + ",";
  1135. if (!string.IsNullOrEmpty(ParentNav))
  1136. {
  1137. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1138. foreach (string NavUserIdString in ParentNavList)
  1139. {
  1140. int NavUserId = int.Parse(NavUserIdString);
  1141. PullnewSummary teamStat = db.PullnewSummary.FirstOrDefault(m => m.UserId == NavUserId && m.StatMonth == StatMonth && m.StatDate == StatDate && m.SeoTitle == "team");
  1142. if (teamStat == null)
  1143. {
  1144. teamStat = db.PullnewSummary.Add(new PullnewSummary()
  1145. {
  1146. UserId = NavUserId,
  1147. StatMonth = StatMonth,
  1148. StatDate = StatDate,
  1149. SeoTitle = "team",
  1150. }).Entity;
  1151. db.SaveChanges();
  1152. }
  1153. teamStat.RecUserAuthNum += AddCount;
  1154. }
  1155. }
  1156. }
  1157. db.SaveChanges();
  1158. OtherMySqlConn.op("update Users set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  1159. }
  1160. }
  1161. }
  1162. catch (Exception ex)
  1163. {
  1164. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行新增创客数异常");
  1165. }
  1166. db.Dispose();
  1167. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行新增创客数日志");
  1168. }
  1169. // 每天统计头一天的收益
  1170. public void StatProfit()
  1171. {
  1172. Thread th = new Thread(StatProfitDo);
  1173. th.IsBackground = true;
  1174. th.Start();
  1175. }
  1176. public void StatProfitDo()
  1177. {
  1178. while (true)
  1179. {
  1180. if(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  1181. {
  1182. StatProfitEverDayEverTime();
  1183. }
  1184. Thread.Sleep(120000);
  1185. }
  1186. }
  1187. public void StatProfitEverDay(object sender)
  1188. {
  1189. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  1190. string date = sender.ToString();
  1191. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "执行昨天收益日志");
  1192. WebCMSEntities db = new WebCMSEntities();
  1193. try
  1194. {
  1195. string TradeDate = date.Replace("-", "");
  1196. string TradeMonth = TradeDate.Substring(0, 6);
  1197. string start = date + " 00:00:00";
  1198. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  1199. string startId = "0";
  1200. List<string> uids = new List<string>();
  1201. DataTable startDt = OtherMySqlConn.dtable("select min(Id) from UserAccountRecord where CreateDate>='" + start + "'");
  1202. if (startDt.Rows.Count > 0)
  1203. {
  1204. startId = startDt.Rows[0][0].ToString();
  1205. }
  1206. function.WriteLog(startId + "\n\n", "执行昨天收益日志");
  1207. 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 + "')");
  1208. function.WriteLog("交易人数:" + userDt.Rows.Count + "\n\n", "执行昨天收益日志");
  1209. foreach (DataRow userDr in userDt.Rows)
  1210. {
  1211. int UserId = int.Parse(userDr["Id"].ToString());
  1212. string ParentNav = userDr["ParentNav"].ToString();
  1213. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1214. 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");
  1215. function.WriteLog(UserId + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1216. foreach (DataRow selfDr in selfdt.Rows)
  1217. {
  1218. int ChangeType = int.Parse(selfDr["ChangeType"].ToString());
  1219. int ProductType = int.Parse(selfDr["ProductType"].ToString());
  1220. decimal ProfitAmount = decimal.Parse(selfDr[2].ToString());
  1221. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  1222. if (selfStat == null)
  1223. {
  1224. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1225. {
  1226. UserId = UserId,
  1227. TradeMonth = TradeMonth,
  1228. TradeDate = TradeDate,
  1229. RebateType = ChangeType,
  1230. ProductType = ProductType,
  1231. SeoTitle = "self",
  1232. }).Entity;
  1233. db.SaveChanges();
  1234. }
  1235. selfStat.CreditRewardAmount += ProfitAmount;
  1236. db.SaveChanges();
  1237. }
  1238. if (!string.IsNullOrEmpty(ParentNav))
  1239. {
  1240. ParentNav += "," + UserId + ",";
  1241. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1242. foreach (string NavUserIdString in ParentNavList)
  1243. {
  1244. if (!uids.Contains(NavUserIdString + start))
  1245. {
  1246. uids.Add(NavUserIdString + start);
  1247. int NavUserId = int.Parse(NavUserIdString);
  1248. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1249. 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");
  1250. function.WriteLog(NavUserId + ":team:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1251. foreach (DataRow teamDr in teamDt.Rows)
  1252. {
  1253. int ChangeType = int.Parse(teamDr["ChangeType"].ToString());
  1254. int ProductType = int.Parse(teamDr["ProductType"].ToString());
  1255. decimal ProfitAmount = decimal.Parse(teamDr[2].ToString());
  1256. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  1257. if (teamStat == null)
  1258. {
  1259. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1260. {
  1261. UserId = NavUserId,
  1262. TradeMonth = TradeMonth,
  1263. TradeDate = TradeDate,
  1264. RebateType = ChangeType,
  1265. ProductType = ProductType,
  1266. SeoTitle = "team",
  1267. }).Entity;
  1268. db.SaveChanges();
  1269. }
  1270. teamStat.CreditRewardAmount += ProfitAmount;
  1271. db.SaveChanges();
  1272. }
  1273. }
  1274. }
  1275. }
  1276. }
  1277. }
  1278. catch (Exception ex)
  1279. {
  1280. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计昨天收益异常");
  1281. }
  1282. db.Dispose();
  1283. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "执行昨天收益日志");
  1284. }
  1285. public void StatProfitEverDayEverTime()
  1286. {
  1287. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  1288. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时统计收益日志");
  1289. WebCMSEntities db = new WebCMSEntities();
  1290. try
  1291. {
  1292. string startId = function.ReadInstance("/UserAccountRecord/Id.txt");
  1293. if(string.IsNullOrEmpty(startId))
  1294. {
  1295. startId = "160653";
  1296. }
  1297. DataTable idsDt = OtherMySqlConn.dtable("select Id from UserAccountRecord where Id>=" + startId + " and QueryCount=0 order by Id limit 50");
  1298. if(idsDt.Rows.Count > 0)
  1299. {
  1300. string ids = "";
  1301. foreach (DataRow idsDr in idsDt.Rows)
  1302. {
  1303. ids += idsDr["Id"].ToString() + ",";
  1304. startId = idsDr["Id"].ToString();
  1305. }
  1306. 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')");
  1307. if (userDt.Rows.Count > 0)
  1308. {
  1309. function.WriteLog("收益人数:" + userDt.Rows.Count + "\n\n", "实时统计收益日志");
  1310. foreach (DataRow userDr in userDt.Rows)
  1311. {
  1312. int UserId = int.Parse(userDr["UserId"].ToString());
  1313. int ChangeType = int.Parse(userDr["ChangeType"].ToString());
  1314. int ProductType = int.Parse(userDr["ProductType"].ToString());
  1315. string TradeDate = userDr[3].ToString();
  1316. decimal ProfitAmount = decimal.Parse(userDr[4].ToString());
  1317. string TradeMonth = TradeDate.Substring(0, 6);
  1318. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  1319. string start = date + " 00:00:00";
  1320. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  1321. Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  1322. string ParentNav = user.ParentNav;
  1323. UserRebateDetail selfStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "self");
  1324. if (selfStat == null)
  1325. {
  1326. selfStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1327. {
  1328. UserId = UserId,
  1329. TradeMonth = TradeMonth,
  1330. TradeDate = TradeDate,
  1331. RebateType = ChangeType,
  1332. ProductType = ProductType,
  1333. SeoTitle = "self",
  1334. }).Entity;
  1335. db.SaveChanges();
  1336. }
  1337. selfStat.CreditRewardAmount += ProfitAmount;
  1338. ParentNav += "," + UserId + ",";
  1339. if (!string.IsNullOrEmpty(ParentNav))
  1340. {
  1341. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  1342. foreach (string NavUserIdString in ParentNavList)
  1343. {
  1344. int NavUserId = int.Parse(NavUserIdString);
  1345. UserRebateDetail teamStat = db.UserRebateDetail.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.RebateType == ChangeType && m.ProductType == ProductType && m.SeoTitle == "team");
  1346. if (teamStat == null)
  1347. {
  1348. teamStat = db.UserRebateDetail.Add(new UserRebateDetail()
  1349. {
  1350. UserId = NavUserId,
  1351. TradeMonth = TradeMonth,
  1352. TradeDate = TradeDate,
  1353. RebateType = ChangeType,
  1354. ProductType = ProductType,
  1355. SeoTitle = "team",
  1356. }).Entity;
  1357. db.SaveChanges();
  1358. }
  1359. teamStat.CreditRewardAmount += ProfitAmount;
  1360. }
  1361. }
  1362. }
  1363. db.SaveChanges();
  1364. OtherMySqlConn.op("update UserAccountRecord set QueryCount=1 where Id in (" + ids.TrimEnd(',') + ")");
  1365. function.WritePage("/UserAccountRecord/", "Id.txt", startId);
  1366. }
  1367. }
  1368. }
  1369. catch (Exception ex)
  1370. {
  1371. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时统计收益异常");
  1372. }
  1373. db.Dispose();
  1374. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时统计收益日志");
  1375. }
  1376. #region 判断品牌互斥条件,根据身份证号
  1377. public bool CheckRepeatByBrand(WebCMSEntities db, int MerchantId)
  1378. {
  1379. int check = db.PosMachinesTwo.Count(m => m.Status > -1 && m.BindMerchantId == MerchantId);
  1380. return false;
  1381. }
  1382. #endregion
  1383. }
  1384. }