SycnSpTradeWifiService.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using MySystem.SpModels;
  5. using Library;
  6. using LitJson;
  7. using System.Threading;
  8. namespace MySystem
  9. {
  10. public class SycnSpTradeWifiService
  11. {
  12. public readonly static SycnSpTradeWifiService Instance = new SycnSpTradeWifiService();
  13. private SycnSpTradeWifiService()
  14. { }
  15. public void Start()
  16. {
  17. Thread th = new Thread(StartDo);
  18. th.IsBackground = true;
  19. th.Start();
  20. }
  21. public void StartDo()
  22. {
  23. while (true)
  24. {
  25. try
  26. {
  27. WebCMSEntities spdb = new WebCMSEntities();
  28. PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
  29. DateTime start = DateTime.Now.AddDays(-10);
  30. DateTime end = DateTime.Now.AddMinutes(-1);
  31. int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/TradeRecordId.txt")));
  32. IQueryable<TradeRecord> trades = spdb.TradeRecord.Where(m => m.Id >= StartId && m.ProductType == "23" && m.CreateDate >= start && m.Status == 1).OrderBy(m => m.CreateDate).Take(20);
  33. foreach (TradeRecord trade in trades.ToList())
  34. {
  35. bool check = db.SpOrderNos.Any(m => m.OrderNo == trade.TradeSerialNo);
  36. if (!check && trade.SerEntryMode != "1")
  37. {
  38. decimal TradeAmount = trade.TradeAmount;
  39. if(trade.SeoTitle != "v2") TradeAmount = TradeAmount / 100;
  40. bool statFlag = false;
  41. PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == trade.TradeSnNo);
  42. if (pos != null)
  43. {
  44. statFlag = db.WifiTradeRecord.Any(m => m.SnNo == trade.TradeSnNo);
  45. PxcModels.WifiTradeRecord add = db.WifiTradeRecord.Add(new PxcModels.WifiTradeRecord()
  46. {
  47. CreateDate = trade.CreateDate,
  48. UpdateDate = trade.UpdateDate,
  49. SnNo = trade.TradeSnNo, //渠道SN号
  50. TradeAmount = TradeAmount, //交易金额
  51. BrandId = pos.BrandId, //品牌
  52. Remark = trade.Remark, //备注
  53. }).Entity;
  54. //推送数据给java
  55. PosPushDataHelper.Trade(new PxcModels.TradeRecord()
  56. {
  57. CreateDate = trade.CreateDate,
  58. UpdateDate = trade.UpdateDate,
  59. RecordNo = trade.TradeSerialNo, //单号
  60. UserId = pos.UserId, //创客
  61. MerchantId = pos.BindMerchantId, //商户
  62. MerNo = trade.MerNo, //渠道商户编号
  63. MerHelpFlag = 1,
  64. HelpMonthCount = 0, //扶持第几个月
  65. SnNo = trade.TradeSnNo, //渠道SN号
  66. TradeSerialNo = trade.ChannelSerial, //交易流水号
  67. TradeAmount = TradeAmount, //交易金额
  68. BrandId = pos.BrandId, //品牌
  69. Remark = trade.Remark, //备注
  70. MerUserId = pos.UserId, //商户直属创客M
  71. ActStatus = 1,
  72. CreateMan = trade.AgentNo,
  73. UpdateMan = trade.BankCardType,
  74. SeoKeyword = trade.SerEntryMode,
  75. SeoDescription = trade.TradeType,
  76. TradeDate = pos.BindingTime,
  77. });
  78. }
  79. db.SpOrderNos.Add(new PxcModels.SpOrderNos()
  80. {
  81. OrderNo = trade.TradeSerialNo
  82. });
  83. db.SaveChanges();
  84. //开始统计
  85. int Months = 0;
  86. if(trade.SeoTitle == "v2")
  87. {
  88. if(trade.SerEntryMode == "1") //判断是否是押金
  89. {
  90. pos.SeoKeyword = trade.TradeAmount.ToString("f2");
  91. pos.PrizeParams = trade.TradeAmount.ToString("f2");
  92. db.SaveChanges();
  93. }
  94. else
  95. {
  96. string duration = trade.Field2; //设备套餐时长
  97. string unit = trade.Field3; //套餐单位 0:按天 1:按月
  98. if(unit == "1") Months = int.Parse(function.CheckInt(duration));
  99. else Months = int.Parse(function.CheckInt(duration)) / 30;
  100. pos.ActivationState = 1;
  101. pos.ActivationTime = DateTime.Now;
  102. PxcModels.PosMerchantInfo add = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
  103. add.ActiveStatus = 1;
  104. add.MerStandardDate = DateTime.Now;
  105. db.SaveChanges();
  106. //检查交易状态,并发奖励
  107. SycnSpMerchantService.Instance.WifiSendPrize(db, pos, add);
  108. //发放奖励MQ
  109. PrizeSetHelper.Do("6", pos.PosSn);
  110. }
  111. }
  112. else
  113. {
  114. if(pos.BrandId == 23 && TradeAmount == 49) Months = 1;
  115. if(pos.BrandId == 23 && TradeAmount == 79) Months = 3;
  116. if(pos.BrandId == 23 && TradeAmount == 119) Months = 12;
  117. if(pos.BrandId == 23 && TradeAmount == 199) Months = 24;
  118. if(pos.BrandId == 24 && TradeAmount == 59) Months = 1;
  119. if(pos.BrandId == 24 && TradeAmount == 159) Months = 3;
  120. if(pos.BrandId == 24 && TradeAmount == 399) Months = 12;
  121. if(pos.BrandId == 24 && TradeAmount == 699) Months = 24;
  122. if(pos.BrandId == 25 && TradeAmount == 69) Months = 1;
  123. if(pos.BrandId == 25 && TradeAmount == 199) Months = 3;
  124. if(pos.BrandId == 25 && TradeAmount == 499) Months = 12;
  125. if(pos.BrandId == 25 && TradeAmount == 799) Months = 24;
  126. if(pos.BrandId == 26 && TradeAmount == 219) Months = 1;
  127. if(pos.BrandId == 26 && TradeAmount == 449) Months = 3;
  128. if(pos.BrandId == 26 && TradeAmount == 1399) Months = 12;
  129. if(pos.BrandId == 26 && TradeAmount == 2698) Months = 24;
  130. }
  131. if(Months > 0)
  132. {
  133. decimal TradeAmt = TradeAmount / Months;
  134. TradeAmt = PublicFunction.NumberFormat(TradeAmt);
  135. string TradeMonth = DateTime.Now.AddMonths(-1).ToString("yyyyMM");
  136. if(statFlag)
  137. {
  138. PxcModels.TradeDaySummary stat = db.TradeDaySummary.Where(m => m.UserId == pos.BuyUserId && m.BrandId == pos.BrandId).OrderByDescending(m => m.Id).FirstOrDefault() ?? new PxcModels.TradeDaySummary();
  139. TradeMonth = string.IsNullOrEmpty(stat.TradeMonth) ? DateTime.Now.AddMonths(-1).ToString("yyyyMM") : stat.TradeMonth;
  140. }
  141. DateTime StartMonth = DateTime.Parse(TradeMonth.Substring(0, 4) + "-" + TradeMonth.Substring(4, 2) + "-01 00:00:00");
  142. for (int i = 1; i <= Months; i++)
  143. {
  144. StartMonth = StartMonth.AddMonths(1);
  145. StatTrade(db, pos.BuyUserId, pos.BrandId, StartMonth.ToString("yyyyMM"), TradeAmt);
  146. if (pos.BindingTime < DateTime.Now.AddMonths(-9))
  147. {
  148. StatTradeBefore(db, pos.BuyUserId, pos.BrandId, StartMonth.ToString("yyyyMM"), TradeAmt);
  149. }
  150. else
  151. {
  152. StatTradeAfter(db, pos.BuyUserId, pos.BrandId, StartMonth.ToString("yyyyMM"), TradeAmt);
  153. }
  154. }
  155. }
  156. //检查交易状态,并发奖励
  157. if(pos.ActivationState == 1)
  158. {
  159. PxcModels.PosMerchantInfo add = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PxcModels.PosMerchantInfo();
  160. SycnSpMerchantService.Instance.WifiSendPrize(db, pos, add);
  161. }
  162. TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
  163. if (edit != null)
  164. {
  165. edit.Status = 2;
  166. spdb.SaveChanges();
  167. }
  168. }
  169. if(trade.SerEntryMode == "1")
  170. {
  171. PxcModels.PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == trade.TradeSnNo);
  172. if (pos != null)
  173. {
  174. pos.SeoKeyword = trade.TradeAmount.ToString();
  175. pos.PrizeParams = trade.TradeAmount.ToString();
  176. db.SaveChanges();
  177. }
  178. TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
  179. if (edit != null)
  180. {
  181. edit.Status = 2;
  182. spdb.SaveChanges();
  183. }
  184. }
  185. }
  186. spdb.Dispose();
  187. db.Dispose();
  188. }
  189. catch (Exception ex)
  190. {
  191. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "同步SP交易数据到MAIN异常");
  192. }
  193. Thread.Sleep(500);
  194. }
  195. }
  196. public void StatTrade(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  197. {
  198. PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users();
  199. string ParentNav = user.ParentNav;
  200. string TradeDate = TradeMonth + "01";
  201. ParentNav += "," + UserId + ",";
  202. PxcModels.TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  203. if (selfStat == null)
  204. {
  205. selfStat = db.TradeDaySummary.Add(new PxcModels.TradeDaySummary()
  206. {
  207. UserId = UserId,
  208. TradeMonth = TradeMonth,
  209. TradeDate = TradeDate,
  210. BrandId = BrandId,
  211. SeoTitle = "self",
  212. }).Entity;
  213. db.SaveChanges();
  214. }
  215. selfStat.HelpDirectTradeAmt += TradeAmount;
  216. if (!string.IsNullOrEmpty(ParentNav))
  217. {
  218. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  219. foreach (string NavUserIdString in ParentNavList)
  220. {
  221. int NavUserId = int.Parse(NavUserIdString);
  222. PxcModels.TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  223. if (teamStat == null)
  224. {
  225. teamStat = db.TradeDaySummary.Add(new PxcModels.TradeDaySummary()
  226. {
  227. UserId = NavUserId,
  228. TradeMonth = TradeMonth,
  229. TradeDate = TradeDate,
  230. BrandId = BrandId,
  231. SeoTitle = "team",
  232. }).Entity;
  233. db.SaveChanges();
  234. }
  235. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  236. db.SaveChanges();
  237. }
  238. }
  239. }
  240. public void StatTradeBefore(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  241. {
  242. PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users();
  243. string ParentNav = user.ParentNav;
  244. string TradeDate = TradeMonth + "01";
  245. ParentNav += "," + UserId + ",";
  246. PxcModels.TradeDaySummaryBefore selfStat = db.TradeDaySummaryBefore.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  247. if (selfStat == null)
  248. {
  249. selfStat = db.TradeDaySummaryBefore.Add(new PxcModels.TradeDaySummaryBefore()
  250. {
  251. UserId = UserId,
  252. TradeMonth = TradeMonth,
  253. TradeDate = TradeDate,
  254. BrandId = BrandId,
  255. SeoTitle = "self",
  256. }).Entity;
  257. db.SaveChanges();
  258. }
  259. selfStat.HelpDirectTradeAmt += TradeAmount;
  260. if (!string.IsNullOrEmpty(ParentNav))
  261. {
  262. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  263. foreach (string NavUserIdString in ParentNavList)
  264. {
  265. int NavUserId = int.Parse(NavUserIdString);
  266. PxcModels.TradeDaySummaryBefore teamStat = db.TradeDaySummaryBefore.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  267. if (teamStat == null)
  268. {
  269. teamStat = db.TradeDaySummaryBefore.Add(new PxcModels.TradeDaySummaryBefore()
  270. {
  271. UserId = NavUserId,
  272. TradeMonth = TradeMonth,
  273. TradeDate = TradeDate,
  274. BrandId = BrandId,
  275. SeoTitle = "team",
  276. }).Entity;
  277. db.SaveChanges();
  278. }
  279. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  280. db.SaveChanges();
  281. }
  282. }
  283. }
  284. public void StatTradeAfter(PxcModels.WebCMSEntities db, int UserId, int BrandId, string TradeMonth, decimal TradeAmount)
  285. {
  286. PxcModels.Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users();
  287. string ParentNav = user.ParentNav;
  288. string TradeDate = TradeMonth + "01";
  289. ParentNav += "," + UserId + ",";
  290. PxcModels.TradeDaySummaryAfter selfStat = db.TradeDaySummaryAfter.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "self");
  291. if (selfStat == null)
  292. {
  293. selfStat = db.TradeDaySummaryAfter.Add(new PxcModels.TradeDaySummaryAfter()
  294. {
  295. UserId = UserId,
  296. TradeMonth = TradeMonth,
  297. TradeDate = TradeDate,
  298. BrandId = BrandId,
  299. SeoTitle = "self",
  300. }).Entity;
  301. db.SaveChanges();
  302. }
  303. selfStat.HelpDirectTradeAmt += TradeAmount;
  304. if (!string.IsNullOrEmpty(ParentNav))
  305. {
  306. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  307. foreach (string NavUserIdString in ParentNavList)
  308. {
  309. int NavUserId = int.Parse(NavUserIdString);
  310. PxcModels.TradeDaySummaryAfter teamStat = db.TradeDaySummaryAfter.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.SeoTitle == "team");
  311. if (teamStat == null)
  312. {
  313. teamStat = db.TradeDaySummaryAfter.Add(new PxcModels.TradeDaySummaryAfter()
  314. {
  315. UserId = NavUserId,
  316. TradeMonth = TradeMonth,
  317. TradeDate = TradeDate,
  318. BrandId = BrandId,
  319. SeoTitle = "team",
  320. }).Entity;
  321. db.SaveChanges();
  322. }
  323. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  324. db.SaveChanges();
  325. }
  326. }
  327. }
  328. }
  329. }