ProfitService.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  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.ProfitModels;
  9. namespace MySystem
  10. {
  11. public class ProfitService
  12. {
  13. public readonly static ProfitService Instance = new ProfitService();
  14. private ProfitService()
  15. { }
  16. // 统计交易额到RDS
  17. public void StartStat()
  18. {
  19. Thread th = new Thread(StartStatDo);
  20. th.IsBackground = true;
  21. th.Start();
  22. }
  23. public void StartStatDo()
  24. {
  25. while (true)
  26. {
  27. string content = RedisDbconn.Instance.RPop<string>("ProfitTradeAmountQueue");
  28. if(!string.IsNullOrEmpty(content))
  29. {
  30. StatTradeAmount(content);
  31. }
  32. else
  33. {
  34. Thread.Sleep(10000);
  35. }
  36. }
  37. }
  38. public void StatTradeAmount(string content)
  39. {
  40. WebCMSEntities db = new WebCMSEntities();
  41. PxcModels.WebCMSEntities maindb = new PxcModels.WebCMSEntities();
  42. try
  43. {
  44. JsonData selfDr = JsonMapper.ToObject(content);
  45. int UserId = int.Parse(selfDr["UserId"].ToString());
  46. PxcModels.Users user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new PxcModels.Users();
  47. string ParentNav = user.ParentNav;
  48. int BrandId = int.Parse(selfDr["BrandId"].ToString());
  49. int BankCardType = int.Parse(selfDr["BankCardType"].ToString());
  50. int QrPayFlag = int.Parse(selfDr["QrPayFlag"].ToString());
  51. int MerHelpFlag = int.Parse(selfDr["MerHelpFlag"].ToString());
  52. int Version = int.Parse(selfDr["Version"].ToString());
  53. int CapFlag = int.Parse(selfDr["CapFlag"].ToString());
  54. int VipFlag = int.Parse(selfDr["VipFlag"].ToString());
  55. int PayType = int.Parse(selfDr["PayType"].ToString());
  56. string TradeDate = selfDr["TradeDate"].ToString();
  57. decimal TradeAmount = decimal.Parse(selfDr["TradeAmount"].ToString());
  58. int TradeCount = int.Parse(selfDr["TradeCount"].ToString());
  59. string TradeMonth = TradeDate.Substring(0, 6);
  60. TradeDaySummary selfStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "self");
  61. if (selfStat == null)
  62. {
  63. selfStat = db.TradeDaySummary.Add(new TradeDaySummary()
  64. {
  65. UserId = UserId,
  66. TradeMonth = TradeMonth,
  67. TradeDate = TradeDate,
  68. BrandId = BrandId,
  69. QueryCount = QrPayFlag,
  70. VipFlag = VipFlag,
  71. PayType = PayType,
  72. SeoTitle = "self",
  73. }).Entity;
  74. db.SaveChanges();
  75. }
  76. if (BankCardType == 0)
  77. {
  78. if (Version == 1)
  79. {
  80. selfStat.ProfitDirectDebitTradeAmt += TradeAmount;
  81. if (CapFlag == 1)
  82. {
  83. selfStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  84. selfStat.ProfitDirectDebitCapNum += TradeCount;
  85. }
  86. }
  87. else if (MerHelpFlag == 1)
  88. {
  89. selfStat.HelpDirectDebitTradeAmt += TradeAmount;
  90. if (CapFlag == 1)
  91. {
  92. selfStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  93. selfStat.HelpDirectDebitCapNum += TradeCount;
  94. }
  95. }
  96. else
  97. {
  98. selfStat.NotHelpDirectDebitTradeAmt += TradeAmount;
  99. if (CapFlag == 1)
  100. {
  101. selfStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  102. selfStat.NotHelpDirectDebitCapNum += TradeCount;
  103. }
  104. }
  105. }
  106. else if (BankCardType != 0)
  107. {
  108. if (Version == 1)
  109. {
  110. selfStat.ProfitDirectTradeAmt += TradeAmount;
  111. }
  112. else if (MerHelpFlag == 1)
  113. {
  114. selfStat.HelpDirectTradeAmt += TradeAmount;
  115. }
  116. else
  117. {
  118. selfStat.NotHelpDirectTradeAmt += TradeAmount;
  119. }
  120. }
  121. ParentNav += "," + UserId + ",";
  122. if (!string.IsNullOrEmpty(ParentNav))
  123. {
  124. string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
  125. foreach (string NavUserIdString in ParentNavList)
  126. {
  127. int NavUserId = int.Parse(NavUserIdString);
  128. TradeDaySummary teamStat = db.TradeDaySummary.FirstOrDefault(m => m.UserId == NavUserId && m.TradeMonth == TradeMonth && m.TradeDate == TradeDate && m.BrandId == BrandId && m.QueryCount == QrPayFlag && m.VipFlag == VipFlag && m.PayType == PayType && m.SeoTitle == "team");
  129. if (teamStat == null)
  130. {
  131. teamStat = db.TradeDaySummary.Add(new TradeDaySummary()
  132. {
  133. UserId = NavUserId,
  134. TradeMonth = TradeMonth,
  135. TradeDate = TradeDate,
  136. BrandId = BrandId,
  137. QueryCount = QrPayFlag,
  138. VipFlag = VipFlag,
  139. PayType = PayType,
  140. SeoTitle = "team",
  141. }).Entity;
  142. db.SaveChanges();
  143. }
  144. if (BankCardType == 0)
  145. {
  146. if (Version == 1)
  147. {
  148. teamStat.ProfitNonDirectDebitTradeAmt += TradeAmount;
  149. if (CapFlag == 1)
  150. {
  151. teamStat.ProfitDirectDebitCapTradeAmt += TradeAmount;
  152. teamStat.ProfitDirectDebitCapNum += TradeCount;
  153. }
  154. }
  155. else if (MerHelpFlag == 1)
  156. {
  157. teamStat.HelpNonDirectDebitTradeAmt += TradeAmount;
  158. if (CapFlag == 1)
  159. {
  160. teamStat.HelpDirectDebitCapTradeAmt += TradeAmount;
  161. teamStat.HelpDirectDebitCapNum += TradeCount;
  162. }
  163. }
  164. else
  165. {
  166. teamStat.NotHelpNonDirectDebitTradeAmt += TradeAmount;
  167. if (CapFlag == 1)
  168. {
  169. teamStat.NotHelpDirectDebitCapTradeAmt += TradeAmount;
  170. teamStat.NotHelpDirectDebitCapNum += TradeCount;
  171. }
  172. }
  173. }
  174. else if (BankCardType != 0)
  175. {
  176. if (Version == 1)
  177. {
  178. teamStat.ProfitNonDirectTradeAmt += TradeAmount;
  179. }
  180. else if (MerHelpFlag == 1)
  181. {
  182. teamStat.HelpNonDirectTradeAmt += TradeAmount;
  183. }
  184. else
  185. {
  186. teamStat.NotHelpNonDirectTradeAmt += TradeAmount;
  187. }
  188. }
  189. }
  190. }
  191. db.SaveChanges();
  192. }
  193. catch (Exception ex)
  194. {
  195. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "实时统计交易额日志RDSnew异常");
  196. }
  197. maindb.Dispose();
  198. db.Dispose();
  199. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "实时统计交易额日志RDSnew");
  200. }
  201. // 补TradeDaySummary数据
  202. public void AddTradeDaySummary()
  203. {
  204. Thread th = new Thread(AddTradeDaySummaryDo);
  205. th.IsBackground = true;
  206. th.Start();
  207. }
  208. public void AddTradeDaySummaryDo()
  209. {
  210. while (true)
  211. {
  212. if(RedisDbconn.Instance.Get<string>("TradeDaySummaryThreadStatus") == "1")
  213. {
  214. TradeDaySummaryDo();
  215. }
  216. else
  217. {
  218. Thread.Sleep(1000);
  219. }
  220. }
  221. }
  222. public void TradeDaySummaryDo()
  223. {
  224. WebCMSEntities db = new WebCMSEntities();
  225. PxcModels.WebCMSEntities maindb = new PxcModels.WebCMSEntities();
  226. try
  227. {
  228. int startId = int.Parse(function.ReadInstance("/TradeRecord/TradeDaySummaryId.txt"));
  229. List<PxcModels.TradeDaySummary> list = maindb.TradeDaySummary.Where(m => m.Id > startId && m.Id <= 13509689).OrderBy(m => m.Id).Take(100).ToList();
  230. foreach(PxcModels.TradeDaySummary sub in list)
  231. {
  232. db.TradeDaySummary.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<TradeDaySummary>(Newtonsoft.Json.JsonConvert.SerializeObject(sub)));
  233. startId = sub.Id;
  234. }
  235. function.WritePage("/TradeRecord/", "TradeDaySummaryId.txt", startId.ToString());
  236. db.SaveChanges();
  237. }
  238. catch (Exception ex)
  239. {
  240. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "补TradeDaySummary数据异常");
  241. }
  242. maindb.Dispose();
  243. db.Dispose();
  244. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "补TradeDaySummary数据");
  245. }
  246. // 同步UserAccountRecord数据
  247. public void AddUserAccountRecord()
  248. {
  249. Thread th = new Thread(AddUserAccountRecordDo);
  250. th.IsBackground = true;
  251. th.Start();
  252. }
  253. public void AddUserAccountRecordDo()
  254. {
  255. while (true)
  256. {
  257. if(RedisDbconn.Instance.Get<string>("UserAccountRecordThreadStatus") == "1")
  258. {
  259. UserAccountRecordDo();
  260. }
  261. else
  262. {
  263. Thread.Sleep(1000);
  264. }
  265. }
  266. }
  267. public void UserAccountRecordDo()
  268. {
  269. WebCMSEntities db = new WebCMSEntities();
  270. PxcModels.WebCMSEntities maindb = new PxcModels.WebCMSEntities();
  271. try
  272. {
  273. int startId = int.Parse(function.ReadInstance("/TradeRecord/UserAccountRecordId.txt"));
  274. List<PxcModels.UserAccountRecord> list = maindb.UserAccountRecord.Where(m => m.Id > startId).OrderBy(m => m.Id).Take(100).ToList();
  275. foreach(PxcModels.UserAccountRecord sub in list)
  276. {
  277. db.UserAccountRecord.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<UserAccountRecord>(Newtonsoft.Json.JsonConvert.SerializeObject(sub)));
  278. startId = sub.Id;
  279. }
  280. function.WritePage("/TradeRecord/", "UserAccountRecordId.txt", startId.ToString());
  281. db.SaveChanges();
  282. }
  283. catch (Exception ex)
  284. {
  285. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "补UserAccountRecord数据异常");
  286. }
  287. maindb.Dispose();
  288. db.Dispose();
  289. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "补UserAccountRecord数据");
  290. }
  291. // 同步ProfitRecord数据
  292. public void AddProfitRecord()
  293. {
  294. Thread th = new Thread(AddProfitRecordDo);
  295. th.IsBackground = true;
  296. th.Start();
  297. }
  298. public void AddProfitRecordDo()
  299. {
  300. while (true)
  301. {
  302. if(RedisDbconn.Instance.Get<string>("ProfitRecordThreadStatus") == "1")
  303. {
  304. ProfitRecordDo();
  305. }
  306. else
  307. {
  308. Thread.Sleep(1000);
  309. }
  310. }
  311. }
  312. public void ProfitRecordDo()
  313. {
  314. WebCMSEntities db = new WebCMSEntities();
  315. PxcModels.WebCMSEntities maindb = new PxcModels.WebCMSEntities();
  316. try
  317. {
  318. int startId = int.Parse(function.ReadInstance("/TradeRecord/ProfitRecordId.txt"));
  319. List<PxcModels.ProfitRecord> list = maindb.ProfitRecord.Where(m => m.Id > startId).OrderBy(m => m.Id).Take(100).ToList();
  320. foreach(PxcModels.ProfitRecord sub in list)
  321. {
  322. db.ProfitRecord.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<ProfitRecord>(Newtonsoft.Json.JsonConvert.SerializeObject(sub)));
  323. startId = sub.Id;
  324. }
  325. function.WritePage("/TradeRecord/", "ProfitRecordId.txt", startId.ToString());
  326. db.SaveChanges();
  327. }
  328. catch (Exception ex)
  329. {
  330. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "补ProfitRecord数据异常");
  331. }
  332. maindb.Dispose();
  333. db.Dispose();
  334. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "补ProfitRecord数据");
  335. }
  336. // 同步SubsidyRecord数据
  337. public void AddSubsidyRecord()
  338. {
  339. Thread th = new Thread(AddSubsidyRecordDo);
  340. th.IsBackground = true;
  341. th.Start();
  342. }
  343. public void AddSubsidyRecordDo()
  344. {
  345. while (true)
  346. {
  347. if(RedisDbconn.Instance.Get<string>("SubsidyRecordThreadStatus") == "1")
  348. {
  349. SubsidyRecordDo();
  350. }
  351. else
  352. {
  353. Thread.Sleep(1000);
  354. }
  355. }
  356. }
  357. public void SubsidyRecordDo()
  358. {
  359. WebCMSEntities db = new WebCMSEntities();
  360. PxcModels.WebCMSEntities maindb = new PxcModels.WebCMSEntities();
  361. try
  362. {
  363. int startId = int.Parse(function.ReadInstance("/TradeRecord/SubsidyRecordId.txt"));
  364. List<PxcModels.SubsidyRecord> list = maindb.SubsidyRecord.Where(m => m.Id > startId).OrderBy(m => m.Id).Take(100).ToList();
  365. foreach(PxcModels.SubsidyRecord sub in list)
  366. {
  367. db.SubsidyRecord.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<SubsidyRecord>(Newtonsoft.Json.JsonConvert.SerializeObject(sub)));
  368. startId = sub.Id;
  369. }
  370. function.WritePage("/TradeRecord/", "SubsidyRecordId.txt", startId.ToString());
  371. db.SaveChanges();
  372. }
  373. catch (Exception ex)
  374. {
  375. function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "补SubsidyRecord数据异常");
  376. }
  377. maindb.Dispose();
  378. db.Dispose();
  379. function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "补SubsidyRecord数据");
  380. }
  381. }
  382. }