Browse Source

完成逻辑

lichunlei 2 years ago
parent
commit
da97e26c10

+ 14 - 0
AppStart/Helper/AlipayPayBack2Service.cs

@@ -332,6 +332,13 @@ namespace MySystem
                         }
                         function.WriteLog("\r\n\r\n", "推荐下单奖励监控日志");
                     }
+
+
+                    //推荐王
+                    if(pro.ProductId == 0)
+                    {
+                        RecommendMethod(order.UserId, order.CreateDate.Value.ToString("yyyyMM"));
+                    }
                 }
                 else
                 {
@@ -480,6 +487,13 @@ namespace MySystem
             db.SaveChanges();
         }
 
+        // 推荐王逻辑(下单)
+        public void RecommendMethod(int UserId, string TradeMonth)
+        {
+            string SendData = "{\"Kind\":\"1\",\"Data\":{\"UserId\":\"" + UserId + "\",\"TradeMonth\":\"" + TradeMonth + "\"}}";
+            RedisDbconn.Instance.AddList("RecommendActStatQueue", SendData);
+        }
+
         #endregion
 
         #region 老订单流程

+ 157 - 0
AppStart/Helper/RecommendActStatService.cs

@@ -0,0 +1,157 @@
+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 RecommendActStatService
+    {
+        public readonly static RecommendActStatService Instance = new RecommendActStatService();
+        private RecommendActStatService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(dosomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        // 统计数据条件
+        // 1.下单成功统计当前直推并未开机的创客表数据
+        // 2.推荐创客认证成功,统计直推创客表数据
+        // 3.机具激活,统计激活机具交易表
+        // 4.交易,统计激活机具交易表
+        public void dosomething()
+        {
+            while (true)
+            {
+                string data = RedisDbconn.Instance.RPop<string>("RecommendActStatQueue");
+                if (!string.IsNullOrEmpty(data))
+                {
+                    try
+                    {
+                        JsonData jsonObj = JsonMapper.ToObject(data);
+                        string Kind = jsonObj["Kind"].ToString(); //数据类型:1-购买推荐王订单,2-用户认证,3-机具激活,4-机具交易
+                        JsonData jsonData = jsonObj["Data"];
+                        WebCMSEntities db = new WebCMSEntities();
+                        if(Kind == "1")
+                        {
+                            int UserId = int.Parse(jsonData["UserId"].ToString());
+                            string TradeMonth = jsonData["TradeMonth"].ToString();
+                            DateTime StartTime = DateTime.Parse(TradeMonth.Substring(0, 4) + "-" + TradeMonth.Substring(4, 2) + "-01 00:00:00");
+                            DateTime EndTime = StartTime.AddMonths(1);
+                            List<Users> users = db.Users.Where(m => m.ParentUserId == UserId && m.AuthFlag == 1).ToList();
+                            foreach(Users user in users)
+                            {
+                                bool check = db.RecommendDirectUser.Any(m => m.UserId == UserId && m.DirectUserId == user.Id && m.TradeMonth == TradeMonth);
+                                if(!check)
+                                {
+                                    db.RecommendDirectUser.Add(new RecommendDirectUser()
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        UserId = UserId,
+                                        DirectUserId = user.Id,
+                                        TradeMonth = TradeMonth,
+                                    });
+                                    db.SaveChanges();
+                                }
+                                var poslist = db.PosMachinesTwo.Select(m => new { m.BuyUserId, m.BindMerchantId, m.PosSn, m.ActivationState, m.ActivationTime }).Where(m => m.BuyUserId == user.Id && m.ActivationState == 1 && m.ActivationTime >= StartTime && m.ActivationTime < EndTime).ToList();
+                                foreach(var pos in poslist)
+                                {
+                                    bool chk = db.RecommendTradeSummary.Any(m => m.UserId == user.Id && m.TradeMonth == TradeMonth && m.PosSn == pos.PosSn);
+                                    if(!chk)
+                                    {
+                                        PosMerchantTradeSummay tradeSummay = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.TradeMonth == TradeMonth) ?? new PosMerchantTradeSummay();
+                                        db.RecommendTradeSummary.Add(new RecommendTradeSummary()
+                                        {
+                                            CreateDate = DateTime.Now,
+                                            UserId = user.Id,
+                                            TradeMonth = TradeMonth,
+                                            PosSn = pos.PosSn,
+                                            TradeAmount = tradeSummay.TradeAmount,
+                                        });
+                                        db.SaveChanges();
+                                    }
+                                }
+                            }
+                        }
+                        else if(Kind == "2")
+                        {
+                            int UserId = int.Parse(jsonData["UserId"].ToString());
+                            int DirectUserId = int.Parse(jsonData["DirectUserId"].ToString());
+                            string TradeMonth = jsonData["TradeMonth"].ToString();
+                            bool check = db.RecommendDirectUser.Any(m => m.UserId == UserId && m.DirectUserId == DirectUserId && m.TradeMonth == TradeMonth);
+                            if(!check)
+                            {
+                                db.RecommendDirectUser.Add(new RecommendDirectUser()
+                                {
+                                    CreateDate = DateTime.Now,
+                                    UserId = UserId,
+                                    DirectUserId = DirectUserId,
+                                    TradeMonth = TradeMonth,
+                                });
+                                db.SaveChanges();
+                            }
+                        }
+                        else if(Kind == "3")
+                        {
+                            int UserId = int.Parse(jsonData["UserId"].ToString());
+                            int PosId = int.Parse(jsonData["PosId"].ToString());
+                            string TradeMonth = jsonData["TradeMonth"].ToString();
+                            PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId);
+                            if(pos != null)
+                            {
+                                bool chk = db.RecommendTradeSummary.Any(m => m.UserId == UserId && m.TradeMonth == TradeMonth && m.PosSn == pos.PosSn);
+                                if(!chk)
+                                {
+                                    PosMerchantTradeSummay tradeSummay = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.TradeMonth == TradeMonth) ?? new PosMerchantTradeSummay();
+                                    db.RecommendTradeSummary.Add(new RecommendTradeSummary()
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        UserId = UserId,
+                                        TradeMonth = TradeMonth,
+                                        PosSn = pos.PosSn,
+                                        TradeAmount = tradeSummay.TradeAmount,
+                                    });
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                        else if(Kind == "4")
+                        {
+                            int PosId = int.Parse(jsonData["PosId"].ToString());
+                            string TradeMonth = jsonData["TradeMonth"].ToString();
+                            decimal TradeAmount = decimal.Parse(jsonData["TradeAmount"].ToString());
+                            PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == PosId);
+                            if(pos != null)
+                            {
+                                PosMerchantTradeSummay tradeSummay = db.PosMerchantTradeSummay.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.TradeMonth == TradeMonth);
+                                if(tradeSummay != null)
+                                {
+                                    tradeSummay.TradeAmount = TradeAmount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                        db.Dispose();
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "推荐王数据统计异常");
+                    }
+                    Thread.Sleep(100);
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+    }
+}

+ 11 - 0
AppStart/Helper/SycnSpServer/SycnSpTradeService.cs

@@ -264,6 +264,10 @@ namespace MySystem
                                                 merchant.MerStandardDate = DateTime.Now;
                                                 db.SaveChanges();
                                                 RedisDbconn.Instance.Set("PosMerchantInfo:" + merchant.Id, merchant);
+
+                                                // 推荐王逻辑(激活)
+                                                string SendData = "{\"Kind\":\"3\",\"Data\":{\"UserId\":\"" + pos.BuyUserId + "\",\"PosId\":\"" + pos.Id + "\",\"TradeMonth\":\"" + DateTime.Now.ToString("yyyyMM") + "\"}}";
+                                                RedisDbconn.Instance.AddList("RecommendActStatQueue", SendData);
                                             }
                                             //发放大盟主奖励
                                             if(pos.LeaderUserId > 0)
@@ -301,6 +305,13 @@ namespace MySystem
                                             OrderNo = trade.TradeSerialNo
                                         });
                                         db.SaveChanges();
+
+                                        // 推荐王逻辑(交易)
+                                        if(TradeAmount > 0)
+                                        {
+                                            string Send = "{\"Kind\":\"4\",\"Data\":{\"PosId\":\"" + pos.Id + "\",\"TradeMonth\":\"" + trade.CreateDate.Value.ToString("yyyyMM") + "\",\"TradeAmount\":\"" + TradeAmount + "\"}}";
+                                            RedisDbconn.Instance.AddList("RecommendActStatQueue", Send);
+                                        }
                                     }
                                     TradeRecord edit = spdb.TradeRecord.FirstOrDefault(m => m.Id == trade.Id);
                                     if (edit != null)

+ 21 - 0
Models/RecommendDirectUser.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class RecommendDirectUser
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string TradeMonth { get; set; }
+        public int DirectUserId { get; set; }
+        public int UserId { get; set; }
+    }
+}

+ 22 - 0
Models/RecommendTradeSummary.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class RecommendTradeSummary
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public decimal TradeAmount { get; set; }
+        public string TradeMonth { get; set; }
+        public string PosSn { get; set; }
+        public int UserId { get; set; }
+    }
+}

+ 85 - 0
Models/WebCMSEntities.cs

@@ -139,6 +139,8 @@ namespace MySystem.Models
         public virtual DbSet<PullNewAct> PullNewAct { get; set; }
         public virtual DbSet<PullNewDetail> PullNewDetail { get; set; }
         public virtual DbSet<PullnewSummary> PullnewSummary { get; set; }
+        public virtual DbSet<RecommendDirectUser> RecommendDirectUser { get; set; }
+        public virtual DbSet<RecommendTradeSummary> RecommendTradeSummary { get; set; }
         public virtual DbSet<RightDic> RightDic { get; set; }
         public virtual DbSet<ServiceCenter> ServiceCenter { get; set; }
         public virtual DbSet<SetMerchantTypeRecord> SetMerchantTypeRecord { get; set; }
@@ -9471,6 +9473,89 @@ namespace MySystem.Models
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<RecommendDirectUser>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.DirectUserId).HasColumnType("int(11)");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TradeMonth)
+                    .HasColumnType("varchar(6)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UserId).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<RecommendTradeSummary>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.PosSn)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TradeAmount).HasColumnType("decimal(18,2)");
+
+                entity.Property(e => e.TradeMonth)
+                    .HasColumnType("varchar(6)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UserId).HasColumnType("int(11)");
+            });
+
             modelBuilder.Entity<RightDic>(entity =>
             {
                 entity.Property(e => e.Id)

+ 21 - 0
PxcModels/RecommendDirectUser.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class RecommendDirectUser
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string TradeMonth { get; set; }
+        public int DirectUserId { get; set; }
+        public int UserId { get; set; }
+    }
+}

+ 22 - 0
PxcModels/RecommendTradeSummary.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class RecommendTradeSummary
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public decimal TradeAmount { get; set; }
+        public string TradeMonth { get; set; }
+        public string PosSn { get; set; }
+        public int UserId { get; set; }
+    }
+}

+ 85 - 0
PxcModels/WebCMSEntities.cs

@@ -139,6 +139,8 @@ namespace MySystem.PxcModels
         public virtual DbSet<PullNewAct> PullNewAct { get; set; }
         public virtual DbSet<PullNewDetail> PullNewDetail { get; set; }
         public virtual DbSet<PullnewSummary> PullnewSummary { get; set; }
+        public virtual DbSet<RecommendDirectUser> RecommendDirectUser { get; set; }
+        public virtual DbSet<RecommendTradeSummary> RecommendTradeSummary { get; set; }
         public virtual DbSet<RightDic> RightDic { get; set; }
         public virtual DbSet<ServiceCenter> ServiceCenter { get; set; }
         public virtual DbSet<SetMerchantTypeRecord> SetMerchantTypeRecord { get; set; }
@@ -9471,6 +9473,89 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<RecommendDirectUser>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.DirectUserId).HasColumnType("int(11)");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TradeMonth)
+                    .HasColumnType("varchar(6)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UserId).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<RecommendTradeSummary>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.PosSn)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TradeAmount).HasColumnType("decimal(18,2)");
+
+                entity.Property(e => e.TradeMonth)
+                    .HasColumnType("varchar(6)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UserId).HasColumnType("int(11)");
+            });
+
             modelBuilder.Entity<RightDic>(entity =>
             {
                 entity.Property(e => e.Id)