소스 검색

创客统计数据验证队列启动,生成sql脚本,不执行

lcl 1 년 전
부모
커밋
d4f3740e37
2개의 변경된 파일150개의 추가작업 그리고 0개의 파일을 삭제
  1. 10 0
      AppStart/Helper/StatService.cs
  2. 140 0
      AppStart/Helper/StatTradeCheckService.cs

+ 10 - 0
AppStart/Helper/StatService.cs

@@ -46,6 +46,16 @@ namespace MySystem
                         RedisDbconn.Instance.AddList("ResetUserTrade2Queue", yesterday);
                     }
                 }
+                if(DateTime.Now.Hour == 1)
+                {
+                    string date = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+                    string check = function.ReadInstance("/StatTradeCheck2Queue/" + date + ".txt");
+                    if(string.IsNullOrEmpty(check))
+                    {
+                        function.WritePage("/StatTradeCheck2Queue/", date + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
+                        RedisDbconn.Instance.AddList("StatTradeCheck2Queue", date);
+                    }
+                }
                 if(DateTime.Now.Hour >= 3 && RedisDbconn.Instance.Get<string>("StatServerStatus") == "1")
                 {
                     StatTradeAmount();

+ 140 - 0
AppStart/Helper/StatTradeCheckService.cs

@@ -0,0 +1,140 @@
+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 StatTradeCheckService
+    {
+        public readonly static StatTradeCheckService Instance = new StatTradeCheckService();
+        private StatTradeCheckService()
+        { }
+
+
+
+
+
+
+        // 统计交易额
+        public void StartCheck()
+        {
+            Thread th = new Thread(StartCheckDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        public void StartCheckDo()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("StatTradeCheck2Queue");
+                if(!string.IsNullOrEmpty(content))
+                {
+                    StatTradeAmountCheckDo(content);
+                    StatTradeAmountCheck2Do(content);
+                    Thread.Sleep(100);
+                }
+                else
+                {
+                    Thread.Sleep(10000);
+                }
+            }
+        }
+
+
+        public void StatTradeAmountCheckDo(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
+            try
+            {
+                date = date.Replace("-", "");
+                WebCMSEntities db = new WebCMSEntities();
+                KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities();
+                List<UserAmountSummary> list = db.UserAmountSummary.Where(m => m.TradeDate == date).ToList();
+                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
+                var users = kxsdb.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
+                db.Dispose();
+                foreach(UserAmountSummary sub in list.Where(m => m.SeoTitle == "team").ToList())
+                {
+                    string puidstr = "," + sub.UserId + ",";
+                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
+                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct);
+                    if(op)
+                    {
+                        decimal TotalAmount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TotalAmount);
+                        int TradeCount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TradeCount);
+                        string setField = "";
+                        if(sub.TotalAmount != TotalAmount)
+                        {
+                            setField += "TotalAmount=" + TotalAmount + ",";
+                        }
+                        if(sub.TradeCount != TradeCount)
+                        {
+                            setField += "TradeCount=" + TradeCount + ",";
+                        }
+                        if(!string.IsNullOrEmpty(setField))
+                        {
+                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  TotalAmount:" + sub.TotalAmount + "--" + TotalAmount + ";  TradeCount:" + sub.TradeCount + "--" + TradeCount + ";", "交易不一致的创客");
+                            function.WriteLog("update UserAmountSummary set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
+            }
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
+        }
+
+        public void StatTradeAmountCheck2Do(string date)
+        {
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
+            try
+            {
+                date = date.Replace("-", "");
+                PxcModels2.WebCMSEntities db = new PxcModels2.WebCMSEntities();
+                KxsMainModels.WebCMSEntities kxsdb = new KxsMainModels.WebCMSEntities();
+                List<PxcModels2.UserAmountSummary> list = db.UserAmountSummary.Where(m => m.TradeDate == date).ToList();
+                List<int> uids = list.Select(m => m.UserId).Distinct().ToList();
+                var users = kxsdb.Users.Select(m => new { m.Id, m.ParentNav }).Where(m => uids.Contains(m.Id)).ToList();
+                db.Dispose();
+                foreach(PxcModels2.UserAmountSummary sub in list.Where(m => m.SeoTitle == "team").ToList())
+                {
+                    string puidstr = "," + sub.UserId + ",";
+                    List<int> subuids = users.Where(m => m.Id == sub.UserId || m.ParentNav.Contains(puidstr)).ToList().Select(m => m.Id).ToList();
+                    bool op = list.Any(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct);
+                    if(op)
+                    {
+                        decimal TotalAmount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TotalAmount);
+                        int TradeCount = list.Where(m => subuids.Contains(m.UserId) && m.PayMode == sub.PayMode && m.TradeDate == sub.TradeDate && m.SeoTitle == "self" && m.IsAct == sub.IsAct).Sum(m => m.TradeCount);
+                        string setField = "";
+                        if(sub.TotalAmount != TotalAmount)
+                        {
+                            setField += "TotalAmount=" + TotalAmount + ",";
+                        }
+                        if(sub.TradeCount != TradeCount)
+                        {
+                            setField += "TradeCount=" + TradeCount + ",";
+                        }
+                        if(!string.IsNullOrEmpty(setField))
+                        {
+                            function.WriteLog("UserId:" + sub.UserId + ";  TradeDate:" + sub.TradeDate + ";  TotalAmount:" + sub.TotalAmount + "--" + TotalAmount + ";  TradeCount:" + sub.TradeCount + "--" + TradeCount + ";", "交易不一致的创客2");
+                            function.WriteLog("update UserAmountSummary set " + setField.TrimEnd(',') + " where Id=" + sub.Id, "要执行的sql脚本2");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "统计交易额异常");
+            }
+            function.WriteLog(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "统计交易额日志");
+        }
+        
+    }
+}