StatResetService2.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  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 StatResetService2
  12. {
  13. public readonly static StatResetService2 Instance = new StatResetService2();
  14. private StatResetService2()
  15. { }
  16. public void StartReset()
  17. {
  18. Thread th = new Thread(StartResetMerchantDo);
  19. th.IsBackground = true;
  20. th.Start();
  21. Thread thUser = new Thread(StartResetUserSelfDo);
  22. thUser.IsBackground = true;
  23. thUser.Start();
  24. Thread thUserTeam = new Thread(StartResetUserTeamDo);
  25. thUserTeam.IsBackground = true;
  26. thUserTeam.Start();
  27. Thread thSn = new Thread(StartResetSnDo);
  28. thSn.IsBackground = true;
  29. thSn.Start();
  30. }
  31. public void StartResetMerchantDo()
  32. {
  33. while (true)
  34. {
  35. string content = RedisDbconn.Instance.RPop<string>("ResetMerchantStatDataQueue2");
  36. if (!string.IsNullOrEmpty(content))
  37. {
  38. StatResetMerchantAmount(content);
  39. }
  40. Thread.Sleep(10000);
  41. }
  42. // StatResetMerchantAmount("{\"MerchantId\":\"" + 1415 + "\",\"StartDate\":\"" + 20231127 + "\",\"EndDate\":\"" + 20231127 + "\"}");
  43. }
  44. public void StatResetMerchantAmount(string content)
  45. {
  46. JsonData jsonObj = JsonMapper.ToObject(content);
  47. string merchantId = jsonObj["MerchantId"].ToString();
  48. string startDate = jsonObj["StartDate"].ToString();
  49. string endDate = jsonObj["EndDate"].ToString();
  50. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "重置商户交易额日志");
  51. WebCMSEntities db = new WebCMSEntities();
  52. string conn = Library.ConfigurationManager.AppSettings["StatSqlConnStr2"].ToString();
  53. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  54. using (var tran = db.Database.BeginTransaction())
  55. {
  56. try
  57. {
  58. DataTable selfDt = CustomerSqlConn.dtable("select MerchantId,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(PayMoney),count(Id),sum(MerchantActualAmount) from ConsumerOrders where MerchantId=" + merchantId + " and CreateDate>='" + startDate.Substring(0, 4) + "-" + startDate.Substring(4, 2) + "-" + startDate.Substring(6, 2) + " 00:00:00' and CreateDate<='" + endDate.Substring(0, 4) + "-" + endDate.Substring(4, 2) + "-" + endDate.Substring(6, 2) + " 23:59:59' group by MerchantId,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  59. if (selfDt.Rows.Count > 0)
  60. {
  61. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "重置商户交易额日志");
  62. var ResetDate = "";
  63. bool check = false; //重置统计表数据开关
  64. decimal NonActAmounts = 0;
  65. decimal ActAmounts = 0;
  66. decimal AliPayInFactAmounts = 0;
  67. decimal WeChatInfactAmounts = 0;
  68. int OderCounts = 0;
  69. decimal InFactAmounts = 0;
  70. decimal TradeAmounts = 0;
  71. foreach (DataRow selfDr in selfDt.Rows)
  72. {
  73. int MerchantId = int.Parse(selfDr["MerchantId"].ToString());
  74. int PayMode = int.Parse(selfDr["PayMode"].ToString());
  75. int IsAct = int.Parse(selfDr["IsAct"].ToString());
  76. string TradeDate = selfDr[3].ToString();
  77. decimal TradeAmount = decimal.Parse(selfDr[4].ToString());
  78. int TradeCount = int.Parse(selfDr[5].ToString());
  79. decimal ActualAmount = decimal.Parse(selfDr[6].ToString());
  80. string TradeMonth = TradeDate.Substring(0, 6);
  81. //商户交易额
  82. MerchantAmountSummay merchantStat = db.MerchantAmountSummay.FirstOrDefault(m => m.MerchantId == MerchantId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode);
  83. if (merchantStat == null)
  84. {
  85. merchantStat = db.MerchantAmountSummay.Add(new MerchantAmountSummay()
  86. {
  87. MerchantId = MerchantId,
  88. TradeMonth = TradeMonth,
  89. TradeDate = TradeDate,
  90. PayMode = PayMode,
  91. IsAct = IsAct,
  92. }).Entity;
  93. db.SaveChanges();
  94. }
  95. var LastDate = ResetDate; //上次重置时间
  96. if (ResetDate == "")
  97. {
  98. LastDate = TradeDate;
  99. }
  100. ResetDate = TradeDate; //覆盖重置时间
  101. if (LastDate == TradeDate)
  102. {
  103. OderCounts += TradeCount;
  104. TradeAmounts += TradeAmount;
  105. if (IsAct == 0) NonActAmounts += TradeAmount;
  106. if (IsAct == 1) ActAmounts += TradeAmount;
  107. if (PayMode == 1) AliPayInFactAmounts += ActualAmount;
  108. if (PayMode == 2) WeChatInfactAmounts += ActualAmount;
  109. if (IsAct == 1) InFactAmounts += TradeAmount;
  110. if (selfDt.Rows.Count == 1)
  111. {
  112. CustomerSqlConn.op("UPDATE MerchantTradeSummary" + LastDate + " SET NonActAmount=" + NonActAmounts + ",ActAmount=" + ActAmounts + ",AliPayInFactAmount=" + AliPayInFactAmounts + ",WeChatInfactAmount=" + WeChatInfactAmounts + ",OderCount=" + OderCounts + ",InFactAmount=" + InFactAmounts + ",TradeAmount=" + TradeAmounts + " WHERE MerchantId=" + MerchantId + "", conn);
  113. CustomerSqlConn.op("UPDATE MerchantTradeSummaryList" + TradeMonth + " SET NonActAmount=" + NonActAmounts + ",ActAmount=" + ActAmounts + ",AliPayInFactAmount=" + AliPayInFactAmounts + ",WeChatInfactAmount=" + WeChatInfactAmounts + ",OderCount=" + OderCounts + ",InFactAmount=" + InFactAmounts + ",TradeAmount=" + TradeAmounts + " WHERE MerchantId=" + MerchantId + " AND TradeDate='" + LastDate + "'", conn);
  114. }
  115. }
  116. else
  117. {
  118. check = true;
  119. if (check)
  120. {
  121. if (check)
  122. {
  123. CustomerSqlConn.op("UPDATE MerchantTradeSummary" + LastDate + " SET NonActAmount=" + NonActAmounts + ",ActAmount=" + ActAmounts + ",AliPayInFactAmount=" + AliPayInFactAmounts + ",WeChatInfactAmount=" + WeChatInfactAmounts + ",OderCount=" + OderCounts + ",InFactAmount=" + InFactAmounts + ",TradeAmount=" + TradeAmounts + " WHERE MerchantId=" + MerchantId + "", conn);
  124. CustomerSqlConn.op("UPDATE MerchantTradeSummaryList" + TradeMonth + " SET NonActAmount=" + NonActAmounts + ",ActAmount=" + ActAmounts + ",AliPayInFactAmount=" + AliPayInFactAmounts + ",WeChatInfactAmount=" + WeChatInfactAmounts + ",OderCount=" + OderCounts + ",InFactAmount=" + InFactAmounts + ",TradeAmount=" + TradeAmounts + " WHERE MerchantId=" + MerchantId + " AND TradeDate='" + LastDate + "'", conn);
  125. check = false;
  126. }
  127. }
  128. if (check == false)
  129. {
  130. OderCounts = TradeCount;
  131. TradeAmounts = TradeAmount;
  132. if (IsAct == 0) NonActAmounts = TradeAmount;
  133. if (IsAct == 1) ActAmounts = TradeAmount;
  134. if (PayMode == 1) AliPayInFactAmounts = ActualAmount;
  135. if (PayMode == 2) WeChatInfactAmounts = ActualAmount;
  136. if (IsAct == 1) InFactAmounts = TradeAmount;
  137. }
  138. }
  139. merchantStat.TradeAmount = TradeAmount;
  140. merchantStat.TradeCount = TradeCount;
  141. merchantStat.TotalActual = ActualAmount;
  142. db.SaveChanges();
  143. }
  144. }
  145. tran.Commit();
  146. }
  147. catch (Exception ex)
  148. {
  149. tran.Rollback();
  150. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重置商户交易额异常");
  151. }
  152. }
  153. db.Dispose();
  154. maindb.Dispose();
  155. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "重置商户交易额日志");
  156. }
  157. public void StartResetSnDo()
  158. {
  159. while (true)
  160. {
  161. string content = RedisDbconn.Instance.RPop<string>("ResetSnStatDataQueue2");
  162. if (!string.IsNullOrEmpty(content))
  163. {
  164. StatResetSnAmount(content);
  165. }
  166. Thread.Sleep(10000);
  167. }
  168. }
  169. public void StatResetSnAmount(string content)
  170. {
  171. JsonData jsonObj = JsonMapper.ToObject(content);
  172. string snNo = jsonObj["SnNo"].ToString();
  173. string startDate = jsonObj["StartDate"].ToString();
  174. string endDate = jsonObj["EndDate"].ToString();
  175. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "重置码牌交易额日志");
  176. WebCMSEntities db = new WebCMSEntities();
  177. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  178. using (var tran = db.Database.BeginTransaction())
  179. {
  180. try
  181. {
  182. DataTable selfDt = CustomerSqlConn.dtable("select SnNo,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(PayMoney),count(Id),sum(MerchantActualAmount) from ConsumerOrders where SnNo=" + snNo + " and CreateDate>='" + startDate.Substring(0, 4) + "-" + startDate.Substring(4, 2) + "-" + startDate.Substring(6, 2) + " 00:00:00' and CreateDate<='" + endDate.Substring(0, 4) + "-" + endDate.Substring(4, 2) + "-" + endDate.Substring(6, 2) + " 23:59:59' group by SnNo,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  183. if (selfDt.Rows.Count > 0)
  184. {
  185. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "重置码牌交易额日志");
  186. foreach (DataRow selfDr in selfDt.Rows)
  187. {
  188. int PayMode = int.Parse(selfDr["PayMode"].ToString());
  189. int IsAct = int.Parse(selfDr["IsAct"].ToString());
  190. string SnNo = selfDr["SnNo"].ToString();
  191. string TradeDate = selfDr[3].ToString();
  192. decimal TradeAmount = decimal.Parse(selfDr[4].ToString());
  193. int TradeCount = int.Parse(selfDr[5].ToString());
  194. decimal ActualAmount = decimal.Parse(selfDr[6].ToString());
  195. string TradeMonth = TradeDate.Substring(0, 6);
  196. //码牌交易额
  197. QrCodeAmountSummay qrcode = db.QrCodeAmountSummay.FirstOrDefault(m => m.SnNo == SnNo && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode);
  198. if (qrcode == null)
  199. {
  200. qrcode = db.QrCodeAmountSummay.Add(new QrCodeAmountSummay()
  201. {
  202. SnNo = SnNo,
  203. TradeMonth = TradeMonth,
  204. TradeDate = TradeDate,
  205. PayMode = PayMode,
  206. IsAct = IsAct,
  207. }).Entity;
  208. db.SaveChanges();
  209. }
  210. qrcode.TradeAmount += TradeAmount;
  211. qrcode.TradeCount += TradeCount;
  212. qrcode.TotalActual += ActualAmount;
  213. db.SaveChanges();
  214. }
  215. }
  216. tran.Commit();
  217. }
  218. catch (Exception ex)
  219. {
  220. tran.Rollback();
  221. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重置码牌交易额异常");
  222. }
  223. }
  224. db.Dispose();
  225. maindb.Dispose();
  226. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "重置码牌交易额日志");
  227. }
  228. public void StartResetUserSelfDo()
  229. {
  230. while (true)
  231. {
  232. string content = RedisDbconn.Instance.RPop<string>("ResetUserSelfStatDataQueue2");
  233. if (!string.IsNullOrEmpty(content))
  234. {
  235. StatResetUserSelfAmount(content);
  236. }
  237. Thread.Sleep(10000);
  238. }
  239. }
  240. public void StatResetUserSelfAmount(string content)
  241. {
  242. JsonData jsonObj = JsonMapper.ToObject(content);
  243. string userId = jsonObj["UserId"].ToString();
  244. string startDate = jsonObj["StartDate"].ToString();
  245. string endDate = jsonObj["EndDate"].ToString();
  246. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "重置创客个人交易额日志");
  247. WebCMSEntities db = new WebCMSEntities();
  248. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  249. using (var tran = db.Database.BeginTransaction())
  250. {
  251. try
  252. {
  253. DataTable selfDt = CustomerSqlConn.dtable("select UserId,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d'),sum(PayMoney),count(Id) from ConsumerOrders where UserId=" + userId + " and CreateDate>='" + startDate.Substring(0, 4) + "-" + startDate.Substring(4, 2) + "-" + startDate.Substring(6, 2) + " 00:00:00' and CreateDate<='" + endDate.Substring(0, 4) + "-" + endDate.Substring(4, 2) + "-" + endDate.Substring(6, 2) + " 23:59:59' group by UserId,PayMode,IsAct,DATE_FORMAT(CreateDate,'%Y%m%d')", AppConfig.Base.SqlConn2);
  254. if (selfDt.Rows.Count > 0)
  255. {
  256. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "重置创客个人交易额日志");
  257. foreach (DataRow selfDr in selfDt.Rows)
  258. {
  259. int UserId = int.Parse(selfDr["UserId"].ToString());
  260. KxsMainModels.Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new KxsMainModels.Users();
  261. int PayMode = int.Parse(selfDr["PayMode"].ToString());
  262. int IsAct = int.Parse(selfDr["IsAct"].ToString());
  263. string TradeDate = selfDr[3].ToString();
  264. decimal TradeAmount = decimal.Parse(selfDr[4].ToString());
  265. int TradeCount = int.Parse(selfDr[5].ToString());
  266. string TradeMonth = TradeDate.Substring(0, 6);
  267. //创客交易额
  268. UserAmountSummary selfStat = db.UserAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode && m.SeoTitle == "self");
  269. if (selfStat == null)
  270. {
  271. selfStat = db.UserAmountSummary.Add(new UserAmountSummary()
  272. {
  273. UserId = UserId,
  274. TradeMonth = TradeMonth,
  275. TradeDate = TradeDate,
  276. PayMode = PayMode,
  277. IsAct = IsAct,
  278. SeoTitle = "self",
  279. }).Entity;
  280. db.SaveChanges();
  281. }
  282. selfStat.TotalAmount = TradeAmount;
  283. selfStat.TradeCount = TradeCount;
  284. db.SaveChanges();
  285. string ParentNav = user.ParentNav + "," + userId + ",";
  286. if (!string.IsNullOrEmpty(ParentNav))
  287. {
  288. string[] ParentNavList = ParentNav.Replace(",,", ",").Trim(',').Split(',');
  289. foreach (string id in ParentNavList)
  290. {
  291. string reqdata = "{\"UserId\":\"" + id + "\",\"StartDate\":\"" + startDate + "\",\"EndDate\":\"" + endDate + "\"}";
  292. RedisDbconn.Instance.AddList("ResetUserTeamStatDataQueue2", reqdata);
  293. }
  294. }
  295. }
  296. }
  297. tran.Commit();
  298. }
  299. catch (Exception ex)
  300. {
  301. tran.Rollback();
  302. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重置创客个人交易额异常");
  303. }
  304. }
  305. db.Dispose();
  306. maindb.Dispose();
  307. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "重置创客个人交易额日志");
  308. }
  309. public void StartResetUserTeamDo()
  310. {
  311. while (true)
  312. {
  313. string content = RedisDbconn.Instance.RPop<string>("ResetUserTeamStatDataQueue2");
  314. if (!string.IsNullOrEmpty(content))
  315. {
  316. StatResetUserTeamAmount(content);
  317. }
  318. Thread.Sleep(10000);
  319. }
  320. }
  321. public void StatResetUserTeamAmount(string content)
  322. {
  323. JsonData jsonObj = JsonMapper.ToObject(content);
  324. int userId = int.Parse(jsonObj["UserId"].ToString());
  325. string startDate = jsonObj["StartDate"].ToString();
  326. string endDate = jsonObj["EndDate"].ToString();
  327. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "重置团队创客交易额日志");
  328. WebCMSEntities db = new WebCMSEntities();
  329. KxsMainModels.WebCMSEntities maindb = new KxsMainModels.WebCMSEntities();
  330. using (var tran = db.Database.BeginTransaction())
  331. {
  332. try
  333. {
  334. string subUserId = "0";
  335. var subusers = maindb.Users.Select(m => new { m.Id, m.ParentUserId }).Where(m => m.ParentUserId == userId).ToList();
  336. foreach (var subuser in subusers)
  337. {
  338. subUserId += "," + subuser.Id;
  339. }
  340. DataTable selfDt = CustomerSqlConn.dtable("select PayMode,TotalAmount,TradeMonth,TradeDate,UserId,TradeCount,IsAct from UserAmountSummary where UserId in (" + subUserId + ") and TradeDate>='" + startDate + "' and TradeDate<='" + endDate + "' and SeoTitle='team'", AppConfig.Base.SqlConn2);
  341. if (selfDt.Rows.Count > 0)
  342. {
  343. function.WriteLog("统计人数:" + selfDt.Rows.Count + "\n\n", "重置团队创客交易额日志");
  344. foreach (DataRow selfDr in selfDt.Rows)
  345. {
  346. int UserId = int.Parse(selfDr["UserId"].ToString());
  347. int PayMode = int.Parse(selfDr["PayMode"].ToString());
  348. int IsAct = int.Parse(selfDr["IsAct"].ToString());
  349. string TradeDate = selfDr["TradeDate"].ToString();
  350. decimal TradeAmount = decimal.Parse(selfDr["TotalAmount"].ToString());
  351. int TradeCount = int.Parse(selfDr["TradeCount"].ToString());
  352. string TradeMonth = selfDr["TradeMonth"].ToString();
  353. //创客交易额
  354. UserAmountSummary teamStat = db.UserAmountSummary.FirstOrDefault(m => m.UserId == UserId && m.IsAct == IsAct && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.PayMode == PayMode && m.SeoTitle == "Team");
  355. if (teamStat == null)
  356. {
  357. teamStat = db.UserAmountSummary.Add(new UserAmountSummary()
  358. {
  359. UserId = UserId,
  360. TradeMonth = TradeMonth,
  361. TradeDate = TradeDate,
  362. PayMode = PayMode,
  363. IsAct = IsAct,
  364. SeoTitle = "self",
  365. }).Entity;
  366. db.SaveChanges();
  367. }
  368. teamStat.TotalAmount = TradeAmount;
  369. teamStat.TradeCount = TradeCount;
  370. db.SaveChanges();
  371. }
  372. }
  373. tran.Commit();
  374. }
  375. catch (Exception ex)
  376. {
  377. tran.Rollback();
  378. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重置团队创客交易额异常");
  379. }
  380. }
  381. db.Dispose();
  382. maindb.Dispose();
  383. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "重置团队创客交易额日志");
  384. }
  385. }
  386. }