Explorar o código

Merge branch 'feat-盟主过期' into develop

lcl %!s(int64=2) %!d(string=hai) anos
pai
achega
d3b126b1a4

BIN=BIN
.DS_Store


BIN=BIN
AppStart/.DS_Store


BIN=BIN
AppStart/Helper/.DS_Store


+ 47 - 1
AppStart/Helper/AlipayPayBack2Service.cs

@@ -265,10 +265,14 @@ namespace MySystem
                         if(pro.ProductId == 39) //购买大盟主储蓄金,给上级运营中心返可提现金额
                         {
                             OperateReserveBackFor(db, order.UserId, 40000);
+                            AddLeader(db, order.UserId, 2);
+                            LeaderPreUserLevel(db, order.UserId, 2);
                         }
                         else if(pro.ProductId == 40) //购买小盟主储蓄金,给上级大盟主返储备金
                         {
                             LeaderBack(db, order);
+                            AddLeader(db, order.UserId, 1);
+                            LeaderPreUserLevel(db, order.UserId, 1);
                         }
                     }
 
@@ -412,7 +416,7 @@ namespace MySystem
                                                     coupon.OpId = user.Id;
                                                 }
                                             }
-                                        }
+                                        } 
                                         db.SaveChanges();
                                         //寻找最近储蓄金充足的大盟主
                                         int PUserId = user.Id;
@@ -1162,21 +1166,63 @@ namespace MySystem
 
         public void AddLeader(WebCMSEntities db, int UserId, int LeaderLevel)
         {
+            int Month = LeaderLevel == 1 ? 6 : 12;
             Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId);
             if(leader == null)
             {
                 db.Leaders.Add(new Leaders()
                 {
+                    Id = UserId,
                     CreateDate = DateTime.Now, //设置时间
                     UserId = UserId, //用户
                     LeaderLevel = LeaderLevel,
+                    LastBuyDate = DateTime.Now,
+                    ExpiredDate = DateTime.Now.AddMonths(Month),
                 });
             }
             else
             {
                 leader.LeaderLevel = LeaderLevel;
+                leader.LastBuyDate = DateTime.Now;
+                leader.ExpiredDate = DateTime.Now.AddMonths(Month);
             }
             db.SaveChanges();
+            SendLeaderMsg(db, UserId);
+        }
+
+        #endregion
+
+        #region 盟主续费通知
+
+        public void SendLeaderMsg(WebCMSEntities db, int UserId)
+        {
+            string msg = "";
+            Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+            DateTime now = DateTime.Now;
+            Leaders leader = db.Leaders.FirstOrDefault(m => m.Id == UserId);
+            if(leader != null)
+            {
+                if(leader.ExpiredDate >= now)
+                {
+                    msg = "尊敬的" + user.RealName + "盟主,恭喜您的盟主已成功开通";
+                }
+                else
+                {
+                    msg = "尊敬的" + user.RealName + "盟主,恭喜您重新成为盟主";
+                }
+            }
+            else
+            {
+                msg = "尊敬的" + user.RealName + "盟主,恭喜您的盟主已成功开通";
+            }
+            RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
+            {
+                UserId = Convert.ToInt32(UserId), //创客
+                Title = "开通盟主提醒", //标题
+                Content = msg, //内容
+                Summary = msg,
+                CreateDate = DateTime.Now,
+            }));
         }
 
         #endregion

+ 78 - 0
AppStart/Helper/LeaderTimeoutSendMessageService.cs

@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Linq;
+using System.Data;
+using MySystem;
+using MySystem.Models;
+using Library;
+using LitJson;
+/// <summary>
+/// 盟主过期消息推送
+/// </summary>
+public class LeaderTimeoutSendMessageService
+{
+    public readonly static LeaderTimeoutSendMessageService Instance = new LeaderTimeoutSendMessageService();
+    private LeaderTimeoutSendMessageService()
+    {
+    }
+
+    public void Start()
+    {
+        Thread th = new Thread(doSomething);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    private void doSomething()
+    {
+        while (true)
+        {
+            if (DateTime.Now.Hour < 8)
+            {
+                try
+                {
+                    string check = function.ReadInstance("/LeaderTimeoutSendMessage/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                    if (string.IsNullOrEmpty(check))
+                    {
+                        function.WritePage("/LeaderTimeoutSendMessage/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                        WebCMSEntities db = new WebCMSEntities();
+                        var leaders = db.Leaders.Select(m => new { m.UserId, m.ExpiredDate }).ToList();
+                        var time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
+                        foreach (var item in leaders)
+                        {
+                            var user = db.Users.FirstOrDefault(m => m.Id == item.UserId) ?? new Users();
+                            var leaderTimeOutDate = DateTime.Parse(item.ExpiredDate.Value.ToString("yyyy-MM-dd"));
+                            var day = leaderTimeOutDate - time;
+                            if (time >= leaderTimeOutDate.AddDays(-5) && time <= leaderTimeOutDate)
+                            {
+                                RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
+                                {
+                                    UserId = item.UserId, //创客
+                                    Title = "盟主权益即将到期提醒", //标题
+                                    Content = "<div class='f16'>尊敬的" + user.RealName + "盟主您好:<br/>您的盟主权益将在" + day.Days + "天后到期,为保障您的收益持续到账,请尽快续期!</ div > ",//内容
+                                    CreateDate = DateTime.Now,
+                                }));
+                            }
+                            if (time > leaderTimeOutDate && time <= leaderTimeOutDate.AddMonths(1))
+                            {
+                                RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
+                                {
+                                    UserId = item.UserId, //创客
+                                    Title = "盟主权益到期提醒", //标题
+                                    Content = "<div class='f16'>尊敬的" + user.RealName + "盟主您好:<br/>您的盟主已经过期,重新开通后可恢复相关权益!</ div > ",//内容
+                                    CreateDate = DateTime.Now,
+                                }));
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "盟主过期消息推送线程异常");
+                }
+            }
+            Thread.Sleep(1000);
+        }
+    }
+}

+ 2 - 1
AppStart/Helper/SycnSpServer/SycnSpTradeService.cs

@@ -29,6 +29,7 @@ namespace MySystem
                 {
                     WebCMSEntities spdb = new WebCMSEntities();
                     PxcModels.WebCMSEntities db = new PxcModels.WebCMSEntities();
+                    DateTime now = DateTime.Now;
                     DateTime start = DateTime.Now.AddDays(-10);
                     int StartId = int.Parse(function.CheckInt(function.ReadInstance("/SycnSp/TradeRecordId.txt")));
                     IQueryable<TradeRecord> trades = spdb.TradeRecord.Where(m => m.Id >= StartId && m.CreateDate >= start && m.Status == 1).OrderBy(m => m.CreateDate);
@@ -355,7 +356,7 @@ namespace MySystem
                                                 }
                                             }
                                             //发放大盟主奖励
-                                            if(pos.LeaderUserId > 0)
+                                            if(pos.LeaderUserId > 0 && db.Leaders.Any(m => m.Id == pos.LeaderUserId && m.ExpiredDate > now))
                                             {
                                                 RedisDbconn.Instance.AddList("LeaderPrizeQueue", pos.Id);
                                             }

+ 2 - 0
Models/Leaders.cs

@@ -16,5 +16,7 @@ namespace MySystem.Models
         public string SeoDescription { get; set; }
         public int LeaderLevel { get; set; }
         public int UserId { get; set; }
+        public DateTime? ExpiredDate { get; set; }
+        public DateTime? LastBuyDate { get; set; }
     }
 }

+ 1 - 0
Models/PosCoupons.cs

@@ -24,5 +24,6 @@ namespace MySystem.Models
         public int HelpProfitStatus { get; set; }
         public ulong HelpProfitFlag { get; set; }
         public int OpId { get; set; }
+        public int OrderId { get; set; }
     }
 }

+ 1 - 0
Models/ProductNorm.cs

@@ -30,5 +30,6 @@ namespace MySystem.Models
         public decimal Price { get; set; }
         public string IdList { get; set; }
         public string ColName { get; set; }
+        public int StartBuyCount { get; set; }
     }
 }

+ 5 - 0
Models/Products.cs

@@ -54,5 +54,10 @@ namespace MySystem.Models
         public string Contents { get; set; }
         public string Details { get; set; }
         public string ProductName { get; set; }
+        public int ProductKind { get; set; }
+        public int BannerSort { get; set; }
+        public string BannerPhoto { get; set; }
+        public ulong IsBanner { get; set; }
+        public int StartBuyCount { get; set; }
     }
 }

+ 26 - 0
Models/WebCMSEntities.cs

@@ -4152,6 +4152,10 @@ namespace MySystem.Models
 
                 entity.Property(e => e.CreateDate).HasColumnType("datetime");
 
+                entity.Property(e => e.ExpiredDate).HasColumnType("datetime");
+
+                entity.Property(e => e.LastBuyDate).HasColumnType("datetime");
+
                 entity.Property(e => e.LeaderLevel).HasColumnType("int(11)");
 
                 entity.Property(e => e.QueryCount).HasColumnType("int(11)");
@@ -8447,6 +8451,8 @@ namespace MySystem.Models
 
                 entity.Property(e => e.OpId).HasColumnType("int(11)");
 
+                entity.Property(e => e.OrderId).HasColumnType("int(11)");
+
                 entity.Property(e => e.QueryCount).HasColumnType("int(11)");
 
                 entity.Property(e => e.SeoDescription)
@@ -9589,6 +9595,8 @@ namespace MySystem.Models
 
                 entity.Property(e => e.Sort).HasColumnType("int(11)");
 
+                entity.Property(e => e.StartBuyCount).HasColumnType("int(11)");
+
                 entity.Property(e => e.Status).HasColumnType("int(11)");
 
                 entity.Property(e => e.Stock).HasColumnType("int(11)");
@@ -9718,6 +9726,13 @@ namespace MySystem.Models
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
+                entity.Property(e => e.BannerPhoto)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.BannerSort).HasColumnType("int(11)");
+
                 entity.Property(e => e.BuyCount).HasColumnType("int(11)");
 
                 entity.Property(e => e.ColId)
@@ -9759,6 +9774,10 @@ namespace MySystem.Models
 
                 entity.Property(e => e.Integral).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.IsBanner)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
                 entity.Property(e => e.IsLimit)
                     .HasColumnType("bit(1)")
                     .HasDefaultValueSql("b'0'");
@@ -9822,6 +9841,8 @@ namespace MySystem.Models
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.ProductKind).HasColumnType("int(11)");
+
                 entity.Property(e => e.ProductName)
                     .HasColumnType("varchar(100)")
                     .HasCharSet("utf8")
@@ -9855,6 +9876,8 @@ namespace MySystem.Models
 
                 entity.Property(e => e.SourcePrice).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.StartBuyCount).HasColumnType("int(11)");
+
                 entity.Property(e => e.StartDate).HasColumnType("datetime");
 
                 entity.Property(e => e.Status).HasColumnType("int(11)");
@@ -17039,6 +17062,9 @@ namespace MySystem.Models
 
             modelBuilder.Entity<UserSnDelayChange>(entity =>
             {
+                entity.HasIndex(e => e.QueryCount)
+                    .HasName("UserSnDelayChangeIndex");
+
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
                 entity.Property(e => e.ActivityRuleId).HasColumnType("int(11)");

+ 2 - 0
PxcModels/Leaders.cs

@@ -16,5 +16,7 @@ namespace MySystem.PxcModels
         public string SeoDescription { get; set; }
         public int LeaderLevel { get; set; }
         public int UserId { get; set; }
+        public DateTime? ExpiredDate { get; set; }
+        public DateTime? LastBuyDate { get; set; }
     }
 }

+ 1 - 0
PxcModels/PosCoupons.cs

@@ -24,5 +24,6 @@ namespace MySystem.PxcModels
         public int HelpProfitStatus { get; set; }
         public ulong HelpProfitFlag { get; set; }
         public int OpId { get; set; }
+        public int OrderId { get; set; }
     }
 }

+ 1 - 0
PxcModels/ProductNorm.cs

@@ -30,5 +30,6 @@ namespace MySystem.PxcModels
         public decimal Price { get; set; }
         public string IdList { get; set; }
         public string ColName { get; set; }
+        public int StartBuyCount { get; set; }
     }
 }

+ 5 - 0
PxcModels/Products.cs

@@ -54,5 +54,10 @@ namespace MySystem.PxcModels
         public string Contents { get; set; }
         public string Details { get; set; }
         public string ProductName { get; set; }
+        public int ProductKind { get; set; }
+        public int BannerSort { get; set; }
+        public string BannerPhoto { get; set; }
+        public ulong IsBanner { get; set; }
+        public int StartBuyCount { get; set; }
     }
 }

+ 26 - 0
PxcModels/WebCMSEntities.cs

@@ -4152,6 +4152,10 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.CreateDate).HasColumnType("datetime");
 
+                entity.Property(e => e.ExpiredDate).HasColumnType("datetime");
+
+                entity.Property(e => e.LastBuyDate).HasColumnType("datetime");
+
                 entity.Property(e => e.LeaderLevel).HasColumnType("int(11)");
 
                 entity.Property(e => e.QueryCount).HasColumnType("int(11)");
@@ -8447,6 +8451,8 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.OpId).HasColumnType("int(11)");
 
+                entity.Property(e => e.OrderId).HasColumnType("int(11)");
+
                 entity.Property(e => e.QueryCount).HasColumnType("int(11)");
 
                 entity.Property(e => e.SeoDescription)
@@ -9589,6 +9595,8 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.Sort).HasColumnType("int(11)");
 
+                entity.Property(e => e.StartBuyCount).HasColumnType("int(11)");
+
                 entity.Property(e => e.Status).HasColumnType("int(11)");
 
                 entity.Property(e => e.Stock).HasColumnType("int(11)");
@@ -9718,6 +9726,13 @@ namespace MySystem.PxcModels
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
+                entity.Property(e => e.BannerPhoto)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.BannerSort).HasColumnType("int(11)");
+
                 entity.Property(e => e.BuyCount).HasColumnType("int(11)");
 
                 entity.Property(e => e.ColId)
@@ -9759,6 +9774,10 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.Integral).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.IsBanner)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
                 entity.Property(e => e.IsLimit)
                     .HasColumnType("bit(1)")
                     .HasDefaultValueSql("b'0'");
@@ -9822,6 +9841,8 @@ namespace MySystem.PxcModels
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.ProductKind).HasColumnType("int(11)");
+
                 entity.Property(e => e.ProductName)
                     .HasColumnType("varchar(100)")
                     .HasCharSet("utf8")
@@ -9855,6 +9876,8 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.SourcePrice).HasColumnType("decimal(18,2)");
 
+                entity.Property(e => e.StartBuyCount).HasColumnType("int(11)");
+
                 entity.Property(e => e.StartDate).HasColumnType("datetime");
 
                 entity.Property(e => e.Status).HasColumnType("int(11)");
@@ -17039,6 +17062,9 @@ namespace MySystem.PxcModels
 
             modelBuilder.Entity<UserSnDelayChange>(entity =>
             {
+                entity.HasIndex(e => e.QueryCount)
+                    .HasName("UserSnDelayChangeIndex");
+
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
                 entity.Property(e => e.ActivityRuleId).HasColumnType("int(11)");

+ 2 - 1
Startup.cs

@@ -228,7 +228,8 @@ namespace MySystem
             PreStoreApplyHelper.Instance.StartEverTime(); //小分仓临时额度变更
 
             DepositReturnStatService.Instance.Start(); //每月1号统计达标商户(退押需要的)
-            AutoOpOrderService.Instance.StartOrderCancel(); //自动取消超时订单(20分钟)
+            AutoOpOrderService.Instance.StartOrderCancel(); //自动取消超时订单(15分钟)
+            LeaderTimeoutSendMessageService.Instance.Start(); //盟主过期消息提醒
 
             // StatService.Instance.StartPosActNum(); //实时统计激活数
             // StatService.Instance.StartNewUserNum(); //实时统计新增创客数