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

Merge branch 'feat-lcl-训练营奖励拦截记录' into release-mainserver

lcl преди 9 месеца
родител
ревизия
3ba8c950f7

+ 6 - 4
AppStart/Helper/LeaderApplyCouponsHelper.cs

@@ -195,7 +195,7 @@ namespace MySystem
                         if(PosCouponPrizeService.Instance.CheckOpReserve(opdb, groupCount, parentUser.Id))
                         {
                             //购机奖
-                            decimal CurBuyPrize = GetBuyPrize(parentUser, query.UserId);
+                            decimal CurBuyPrize = GetBuyPrize(parentUser, query);
                             decimal GetPrize = CurBuyPrize - BuyPrize;
                             int Kind = 0;
                             if(query.Remark == "兑换机具券")
@@ -256,7 +256,7 @@ namespace MySystem
                         if(PosCouponPrizeService.Instance.CheckOpReserve(opdb, groupCount, parentUser.Id))
                         {
                             //购机奖
-                            decimal CurBuyPrize = GetBuyPrize(parentUser, query.UserId);
+                            decimal CurBuyPrize = GetBuyPrize(parentUser, query, groupCount);
                             decimal GetPrize = CurBuyPrize - BuyPrize;
                             int Kind = 0;
                             if(query.Remark == "兑换机具券")
@@ -281,7 +281,7 @@ namespace MySystem
         /// </summary>
         /// <param name="user"></param>
         /// <returns></returns>
-        public decimal GetBuyPrize(UserRankItem user, int UserId = 0)
+        public decimal GetBuyPrize(UserRankItem user, LeaderReserveRecord record, int count = 0)
         {
             if(user.OperateLevel == 2) 
             {
@@ -289,8 +289,10 @@ namespace MySystem
                 {
                     return 60;
                 }
-                if(!PosCouponPrizeService.Instance.TradeTeamCheck(UserId))
+                if(!PosCouponPrizeService.Instance.TradeTeamCheck(record.UserId))
                 {
+                    decimal Amount = count * 60;
+                    RedisDbconn.Instance.AddList("TradeFilterQueue", "{\"OrderId\":\"" + record.Id + "\",\"PrizeUserId\":\"" + user.Id + "\",\"Amount\":\"" + Amount + "\",\"Kind\":\"2\"}");
                     return 0;
                 }
                 return 60;

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

@@ -259,7 +259,7 @@ namespace MySystem
                             {
                                 Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放购机奖");
                                 //购机奖
-                                decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
+                                decimal CurBuyPrize = GetBuyPrize(parentUser, order);
                                 decimal GetPrize = CurBuyPrize - BuyPrize;
                                 Utils.Instance.PrizeRecord(2, order.OrderNo, "发放金额:" + GetPrize);
                                 if(GetPrize > 0)
@@ -301,6 +301,90 @@ namespace MySystem
                                     RedisDbconn.Instance.AddList("OperateAmountRecordServiceQueue", item);
                                 }
                             }
+<<<<<<< HEAD
+=======
+
+                            if(!BackAccountFlag)
+                            {
+                                BackAccountFlag = true;
+                                //扣减备用金
+                                int ReserveRecordId = OpReserve(db, order.Id, parentUser.Id, GetWithdrawMoney(parentUser) * order.BuyCount, 2, order.UserId, "购机奖励");
+                                //返回到余额
+                                OpLeaderAccount(db, order, parentUser.Id, GetWithdrawMoney(parentUser), order.BuyCount, ReserveRecordId);
+                            }
+
+                            //给券打大盟主标记
+                            Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:创客是盟主;创客盟主等级:" + parentUser.LeaderLevel + "");
+                            Utils.Instance.PrizeRecord(2, order.OrderNo, "条件:盟主储备金是否充足;");
+                            if(parentUser.LeaderLevel == 1 && CheckLeaderReserve(db, order.BuyCount, parentUser.Id) && !BigLeaderFlag)
+                            {
+                                Utils.Instance.PrizeRecord(2, order.OrderNo, "满足小盟主条件,开始检查大盟主关联的额度");
+                                int LeaderId = CheckPosCouponLeaderFlag(db, parentUser.Id, order.BuyCount, codes);
+                                if(LeaderId > 0)
+                                {
+                                    BigLeaderFlag = true;
+                                    Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,大盟主标记打给" + LeaderId);
+                                }
+                            }
+                            else if(parentUser.LeaderLevel == 2 && !BigLeaderFlag)
+                            {
+                                Utils.Instance.PrizeRecord(2, order.OrderNo, "满足大盟主条件,大盟主标记打给" + parentUser.Id + ",对应机具券:" + order.SnNos);
+                                BigLeaderFlag = true;
+                                if(!string.IsNullOrEmpty(order.SnNos))
+                                {
+                                    List<int> couponIds = db.PosCoupons.Where(m => codes.Contains(m.ExchangeCode)).OrderBy(m => m.Id).Take(CouponCount).ToList().Select(m => m.Id).ToList();
+                                    Utils.Instance.PrizeRecord(2, order.OrderNo, "开始打标记,数量:" + couponIds.Count);
+                                    SetPosCouponLeaderFlag(db, parentUser.Id, order.BuyCount, couponIds);
+                                    Utils.Instance.PrizeRecord(2, order.OrderNo, "结束打标记");
+                                }
+                            }
+                        }
+                        else if(parentUser.OperateLevel > 0 && CheckOpReserve(opdb, order.BuyCount, parentUser.Id) && BuyPrizeFlag < 2)
+                        {
+                            Utils.Instance.PrizeRecord(2, order.OrderNo, "满足条件,发放购机奖");
+                            //购机奖
+                            decimal CurBuyPrize = GetBuyPrize(parentUser, order);
+                            decimal GetPrize = CurBuyPrize - BuyPrize;
+                            Utils.Instance.PrizeRecord(2, order.OrderNo, "发放金额:" + GetPrize);
+                            if(GetPrize > 0)
+                            {
+                                int ChangeType = 120;
+                                if(parentUser.OperateLevel > 1)
+                                {
+                                    ChangeType = 128;
+                                }
+                                OpAccount(db, order.Id, parentUser.Id, GetPrize, order.BuyCount, ChangeType);
+                                BuyPrize = CurBuyPrize;
+                                if(GetPrize == 160) BuyPrizeFlag = 2;
+                                else if(GetPrize == 60) BuyPrizeFlag = 2;
+                                else BuyPrizeFlag = 1;
+                            }
+                            if(parentUser.OperateLevel == 2 && CurBuyPrize == 100) BuyPrizeFlag = 2; 
+
+                            if(!BackAccountFlag)
+                            {
+                                BackAccountFlag = true;
+                                decimal GetAmount = GetWithdrawMoney(parentUser) * order.BuyCount;
+                                //扣减备用金
+                                // OperateAmountChange(opdb, parentUser.Id, GetAmount, 2, 1, "商城购机", true, order.Id);
+                                // //返回到余额
+                                // OperateAmountChange(opdb, parentUser.Id, GetAmount, 1, 2, "商城购机", true, order.Id);
+
+                                OpAmountItem item = new OpAmountItem()
+                                {
+                                    UserId = parentUser.Id,
+                                    OperateType = 0,
+                                    ChangeType = 5,
+                                    Remark = "商城购机",
+                                    UseAmount = GetAmount,
+                                    UseValidForGetAmount = GetAmount,
+                                    UseTotalAmt = GetAmount,
+                                    DataType = 1,
+                                    DataId = order.Id,
+                                };
+                                RedisDbconn.Instance.AddList("OperateAmountRecordServiceQueue", item);
+                            }
+>>>>>>> feat-lcl-训练营奖励拦截记录
                         }
                     }
                 }
@@ -497,7 +581,7 @@ namespace MySystem
                             //购机奖
                             if(parentUser.LeaderLevel > 0)
                             {
-                                decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
+                                decimal CurBuyPrize = GetBuyPrize(parentUser, order);
                                 decimal GetPrize = CurBuyPrize - BuyPrize;
                                 if(GetPrize > 0) 
                                 {
@@ -532,7 +616,7 @@ namespace MySystem
                         else if(parentUser.OperateLevel > 0 && CheckOpReserve(opdb, order.BuyCount, parentUser.Id))
                         {
                             //购机奖
-                            decimal CurBuyPrize = GetBuyPrize(parentUser, order.UserId);
+                            decimal CurBuyPrize = GetBuyPrize(parentUser, order);
                             decimal GetPrize = CurBuyPrize - BuyPrize;
                             if(GetPrize > 0)
                             {
@@ -1083,7 +1167,7 @@ namespace MySystem
         /// </summary>
         /// <param name="user"></param>
         /// <returns></returns>
-        public decimal GetBuyPrize(UserRankItem user, int OrderUserId = 0)
+        public decimal GetBuyPrize(UserRankItem user, Orders order)
         {
             if(user.OperateLevel == 1) return 100;
             if(user.OperateLevel == 2) 
@@ -1092,8 +1176,10 @@ namespace MySystem
                 {
                     return 160;
                 }
-                if(!TradeTeamCheck(OrderUserId) && user.Id != OrderUserId)
+                if(!TradeTeamCheck(order.UserId) && user.Id != order.UserId)
                 {
+                    decimal Amount = order.BuyCount * 60;
+                    RedisDbconn.Instance.AddList("TradeFilterQueue", "{\"OrderId\":\"" + order.Id + "\",\"PrizeUserId\":\"" + user.Id + "\",\"Amount\":\"" + Amount + "\",\"Kind\":\"1\"}");
                     return 100;
                 }
                 return 160;

+ 67 - 0
AppStart/Helper/TradeFilterService.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class TradeFilterService
+    {
+        public readonly static TradeFilterService Instance = new TradeFilterService();
+        private TradeFilterService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(dosomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void dosomething()
+        {
+            while (true)
+            {
+                string data = RedisDbconn.Instance.RPop<string>("TradeFilterQueue");
+                if (!string.IsNullOrEmpty(data))
+                {
+                    try
+                    {
+                        JsonData jsonOj = JsonMapper.ToObject(data);
+                        int Kind = int.Parse(function.CheckInt(jsonOj["Kind"].ToString()));
+                        int OrderId = int.Parse(function.CheckInt(jsonOj["OrderId"].ToString()));
+                        int PrizeUserId = int.Parse(function.CheckInt(jsonOj["PrizeUserId"].ToString()));
+                        decimal Amount = decimal.Parse(function.CheckNum(jsonOj["Amount"].ToString()));
+                        WebCMSEntities db = new WebCMSEntities();
+                        Orders order = db.Orders.FirstOrDefault(m => m.Id == OrderId) ?? new Orders();
+                        Users user = db.Users.FirstOrDefault(m => m.Id == order.UserId) ?? new Users();
+                        db.TradeFilterRecord.Add(new TradeFilterRecord()
+                        {
+                            CreateDate = DateTime.Now,
+                            IntercetpAmount = Amount,
+                            OrderDate = order.PayDate,
+                            OrderNo = order.OrderNo,
+                            OrderId = order.Id,
+                            PrizeUserId = PrizeUserId,
+                            OrderUserId = order.UserId,
+                            Kind = Kind,
+                        });
+                        db.Dispose();
+                    }
+                    catch (Exception ex)
+                    {                        
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "训练营拦截奖励异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(500);
+                }
+            }
+        }
+    }
+}

+ 12 - 0
PxcModels/NewLeaderData.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class NewLeaderData
+    {
+        public int UserId { get; set; }
+        public decimal BalanceAmount { get; set; }
+        public decimal ReserveAmount { get; set; }
+    }
+}

+ 18 - 0
PxcModels/TradeFilterRecord.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class TradeFilterRecord
+    {
+        public int Id { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public decimal IntercetpAmount { get; set; }
+        public DateTime? OrderDate { get; set; }
+        public string OrderNo { get; set; }
+        public int OrderId { get; set; }
+        public int PrizeUserId { get; set; }
+        public int OrderUserId { get; set; }
+        public int Kind { get; set; }
+    }
+}

+ 63 - 0
PxcModels/WebCMSEntities.cs

@@ -130,6 +130,7 @@ namespace MySystem.PxcModels
         public virtual DbSet<MsgSms> MsgSms { get; set; }
         public virtual DbSet<MsgSmsSet> MsgSmsSet { get; set; }
         public virtual DbSet<MsgTemplate> MsgTemplate { get; set; }
+        public virtual DbSet<NewLeaderData> NewLeaderData { get; set; }
         public virtual DbSet<OpenBankCityTable> OpenBankCityTable { get; set; }
         public virtual DbSet<OpenBankTable> OpenBankTable { get; set; }
         public virtual DbSet<OpenReward> OpenReward { get; set; }
@@ -259,6 +260,7 @@ namespace MySystem.PxcModels
         public virtual DbSet<TradeDaySummary2Before> TradeDaySummary2Before { get; set; }
         public virtual DbSet<TradeDaySummaryAfter> TradeDaySummaryAfter { get; set; }
         public virtual DbSet<TradeDaySummaryBefore> TradeDaySummaryBefore { get; set; }
+        public virtual DbSet<TradeFilterRecord> TradeFilterRecord { get; set; }
         public virtual DbSet<TradeRecord> TradeRecord { get; set; }
         public virtual DbSet<TradeRecordTest> TradeRecordTest { get; set; }
         public virtual DbSet<UpUserRelation> UpUserRelation { get; set; }
@@ -8801,6 +8803,26 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<NewLeaderData>(entity =>
+            {
+                entity.HasKey(e => e.UserId)
+                    .HasName("PRIMARY");
+
+                entity.HasComment("新盟主体系数据");
+
+                entity.Property(e => e.UserId)
+                    .HasColumnType("int(11)")
+                    .HasComment("创客Id");
+
+                entity.Property(e => e.BalanceAmount)
+                    .HasColumnType("decimal(18,2)")
+                    .HasComment("盟主可提现余额");
+
+                entity.Property(e => e.ReserveAmount)
+                    .HasColumnType("decimal(18,2)")
+                    .HasComment("盟主储蓄金");
+            });
+
             modelBuilder.Entity<OpenBankCityTable>(entity =>
             {
                 entity.HasKey(e => e.CityName)
@@ -18260,6 +18282,47 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.VipFlag).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<TradeFilterRecord>(entity =>
+            {
+                entity.HasComment("训练营拦截记录");
+
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate)
+                    .HasColumnType("datetime")
+                    .HasComment("创建时间");
+
+                entity.Property(e => e.IntercetpAmount)
+                    .HasColumnType("decimal(18,2)")
+                    .HasComment("拦截金额");
+
+                entity.Property(e => e.Kind)
+                    .HasColumnType("int(11)")
+                    .HasComment("类别");
+
+                entity.Property(e => e.OrderDate)
+                    .HasColumnType("datetime")
+                    .HasComment("下单时间");
+
+                entity.Property(e => e.OrderId)
+                    .HasColumnType("int(11)")
+                    .HasComment("订单");
+
+                entity.Property(e => e.OrderNo)
+                    .HasColumnType("varchar(50)")
+                    .HasComment("订单号")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.OrderUserId)
+                    .HasColumnType("int(11)")
+                    .HasComment("下单人");
+
+                entity.Property(e => e.PrizeUserId)
+                    .HasColumnType("int(11)")
+                    .HasComment("拦截奖励人");
+            });
+
             modelBuilder.Entity<TradeRecord>(entity =>
             {
                 entity.HasIndex(e => new { e.BrandId, e.UserId, e.MerchantId, e.MerNo, e.SnNo, e.CreateDate })