WifiTradeHelper.cs 14 KB

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