Przeglądaj źródła

(Improve) 加入網優因定期維護重啟SQL Server造成Gateway發票上傳失敗時的自動化後處理機制

Snoopy 2 lat temu
rodzic
commit
d5af0f6a2b
2 zmienionych plików z 38 dodań i 10 usunięć
  1. 35 7
      TCCInvoice/InvoiceGenerator.cs
  2. 3 3
      TCCInvoice/Program.cs

+ 35 - 7
TCCInvoice/InvoiceGenerator.cs

@@ -43,11 +43,9 @@ namespace TCCInvoice
 
         private FileSystemWatcher preInvoiceResponseWatcher;
         private FileSystemWatcher sellerInvoiceResponseWatcher;
+        private FileSystemWatcher sellerInvoiceFailureWatcher;
         private List<InvoiceResponseItem> invoiceResponseItemList = new List<InvoiceResponseItem>();
-        private string responseInvoiceNumber;
         private string responseDataNumber;
-        private string responseInvoiceDate;
-        private string responseInvoiceTime;
         private string responseInvoiceError;
         private int totalQuantity = 0;
         private int count = 0;
@@ -72,6 +70,8 @@ namespace TCCInvoice
         private const string PREINVOICE_PATH = @"C:\UXB2B_EIVO\PreInvoice\";
         private const string PREINVOICE_RESPONSE_PATH = @"C:\UXB2B_EIVO\PreInvoice(Response)\";
         private const string SELLER_INVOICE_RESPONSE_PATH = @"C:\Gateway-83196607\logs\InvoiceNoInspector\SellerInvoice(Response)\";
+        private const string SELLER_INVOICE_PATH = @"C:\Gateway-83196607\logs\InvoiceNoInspector\SellerInvoice\";
+        private const string SELLER_INVOICE_FAILURE_PATH = @"C:\Gateway-83196607\logs\InvoiceNoInspector\SellerInvoice(Failure)\";
         private const string RESPONSE_BACKUP_PATH = @"C:\UXB2B_EIVO\ResponseBackup\";
         #endregion
 
@@ -224,6 +224,16 @@ namespace TCCInvoice
                 EnableRaisingEvents = true,
             };
             sellerInvoiceResponseWatcher.Changed += SellerInvoiceResponse_Changed;
+
+            sellerInvoiceFailureWatcher = new FileSystemWatcher()
+            {
+                Path = SELLER_INVOICE_FAILURE_PATH,
+                Filter = "*.xml",
+                NotifyFilter = NotifyFilters.LastWrite,
+                IncludeSubdirectories = false,
+                EnableRaisingEvents = true,
+            };
+            sellerInvoiceFailureWatcher.Changed += SellerInvoiceFailure_Changed;
         }
         #endregion
 
@@ -323,6 +333,27 @@ namespace TCCInvoice
                 }
             }
         }
+
+        private void SellerInvoiceFailure_Changed(object sender, FileSystemEventArgs e)
+        {
+            string failurePath = e.FullPath;
+            string responsePath = SELLER_INVOICE_RESPONSE_PATH + e.Name;
+            string sellerinvoicePath = SELLER_INVOICE_PATH + e.Name;
+
+            // 當SELLER_INVOICE_FAILURE_PATH出現檔案時,先等待500毫秒,
+            // 再去檢查SELLER_INVOICE_RESPONSE_PATH是否也出現同一個檔名的檔案,
+            // 如果沒有出現,代表應該是網優SQL連線失敗造成的發票上傳失敗,
+            // 此時會先等待180秒,再把該檔案複製到SELLER_INVOICE_PATH,讓Gateway自動重新上傳
+            Task.Run(async delegate
+            {
+                await Task.Delay(500);
+                if (!File.Exists(responsePath)) // 可能是網優SQL連線失敗,需要嘗試重新上傳
+                {
+                    await Task.Delay(180000);
+                    File.Copy(failurePath, sellerinvoicePath);
+                }
+            });
+        }
         #endregion
 
         #region Instance Methods
@@ -362,7 +393,7 @@ namespace TCCInvoice
             {
                 GeneratePreinvoiceXML();
             }
-            catch (Exception ex)
+            catch (Exception)
             {
                 ;
             }
@@ -446,10 +477,7 @@ namespace TCCInvoice
             contactPhone = null;
             invoiceItems.Clear();
 
-            responseInvoiceNumber = null;
             responseDataNumber = null;
-            responseInvoiceDate = null;
-            responseInvoiceTime = null;
             responseInvoiceError = null;
         }
 

+ 3 - 3
TCCInvoice/Program.cs

@@ -17,19 +17,19 @@ namespace TCCInvoice
             myInvoice.InvoiceCompleted += MyInvoice_InvoiceCompleted;
             
             // 填具待開立發票的相關資料(Preinvoice)
-            myInvoice.DataNumber = "202203111145";
+            myInvoice.DataNumber = "202204183000";
             myInvoice.DataDate = DateTime.Today;
             myInvoice.BuyerId = null; // 一般消費者
             myInvoice.TotalAmount = 524;
             myInvoice.CarrierId1 = null;
-            myInvoice.MainRemark = "交易訂單號:1234567888";
+            myInvoice.MainRemark = "交易訂單號:1234567890";
             myInvoice.DonateMark = 0;
             myInvoice.ContactEmail = null;
             myInvoice.ContactPhone = null;
             myInvoice.AddInvoiceItem(0, "充電服務費", 41.5793, "度", 12, 499, "充電服務費每度12元");
             myInvoice.AddInvoiceItem(1, "占用費", 30, "分鐘", 50, 25, "占用費每小時50元");
             // 開立發票
-            //myInvoice.GetInvoiceResponse();
+            myInvoice.GetInvoiceResponse();
 
 
             Console.WriteLine("Press enter to exit");