فهرست منبع

Merge branch 'test-mainserver' into develop

lcl 1 سال پیش
والد
کامیت
ab6c596c71

+ 2 - 2
AppStart/AddPosCouponPrizeHelper.cs

@@ -62,7 +62,7 @@ public class AddPosCouponPrizeHelper
         {
             OrderProduct pro = db.OrderProduct.FirstOrDefault(m => m.OrderId == order.Id) ?? new OrderProduct();
             // Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId) ?? new Users();
-            UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(db, order.UserId);
+            UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(order.UserId);
             List<int> prizeChk = new List<int>();
             if(!db.UserAccountRecord.Any(m => m.ChangeType == 112 && m.QueryCount == order.Id))
             {
@@ -117,7 +117,7 @@ public class AddPosCouponPrizeHelper
             while (ParentUserId > 0)
             {
                 // Users puser = db.Users.FirstOrDefault(m => m.Id == ParentUserId) ?? new Users();
-                UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(db, ParentUserId);
+                UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(ParentUserId);
                 if(DirectPrizeFlag)
                 {
                     if(prizeChk.Contains(1))

+ 84 - 0
AppStart/Helper/ActPrizeCheckService.cs

@@ -0,0 +1,84 @@
+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(20000);
+            }
+        }
+        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;
+                    }
+                    else
+                    {
+                        RedisDbconn.Instance.AddList("ActiveRewardFailQueue", content);
+                    }
+                }
+                else
+                {
+                    RedisDbconn.Instance.AddList("ActiveRewardFailQueue", content);
+                }
+            }
+            db.Dispose();
+        }
+    }
+}

+ 5 - 3
AppStart/Helper/AlipayPayBack2Service.cs

@@ -373,7 +373,8 @@ namespace MySystem
                             OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
                             OpModels.UserAccount account = opdb.UserAccount.FirstOrDefault(m => m.Id == user.Id) ?? new OpModels.UserAccount();
                             function.WriteLog("TotalAmt:" + account.TotalAmt, "操作小盟主购买逻辑监控日志");
-                            if(account.TotalAmt > 0)
+                            // OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.Id == LeaderUserId) ?? new OpModels.SysAdmin();
+                            if(account.TotalAmt > 0) // && sys.ExpireDate > DateTime.Now)
                             {
                                 if(account.TotalAmt < TotalPrice)
                                 {
@@ -678,7 +679,8 @@ namespace MySystem
                 if(user != null)
                 {
                     function.WriteLog("UserId:" + UserId, "操作运营中心额度监控日志");
-                    bool sys = db.SysAdmin.Any(m => m.UserId == UserId);
+                    // DateTime now = DateTime.Now;
+                    bool sys = db.SysAdmin.Any(m => m.UserId == UserId); // && m.ExpireDate > now);
                     if(sys)
                     {
                         function.WriteLog("是运营中心", "操作运营中心额度监控日志");
@@ -865,7 +867,7 @@ namespace MySystem
             {
                 level += 1;
                 // Users user = db.Users.FirstOrDefault(m => m.Id == UserId);
-                UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(db, UserId);
+                UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(UserId);
                 if(user != null)
                 {
                     if((user.UserType == 1 || user.LeaderLevel > 0) && level > 1)

+ 2 - 2
AppStart/Helper/LeaderApplyCouponsHelper.cs

@@ -103,7 +103,7 @@ namespace MySystem
             if(query != null)
             {
                 JsonData ApplyList = JsonMapper.ToObject(query.SeoTitle);
-                UserRankItem orderUser = PosCouponPrizeService.Instance.GetUserLevel(db, query.UserId);
+                UserRankItem orderUser = PosCouponPrizeService.Instance.GetUserLevel(query.UserId);
                 string ParentNav = orderUser.ParentNav + "," + orderUser.Id + ",";
                 string[] ParentNavList = ParentNav.Trim(',').Replace(",,", ",").Split(',');
                 Array.Reverse(ParentNavList);
@@ -112,7 +112,7 @@ namespace MySystem
                 decimal BuyPrize = 0; //购机奖励
                 foreach(string ParentId in ParentNavList)
                 {
-                    UserRankItem parentUser = PosCouponPrizeService.Instance.GetUserLevel(db, int.Parse(ParentId));
+                    UserRankItem parentUser = PosCouponPrizeService.Instance.GetUserLevel(int.Parse(ParentId));
                     index += 1;
 
                     //给券打大盟主标记

+ 6 - 3
AppStart/Helper/OperatePrizeService.cs

@@ -35,6 +35,7 @@ namespace MySystem
                         WebCMSEntities db = new WebCMSEntities();
                         if(!db.UserAccountRecord.Any(m => m.QueryCount == PosId && m.ChangeType == 121))
                         {
+                            OpModels.WebCMSEntities spdb = new OpModels.WebCMSEntities();
                             PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId);
                             if (pos != null)
                             {
@@ -42,8 +43,9 @@ namespace MySystem
                                 int UserId = pos.BuyUserId;
                                 while(UserId > 0)
                                 {
-                                    Users user = db.Users.FirstOrDefault(m => m.Id == UserId);
-                                    if(user != null)
+                                    Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                                    OpModels.SysAdmin sys = spdb.SysAdmin.FirstOrDefault(m => m.UserId == user.Id) ?? new OpModels.SysAdmin();
+                                    if(user.UserType >= 1 && sys.ExpireDate > DateTime.Now)
                                     {
                                         if(user.UserType >= 1)
                                         {
@@ -104,8 +106,9 @@ namespace MySystem
                                     db.SaveChanges();
                                 }
                             }
+                            db.Dispose();
+                            spdb.Dispose();
                         }
-                        db.Dispose();
                     }
                     catch (Exception ex)
                     {

+ 2 - 2
AppStart/Helper/PosCouponPrize/OperateAddService.cs

@@ -59,7 +59,7 @@ namespace MySystem
                 {
                     return;
                 }
-                UserRankItem orderUser = PosCouponPrizeService.Instance.GetUserLevel(db, edit.UserId);
+                UserRankItem orderUser = PosCouponPrizeService.Instance.GetUserLevel(edit.UserId);
                 if(orderUser.UserType != 1)
                 {
                     return;
@@ -72,7 +72,7 @@ namespace MySystem
                 // bool DirectPrizeFlag = false; //奖励发放标识
                 foreach(string ParentId in ParentNavList)
                 {
-                    UserRankItem parentUser = PosCouponPrizeService.Instance.GetUserLevel(db, int.Parse(ParentId));
+                    UserRankItem parentUser = PosCouponPrizeService.Instance.GetUserLevel(int.Parse(ParentId));
                     index += 1;
 
                     if(parentUser.OperateLevel > 1 && PosCouponPrizeService.Instance.CheckOpReserve(opdb, ReturnAmount, parentUser.Id) && !PrizeFlag)

+ 13 - 5
AppStart/Helper/PosCouponPrize/PosCouponPrizeService.cs

@@ -83,7 +83,7 @@ namespace MySystem
                     }
 
 
-                    UserRankItem orderUser = GetUserLevel(db, order.UserId);
+                    UserRankItem orderUser = GetUserLevel(order.UserId);
                     if(orderUser.UserLevel == 0) 
                     {
                         PreUserLevel(db, order.UserId, 1, DateTime.Parse("2025-01-01 00:00:00"));
@@ -98,7 +98,7 @@ namespace MySystem
                     decimal BuyPrize = 0; //购机奖励
                     foreach(string ParentId in ParentNavList)
                     {
-                        UserRankItem parentUser = GetUserLevel(db, int.Parse(ParentId));
+                        UserRankItem parentUser = GetUserLevel(int.Parse(ParentId));
                         index += 1;
                         if(index == 1 && (orderUser.LeaderLevel > 0 || orderUser.OperateLevel > 0) && !DirectPrizeFlag)
                         {
@@ -218,8 +218,10 @@ namespace MySystem
         /// <param name="db"></param>
         /// <param name="UserId"></param>
         /// <returns></returns>
-        public UserRankItem GetUserLevel(WebCMSEntities db, int UserId)
+        public UserRankItem GetUserLevel(int UserId)
         {
+            WebCMSEntities db = new WebCMSEntities();
+            OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
             UserRankItem dic = new UserRankItem();
             DateTime now = DateTime.Now;
             Users user = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1) ?? new Users();
@@ -231,14 +233,20 @@ namespace MySystem
                 dic.LeaderLevel = leader.LeaderLevel;
             }
             dic.AgoLeaderLevel = leader.LeaderLevel;
-            dic.OperateLevel = user.UserType;
-            dic.UserType = user.UserType;
+            OpModels.SysAdmin sys = opdb.SysAdmin.FirstOrDefault(m => m.UserId == UserId) ?? new OpModels.SysAdmin();
+            if(sys.ExpireDate > now)
+            {
+                dic.OperateLevel = user.UserType;
+                dic.UserType = user.UserType;
+            }
             dic.MerchantType = user.MerchantType;
             dic.Id = user.Id;
             dic.MakerCode = user.MakerCode;
             dic.RealName = user.RealName;
             dic.ParentUserId = user.ParentUserId;
             dic.ParentNav = user.ParentNav;
+            db.Dispose();
+            opdb.Dispose();
             return dic;
         }
 

+ 24 - 5
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);
@@ -1166,6 +1168,7 @@ namespace MySystem
                         int PosId = int.Parse(content);
                         Thread.Sleep(1000);
                         WebCMSEntities db = new WebCMSEntities();
+                        OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
                         PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1 && ((!string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0" && m.CreditTrade >= 1000) || m.BrandId == 14));
                         if (pos != null)
                         {
@@ -1198,7 +1201,7 @@ namespace MySystem
                                                 {
                                                     int UserId = int.Parse(ParentNavs[i]);
                                                     // Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1);
-                                                    UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(db, UserId);
+                                                    UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(UserId);
                                                     if (puser.Id > 0 && Prize > 0)
                                                     {
                                                         function.WriteLog("上级:" + puser.MakerCode, "开机奖励发放日志");
@@ -1212,6 +1215,12 @@ namespace MySystem
                                                                 leaderOp = db.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now);
                                                                 function.WriteLog("条件:leaderOp:" + leaderOp, "开机奖励发放日志");
                                                             }
+                                                            else if(puser.LeaderLevel == 0 && puser.UserType > 0)
+                                                            {
+                                                                DateTime now = DateTime.Now;
+                                                                leaderOp = opdb.SysAdmin.Any(m => m.UserId == puser.Id && m.ExpireDate >= now);
+                                                                function.WriteLog("条件:2-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
+                                                            }
                                                             if(leaderOp)
                                                             {
                                                                 function.WriteLog("满足条件", "开机奖励发放日志");
@@ -1235,6 +1244,7 @@ namespace MySystem
                             }
                         }
                         db.Dispose();
+                        opdb.Dispose();
                     }
                     catch(Exception ex)
                     {
@@ -1267,6 +1277,7 @@ namespace MySystem
                         int PosId = int.Parse(content);
                         Thread.Sleep(1000);
                         WebCMSEntities db = new WebCMSEntities();
+                        OpModels.WebCMSEntities opdb = new OpModels.WebCMSEntities();
                         PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId && m.ActivationState == 1 && m.CreditTrade >= 10000 && m.BrandId != 14);
                         if (pos != null)
                         {
@@ -1295,7 +1306,7 @@ namespace MySystem
                                                 {
                                                     int UserId = int.Parse(ParentNavs[i]);
                                                     // Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1 && m.Status > -1);
-                                                    UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(db, UserId);
+                                                    UserRankItem puser = PosCouponPrizeService.Instance.GetUserLevel(UserId);
                                                     if (puser.Id > 0 && Prize > 0)
                                                     {
                                                         function.WriteLog("上级:" + puser.MakerCode, "盟主开机奖励发放日志");
@@ -1307,7 +1318,13 @@ namespace MySystem
                                                             {
                                                                 DateTime now = DateTime.Now;
                                                                 leaderOp = db.Leaders.Any(m => m.Id == puser.Id && m.ExpiredDate >= now);
-                                                                function.WriteLog("条件:leaderOp:" + leaderOp, "盟主开机奖励发放日志");
+                                                                function.WriteLog("条件:1-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
+                                                            }
+                                                            else if(puser.LeaderLevel == 0 && puser.UserType > 0)
+                                                            {
+                                                                DateTime now = DateTime.Now;
+                                                                leaderOp = opdb.SysAdmin.Any(m => m.UserId == puser.Id && m.ExpireDate >= now);
+                                                                function.WriteLog("条件:2-leaderOp:" + leaderOp, "盟主开机奖励发放日志");
                                                             }
                                                             if(leaderOp)
                                                             {
@@ -1332,6 +1349,7 @@ namespace MySystem
                             }
                         }
                         db.Dispose();
+                        opdb.Dispose();
                     }
                     catch(Exception ex)
                     {
@@ -3264,7 +3282,8 @@ namespace MySystem
                 AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
                 BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
                 AfterBalanceAmount = AfterBalanceAmount, //变更后余额
-                QueryCount = pos.Id, //关联机具Id
+                QueryCount = pos.Id,
+                Kind = 3,
             }).Entity;
             db.SaveChanges();
         }

+ 1 - 0
OpModels/SysAdmin.cs

@@ -33,5 +33,6 @@ namespace MySystem.OpModels
         public string AdminName { get; set; }
         public ulong ReturnFlag { get; set; }
         public decimal ReturnAmount { get; set; }
+        public DateTime? ExpireDate { get; set; }
     }
 }

+ 4 - 0
OpModels/WebCMSEntities.cs

@@ -2609,6 +2609,10 @@ namespace MySystem.OpModels
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.ExpireDate)
+                    .HasColumnType("datetime")
+                    .HasComment("过期时间");
+
                 entity.Property(e => e.FilePath)
                     .HasColumnType("varchar(200)")
                     .HasCharSet("utf8")

+ 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(); //运营中心奖励发奖

+ 1 - 1
Util/Utils.cs

@@ -87,7 +87,7 @@ namespace MySystem
         {
             WebCMSEntities db = new WebCMSEntities();
             // Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
-            UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(db, UserId);
+            UserRankItem user = PosCouponPrizeService.Instance.GetUserLevel(UserId);
             if(user.UserType == 1)
             {
                 return true;