StatService.cs 82 KB

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