Преглед изворни кода

监听无商户号的机具,并再次发奖励

lcl пре 1 година
родитељ
комит
c0787cf263
3 измењених фајлова са 80 додато и 1 уклоњено
  1. 76 0
      AppStart/Helper/ActPrizeCheckService.cs
  2. 3 1
      AppStart/Helper/StatService.cs
  3. 1 0
      Startup.cs

+ 76 - 0
AppStart/Helper/ActPrizeCheckService.cs

@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class ActPrizeCheckService
+    {
+        public readonly static ActPrizeCheckService Instance = new ActPrizeCheckService();
+        private ActPrizeCheckService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(StartDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartDo()
+        {
+            while(true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("ActiveRewardFailQueue");
+                if(!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        DoSomething(content);
+                    }
+                    catch(Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "实时监听无商户号未发奖励异常");
+                    }
+                }
+                Thread.Sleep(5000);
+            }
+        }
+        public void DoSomething(string content)
+        {
+            JsonData jsonObj = JsonMapper.ToObject(content);
+            int PosId = int.Parse(function.CheckInt(jsonObj["PosId"].ToString()));
+            string UserId = jsonObj["UserId"].ToString();
+            decimal ActPrize = decimal.Parse(function.CheckNum(jsonObj["ActPrize"].ToString()));
+            int ChangeType = int.Parse(function.CheckInt(jsonObj["ChangeType"].ToString()));
+            int ActType = int.Parse(function.CheckInt(jsonObj["ActType"].ToString()));
+            WebCMSEntities db = new WebCMSEntities();
+            PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId);
+            if(pos != null)
+            {
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                if(merchant != null)
+                {
+                    if(!string.IsNullOrEmpty(merchant.KqMerNo))
+                    {
+                        Users user = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
+                        int GetUserId = user.Id;
+                        string ParentNav = user.ParentNav;
+                        int TopUserId = 0;
+                        if (!string.IsNullOrEmpty(ParentNav))
+                        {
+                            TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
+                        }
+                        StatService.Instance.doActiveReward(db, merchant, pos, GetUserId, ParentNav, TopUserId, ActPrize, ChangeType, ActType);
+                        db.Dispose();
+                        return;
+                    }
+                }
+            }
+            db.Dispose();
+        }
+    }
+}

+ 3 - 1
AppStart/Helper/StatService.cs

@@ -768,7 +768,9 @@ namespace MySystem
             //判断商户号是否为空,避免下次再有空商户的情况,导致奖励不发放
             if(string.IsNullOrEmpty(MerNo))
             {
-                MerNo = "n" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
+                // MerNo = "n" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
+                RedisDbconn.Instance.AddList("ActiveRewardFailQueue", "{\"PosId\":\"" + pos.Id + "\",\"UserId\":\"" + GetUserId + "\",\"ActPrize\":\"" + ActPrize + "\",\"ChangeType\":\"" + ChangeType + "\",\"ActType\":\"" + ActType + "\"}");
+                return;
             }
             bool check = db.ActiveReward.Any(m => m.KqMerNo == MerNo && m.RewardAmount == ActPrize && m.ActType == ActType);
             bool check1 = db.ActiveReward.Any(m => m.KqSnNo == pos.PosSn && m.RewardAmount == ActPrize && m.ActType == ActType);

+ 1 - 0
Startup.cs

@@ -187,6 +187,7 @@ namespace MySystem
                 StatService.Instance.StartOpenReward(); //实时获取开机奖励
                 StatService.Instance.StartLeaderReward(); //盟主开机奖励发放
                 StatService.Instance.StartPreActPrize(); //押金奖励发放(激活奖励新规)
+                ActPrizeCheckService.Instance.Start(); //监听无商户号的机具,并再次发奖励
                 StatService.Instance.ListenFluxRecord(); //同步流量费
                 LeaderPrizeService.Instance.Start(); //大盟主奖励发奖
                 OperatePrizeService.Instance.Start(); //运营中心奖励发奖