RedPackageHelper.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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.Models;
  8. using Library;
  9. public class RedPackageHelper
  10. {
  11. public readonly static RedPackageHelper Instance = new RedPackageHelper();
  12. private RedPackageHelper()
  13. {
  14. }
  15. public void Start()
  16. {
  17. Thread th = new Thread(DoWorks);
  18. th.IsBackground = true;
  19. th.Start();
  20. }
  21. private void DoWorks()
  22. {
  23. while (true)
  24. {
  25. if (DateTime.Now.Hour >= 3)
  26. {
  27. string ActivityDate = DateTime.Now.ToString("yyyyMMdd");
  28. string check = function.ReadInstance("/Activity/RedPackage/" + ActivityDate + ".txt");
  29. if (string.IsNullOrEmpty(check))
  30. {
  31. function.WritePage("/Activity/RedPackage/", ActivityDate + ".txt", DateTime.Now.ToString());
  32. LogHelper.Instance.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "生成指定未领取红包日志");
  33. WebCMSEntities db = new WebCMSEntities();
  34. try
  35. {
  36. // decimal TotalPrize = 888.88M;
  37. DateTime start = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 22:00:00");
  38. DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
  39. string PreDate = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
  40. List<decimal> list = new List<decimal>();
  41. list.Add(88.88M);
  42. list.Add(40.76M);
  43. list.Add(38.88M);
  44. list.Add(18.88M);
  45. list.Add(15.88M);
  46. list.Add(11.88M);
  47. list.Add(8.88M);
  48. list.Add(8.88M);
  49. list.Add(8.88M);
  50. list.Add(8.88M);
  51. list.Add(8.88M);
  52. list.Add(8.88M);
  53. list.Add(8.88M);
  54. list.Add(8.88M);
  55. list.Add(8.88M);
  56. list.Add(8.88M);
  57. list.Add(8.88M);
  58. list.Add(8.88M);
  59. list.Add(8.88M);
  60. list.Add(8.88M);
  61. list.Add(8.88M);
  62. list.Add(8.88M);
  63. list.Add(8.88M);
  64. list.Add(8.88M);
  65. list.Add(8.88M);
  66. list.Add(5.88M);
  67. list.Add(5.88M);
  68. list.Add(5.88M);
  69. list.Add(5.88M);
  70. list.Add(5.88M);
  71. list.Add(5.88M);
  72. list.Add(5.88M);
  73. list.Add(5.88M);
  74. list.Add(5.88M);
  75. list.Add(5.88M);
  76. list.Add(5.88M);
  77. list.Add(5.88M);
  78. list.Add(5.88M);
  79. list.Add(5.88M);
  80. list.Add(5.88M);
  81. list.Add(5.88M);
  82. list.Add(5.88M);
  83. list.Add(5.88M);
  84. list.Add(5.88M);
  85. list.Add(5.88M);
  86. list.Add(5.88M);
  87. list.Add(5.88M);
  88. list.Add(5.88M);
  89. list.Add(5.88M);
  90. list.Add(5.88M);
  91. list.Add(5.88M);
  92. list.Add(5.88M);
  93. list.Add(5.88M);
  94. list.Add(5.88M);
  95. list.Add(5.88M);
  96. list.Add(3.88M);
  97. list.Add(3.88M);
  98. list.Add(3.88M);
  99. list.Add(3.88M);
  100. list.Add(3.88M);
  101. list.Add(3.88M);
  102. list.Add(3.88M);
  103. list.Add(3.88M);
  104. list.Add(3.88M);
  105. list.Add(3.88M);
  106. list.Add(3.88M);
  107. list.Add(3.88M);
  108. list.Add(3.88M);
  109. list.Add(3.88M);
  110. list.Add(3.88M);
  111. list.Add(3.88M);
  112. list.Add(3.88M);
  113. list.Add(3.88M);
  114. list.Add(3.88M);
  115. list.Add(3.88M);
  116. list.Add(3.88M);
  117. list.Add(3.88M);
  118. list.Add(3.88M);
  119. list.Add(3.88M);
  120. list.Add(3.88M);
  121. list.Add(3.88M);
  122. list.Add(3.88M);
  123. list.Add(3.88M);
  124. list.Add(3.88M);
  125. list.Add(3.88M);
  126. list.Add(3.88M);
  127. list.Add(3.88M);
  128. list.Add(3.88M);
  129. list.Add(3.88M);
  130. list.Add(3.88M);
  131. list.Add(3.88M);
  132. list.Add(3.88M);
  133. list.Add(3.88M);
  134. list.Add(3.88M);
  135. list.Add(3.88M);
  136. list.Add(3.88M);
  137. list.Add(3.88M);
  138. list.Add(3.88M);
  139. list.Add(3.88M);
  140. list.Add(3.88M);
  141. list.Add(3.88M);
  142. list.Add(3.88M);
  143. list.Add(3.88M);
  144. list.Add(3.88M);
  145. list.Add(3.88M);
  146. list.Add(3.88M);
  147. list.Add(3.88M);
  148. list.Add(3.88M);
  149. list.Add(3.88M);
  150. list.Add(3.88M);
  151. list.Add(3.88M);
  152. list.Add(3.88M);
  153. list.Add(3.88M);
  154. list.Add(3.88M);
  155. list.Add(3.88M);
  156. list.Add(3.88M);
  157. list.Add(3.88M);
  158. list.Add(3.88M);
  159. list.Add(3.88M);
  160. list.Add(3.88M);
  161. list.Add(3.88M);
  162. list.Add(3.88M);
  163. list.Add(3.88M);
  164. list.Add(3.88M);
  165. list.Add(3.88M);
  166. list.Add(3.88M);
  167. list.Add(3.88M);
  168. list.Add(3.88M);
  169. list.Add(3.88M);
  170. list.Add(3.88M);
  171. list.Add(1.88M);
  172. list.Add(1.88M);
  173. list.Add(1.88M);
  174. list.Add(1.88M);
  175. list.Add(1.88M);
  176. list.Add(1.88M);
  177. list.Add(1.88M);
  178. list.Add(1.88M);
  179. list.Add(1.88M);
  180. list.Add(1.88M);
  181. list.Add(1.88M);
  182. list.Add(1.88M);
  183. list.Add(1.88M);
  184. list.Add(1.88M);
  185. list.Add(1.88M);
  186. list.Add(1.88M);
  187. list.Add(1.88M);
  188. list.Add(1.88M);
  189. list.Add(1.88M);
  190. list.Add(1.88M);
  191. // TotalPrize -= 88.88M;
  192. // for (int i = 1; i < 150; i++)
  193. // {
  194. // list.Add(0.88M);
  195. // TotalPrize -= 0.88M;
  196. // }
  197. // for (int i = 0; i < 150; i++)
  198. // {
  199. // if (TotalPrize > 0)
  200. // {
  201. // int BigPrize = function.get_Random(1, 150);
  202. // decimal PrizeAmt = (decimal)function.get_Random(88, 1000) / 100M;
  203. // if (TotalPrize > PrizeAmt)
  204. // {
  205. // list[BigPrize] += PrizeAmt;
  206. // TotalPrize -= PrizeAmt;
  207. // }
  208. // else
  209. // {
  210. // list[BigPrize] += TotalPrize;
  211. // TotalPrize = 0;
  212. // }
  213. // }
  214. // else
  215. // {
  216. // break;
  217. // }
  218. // }
  219. foreach (decimal PrizeAmt in list)
  220. {
  221. db.ActivityRedPackageStock.Add(new ActivityRedPackageStock()
  222. {
  223. CreateDate = DateTime.Now,
  224. PrizeAmt = PrizeAmt,
  225. ActivityDate = ActivityDate,
  226. });
  227. }
  228. db.SaveChanges();
  229. }
  230. catch (Exception ex)
  231. {
  232. LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "生成指定未领取红包异常");
  233. }
  234. db.Dispose();
  235. LogHelper.Instance.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "生成指定未领取红包日志");
  236. }
  237. }
  238. Thread.Sleep(60000);
  239. }
  240. }
  241. public void StartStatTop10()
  242. {
  243. Thread th = new Thread(StartStatTop10Do);
  244. th.IsBackground = true;
  245. th.Start();
  246. }
  247. private void StartStatTop10Do()
  248. {
  249. while (true)
  250. {
  251. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  252. OtherMySqlConn.op("delete from ActivityRedPackageTop10");
  253. using (WebCMSEntities db = new WebCMSEntities())
  254. {
  255. DataTable dt = OtherMySqlConn.dtable("select UserId,sum(PrizeAmt) from ActivityRedPackageJoins group by UserId order by sum(PrizeAmt) desc");
  256. int index = 0;
  257. foreach (DataRow dr in dt.Rows)
  258. {
  259. index += 1;
  260. int UserId = int.Parse(dr["UserId"].ToString());
  261. decimal PrizeAmt = decimal.Parse(dr[1].ToString());
  262. db.ActivityRedPackageTop10.Add(new ActivityRedPackageTop10()
  263. {
  264. Sort = index,
  265. UserId = UserId,
  266. PrizeAmt = PrizeAmt,
  267. Kind = 1,
  268. });
  269. }
  270. dt = OtherMySqlConn.dtable("select UserId,count(Id) from ActivityRedPackageJoins group by UserId order by count(Id) desc");
  271. index = 0;
  272. foreach (DataRow dr in dt.Rows)
  273. {
  274. index += 1;
  275. int UserId = int.Parse(dr["UserId"].ToString());
  276. int PrizeCount = int.Parse(dr[1].ToString());
  277. db.ActivityRedPackageTop10.Add(new ActivityRedPackageTop10()
  278. {
  279. Sort = index,
  280. UserId = UserId,
  281. TimeNum = PrizeCount,
  282. Kind = 2,
  283. });
  284. }
  285. db.SaveChanges();
  286. }
  287. Thread.Sleep(60000);
  288. }
  289. }
  290. public void StartSendPrize()
  291. {
  292. Thread th = new Thread(StartSendPrizeDo);
  293. th.IsBackground = true;
  294. th.Start();
  295. }
  296. private void StartSendPrizeDo()
  297. {
  298. while (true)
  299. {
  300. string content = RedisDbconn.Instance.RPop<string>("RedPrizeQueue");
  301. if (!string.IsNullOrEmpty(content))
  302. {
  303. try
  304. {
  305. using (WebCMSEntities db = new WebCMSEntities())
  306. {
  307. int Id = int.Parse(function.CheckInt(content));
  308. ActivityRedPackageJoins item = db.ActivityRedPackageJoins.FirstOrDefault(m => m.Id == Id);
  309. if (item != null)
  310. {
  311. int ParentUserId = item.UserId;
  312. UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == ParentUserId);
  313. if (account == null)
  314. {
  315. account = db.UserAccount.Add(new UserAccount()
  316. {
  317. Id = ParentUserId,
  318. UserId = ParentUserId,
  319. }).Entity;
  320. db.SaveChanges();
  321. }
  322. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  323. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  324. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  325. account.BalanceAmount += item.PrizeAmt;
  326. account.TotalAmount += item.PrizeAmt;
  327. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  328. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  329. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  330. UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
  331. {
  332. CreateDate = DateTime.Now,
  333. UpdateDate = DateTime.Now,
  334. UserId = ParentUserId, //创客
  335. ChangeType = 31, //变动类型
  336. ChangeAmount = item.PrizeAmt, //变更金额
  337. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  338. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  339. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  340. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  341. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  342. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  343. QueryCount = item.Id,
  344. Remark = "开机抢红包活动",
  345. }).Entity;
  346. db.SaveChanges();
  347. }
  348. }
  349. }
  350. catch (Exception ex)
  351. {
  352. LogHelper.Instance.WriteLog(ex.ToString(), "领取红包奖励异常");
  353. }
  354. Thread.Sleep(200);
  355. }
  356. else
  357. {
  358. Thread.Sleep(60000);
  359. }
  360. }
  361. }
  362. }