浏览代码

添加重推队列

lichunlei 1 年之前
父节点
当前提交
1a2f78e683
共有 5 个文件被更改,包括 132 次插入3 次删除
  1. 2 1
      AppStart/StartHelper.cs
  2. 1 0
      Models/Push/RePushQueue.cs
  3. 4 0
      Models/Push/WebCMSEntities.cs
  4. 18 2
      Util/Queue/PushHelper.cs
  5. 107 0
      Util/Queue/RePushHelper.cs

+ 2 - 1
AppStart/StartHelper.cs

@@ -12,8 +12,9 @@
             int Environment = Library.ConfigurationManager.EnvironmentFlag; //运行环境(1-开发环境,2-生产环境)
             if(Environment == 2)
             {
-                // SourceHelper.Instance.Start(); //获取原始数据队列
+                SourceHelper.Instance.Start(); //获取原始数据队列
                 PushHelper.Instance.Start(); //推送队列
+                RePushHelper.Instance.Start(); //重新推送队列
 
                 // DefaultHelper.Instance.Start(); //队列程序
                 // ......其他队列程序

+ 1 - 0
Models/Push/RePushQueue.cs

@@ -18,5 +18,6 @@ namespace MySystem.Models.Push
         public string PushDataEncrypt { get; set; }
         public int PushObjId { get; set; }
         public int MerchantId { get; set; }
+        public int PushRecordId { get; set; }
     }
 }

+ 4 - 0
Models/Push/WebCMSEntities.cs

@@ -367,6 +367,10 @@ namespace MySystem.Models.Push
                     .HasColumnType("int(11)")
                     .HasComment("推送项目");
 
+                entity.Property(e => e.PushRecordId)
+                    .HasColumnType("int(11)")
+                    .HasComment("推送记录");
+
                 entity.Property(e => e.RePushDate)
                     .HasColumnName("re_push_date")
                     .HasColumnType("datetime")

+ 18 - 2
Util/Queue/PushHelper.cs

@@ -159,7 +159,7 @@ namespace MySystem
                                 Status = 1;
                             }
                         }
-                        db.PushRecord.Add(new PushRecord()
+                        PushRecord rec = db.PushRecord.Add(new PushRecord()
                         {
                             CreateDate = DateTime.Now,
                             UpdateDate = DateTime.Now,
@@ -168,7 +168,23 @@ namespace MySystem
                             PushDataEncrypt = PushDataEncrypt,
                             PushObjId = pushItem.Id,
                             MerchantId = merchant.Id
-                        });
+                        }).Entity;
+                        db.SaveChanges();
+                        if(Status != 1)
+                        {
+                            db.RePushQueue.Add(new RePushQueue()
+                            {
+                                CreateDate = DateTime.Now,
+                                RePushUrl = NoticeUrl,
+                                RePushDate = RePushHelper.Instance.GetNextTime(1),
+                                Times = 1,
+                                PushData = PushData,
+                                PushDataEncrypt = PushDataEncrypt,
+                                PushObjId = pushItem.Id,
+                                MerchantId = merchant.Id,
+                                PushRecordId = rec.Id,
+                            });
+                        }
                         db.SaveChanges();
                         StartId = int.Parse(dr["id"].ToString());
                     }

+ 107 - 0
Util/Queue/RePushHelper.cs

@@ -0,0 +1,107 @@
+using System;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem.Models.Push;
+using System.Collections.Generic;
+
+namespace MySystem
+{   
+    public class RePushHelper
+    {
+        public readonly static RePushHelper Instance = new RePushHelper();
+        private RePushHelper()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(threadStart);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        private void threadStart()
+        {
+            while (true)
+            {
+                DoSomeThing();
+                Thread.Sleep(5000);
+            }
+        }
+
+        //要执行的方法
+        public void DoSomeThing()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            //查找开通推送的商户
+            DateTime now = DateTime.Now;
+            var pushs = db.RePushQueue.Select(m => new { m.Id, m.Times, m.RePushUrl, m.PushDataEncrypt, m.RePushDate }).Where(m => m.Times <= 15 && m.RePushDate <= now).ToList();
+            foreach(var push in pushs)
+            {
+                string NoticeUrl = push.RePushUrl;
+                string PushDataEncrypt = push.PushDataEncrypt;
+                int Status = 0;
+                string result = function.PostWebRequest(NoticeUrl, PushDataEncrypt, "application/json");
+                if(result.Contains("\"code\":\"200\""))
+                {
+                    Status = 1;
+                }
+                RePushQueue edit = db.RePushQueue.FirstOrDefault(m => m.Id == push.Id);
+                if(edit != null)
+                {
+                    if(Status == 1)
+                    {
+                        PushRecord record = db.PushRecord.FirstOrDefault(m => m.Id == edit.PushRecordId);
+                        if(record != null)
+                        {
+                            record.Status = 1;
+                        }
+                        db.RePushQueue.Remove(edit);
+                    }
+                    else
+                    {
+                        if(edit.Times >= 15)
+                        {
+                            PushRecord record = db.PushRecord.FirstOrDefault(m => m.Id == edit.PushRecordId);
+                            if(record != null)
+                            {
+                                record.Status = -1;
+                            }
+                        }
+                        else
+                        {
+                            edit.Times += 1;
+                            edit.RePushDate = GetNextTime(edit.Times);
+                        }
+                    }
+                    db.SaveChanges();
+                }
+            }
+            db.Dispose();
+        }
+
+        public DateTime GetNextTime(int num)
+        {
+            if(num == 1) return DateTime.Now.AddSeconds(15);
+            if(num == 2) return DateTime.Now.AddSeconds(15);
+            if(num == 3) return DateTime.Now.AddSeconds(30);
+            if(num == 4) return DateTime.Now.AddMinutes(3);
+            if(num == 5) return DateTime.Now.AddMinutes(10);
+            if(num == 6) return DateTime.Now.AddMinutes(20);
+            if(num == 7) return DateTime.Now.AddMinutes(30);
+            if(num == 8) return DateTime.Now.AddMinutes(30);
+            if(num == 9) return DateTime.Now.AddMinutes(30);
+            if(num == 10) return DateTime.Now.AddMinutes(60);
+            if(num == 11) return DateTime.Now.AddHours(3);
+            if(num == 12) return DateTime.Now.AddHours(3);
+            if(num == 13) return DateTime.Now.AddHours(3);
+            if(num == 14) return DateTime.Now.AddHours(6);
+            if(num == 15) return DateTime.Now.AddHours(6);
+            return DateTime.Now;
+        } 
+        
+    }
+}