Browse Source

初步测试完成

lichunlei 2 years ago
parent
commit
084ebcf7e9
1 changed files with 80 additions and 29 deletions
  1. 80 29
      AppStart/Helper/AlipayPayBack2Service.cs

+ 80 - 29
AppStart/Helper/AlipayPayBack2Service.cs

@@ -132,7 +132,7 @@ namespace MySystem
                         }
                         else if (pro.ProductId == 28)
                         {
-                            Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId);
+                            Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId && m.LeaderLevel == 0);
                             if(user != null)
                             {
                                 user.LeaderLevel = 1;
@@ -140,7 +140,7 @@ namespace MySystem
                         }
                         else if (pro.ProductId == 27)
                         {
-                            Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId);
+                            Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId && m.LeaderLevel < 2);
                             if(user != null)
                             {
                                 user.LeaderLevel = 2;
@@ -152,15 +152,15 @@ namespace MySystem
                             int CouponCount = 0;
                             if(Kind == 1)
                             {
-                                CouponCount = 3;
+                                CouponCount = 3 * pro.ProductCount;
                             }
                             else if(Kind == 2)
                             {
-                                CouponCount = 2;
+                                CouponCount = 2 * pro.ProductCount;
                             }
                             string Codes = "";
                             var coupons = db.PosCoupons.Where(m => m.IsLock == 0 && m.IsUse == 0 && m.UserId == 0 && m.QueryCount == Kind).OrderBy(m => m.Id).Take(CouponCount).ToList();
-                            foreach (var coupon in coupons)
+                            foreach (var coupon in coupons) // TODO: 数量多的话,会慢
                             {
                                 PosCoupons item = db.PosCoupons.FirstOrDefault(m => m.Id == coupon.Id);
                                 if (item != null)
@@ -193,6 +193,10 @@ namespace MySystem
                             Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId);
                             if (user != null)
                             {
+                                bool directPrize = false; //直推奖标记
+                                bool bigLeaderPrize = false; //大盟主券标记
+                                bool buyPrize = false; //返100购机奖励标记
+                                int leaderFlag = 0; //返600备用金标记
                                 if(user.LeaderLevel > 0)
                                 {
                                     UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == order.UserId) ?? new UserAccount();
@@ -201,15 +205,15 @@ namespace MySystem
                                         if(order.PayMode == 4)
                                         {
                                             //扣减备用金
-                                            OpReserve(db, order, order.UserId, order.TotalPrice, 0, 0, "商城购机");
+                                            OpReserve(db, order, order.UserId, order.TotalPrice, 2, 0, "商城购机");
                                             //返回到余额
-                                            OpAccount(db, order, order.UserId, order.TotalPrice);
+                                            // OpAccount(db, order, order.UserId, order.TotalPrice / pro.ProductCount, pro.ProductCount);
                                         }
                                     }
                                     //获得100元奖励
-                                    OpAccount(db, order, order.UserId, 100);
+                                    OpAccount(db, order, order.UserId, 100, pro.ProductCount);
                                     //推荐奖励
-                                    DirectPrize(db, order.Id, order.UserId);
+                                    DirectPrize(db, order.Id, order.UserId, pro.ProductCount);
                                     //推荐下单上级获得30天的机具循环天数
                                     var posList = db.PosMachinesTwo.Select(m => new { m.Id, m.UserId, m.BindingState, m.RecycEndDate }).Where(m => m.UserId == order.UserId && m.BindingState == 0 && m.RecycEndDate != null).ToList();
                                     foreach (var subPos in posList)
@@ -221,11 +225,47 @@ namespace MySystem
                                         }
                                     }
                                     db.SaveChanges();
+                                    if(user.LeaderLevel == 2)
+                                    {
+                                        if(couponIds.Count > 0)
+                                        {
+                                            foreach(int couponId in couponIds)
+                                            {
+                                                PosCoupons coupon = db.PosCoupons.FirstOrDefault(m => m.Id == couponId);
+                                                if(coupon != null)
+                                                {
+                                                    coupon.LeaderUserId = user.Id;
+                                                }
+                                            }
+                                            db.SaveChanges();
+                                        }
+                                    }
+                                    else
+                                    {
+                                        int PUserId = user.ParentUserId;
+                                        while(PUserId > 0)
+                                        {
+                                            Users puser = db.Users.FirstOrDefault(m => m.Id == PUserId) ?? new Users();
+                                            if(puser.LeaderLevel == 2)
+                                            {
+                                                UserAccount acc = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount();
+                                                if(acc.LeaderReserve >= order.TotalPrice)
+                                                {
+                                                    //扣减备用金
+                                                    OpReserve(db, order, puser.Id, order.TotalPrice, 2, order.UserId, "购机奖励");
+                                                    //返回到余额
+                                                    OpAccount(db, order, puser.Id, order.TotalPrice / pro.ProductCount, pro.ProductCount);
+                                                }
+                                                PUserId = 0;
+                                            }
+                                            else
+                                            {
+                                                PUserId = puser.ParentUserId;
+                                            }
+                                        }
+                                    }
                                     return;
                                 }
-                                bool directPrize = false; //直推奖标记
-                                bool bigLeaderPrize = false; //大盟主券标记
-                                bool buyPrize = false; //返600盟主备用标记
                                 int ParentUserId = user.ParentUserId;
                                 while(ParentUserId > 0)
                                 {
@@ -236,10 +276,10 @@ namespace MySystem
                                     function.WriteLog("MakerCode:" + user.MakerCode, "推荐下单奖励监控日志");
                                     function.WriteLog("machineCount:" + machineCount, "推荐下单奖励监控日志");
                                     function.WriteLog("ActiveCount:" + ActiveCount, "推荐下单奖励监控日志");
-                                    if (machineCount + ActiveCount + couponCount >= 3 && !directPrize)
+                                    if ((machineCount + ActiveCount + couponCount >= 3 || puser.LeaderLevel > 0) && !directPrize)
                                     {
                                         function.WriteLog("满足条件", "推荐下单奖励监控日志");
-                                        DirectPrize(db, order.Id, ParentUserId);
+                                        DirectPrize(db, order.Id, ParentUserId, pro.ProductCount);
 
                                         //推荐下单上级获得30天的机具循环天数
                                         var posList = db.PosMachinesTwo.Select(m => new { m.Id, m.UserId, m.BindingState, m.RecycEndDate }).Where(m => m.UserId == ParentUserId && m.BindingState == 0 && m.RecycEndDate != null).ToList();
@@ -259,16 +299,20 @@ namespace MySystem
                                         UserAccount acccount = db.UserAccount.FirstOrDefault(m => m.Id == puser.Id) ?? new UserAccount();
                                         if(acccount.LeaderReserve >= order.TotalPrice && !buyPrize)
                                         {
-                                            //扣减备用金
-                                            OpReserve(db, order, puser.Id, order.TotalPrice, 0, order.UserId, "购机奖励");
-                                            //返回到余额
-                                            OpAccount(db, order, puser.Id, order.TotalPrice);
                                             //购机奖励
-                                            OpAccount(db, order, puser.Id, 100);
+                                            OpAccount(db, order, puser.Id, 100, pro.ProductCount);
                                             buyPrize = true;
                                         }
+                                        if(acccount.LeaderReserve >= order.TotalPrice && puser.LeaderLevel > leaderFlag)
+                                        {
+                                            //扣减备用金
+                                            OpReserve(db, order, puser.Id, order.TotalPrice, 2, order.UserId, "购机奖励");
+                                            //返回到余额
+                                            OpAccount(db, order, puser.Id, order.TotalPrice / pro.ProductCount, pro.ProductCount);
+                                            leaderFlag = puser.LeaderLevel;
+                                        }
                                         //如果是大盟主,则标记大盟主标签
-                                        if(couponIds.Count > 0 && puser.LeaderLevel == 2 && !bigLeaderPrize)
+                                        if(couponIds.Count > 0 && puser.LeaderLevel == 2 && acccount.LeaderReserve >= order.TotalPrice && !bigLeaderPrize)
                                         {
                                             foreach(int couponId in couponIds)
                                             {
@@ -326,7 +370,14 @@ namespace MySystem
                 db.SaveChanges();
             }
             decimal BeforeAmount = account.LeaderReserve; //变更前总金额
-            account.LeaderReserve += Money;
+            if(ChangeType == 1)
+            {
+                account.LeaderReserve += Money;
+            }
+            else
+            {
+                account.LeaderReserve -= Money;
+            }
             decimal AfterAmount = account.LeaderReserve; //变更后总金额
             LeaderReserveRecord add = db.LeaderReserveRecord.Add(new LeaderReserveRecord()
             {
@@ -345,7 +396,7 @@ namespace MySystem
             db.SaveChanges();
         }
         //操作余额
-        public void OpAccount(WebCMSEntities db, Orders order, int UserId, decimal Money)
+        public void OpAccount(WebCMSEntities db, Orders order, int UserId, decimal Money, int Count = 1)
         {
             UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
             if (account == null)
@@ -369,8 +420,8 @@ namespace MySystem
             decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
             decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
             decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-            account.BalanceAmount += Money;
-            account.TotalAmount += Money;
+            account.BalanceAmount += Money * Count;
+            account.TotalAmount += Money * Count;
             decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
             decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
             decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
@@ -380,7 +431,7 @@ namespace MySystem
                 UpdateDate = DateTime.Now,
                 UserId = UserId, //创客
                 ChangeType = ChangeType, //变动类型
-                ChangeAmount = Money, //变更金额
+                ChangeAmount = Money * Count, //变更金额
                 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
                 AfterTotalAmount = AfterTotalAmount, //变更后总金额
                 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
@@ -391,7 +442,7 @@ namespace MySystem
             }).Entity;
             db.SaveChanges();
         }
-        public void DirectPrize(WebCMSEntities db, int OrderId, int UserId)
+        public void DirectPrize(WebCMSEntities db, int OrderId, int UserId, int Count = 1)
         {
             UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
             if (account == null)
@@ -406,8 +457,8 @@ namespace MySystem
             decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
             decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
             decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-            account.BalanceAmount += 100;
-            account.TotalAmount += 100;
+            account.BalanceAmount += 100 * Count;
+            account.TotalAmount += 100 * Count;
             decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
             decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
             decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
@@ -417,7 +468,7 @@ namespace MySystem
                 UpdateDate = DateTime.Now,
                 UserId = UserId, //创客
                 ChangeType = 112, //变动类型
-                ChangeAmount = 100, //变更金额
+                ChangeAmount = 100 * Count, //变更金额
                 BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
                 AfterTotalAmount = AfterTotalAmount, //变更后总金额
                 BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额