WifiTradeHelper.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Linq;
  5. using System.Data;
  6. using MySystem;
  7. using MySystem.PxcModels;
  8. using Library;
  9. using LitJson;
  10. public class WifiTradeHelper
  11. {
  12. public readonly static WifiTradeHelper Instance = new WifiTradeHelper();
  13. private WifiTradeHelper()
  14. {
  15. }
  16. public void Start()
  17. {
  18. Thread th = new Thread(DoWorks);
  19. th.IsBackground = true;
  20. th.Start();
  21. }
  22. private void DoWorks()
  23. {
  24. while (true)
  25. {
  26. try
  27. {
  28. if(DateTime.Now.Day < 25 && DateTime.Now.Hour < 20)
  29. {
  30. string Month = DateTime.Now.ToString("yyyyMM");
  31. DoSomething(Month);
  32. }
  33. Thread.Sleep(3600000);
  34. }
  35. catch (Exception ex)
  36. {
  37. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "WIFI发放交易额异常");
  38. }
  39. }
  40. }
  41. public void DoSomething(string Month)
  42. {
  43. string chk = function.ReadInstance("/wifi/trade" + Month + ".txt");
  44. if(!string.IsNullOrEmpty(chk))
  45. {
  46. return;
  47. }
  48. function.WritePage("/wifi/", "trade" + Month + ".txt", DateTime.Now.ToString());
  49. WebCMSEntities db = new WebCMSEntities();
  50. MySystem.ReadModels.WebCMSEntities rdb = new MySystem.ReadModels.WebCMSEntities();
  51. DateTime end = DateTime.Parse(Month + "-01 00:00:00");
  52. List<string> SnNos = new List<string>();
  53. List<MySystem.ReadModels.WifiTradeRecord> trades = rdb.WifiTradeRecord.Where(m => m.Duration >= m.DoMonths && m.CreateDate < end).ToList();
  54. List<MySystem.ReadModels.Users> users = rdb.Users.Where(m => m.AuthFlag == 1).ToList();
  55. List<string> PosSns = trades.Select(m => m.SnNo).ToList();
  56. List<PosMachinesTwo> posList = db.PosMachinesTwo.Where(m => PosSns.Contains(m.PosSn)).ToList();
  57. List<PosMerchantInfo> merList = db.PosMerchantInfo.Where(m => PosSns.Contains(m.KqMerNo)).ToList();
  58. List<TradeDaySummary> statTrade = new List<TradeDaySummary>();
  59. List<TradeDaySummaryBefore> statTradeBefore = new List<TradeDaySummaryBefore>();
  60. List<TradeDaySummaryAfter> statTradeAfter = new List<TradeDaySummaryAfter>();
  61. function.WriteLog(trades.Count.ToString(), "WIFI发放交易额日志");
  62. foreach(MySystem.ReadModels.WifiTradeRecord trade in trades)
  63. {
  64. function.WriteLog(Newtonsoft.Json.JsonConvert.SerializeObject(trade), "WIFI发放交易额日志");
  65. if(trade.Unit == "m" && trade.Duration > 0 && !SnNos.Contains(trade.SnNo))
  66. {
  67. decimal TradeAmt = trade.TradeAmount / trade.Duration;
  68. TradeAmt = PublicFunction.NumberFormat(TradeAmt);
  69. PosMachinesTwo pos = posList.FirstOrDefault(m => m.PosSn == trade.SnNo) ?? new PosMachinesTwo();
  70. PosMerchantInfo mer = merList.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
  71. StatTrade(statTrade, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt);
  72. if (pos.BindingTime < trade.CreateDate.Value.AddMonths(-9))
  73. {
  74. StatTradeBefore(statTradeBefore, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt);
  75. }
  76. else
  77. {
  78. StatTradeAfter(statTradeAfter, users, pos.BuyUserId, pos.BrandId, Month.Replace("-", ""), TradeAmt);
  79. }
  80. WifiTradeRecord edit = db.WifiTradeRecord.FirstOrDefault(m => m.Id == trade.Id);
  81. if(edit != null)
  82. {
  83. edit.DoMonths += 1;
  84. edit.LastMonth = Month.Replace("-", "");
  85. //推送wifi交易给java
  86. // PosPushDataNewHelper.Trade(new MySystem.SpModels.TradeRecord()
  87. // {
  88. // TradeSnNo = edit.SnNo,
  89. // MerNo = edit.Remark,
  90. // TradeAmount = TradeAmt,
  91. // TradeSerialNo = Guid.NewGuid().ToString(),
  92. // CreateDate = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00"),
  93. // ProductType = edit.BrandId.ToString(),
  94. // });
  95. }
  96. SnNos.Add(trade.SnNo);
  97. }
  98. }
  99. int index = 0;
  100. foreach(TradeDaySummary sub in statTrade)
  101. {
  102. index += 1;
  103. db.TradeDaySummary.Add(sub);
  104. if(index % 200 == 0)
  105. {
  106. db.SaveChanges();
  107. }
  108. }
  109. db.SaveChanges();
  110. index = 0;
  111. foreach(TradeDaySummaryBefore sub in statTradeBefore)
  112. {
  113. index += 1;
  114. db.TradeDaySummaryBefore.Add(sub);
  115. if(index % 200 == 0)
  116. {
  117. db.SaveChanges();
  118. }
  119. }
  120. db.SaveChanges();
  121. index = 0;
  122. foreach(TradeDaySummaryAfter sub in statTradeAfter)
  123. {
  124. index += 1;
  125. db.TradeDaySummaryAfter.Add(sub);
  126. if(index % 200 == 0)
  127. {
  128. db.SaveChanges();
  129. }
  130. }
  131. db.SaveChanges();
  132. db.Dispose();
  133. function.WritePage("/wifi/", "trade" + Month + "-end.txt", DateTime.Now.ToString());
  134. }
  135. // public void DoSomethingNew(string Month)
  136. // {
  137. // WebCMSEntities db = new WebCMSEntities();
  138. // MySystem.ReadModels.WebCMSEntities rdb = new MySystem.ReadModels.WebCMSEntities();
  139. // DateTime end = DateTime.Parse(Month + "-01 00:00:00").AddMonths(1);
  140. // List<string> SnNos = new List<string>();
  141. // List<MySystem.ReadModels.WifiTradeRecord> trades = rdb.WifiTradeRecord.Where(m => m.Duration >= m.DoMonths && m.CreateDate < end).ToList();
  142. // foreach(MySystem.ReadModels.WifiTradeRecord trade in trades)
  143. // {
  144. // if(trade.Unit == "m" && trade.Duration > 0 && !SnNos.Contains(trade.SnNo))
  145. // {
  146. // DoOne(db, trade.Id, Month, "");
  147. // SnNos.Add(trade.SnNo);
  148. // }
  149. // }
  150. // db.SaveChanges();
  151. // db.Dispose();
  152. // }
  153. public void DoOne(WebCMSEntities db, int Id, string Month, string OrderNo, bool time = false)
  154. {
  155. WifiTradeRecord edit = db.WifiTradeRecord.FirstOrDefault(m => m.Id == Id);
  156. if(edit != null)
  157. {
  158. if(edit.LastMonth != Month.Replace("-", ""))
  159. {
  160. decimal TradeAmt = edit.TradeAmount / edit.Duration;
  161. TradeAmt = PublicFunction.NumberFormat(TradeAmt);
  162. edit.DoMonths += 1;
  163. edit.LastMonth = Month.Replace("-", "");
  164. //推送wifi交易给java
  165. PosPushDataNewHelper.Trade(new MySystem.SpModels.TradeRecord()
  166. {
  167. TradeSnNo = edit.SnNo,
  168. MerNo = edit.SnNo,
  169. TradeAmount = TradeAmt,
  170. TradeSerialNo = Guid.NewGuid().ToString(),
  171. CreateDate = time ? DateTime.Now : DateTime.Parse(Month + "-01 01:00:00"),
  172. ProductType = edit.BrandId.ToString(),
  173. ErrorMsg = edit.DoMonths == 1 ? edit.TradeAmount.ToString() : "0",
  174. ChannelSerial = OrderNo,
  175. });
  176. }
  177. }
  178. }
  179. public void StatTrade(List<TradeDaySummary> statTrade, List<MySystem.ReadModels.Users> users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  180. {
  181. MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users();
  182. string ParentNav = user.ParentNav;
  183. string TradeDate = TradeMonth + "01";
  184. ParentNav += "," + UserId + ",";
  185. TradeDaySummary selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  186. if (selfStat == null)
  187. {
  188. statTrade.Add(new TradeDaySummary()
  189. {
  190. UserId = UserId,
  191. TradeMonth = TradeMonth,
  192. TradeDate = TradeDate,
  193. BrandId = BrandId,
  194. SeoTitle = "self",
  195. HelpDirectTradeAmt = TradeAmount,
  196. });
  197. }
  198. else
  199. {
  200. selfStat.HelpDirectTradeAmt += TradeAmount;
  201. }
  202. if (!string.IsNullOrEmpty(ParentNav))
  203. {
  204. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  205. foreach (string NavUserIdString in ParentNavList)
  206. {
  207. int NavUserId = int.Parse(NavUserIdString);
  208. TradeDaySummary teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  209. if (teamStat == null)
  210. {
  211. statTrade.Add(new TradeDaySummary()
  212. {
  213. UserId = NavUserId,
  214. TradeMonth = TradeMonth,
  215. TradeDate = TradeDate,
  216. BrandId = BrandId,
  217. SeoTitle = "team",
  218. HelpNonDirectTradeAmt = TradeAmount,
  219. });
  220. }
  221. else
  222. {
  223. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  224. }
  225. }
  226. }
  227. }
  228. public void StatTradeBefore(List<TradeDaySummaryBefore> statTrade, List<MySystem.ReadModels.Users> users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  229. {
  230. MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users();
  231. string ParentNav = user.ParentNav;
  232. string TradeDate = TradeMonth + "01";
  233. ParentNav += "," + UserId + ",";
  234. TradeDaySummaryBefore selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  235. if (selfStat == null)
  236. {
  237. statTrade.Add(new TradeDaySummaryBefore()
  238. {
  239. UserId = UserId,
  240. TradeMonth = TradeMonth,
  241. TradeDate = TradeDate,
  242. BrandId = BrandId,
  243. SeoTitle = "self",
  244. HelpDirectTradeAmt = TradeAmount,
  245. });
  246. }
  247. else
  248. {
  249. selfStat.HelpDirectTradeAmt += TradeAmount;
  250. }
  251. if (!string.IsNullOrEmpty(ParentNav))
  252. {
  253. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  254. foreach (string NavUserIdString in ParentNavList)
  255. {
  256. int NavUserId = int.Parse(NavUserIdString);
  257. TradeDaySummaryBefore teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  258. if (teamStat == null)
  259. {
  260. statTrade.Add(new TradeDaySummaryBefore()
  261. {
  262. UserId = NavUserId,
  263. TradeMonth = TradeMonth,
  264. TradeDate = TradeDate,
  265. BrandId = BrandId,
  266. SeoTitle = "team",
  267. HelpNonDirectTradeAmt = TradeAmount,
  268. });
  269. }
  270. else
  271. {
  272. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  273. }
  274. }
  275. }
  276. }
  277. public void StatTradeAfter(List<TradeDaySummaryAfter> statTrade, List<MySystem.ReadModels.Users> users, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  278. {
  279. MySystem.ReadModels.Users user = users.FirstOrDefault(m => m.Id == UserId) ?? new MySystem.ReadModels.Users();
  280. string ParentNav = user.ParentNav;
  281. string TradeDate = TradeMonth + "01";
  282. ParentNav += "," + UserId + ",";
  283. TradeDaySummaryAfter selfStat = statTrade.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  284. if (selfStat == null)
  285. {
  286. statTrade.Add(new TradeDaySummaryAfter()
  287. {
  288. UserId = UserId,
  289. TradeMonth = TradeMonth,
  290. TradeDate = TradeDate,
  291. BrandId = BrandId,
  292. SeoTitle = "self",
  293. HelpDirectTradeAmt = TradeAmount,
  294. });
  295. }
  296. else
  297. {
  298. selfStat.HelpDirectTradeAmt += TradeAmount;
  299. }
  300. if (!string.IsNullOrEmpty(ParentNav))
  301. {
  302. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  303. foreach (string NavUserIdString in ParentNavList)
  304. {
  305. int NavUserId = int.Parse(NavUserIdString);
  306. TradeDaySummaryAfter teamStat = statTrade.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  307. if (teamStat == null)
  308. {
  309. statTrade.Add(new TradeDaySummaryAfter()
  310. {
  311. UserId = NavUserId,
  312. TradeMonth = TradeMonth,
  313. TradeDate = TradeDate,
  314. BrandId = BrandId,
  315. SeoTitle = "team",
  316. HelpNonDirectTradeAmt = TradeAmount,
  317. });
  318. }
  319. else
  320. {
  321. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  322. }
  323. }
  324. }
  325. }
  326. }