Преглед на файлове

更换每天10红包逻辑

lichunlei преди 4 години
родител
ревизия
9b3ee62f51
променени са 2 файла, в които са добавени 452 реда и са изтрити 3 реда
  1. 449 0
      AppStart/Timer/RedPackageV2Helper.cs
  2. 3 3
      Startup.cs

+ 449 - 0
AppStart/Timer/RedPackageV2Helper.cs

@@ -0,0 +1,449 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Linq;
+using System.Data;
+using MySystem;
+using MySystem.PxcModels;
+using Library;
+
+public class RedPackageV2Helper
+{
+    public readonly static RedPackageV2Helper Instance = new RedPackageV2Helper();
+    private RedPackageV2Helper()
+    {
+    }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void DoWorks()
+    {
+        while (true)
+        {
+            if (DateTime.Now.Hour >= 3)
+            {
+                string ActivityDate = DateTime.Now.ToString("yyyyMMdd");
+                string check = function.ReadInstance("/Activity/RedPackage/" + ActivityDate + ".txt");
+                if (string.IsNullOrEmpty(check))
+                {
+                    function.WritePage("/Activity/RedPackage/", ActivityDate + ".txt", DateTime.Now.ToString());
+                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "生成指定未领取红包日志");
+                    WebCMSEntities db = new WebCMSEntities();
+                    try
+                    {
+                        // decimal TotalPrize = 888.88M;
+                        DateTime start = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 22:00:00");
+                        DateTime today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00");
+                        string PreDate = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
+                        List<decimal> list = new List<decimal>();
+                        list.Add(88.88M);
+                        list.Add(40.76M);
+                        list.Add(38.88M);
+                        list.Add(18.88M);
+                        list.Add(15.88M);
+                        list.Add(11.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(8.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(5.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(3.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        list.Add(1.88M);
+                        // TotalPrize -= 88.88M;
+                        // for (int i = 1; i < 150; i++)
+                        // {
+                        //     list.Add(0.88M);
+                        //     TotalPrize -= 0.88M;
+                        // }
+                        // for (int i = 0; i < 150; i++)
+                        // {
+                        //     if (TotalPrize > 0)
+                        //     {
+                        //         int BigPrize = function.get_Random(1, 150);
+                        //         decimal PrizeAmt = (decimal)function.get_Random(88, 1000) / 100M;
+                        //         if (TotalPrize > PrizeAmt)
+                        //         {
+                        //             list[BigPrize] += PrizeAmt;
+                        //             TotalPrize -= PrizeAmt;
+                        //         }
+                        //         else
+                        //         {
+                        //             list[BigPrize] += TotalPrize;
+                        //             TotalPrize = 0;
+                        //         }
+                        //     }
+                        //     else
+                        //     {
+                        //         break;
+                        //     }
+                        // }
+                        foreach (decimal PrizeAmt in list)
+                        {
+                            db.ActivityRedPackageStock.Add(new ActivityRedPackageStock()
+                            {
+                                CreateDate = DateTime.Now,
+                                PrizeAmt = PrizeAmt,
+                                ActivityDate = ActivityDate,
+                                SeoTitle = function.get_Random(20),
+                            });
+                        }
+                        db.SaveChanges();
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "生成指定未领取红包异常");
+                    }
+                    db.Dispose();
+                    function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\n\n", "生成指定未领取红包日志");
+                }
+                redisStock();
+            }
+            Thread.Sleep(60000);
+        }
+    }
+
+    // 将红包加入缓存
+    public void redisStock()
+    {
+        string ActivityDate = DateTime.Now.ToString("yyyyMMdd");
+        string check = function.ReadInstance("/Activity/RedPackageRedis/" + ActivityDate + ".txt");
+        if (!string.IsNullOrEmpty(check))
+        {
+            return;
+        }
+        function.WritePage("/Activity/RedPackageRedis/", ActivityDate + ".txt", DateTime.Now.ToString());
+        WebCMSEntities db = new WebCMSEntities();
+        List<ActivityRedPackageStock> list = db.ActivityRedPackageStock.Where(m => m.ActivityDate == ActivityDate && m.PrizeAmt != 88.88M).OrderBy(m => m.SeoTitle).ToList();
+        int i = 0;
+        foreach(ActivityRedPackageStock sub in list)
+        {
+            i += 1;
+            if(i == 18)
+            {
+                ActivityRedPackageStock best = db.ActivityRedPackageStock.FirstOrDefault(m => m.ActivityDate == ActivityDate && m.PrizeAmt == 88.88M);
+                if(best != null)
+                {
+                    RedisDbconn.Instance.AddList("RedPackageList:" + ActivityDate, best);
+                }
+            }
+            RedisDbconn.Instance.AddList("RedPackageList:" + ActivityDate, sub);
+        }
+
+        string PreDate = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
+        string PreMakerCode = "";
+        string PreRealName = "";
+        decimal PrePrizeAmt = 0;
+        bool checkPre = db.ActivityRedPackageStock.Any(m => m.ActivityDate == PreDate);
+        if (checkPre)
+        {
+            ActivityRedPackageStock preInfo = db.ActivityRedPackageStock.Where(m => m.ActivityDate == PreDate).OrderByDescending(m => m.PrizeAmt).FirstOrDefault();
+            if (preInfo != null)
+            {
+                Users user = db.Users.FirstOrDefault(m => m.Id == preInfo.UserId) ?? new Users();
+                PreMakerCode = user.MakerCode;
+                PreRealName = user.RealName;
+                PrePrizeAmt = preInfo.PrizeAmt;
+                RedisDbconn.Instance.Set("PreInfoString:" + PreDate, PreMakerCode + "|" + PreRealName + "|" + PrePrizeAmt);
+                RedisDbconn.Instance.SetExpire("PreInfoString:" + PreDate, 7200);
+            }
+        }
+        db.Dispose();
+    }
+
+
+
+
+
+    public void StartStatTop10()
+    {
+        Thread th = new Thread(StartStatTop10Do);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void StartStatTop10Do()
+    {
+        while (true)
+        {
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["Pxc1SqlConnStr"].ToString();
+            OtherMySqlConn.op("delete from ActivityRedPackageTop10");
+            using (WebCMSEntities db = new WebCMSEntities())
+            {
+                DataTable dt = OtherMySqlConn.dtable("select UserId,sum(PrizeAmt) from ActivityRedPackageJoins group by UserId order by sum(PrizeAmt) desc");
+                int index = 0;
+                foreach (DataRow dr in dt.Rows)
+                {
+                    index += 1;
+                    int UserId = int.Parse(dr["UserId"].ToString());
+                    decimal PrizeAmt = decimal.Parse(dr[1].ToString());
+                    db.ActivityRedPackageTop10.Add(new ActivityRedPackageTop10()
+                    {
+                        Sort = index,
+                        UserId = UserId,
+                        PrizeAmt = PrizeAmt,
+                        Kind = 1,
+                    });
+                }
+                dt = OtherMySqlConn.dtable("select UserId,count(Id) from ActivityRedPackageJoins group by UserId order by count(Id) desc");
+                index = 0;
+                foreach (DataRow dr in dt.Rows)
+                {
+                    index += 1;
+                    int UserId = int.Parse(dr["UserId"].ToString());
+                    int PrizeCount = int.Parse(dr[1].ToString());
+                    db.ActivityRedPackageTop10.Add(new ActivityRedPackageTop10()
+                    {
+                        Sort = index,
+                        UserId = UserId,
+                        TimeNum = PrizeCount,
+                        Kind = 2,
+                    });
+                }
+                db.SaveChanges();
+            }
+            Thread.Sleep(60000);
+        }
+    }
+
+
+    public void StartSendPrize()
+    {
+        Thread th = new Thread(StartSendPrizeNewDo);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void StartSendPrizeNewDo()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("RedPrizeQueue");
+            if (!string.IsNullOrEmpty(content))
+            {
+                try
+                {
+                    string[] data = content.Split(':');
+                    int Id = int.Parse(function.CheckInt(data[0]));
+                    int UserId = int.Parse(function.CheckInt(data[1]));
+                    string ActivityDate = data[2];
+                    using (WebCMSEntities db = new WebCMSEntities())
+                    {
+                        ActivityRedPackageStock edit = db.ActivityRedPackageStock.FirstOrDefault(m => m.Id == Id);
+                        if(edit != null)
+                        {
+                            edit.UserId = UserId;
+                            edit.UpdateDate = DateTime.Now;
+                            ActivityRedPackageJoins query = db.ActivityRedPackageJoins.Add(new ActivityRedPackageJoins()
+                            {
+                                CreateDate = DateTime.Now, //创建时间
+                                Status = 1,
+                                UserId = UserId, //创客
+                                ActivityDate = ActivityDate, //期数
+                                PrizeAmt = edit.PrizeAmt,
+                            }).Entity;
+                            db.SaveChanges();
+                            StartGetAccount(db, UserId, query.Id, edit.PrizeAmt);
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(ex.ToString(), "发放红包奖励异常");
+                }
+                Thread.Sleep(200);
+            }
+            else
+            {
+                Thread.Sleep(500);
+            }
+        }
+    }
+    
+    private void StartGetAccount(WebCMSEntities db, int UserId, int Id, decimal PrizeAmt)
+    {
+        try
+        {
+            UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
+            if (account == null)
+            {
+                account = db.UserAccount.Add(new UserAccount()
+                {
+                    Id = UserId,
+                    UserId = UserId,
+                }).Entity;
+                db.SaveChanges();
+            }
+            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+            account.BalanceAmount += PrizeAmt;
+            account.TotalAmount += PrizeAmt;
+            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+            decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+            UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+            {
+                CreateDate = DateTime.Now,
+                UpdateDate = DateTime.Now,
+                UserId = UserId, //创客
+                ChangeType = 31, //变动类型
+                ChangeAmount = PrizeAmt, //变更金额
+                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                QueryCount = Id,
+                Remark = "开机抢红包活动",
+            }).Entity;
+            db.SaveChanges();
+        }
+        catch (Exception ex)
+        {
+            function.WriteLog(ex.ToString(), "领取红包奖励异常");
+        }
+    }    
+}

+ 3 - 3
Startup.cs

@@ -200,9 +200,9 @@ namespace MySystem
             SycnSpTradeService.Instance.Start(); //同步SP交易数据
             SycnSpChangeBindService.Instance.Start(); //同步SP换绑数据
             SycnSpUnBindService.Instance.Start(); //同步SP解绑数据
-            RedPackageHelper.Instance.Start(); //每天生成300个红包
-            RedPackageHelper.Instance.StartStatTop10(); //红包活动统计排行
-            RedPackageHelper.Instance.StartSendPrize(); //红包活动发奖
+            RedPackageV2Helper.Instance.Start(); //每天生成红包
+            RedPackageV2Helper.Instance.StartStatTop10(); //红包活动统计排行
+            RedPackageV2Helper.Instance.StartSendPrize(); //红包活动发奖
             BalancePayBackService.Instance.Start(); //余额支付队列
             ReservePayBackService.Instance.Start(); //储备金支付队列
             LeaderPrizeService.Instance.Start(); //大盟主奖励发奖