OperateService.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  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.OpModels;
  9. namespace MySystem
  10. {
  11. public class OperateService
  12. {
  13. public readonly static OperateService Instance = new OperateService();
  14. private OperateService()
  15. { }
  16. public void Start()
  17. {
  18. Thread th = new Thread(StartDo);
  19. th.IsBackground = true;
  20. th.Start();
  21. }
  22. public void StartDo()
  23. {
  24. while (true)
  25. {
  26. if (RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  27. {
  28. StatSendEverDay();
  29. }
  30. Thread.Sleep(30000);
  31. }
  32. }
  33. public void StatSendEverDay()
  34. {
  35. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  36. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "运营中心发货统计日志");
  37. WebCMSEntities db = new WebCMSEntities();
  38. using (var tran = db.Database.BeginTransaction())
  39. {
  40. try
  41. {
  42. string startId = function.ReadInstance("/SendStat/Id.txt");
  43. if (string.IsNullOrEmpty(startId))
  44. {
  45. startId = "0";
  46. }
  47. DataTable idsDt = OtherMySqlConn.dtable("select Id from StoreStockChange where Id>=" + startId + " and CreateDate>='2022-12-19 00:00:00' and OpId>0 and Status=0 order by Id limit 50");
  48. if (idsDt.Rows.Count > 0)
  49. {
  50. string ids = "";
  51. foreach (DataRow idsDr in idsDt.Rows)
  52. {
  53. ids += idsDr["Id"].ToString() + ",";
  54. startId = idsDr["Id"].ToString();
  55. }
  56. DataTable selfDt = OtherMySqlConn.dtable("select OpId,StoreId,TransType,DATE_FORMAT(CreateDate,'%Y%m%d'),count(Id) from StoreStockChange where Id in (" + ids.TrimEnd(',') + ") group by OpId,StoreId,TransType,DATE_FORMAT(CreateDate,'%Y%m%d')");
  57. if (selfDt.Rows.Count > 0)
  58. {
  59. function.WriteLog("统计数:" + selfDt.Rows.Count + "\n\n", "运营中心发货统计日志");
  60. foreach (DataRow selfDr in selfDt.Rows)
  61. {
  62. int OpId = int.Parse(selfDr["OpId"].ToString());
  63. int StoreId = int.Parse(selfDr["StoreId"].ToString());
  64. int TransType = int.Parse(selfDr["TransType"].ToString());
  65. string TradeDate = selfDr[3].ToString();
  66. string TradeMonth = TradeDate.Substring(0, 6);
  67. int SendCount = int.Parse(selfDr[4].ToString());
  68. if(TransType == 10 || TransType == 11)
  69. {
  70. SendDaySummary selfStat = db.SendDaySummary.FirstOrDefault(m => m.OpId == OpId && m.TradeDate == TradeDate);
  71. if (selfStat == null)
  72. {
  73. selfStat = db.SendDaySummary.Add(new SendDaySummary()
  74. {
  75. TradeDate = TradeDate,
  76. OpId = OpId,
  77. }).Entity;
  78. db.SaveChanges();
  79. }
  80. selfStat.SendCount += SendCount;
  81. SendMonthSummary monthStat = db.SendMonthSummary.FirstOrDefault(m => m.OpId == OpId && m.TradeMonth == TradeMonth);
  82. if (monthStat == null)
  83. {
  84. monthStat = db.SendMonthSummary.Add(new SendMonthSummary()
  85. {
  86. TradeMonth = TradeMonth,
  87. OpId = OpId,
  88. }).Entity;
  89. db.SaveChanges();
  90. }
  91. monthStat.SendCount += SendCount;
  92. StoreSendDaySummary selfStoreStat = db.StoreSendDaySummary.FirstOrDefault(m => m.OpId == StoreId && m.TradeDate == TradeDate);
  93. if (selfStoreStat == null)
  94. {
  95. selfStoreStat = db.StoreSendDaySummary.Add(new StoreSendDaySummary()
  96. {
  97. TradeDate = TradeDate,
  98. OpId = StoreId,
  99. }).Entity;
  100. db.SaveChanges();
  101. }
  102. selfStoreStat.SendCount += SendCount;
  103. StoreSendMonthSummary monthStoreStat = db.StoreSendMonthSummary.FirstOrDefault(m => m.OpId == StoreId && m.TradeMonth == TradeMonth);
  104. if (monthStoreStat == null)
  105. {
  106. monthStoreStat = db.StoreSendMonthSummary.Add(new StoreSendMonthSummary()
  107. {
  108. TradeMonth = TradeMonth,
  109. OpId = StoreId,
  110. }).Entity;
  111. db.SaveChanges();
  112. }
  113. monthStoreStat.SendCount += SendCount;
  114. }
  115. }
  116. OtherMySqlConn.op("update StoreStockChange set Status=1 where Id in (" + ids.TrimEnd(',') + ")");
  117. function.WritePage("/SendStat/", "Id.txt", startId);
  118. }
  119. db.SaveChanges();
  120. }
  121. tran.Commit();
  122. }
  123. catch (Exception ex)
  124. {
  125. tran.Rollback();
  126. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "运营中心发货统计异常");
  127. }
  128. }
  129. db.Dispose();
  130. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "运营中心发货统计日志");
  131. }
  132. // 统计运营中心激活数
  133. public void StartPosActNum()
  134. {
  135. Thread th = new Thread(StartPosActNumFor);
  136. th.IsBackground = true;
  137. th.Start();
  138. }
  139. public void StartPosActNumFor()
  140. {
  141. while (true)
  142. {
  143. if(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  144. {
  145. StartPosActNumEverTime();
  146. }
  147. Thread.Sleep(120000);
  148. }
  149. }
  150. public void StartPosActNumEverTime()
  151. {
  152. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  153. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "运营中心激活数日志");
  154. WebCMSEntities db = new WebCMSEntities();
  155. try
  156. {
  157. DataTable idsDt = OtherMySqlConn.dtable("select Id from PosMachinesTwo where QueryCount=1 and ActivationState=1 and ActivationTime is not null and ActivationTime>='2022-12-19 00:00:00' and OpId>0 limit 50");
  158. if(idsDt.Rows.Count > 0)
  159. {
  160. string ids = "";
  161. foreach (DataRow idsDr in idsDt.Rows)
  162. {
  163. ids += idsDr["Id"].ToString() + ",";
  164. }
  165. DataTable userDt = OtherMySqlConn.dtable("select OpId,StoreId,DATE_FORMAT(ActivationTime, '%Y%m%d'),count(Id) from PosMachinesTwo where Id in (" + ids.TrimEnd(',') + ") group by OpId,StoreId,DATE_FORMAT(ActivationTime, '%Y%m%d')");
  166. if (userDt.Rows.Count > 0)
  167. {
  168. function.WriteLog("人数:" + userDt.Rows.Count + "\n\n", "运营中心激活数日志");
  169. foreach (DataRow userDr in userDt.Rows)
  170. {
  171. int OpId = int.Parse(userDr["OpId"].ToString());
  172. int StoreId = int.Parse(userDr["StoreId"].ToString());
  173. string TradeDate = userDr[2].ToString();
  174. int ActCount = int.Parse(function.CheckInt(userDr[3].ToString()));
  175. string TradeMonth = TradeDate.Substring(0, 6);
  176. ActMerDaySummary selfStat = db.ActMerDaySummary.FirstOrDefault(m => m.OpId == OpId && m.TradeDate == TradeDate);
  177. if (selfStat == null)
  178. {
  179. selfStat = db.ActMerDaySummary.Add(new ActMerDaySummary()
  180. {
  181. OpId = OpId,
  182. TradeDate = TradeDate,
  183. }).Entity;
  184. db.SaveChanges();
  185. }
  186. selfStat.ActCount += ActCount;
  187. ActMerMonthSummary monthStat = db.ActMerMonthSummary.FirstOrDefault(m => m.OpId == OpId && m.TradeMonth == TradeMonth);
  188. if (monthStat == null)
  189. {
  190. monthStat = db.ActMerMonthSummary.Add(new ActMerMonthSummary()
  191. {
  192. OpId = OpId,
  193. TradeMonth = TradeMonth,
  194. }).Entity;
  195. db.SaveChanges();
  196. }
  197. monthStat.ActCount += ActCount;
  198. StoreActMerDaySummary selfStat2 = db.StoreActMerDaySummary.FirstOrDefault(m => m.OpId == StoreId && m.TradeDate == TradeDate);
  199. if (selfStat2 == null)
  200. {
  201. selfStat2 = db.StoreActMerDaySummary.Add(new StoreActMerDaySummary()
  202. {
  203. OpId = StoreId,
  204. TradeDate = TradeDate,
  205. }).Entity;
  206. db.SaveChanges();
  207. }
  208. selfStat2.ActCount += ActCount;
  209. StoreActMerMonthSummary monthStat2 = db.StoreActMerMonthSummary.FirstOrDefault(m => m.OpId == StoreId && m.TradeMonth == TradeMonth);
  210. if (monthStat2 == null)
  211. {
  212. monthStat2 = db.StoreActMerMonthSummary.Add(new StoreActMerMonthSummary()
  213. {
  214. OpId = StoreId,
  215. TradeMonth = TradeMonth,
  216. }).Entity;
  217. db.SaveChanges();
  218. }
  219. monthStat2.ActCount += ActCount;
  220. }
  221. db.SaveChanges();
  222. OtherMySqlConn.op("update PosMachinesTwo set QueryCount=2 where Id in (" + ids.TrimEnd(',') + ")");
  223. }
  224. }
  225. }
  226. catch (Exception ex)
  227. {
  228. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "运营中心激活数异常");
  229. }
  230. db.Dispose();
  231. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "运营中心激活数日志");
  232. }
  233. // 统计运营中心机具券销售量
  234. public void StartPosCouponSaleNum()
  235. {
  236. Thread th = new Thread(StartPosCouponSaleNumFor);
  237. th.IsBackground = true;
  238. th.Start();
  239. }
  240. public void StartPosCouponSaleNumFor()
  241. {
  242. while (true)
  243. {
  244. if(RedisDbconn.Instance.Get<string>("StatServerStatus") == "1" && DateTime.Now.Hour >= 3)
  245. {
  246. StartPosCouponSaleNumEverTime();
  247. }
  248. Thread.Sleep(120000);
  249. }
  250. }
  251. public void StartPosCouponSaleNumEverTime()
  252. {
  253. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  254. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "运营中心机具券销售量日志");
  255. WebCMSEntities db = new WebCMSEntities();
  256. try
  257. {
  258. string startId = function.ReadInstance("/SaleStat/Id.txt");
  259. if (string.IsNullOrEmpty(startId))
  260. {
  261. startId = "0";
  262. }
  263. DataTable idsDt = OtherMySqlConn.dtable("select Id from PosCoupons where Id>=" + startId + " and CreateDate>='2022-12-19 00:00:00' and OpId>0 and Status=0 order by Id limit 50");
  264. if (idsDt.Rows.Count > 0)
  265. {
  266. string ids = "";
  267. foreach (DataRow idsDr in idsDt.Rows)
  268. {
  269. ids += idsDr["Id"].ToString() + ",";
  270. startId = idsDr["Id"].ToString();
  271. }
  272. DataTable selfDt = OtherMySqlConn.dtable("select OpId,DATE_FORMAT(CreateDate,'%Y%m%d'),count(Id) from PosCoupons where Id in (" + ids.TrimEnd(',') + ") group by OpId,DATE_FORMAT(CreateDate,'%Y%m%d')");
  273. if (selfDt.Rows.Count > 0)
  274. {
  275. function.WriteLog("人数:" + selfDt.Rows.Count + "\n\n", "运营中心机具券销售量日志");
  276. foreach (DataRow userDr in selfDt.Rows)
  277. {
  278. int OpId = int.Parse(userDr["OpId"].ToString());
  279. string TradeDate = userDr[1].ToString();
  280. int SaleCount = int.Parse(function.CheckInt(userDr[2].ToString()));
  281. string TradeMonth = TradeDate.Substring(0, 6);
  282. PosCouponDaySummary selfStat = db.PosCouponDaySummary.FirstOrDefault(m => m.OpId == OpId && m.TradeDate == TradeDate);
  283. if (selfStat == null)
  284. {
  285. selfStat = db.PosCouponDaySummary.Add(new PosCouponDaySummary()
  286. {
  287. OpId = OpId,
  288. TradeDate = TradeDate,
  289. }).Entity;
  290. db.SaveChanges();
  291. }
  292. selfStat.SaleCount += SaleCount;
  293. PosCouponMonthSummary monthStat = db.PosCouponMonthSummary.FirstOrDefault(m => m.OpId == OpId && m.TradeMonth == TradeMonth);
  294. if (monthStat == null)
  295. {
  296. monthStat = db.PosCouponMonthSummary.Add(new PosCouponMonthSummary()
  297. {
  298. OpId = OpId,
  299. TradeMonth = TradeMonth,
  300. }).Entity;
  301. db.SaveChanges();
  302. }
  303. monthStat.SaleCount += SaleCount;
  304. }
  305. db.SaveChanges();
  306. OtherMySqlConn.op("update PosCoupons set Status=1 where Id in (" + ids.TrimEnd(',') + ")");
  307. function.WritePage("/SaleStat/", "Id.txt", startId);
  308. }
  309. }
  310. }
  311. catch (Exception ex)
  312. {
  313. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "运营中心机具券销售量异常");
  314. }
  315. db.Dispose();
  316. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "运营中心机具券销售量日志");
  317. }
  318. }
  319. }