Browse Source

推送机具数据给java新版系统

lcl 6 months ago
parent
commit
2dea59a98c
4 changed files with 380 additions and 96 deletions
  1. 14 0
      Models/Push/PushPosRecord.cs
  2. 39 96
      Models/Push/WebCMSEntities.cs
  3. 164 0
      Util/Queue/PosPushHelper.cs
  4. 163 0
      Util/Queue/PosRePushHelper.cs

+ 14 - 0
Models/Push/PushPosRecord.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models.Push
+{
+    public partial class PushPosRecord
+    {
+        public int Id { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public string Content { get; set; }
+        public string DataType { get; set; }
+        public string EncryptContent { get; set; }
+    }
+}

+ 39 - 96
Models/Push/WebCMSEntities.cs

@@ -18,12 +18,12 @@ namespace MySystem.Models.Push
         public virtual DbSet<Merchant> Merchant { get; set; }
         public virtual DbSet<PushObj> PushObj { get; set; }
         public virtual DbSet<PushObjCondition> PushObjCondition { get; set; }
+        public virtual DbSet<PushPosRecord> PushPosRecord { get; set; }
         public virtual DbSet<PushRecord> PushRecord { get; set; }
         public virtual DbSet<RePushQueue> RePushQueue { get; set; }
         public virtual DbSet<SourceCondition> SourceCondition { get; set; }
         public virtual DbSet<SourceData> SourceData { get; set; }
         public virtual DbSet<SourceDataSubTable> SourceDataSubTable { get; set; }
-        public virtual DbSet<UPosMerchantInfo> UPosMerchantInfo { get; set; }
 
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
@@ -128,7 +128,7 @@ namespace MySystem.Models.Push
 
                 entity.Property(e => e.FieldList)
                     .HasColumnName("field_list")
-                    .HasColumnType("varchar(500)")
+                    .HasColumnType("mediumtext")
                     .HasComment("数据字段")
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
@@ -268,6 +268,43 @@ namespace MySystem.Models.Push
                     .HasComment("版本号");
             });
 
+            modelBuilder.Entity<PushPosRecord>(entity =>
+            {
+                entity.ToTable("push_pos_record");
+
+                entity.HasComment("推送项目");
+
+                entity.Property(e => e.Id)
+                    .HasColumnName("id")
+                    .HasColumnType("int(11)");
+
+                entity.Property(e => e.Content)
+                    .HasColumnName("content")
+                    .HasColumnType("mediumtext")
+                    .HasComment("数据内容")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.CreateDate)
+                    .HasColumnName("create_date")
+                    .HasColumnType("datetime")
+                    .HasComment("创建时间");
+
+                entity.Property(e => e.DataType)
+                    .HasColumnName("data_type")
+                    .HasColumnType("varchar(20)")
+                    .HasComment("数据类型")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.EncryptContent)
+                    .HasColumnName("encrypt_content")
+                    .HasColumnType("mediumtext")
+                    .HasComment("数据内容")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+            });
+
             modelBuilder.Entity<PushRecord>(entity =>
             {
                 entity.ToTable("push_record");
@@ -599,100 +636,6 @@ namespace MySystem.Models.Push
                     .HasComment("版本号");
             });
 
-            modelBuilder.Entity<UPosMerchantInfo>(entity =>
-            {
-                entity.ToTable("u_PosMerchantInfo");
-
-                entity.HasComment("商户绑定信息");
-
-                entity.Property(e => e.Id)
-                    .HasColumnName("id")
-                    .HasColumnType("varchar(30)")
-                    .HasDefaultValueSql("'0'")
-                    .HasComment("ID")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.AgentId)
-                    .HasColumnName("agent_id")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("代理商编号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.BindTime)
-                    .HasColumnName("bind_time")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("绑定时间")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.DeviceModel)
-                    .HasColumnName("device_model")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("设备类型")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.MerchNo)
-                    .HasColumnName("merch_no")
-                    .HasColumnType("varchar(50)")
-                    .HasComment("商户号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.Name)
-                    .HasColumnName("name")
-                    .HasColumnType("varchar(50)")
-                    .HasComment("商户名称")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.Phone)
-                    .HasColumnName("phone")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("手机号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.PosSn)
-                    .HasColumnName("pos_sn")
-                    .HasColumnType("varchar(50)")
-                    .HasComment("机具号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.Status)
-                    .IsRequired()
-                    .HasColumnName("status")
-                    .HasColumnType("varchar(1)")
-                    .HasDefaultValueSql("'0'")
-                    .HasComment("状态")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.SupplementInfo)
-                    .HasColumnName("supplement_info")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("身份证号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.TermTo)
-                    .HasColumnName("term_to")
-                    .HasColumnType("varchar(50)")
-                    .HasComment("终端号")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-
-                entity.Property(e => e.UserId)
-                    .HasColumnName("user_id")
-                    .HasColumnType("varchar(30)")
-                    .HasComment("创客所属人")
-                    .HasCharSet("utf8")
-                    .HasCollation("utf8_general_ci");
-            });
-
             OnModelCreatingPartial(modelBuilder);
         }
 

+ 164 - 0
Util/Queue/PosPushHelper.cs

@@ -0,0 +1,164 @@
+using System;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem.Models.Push;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Net;
+
+namespace MySystem
+{
+    public class PosPushHelper
+    {
+        public readonly static PosPushHelper Instance = new PosPushHelper();
+        private PosPushHelper()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(threadStart);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        private void threadStart()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("KxsPosDataQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        DoSomeThing(content);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + content + "\n" + ex, "推送机具数据异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(5000);
+                }
+            }
+        }
+
+        //要执行的方法
+        public void DoSomeThing(string content)
+        {
+            string url = "";
+            JsonData jsonObj = JsonMapper.ToObject(content);
+            string dataType = jsonObj["data_type"].ToString();
+            if(dataType == "bind") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/binding";
+            if(dataType == "un_bind") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/unbind";
+            if(dataType == "trade") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/trade";
+            if(dataType == "deposit") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/cash";
+            string encryptContent = AesEncrypt(content);
+            string res = PostWebRequest(url, encryptContent, new Dictionary<string, string>());
+            if(!res.Contains("\"status\""))
+            {
+                SaveToDb(content, encryptContent, dataType);
+                return;
+            }
+            JsonData backObj = JsonMapper.ToObject(res);
+            if(backObj["status"].ToString() != "1")
+            {
+                SaveToDb(content, encryptContent, dataType);
+                return;
+            }
+        }
+
+        public void SaveToDb(string content, string encryptContent, string dataType)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            db.PushPosRecord.Add(new PushPosRecord()
+            {
+                CreateDate = DateTime.Now,
+                Content = content,
+                DataType = dataType,
+                EncryptContent = encryptContent,
+            });
+            db.SaveChanges();
+            db.Dispose();
+        }
+
+        public string AesEncrypt(string str)
+        {
+            if (string.IsNullOrEmpty(str)) return null;
+            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
+            string key = "CBTU1dD4Kd5pyiGWTsI10jRQ3SvKusSV";
+            string iv = "DYgjCEIMVrj2W9xN";
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                IV = Encoding.UTF8.GetBytes(iv),
+                Mode = System.Security.Cryptography.CipherMode.CBC,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7
+            };
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
+            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
+        }
+
+        public string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
+        {
+            string ret = string.Empty;
+            try
+            {
+                byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
+                // 设置提交的相关参数 
+                HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
+                System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
+                request.Method = "POST";
+                request.KeepAlive = false;
+                request.AllowAutoRedirect = true;
+                request.ContentType = "application/json";
+                foreach (string key in headers.Keys)
+                {
+                    request.Headers.Add(key, headers[key]);
+                }
+                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+                request.ContentLength = postData.Length;
+
+                // 提交请求数据 
+                Stream outputStream = request.GetRequestStream();
+                outputStream.Write(postData, 0, postData.Length);
+                outputStream.Close();
+                HttpWebResponse response;
+                Stream responseStream;
+                StreamReader reader;
+                string srcString;
+                response = request.GetResponse() as HttpWebResponse;
+                responseStream = response.GetResponseStream();
+                reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
+                srcString = reader.ReadToEnd();
+                ret = srcString;   //返回值赋值
+                reader.Close();
+            }
+            catch (WebException ex)
+            {
+                HttpWebResponse response = (HttpWebResponse)ex.Response;
+                Stream myResponseStream = response.GetResponseStream();
+                //获取响应内容
+                StreamReader myStreamReader = new StreamReader(myResponseStream);
+                ret = myStreamReader.ReadToEnd();
+                myResponseStream.Close();
+            }
+            catch (Exception ex)
+            {
+                ret = "fail";
+                function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "POST请求异常");
+            }
+            return ret;
+        }
+        
+    }
+}

+ 163 - 0
Util/Queue/PosRePushHelper.cs

@@ -0,0 +1,163 @@
+using System;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem.Models.Push;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Net;
+
+namespace MySystem
+{
+    public class PosRePushHelper
+    {
+        public readonly static PosRePushHelper Instance = new PosRePushHelper();
+        private PosRePushHelper()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(threadStart);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        private void threadStart()
+        {
+            while (true)
+            {
+                try
+                {
+                    DoSomeThing();
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "重推机具数据异常");
+                }
+                Thread.Sleep(5000);
+            }
+        }
+
+        //要执行的方法
+        public void DoSomeThing()
+        {
+            string url = "";
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime check = DateTime.Now.AddMinutes(-30);
+            List<PushPosRecord> list = db.PushPosRecord.Where(m => m.CreateDate >= check).OrderBy(m => m.Id).ToList();
+            foreach(PushPosRecord sub in list)
+            {
+                string dataType = sub.DataType;
+                if(dataType == "bind") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/binding";
+                if(dataType == "un_bind") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/unbind";
+                if(dataType == "trade") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/trade";
+                if(dataType == "deposit") url = "http://gateway.kexiaoshuang.com/v1/kxs/statServer/sp/cash";
+                string res = PostWebRequest(url, sub.EncryptContent, new Dictionary<string, string>());
+                if(res.Contains("\"status\""))
+                {
+                    JsonData backObj = JsonMapper.ToObject(res);
+                    if(backObj["status"].ToString() == "1")
+                    {
+                        PushPosRecord edit = db.PushPosRecord.FirstOrDefault(m => m.Id == sub.Id);
+                        if(edit != null)
+                        {
+                            db.PushPosRecord.Remove(edit);
+                        }
+                    }
+                }
+            }
+            db.Dispose();
+        }
+
+        public void SaveToDb(string content, string encryptContent, string dataType)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            db.PushPosRecord.Add(new PushPosRecord()
+            {
+                CreateDate = DateTime.Now,
+                Content = content,
+                DataType = dataType,
+                EncryptContent = encryptContent,
+            });
+            db.SaveChanges();
+            db.Dispose();
+        }
+
+        public string AesEncrypt(string str)
+        {
+            if (string.IsNullOrEmpty(str)) return null;
+            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
+            string key = "CBTU1dD4Kd5pyiGWTsI10jRQ3SvKusSV";
+            string iv = "DYgjCEIMVrj2W9xN";
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                IV = Encoding.UTF8.GetBytes(iv),
+                Mode = System.Security.Cryptography.CipherMode.CBC,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7
+            };
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
+            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
+        }
+
+        public string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
+        {
+            string ret = string.Empty;
+            try
+            {
+                byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
+                // 设置提交的相关参数 
+                HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
+                System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
+                request.Method = "POST";
+                request.KeepAlive = false;
+                request.AllowAutoRedirect = true;
+                request.ContentType = "application/json";
+                foreach (string key in headers.Keys)
+                {
+                    request.Headers.Add(key, headers[key]);
+                }
+                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+                request.ContentLength = postData.Length;
+
+                // 提交请求数据 
+                Stream outputStream = request.GetRequestStream();
+                outputStream.Write(postData, 0, postData.Length);
+                outputStream.Close();
+                HttpWebResponse response;
+                Stream responseStream;
+                StreamReader reader;
+                string srcString;
+                response = request.GetResponse() as HttpWebResponse;
+                responseStream = response.GetResponseStream();
+                reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
+                srcString = reader.ReadToEnd();
+                ret = srcString;   //返回值赋值
+                reader.Close();
+            }
+            catch (WebException ex)
+            {
+                HttpWebResponse response = (HttpWebResponse)ex.Response;
+                Stream myResponseStream = response.GetResponseStream();
+                //获取响应内容
+                StreamReader myStreamReader = new StreamReader(myResponseStream);
+                ret = myStreamReader.ReadToEnd();
+                myResponseStream.Close();
+            }
+            catch (Exception ex)
+            {
+                ret = "fail";
+                function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "POST请求异常");
+            }
+            return ret;
+        }
+        
+    }
+}