Selaa lähdekoodia

执行头一天交易和补交易,异步执行

lcl 1 vuosi sitten
vanhempi
commit
7282ed15cc
2 muutettua tiedostoa jossa 124 lisäystä ja 50 poistoa
  1. 122 49
      AppStart/GetHaoDaFTPInfoService.cs
  2. 2 1
      Startup.cs

+ 122 - 49
AppStart/GetHaoDaFTPInfoService.cs

@@ -55,7 +55,7 @@ namespace MySystem
                         Thread.Sleep(2000);
                         GetDepositData();
                         Thread.Sleep(60000);
-                        SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"));
+                        SaveTradeData(DateTime.Now.AddDays(-1).ToString("yyyyMMdd"), true);
                     }
                 }
                 Thread.Sleep(1800000);
@@ -433,7 +433,7 @@ namespace MySystem
                 string content = RedisDbconn.Instance.RPop<string>("ListenTradeDataQueue");
                 if (!string.IsNullOrEmpty(content))
                 {
-                    SaveTradeData(content);
+                    SaveTradeData(content, true);
                     Thread.Sleep(2000);
                 }
                 else
@@ -442,7 +442,7 @@ namespace MySystem
                 }
             }
         }
-        public void SaveTradeData(string Date)
+        public void SaveTradeData(string Date, bool IsRedis = false)
         {
             // 要下载的文件路径
             string filePath = "/haoda-trade/" + Date + ".csv";
@@ -466,66 +466,36 @@ namespace MySystem
                 if (!string.IsNullOrEmpty(fileContents))
                 {
                     MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
-                    List<string> orderNos = db.HdOrderTmp.Select(m => m.OrderNo).ToList();
-                    List<string> chkOrderNos = new List<string>();
                     var DataInfo = fileContents.TrimEnd('\n').Split('\n', 2);
                     if (DataInfo.Length > 1)
                     {
                         var DataList = DataInfo[1].Split('\n');
-                        int index = 0;
                         function.WriteLog("数量:" + Date + ":" + DataList.Length, "好哒交易数据入库2");
+                        int index = 0;
                         foreach (var DataListItem in DataList)
                         {
-                            var DataListInfo = DataListItem.Split(',');
-
-                            var MerchantNo = ""; // 商户号
-                            var BaseNo = ""; // 设备号
-                            var DeviceKind = ""; // 终端类型
-                            var OrderNo = ""; // 订单号
-                            var PayWay = ""; // 支付方式(微信 支付宝)
-                            var TradeType = ""; // 交易类型
-                            var TradeAmount = ""; // 交易金额
-                            var TradeFee = ""; // 交易手续费
-                            var TradeDate = ""; // 交易时间
-                            var TradeCycle = ""; // 结算周期
-
-                            MerchantNo = DataListInfo[0];
-                            BaseNo = DataListInfo[1];
-                            DeviceKind = DataListInfo[2];
-                            OrderNo = DataListInfo[3];
-                            PayWay = DataListInfo[4];
-                            TradeType = DataListInfo[5];
-                            TradeAmount = DataListInfo[6];
-                            TradeFee = DataListInfo[7];
-                            TradeDate = DataListInfo[8];
-                            TradeCycle = DataListInfo[9];
-
-                            if (!orderNos.Contains(OrderNo) && !chkOrderNos.Contains(OrderNo))
+                            if(IsRedis)
                             {
-                                index += 1;
-                                function.WriteLog(DateTime.Now.ToString() + ":" + OrderNo, "好哒交易数据入库2");
-                                chkOrderNos.Add(OrderNo);
-                                db.HdOrderTmp.Add(new MpMainModels2.HdOrderTmp()
+                                if(SaveTradeDataOneReady(db, DataListItem))
                                 {
-                                    OrderNo = OrderNo,
-                                    SettleDuration = TradeCycle,
-                                    TradeTime = TradeDate,
-                                    TradeFee = decimal.Parse(function.CheckNum(TradeFee)),
-                                    TradeAmount = decimal.Parse(function.CheckNum(TradeAmount)),
-                                    TradeType = TradeType,
-                                    PayMode = PayWay,
-                                    DeviceKind = DeviceKind,
-                                    SnNo = BaseNo,
-                                    MerNo = MerchantNo,
-                                });
-                                if (index % 50 == 0)
+                                    index += 1;
+                                }
+                                if(index % 200 == 0 && index > 0)
                                 {
+                                    index = 0;
                                     db.SaveChanges();
                                 }
                             }
+                            else
+                            {
+                                RedisDbconn.Instance.AddList("ListenTradeDataByOneQueue", DataListItem);
+                            }
+                        }
+                        if(IsRedis)
+                        {
+                            index = 0;
+                            db.SaveChanges();
                         }
-                        db.SaveChanges();
-                        function.WriteLog("入库数:" + Date + ":" + index, "好哒交易数据入库2");
                     }
                     db.Dispose();
                 }
@@ -542,6 +512,109 @@ namespace MySystem
         }
 
 
+
+        public void StartTradeListenByOne()
+        {
+            //每天凌晨执行获取好哒FTP昨日交易数据
+            Thread th2 = new Thread(ListenTradeDataByOneReady);
+            th2.IsBackground = true;
+            th2.Start();
+        }
+        /// <summary>
+        /// 获取好哒FTP昨日交易数据
+        /// </summary>
+        public void ListenTradeDataByOneReady()
+        {
+            int index = 0;
+            MpMainModels2.WebCMSEntities db = new MpMainModels2.WebCMSEntities();
+            bool dbConn = true;
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("ListenTradeDataByOneQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    if(!dbConn)
+                    {
+                        db = new MpMainModels2.WebCMSEntities();
+                        dbConn = true;
+                    }
+                    if(SaveTradeDataOneReady(db, content))
+                    {
+                        index += 1;
+                    }
+                    if(index % 200 == 0 && index > 0)
+                    {
+                        index = 0;
+                        db.SaveChanges();
+                    }
+                }
+                else
+                {
+                    index = 0;
+                    if(dbConn)
+                    {
+                        db.SaveChanges();
+                        db.Dispose();
+                        dbConn = false;
+                    }
+                }
+            }
+        }
+        public bool SaveTradeDataOneReady(MpMainModels2.WebCMSEntities db, string content)
+        {
+            bool result = false;
+            try
+            {
+                var DataListInfo = content.Split(',');
+
+                var MerchantNo = ""; // 商户号
+                var BaseNo = ""; // 设备号
+                var DeviceKind = ""; // 终端类型
+                var OrderNo = ""; // 订单号
+                var PayWay = ""; // 支付方式(微信 支付宝)
+                var TradeType = ""; // 交易类型
+                var TradeAmount = ""; // 交易金额
+                var TradeFee = ""; // 交易手续费
+                var TradeDate = ""; // 交易时间
+                var TradeCycle = ""; // 结算周期
+
+                MerchantNo = DataListInfo[0];
+                BaseNo = DataListInfo[1];
+                DeviceKind = DataListInfo[2];
+                OrderNo = DataListInfo[3];
+                PayWay = DataListInfo[4];
+                TradeType = DataListInfo[5];
+                TradeAmount = DataListInfo[6];
+                TradeFee = DataListInfo[7];
+                TradeDate = DataListInfo[8];
+                TradeCycle = DataListInfo[9];
+
+                if(!db.HdOrderTmp.Any(m => m.OrderNo == OrderNo))
+                {
+                    function.WriteLog(DateTime.Now.ToString() + ":" + OrderNo, "好哒交易数据入库new");
+                    db.HdOrderTmp.Add(new MpMainModels2.HdOrderTmp()
+                    {
+                        OrderNo = OrderNo,
+                        SettleDuration = TradeCycle,
+                        TradeTime = TradeDate,
+                        TradeFee = decimal.Parse(function.CheckNum(TradeFee)),
+                        TradeAmount = decimal.Parse(function.CheckNum(TradeAmount)),
+                        TradeType = TradeType,
+                        PayMode = PayWay,
+                        DeviceKind = DeviceKind,
+                        SnNo = BaseNo,
+                        MerNo = MerchantNo,
+                    });
+                    result = true;
+                }
+            }
+            catch(Exception ex)
+            {
+                function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "好哒交易数据入库new异常");
+            }
+            return result;
+        }
+
         public void StartGetTradeData()
         {
             //每天凌晨执行获取好哒FTP昨日交易数据

+ 2 - 1
Startup.cs

@@ -158,11 +158,12 @@ namespace MySystem
             GetHaoDaFTPInfoService.Instance.StartListen();
             GetHaoDaFTPInfoService.Instance.StartTradeListen();
             GetHaoDaFTPInfoService.Instance.StartGetTradeData();
+            GetHaoDaFTPInfoService.Instance.StartTradeListenByOne();
 
             // GetHaoDaFTPInfoService.Instance.StartTrade();
             // GetHaoDaFTPInfoService.Instance.GetTradeData();
             // GetHaoDaFTPInfoService.Instance.GetDepositData("d_20241127");
-            // GetHaoDaFTPInfoService.Instance.SaveDepositData("20241213");
+            // GetHaoDaFTPInfoService.Instance.SaveTradeData("20250402");
         }
 
         private void InitMain()