StatService2.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  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.PxcModels2;
  9. namespace MySystem
  10. {
  11. public class StatService2
  12. {
  13. public readonly static StatService2 Instance = new StatService2();
  14. private StatService2()
  15. { }
  16. // 统计交易额V2
  17. public void Start()
  18. {
  19. Thread th = new Thread(StartDo);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. public void StartDo()
  24. {
  25. while (true)
  26. {
  27. if(DateTime.Now.Hour >= 3 && RedisDbconn.Instance.Get<string>("StatServerStatus") == "1")
  28. {
  29. StatTradeAmount();
  30. }
  31. Thread.Sleep(10000);
  32. }
  33. }
  34. public void StatTradeAmount()
  35. {
  36. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计商户和创客交易额日志");
  37. WebCMSEntities db = new WebCMSEntities();
  38. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  39. using (var tran = db.Database.BeginTransaction())
  40. {
  41. try
  42. {
  43. string start = DateTime.Now.AddDays(-100).ToString("yyyy-MM-dd HH:mm:ss");
  44. DataTable idsDt = CustomerSqlConn.dtable("select Id from ConsumerOrders where CreateDate>='" + start + "' and Status>0 and Version=0 order by Id limit 20", AppConfig.Base.SqlConn2);
  45. if(idsDt.Rows.Count > 0)
  46. {
  47. string ids = "";
  48. foreach (DataRow idsDr in idsDt.Rows)
  49. {
  50. ids += idsDr["Id"].ToString() + ",";
  51. }
  52. DataTable selfDt = CustomerSqlConn.dtable("select UserId,MerchantId,SnNo,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(PayMoney),count(Id),sum(MaxDivi),sum(MerchantActualAmount) from ConsumerOrders where Id in (" + ids.TrimEnd(',') + ") group by UserId,MerchantId,SnNo,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  53. if (selfDt.Rows.Count > 0)
  54. {
  55. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "统计商户和创客交易额日志");
  56. foreach (DataRow selfDr in selfDt.Rows)
  57. {
  58. int UserId = int.Parse(selfDr["UserId"].ToString());
  59. KxsMainModels.Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new KxsMainModels.Users();
  60. string ParentNav = user.ParentNav;
  61. int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
  62. int PayMode = int.Parse(selfDr["PayMode"].ToString());
  63. int IsAct = int.Parse(selfDr["IsAct"].ToString());
  64. string SnNo = selfDr["SnNo"].ToString();
  65. string TradeDate = selfDr[5].ToString();
  66. decimal TradeAmount = decimal.Parse(selfDr[6].ToString());
  67. int TradeCount = int.Parse(selfDr[7].ToString());
  68. decimal MaxDivi = decimal.Parse(selfDr[8].ToString());
  69. decimal ActualAmount = decimal.Parse(selfDr[9].ToString());
  70. string TradeMonth = TradeDate.Substring(0, 6);
  71. //创客交易额
  72. UserAmountSummary selfStat = db.UserAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode && m.SeoTitle == "self");
  73. if (selfStat == null)
  74. {
  75. selfStat = db.UserAmountSummary.Add(new UserAmountSummary()
  76. {
  77. UserId = UserId,
  78. TradeMonth = TradeMonth,
  79. TradeDate = TradeDate,
  80. PayMode = PayMode,
  81. IsAct = IsAct,
  82. SeoTitle = "self",
  83. }).Entity;
  84. db.SaveChanges();
  85. }
  86. selfStat.TotalAmount += TradeAmount;
  87. selfStat.TradeCount += TradeCount;
  88. ParentNav += "," + UserId + ",";
  89. if (!string.IsNullOrEmpty(ParentNav))
  90. {
  91. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  92. foreach (string NavUserIdString in ParentNavList)
  93. {
  94. int NavUserId = int.Parse(NavUserIdString);
  95. UserAmountSummary teamStat = db.UserAmountSummary.FirstOrDefault(m => m.UserId == NavUserId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode && m.SeoTitle == "team");
  96. if (teamStat == null)
  97. {
  98. teamStat = db.UserAmountSummary.Add(new UserAmountSummary()
  99. {
  100. UserId = NavUserId,
  101. TradeMonth = TradeMonth,
  102. TradeDate = TradeDate,
  103. PayMode = PayMode,
  104. IsAct = IsAct,
  105. SeoTitle = "team",
  106. }).Entity;
  107. db.SaveChanges();
  108. }
  109. teamStat.TotalAmount += TradeAmount;
  110. teamStat.TradeCount += TradeCount;
  111. }
  112. }
  113. db.SaveChanges();
  114. //商户交易额
  115. MerchantAmountSummay merchantStat = db.MerchantAmountSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode);
  116. if (merchantStat == null)
  117. {
  118. merchantStat = db.MerchantAmountSummay.Add(new MerchantAmountSummay()
  119. {
  120. MerchantId = MerchantId,
  121. TradeMonth = TradeMonth,
  122. TradeDate = TradeDate,
  123. PayMode = PayMode,
  124. IsAct = IsAct,
  125. }).Entity;
  126. db.SaveChanges();
  127. }
  128. merchantStat.TradeAmount += TradeAmount;
  129. merchantStat.TradeCount += TradeCount;
  130. merchantStat.TotalActual += ActualAmount;
  131. MerchantInfo merchant = db.MerchantInfo.FirstOrDefault(m => m.Id == MerchantId);
  132. if(merchant != null)
  133. {
  134. merchant.TotalAmount += TradeAmount;
  135. merchant.TotalConsumeCount += TradeCount;
  136. merchant.TotalActual += ActualAmount;
  137. merchant.ActMaxAmount += MaxDivi; //活动应返金额
  138. if(IsAct == 1)
  139. {
  140. merchant.TotalActAmount += TradeAmount;
  141. merchant.TotalActActual += ActualAmount;
  142. if(merchant.ActivationStatus == 0 && merchant.TotalActAmount >= 10000M)
  143. {
  144. // RedisDbconn.Instance.AddList("ActProfitQueue", MerchantId.ToString());
  145. merchant.ActivationStatus = 1;
  146. merchant.ActivationDate = DateTime.Now;
  147. }
  148. }
  149. }
  150. db.SaveChanges();
  151. //码牌交易额
  152. QrCodeAmountSummay qrcode = db.QrCodeAmountSummay.FirstOrDefault(m => m.SnNo == SnNo && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode);
  153. if (qrcode == null)
  154. {
  155. qrcode = db.QrCodeAmountSummay.Add(new QrCodeAmountSummay()
  156. {
  157. SnNo = SnNo,
  158. TradeMonth = TradeMonth,
  159. TradeDate = TradeDate,
  160. PayMode = PayMode,
  161. IsAct = IsAct,
  162. }).Entity;
  163. db.SaveChanges();
  164. }
  165. qrcode.TradeAmount += TradeAmount;
  166. qrcode.TradeCount += TradeCount;
  167. qrcode.TotalActual += ActualAmount;
  168. db.SaveChanges();
  169. string jsonString = "{\"TradeDate\":\"" + TradeDate + "\",\"PayMoney\":\"" + TradeAmount + "\",\"TradeCount\":\"" + TradeCount + "\",\"MerchantActualAmount\":\"" + ActualAmount + "\",\"MerchantId\":\"" + MerchantId + "\",\"PayMode\":\"" + PayMode + "\",\"IsAct\":\"" + IsAct + "\"}";
  170. RedisDbconn.Instance.AddList("StatMerchantTradeSummaryQueue2", jsonString);
  171. }
  172. CustomerSqlConn.op("update ConsumerOrders set Version=1 where Id in (" + ids.TrimEnd(',') + ")", AppConfig.Base.SqlConn2);
  173. }
  174. }
  175. tran.Commit();
  176. }
  177. catch (Exception ex)
  178. {
  179. tran.Rollback();
  180. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计商户和创客交易额异常");
  181. }
  182. }
  183. db.Dispose();
  184. maindb.Dispose();
  185. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "统计商户和创客交易额日志");
  186. }
  187. // 统计创客激活数
  188. public void StartPosActNum()
  189. {
  190. Thread th = new Thread(StartPosActNumFor);
  191. th.IsBackground = true;
  192. th.Start();
  193. }
  194. public void StartPosActNumFor()
  195. {
  196. while (true)
  197. {
  198. if(DateTime.Now.Hour >= 3 && RedisDbconn.Instance.Get<string>("StatServerStatus") == "1")
  199. {
  200. StartPosActNumEverTime();
  201. }
  202. Thread.Sleep(20000);
  203. }
  204. }
  205. public void StartPosActNumEverTime()
  206. {
  207. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行创客激活数日志");
  208. WebCMSEntities db = new WebCMSEntities();
  209. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  210. try
  211. {
  212. DataTable idsDt = CustomerSqlConn.dtable("select Id from MerchantInfo where ActStat=0 and (Status=2 or QueryCount=2) and UserId>0 and UpdateDate is not null limit 50", AppConfig.Base.SqlConn2);
  213. if(idsDt.Rows.Count > 0)
  214. {
  215. string ids = "";
  216. foreach (DataRow idsDr in idsDt.Rows)
  217. {
  218. ids += idsDr["Id"].ToString() + ",";
  219. }
  220. DataTable userDt = CustomerSqlConn.dtable("select UserId,DATE_FORMAT(UpdateDate,'%Y%m%d'),count(Id) from MerchantInfo where Id in (" + ids.TrimEnd(',') + ") group by UserId,DATE_FORMAT(UpdateDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  221. if (userDt.Rows.Count > 0)
  222. {
  223. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行创客激活数日志");
  224. foreach (DataRow userDr in userDt.Rows)
  225. {
  226. int UserId = int.Parse(userDr["UserId"].ToString());
  227. string TradeDate = userDr[1].ToString();
  228. int ActCount = int.Parse(function.CheckInt(userDr[2].ToString()));
  229. string TradeMonth = TradeDate.Substring(0, 6);
  230. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  231. string start = date + " 00:00:00";
  232. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  233. KxsMainModels.Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new KxsMainModels.Users();
  234. string ParentNav = user.ParentNav;
  235. UserTradeMonthSummary selfStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.SeoTitle == "self");
  236. if (selfStat == null)
  237. {
  238. selfStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  239. {
  240. UserId = UserId,
  241. TradeMonth = TradeMonth,
  242. SeoKeyword = TradeDate,
  243. SeoTitle = "self",
  244. }).Entity;
  245. db.SaveChanges();
  246. }
  247. selfStat.ActiveBuddyMerStatus += ActCount;
  248. ParentNav += "," + UserId + ",";
  249. if (!string.IsNullOrEmpty(ParentNav))
  250. {
  251. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  252. foreach (string NavUserIdString in ParentNavList)
  253. {
  254. int NavUserId = int.Parse(NavUserIdString);
  255. UserTradeMonthSummary teamStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.SeoTitle == "team");
  256. if (teamStat == null)
  257. {
  258. teamStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  259. {
  260. UserId = NavUserId,
  261. TradeMonth = TradeMonth,
  262. SeoKeyword = TradeDate,
  263. SeoTitle = "team",
  264. }).Entity;
  265. db.SaveChanges();
  266. }
  267. teamStat.ActiveBuddyMerStatus += ActCount;
  268. }
  269. }
  270. }
  271. db.SaveChanges();
  272. CustomerSqlConn.op("update MerchantInfo set ActStat=1 where Id in (" + ids.TrimEnd(',') + ")", AppConfig.Base.SqlConn2);
  273. }
  274. }
  275. }
  276. catch (Exception ex)
  277. {
  278. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  279. }
  280. db.Dispose();
  281. maindb.Dispose();
  282. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  283. }
  284. public void test()
  285. {
  286. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "实时执行创客激活数日志");
  287. WebCMSEntities db = new WebCMSEntities();
  288. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  289. try
  290. {
  291. DataTable idsDt = CustomerSqlConn.dtable("select 646 Id", AppConfig.Base.SqlConn2);
  292. if(idsDt.Rows.Count > 0)
  293. {
  294. string ids = "";
  295. foreach (DataRow idsDr in idsDt.Rows)
  296. {
  297. ids += idsDr["Id"].ToString() + ",";
  298. }
  299. DataTable userDt = CustomerSqlConn.dtable("select UserId,DATE_FORMAT(SignDate,'%Y%m%d'),count(Id) from MerchantInfo where Id in (" + ids.TrimEnd(',') + ") group by UserId,DATE_FORMAT(SignDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  300. if (userDt.Rows.Count > 0)
  301. {
  302. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "实时执行创客激活数日志");
  303. foreach (DataRow userDr in userDt.Rows)
  304. {
  305. int UserId = int.Parse(userDr["UserId"].ToString());
  306. string TradeDate = userDr[1].ToString();
  307. int ActCount = int.Parse(function.CheckInt(userDr[2].ToString()));
  308. string TradeMonth = TradeDate.Substring(0, 6);
  309. string date = TradeDate.Substring(0, 4) + "-" + TradeDate.Substring(4, 2) + "-" + TradeDate.Substring(6, 2);
  310. string start = date + " 00:00:00";
  311. string end = DateTime.Parse(date).AddDays(1).ToString("yyyy-MM-dd") + " 00:00:00";
  312. KxsMainModels.Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new KxsMainModels.Users();
  313. string ParentNav = user.ParentNav;
  314. UserTradeMonthSummary selfStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.SeoTitle == "self");
  315. if (selfStat == null)
  316. {
  317. selfStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  318. {
  319. UserId = UserId,
  320. TradeMonth = TradeMonth,
  321. SeoKeyword = TradeDate,
  322. SeoTitle = "self",
  323. }).Entity;
  324. db.SaveChanges();
  325. }
  326. selfStat.ActiveBuddyMerStatus += ActCount;
  327. ParentNav += "," + UserId + ",";
  328. if (!string.IsNullOrEmpty(ParentNav))
  329. {
  330. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  331. foreach (string NavUserIdString in ParentNavList)
  332. {
  333. int NavUserId = int.Parse(NavUserIdString);
  334. UserTradeMonthSummary teamStat = db.UserTradeMonthSummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.SeoKeyword == TradeDate && m.SeoTitle == "team");
  335. if (teamStat == null)
  336. {
  337. teamStat = db.UserTradeMonthSummary.Add(new UserTradeMonthSummary()
  338. {
  339. UserId = NavUserId,
  340. TradeMonth = TradeMonth,
  341. SeoKeyword = TradeDate,
  342. SeoTitle = "team",
  343. }).Entity;
  344. db.SaveChanges();
  345. }
  346. teamStat.ActiveBuddyMerStatus += ActCount;
  347. }
  348. }
  349. }
  350. db.SaveChanges();
  351. CustomerSqlConn.op("update MerchantInfo set ActStat=1 where Id in (" + ids.TrimEnd(',') + ")", AppConfig.Base.SqlConn2);
  352. }
  353. }
  354. }
  355. catch (Exception ex)
  356. {
  357. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时执行创客激活数异常");
  358. }
  359. db.Dispose();
  360. maindb.Dispose();
  361. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时执行创客激活数日志");
  362. }
  363. }
  364. }