Эх сурвалжийг харах

增加可藉由DataNumber查詢發票開立結果的函式

Snoopy 3 жил өмнө
parent
commit
8c51f17032

+ 67 - 2
TCCInvoice/InvoiceGenerator.cs

@@ -70,6 +70,7 @@ 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 RESPONSE_BACKUP_PATH = @"C:\UXB2B_EIVO\ResponseBackup\";
         #endregion
 
         #region Properties
@@ -227,7 +228,8 @@ namespace TCCInvoice
         public delegate void InvoiceAssignNumberFailEventHandler(string dataNumber, string description);
         public event InvoiceAssignNumberFailEventHandler InvoiceAssignNumberFailed;
 
-        public delegate void InvoiceUploadFailEventHandler(string dataNumber, string invoiceNumber, string description);
+        public delegate void InvoiceUploadFailEventHandler(string dataNumber, string invoiceNumber, string randomNumber,
+                                                           string description);
         public event InvoiceUploadFailEventHandler InvoiceUploadFailed;
 
         private void PreInvoiceResponse_Created(object sender, FileSystemEventArgs e)
@@ -246,6 +248,8 @@ namespace TCCInvoice
             {
                 responseInvoiceError = xDoc.Descendants("Description").ElementAt(0).Value;
                 responseDataNumber = xDoc.Descendants("DataNumber").ElementAt(0).Value;
+                randomNumber = null;
+                BackupResponse(-1);
 
                 InvoiceAssignNumberFailed?.Invoke(responseDataNumber, responseInvoiceError);
             }
@@ -261,6 +265,7 @@ namespace TCCInvoice
                 string invoicenumber = xDoc.Descendants("InvoiceNumber").ElementAt(0).Value;
                 if (!String.IsNullOrEmpty(responseInvoiceNumber) && responseInvoiceNumber == invoicenumber)
                 {
+                    BackupResponse(1);
                     InvoiceGenerated?.Invoke(responseDataNumber, responseInvoiceNumber, responseInvoiceDate,
                                              responseInvoiceTime, this.randomNumber);
                 }
@@ -271,7 +276,9 @@ namespace TCCInvoice
                 responseInvoiceError = xDoc.Descendants("Description").ElementAt(0).Value;
                 if (!String.IsNullOrEmpty(responseInvoiceNumber) && responseInvoiceNumber == invoicenumber)
                 {
-                    InvoiceUploadFailed?.Invoke(responseDataNumber, responseInvoiceNumber, responseInvoiceError);
+                    BackupResponse(0);
+                    InvoiceUploadFailed?.Invoke(responseDataNumber, responseInvoiceNumber, this.randomNumber, 
+                                                responseInvoiceError);
                 }
             }
         }
@@ -320,6 +327,45 @@ namespace TCCInvoice
             }
         }
 
+        public void SearchResponseByDataNumber(string dataNumber)
+        {
+            string fileToCheck = RESPONSE_BACKUP_PATH + dataNumber + ".xml";
+            if (!File.Exists(fileToCheck)) // 檔案不存在
+            {
+                return;
+            }
+
+            XDocument xDoc = XDocument.Load(fileToCheck);
+
+            string invoicenumber, datanumber, invoicedate, invoicetime, description, randomnumber;
+            string status = xDoc.Descendants("Status").ElementAt(0).Value;
+            switch (status)
+            {
+                case "1" : // 發票配號成功且上傳成功
+                    invoicenumber = xDoc.Descendants("InvoiceNumber").ElementAt(0).Value;
+                    datanumber = xDoc.Descendants("DataNumber").ElementAt(0).Value;
+                    invoicedate = xDoc.Descendants("InvoiceDate").ElementAt(0).Value;
+                    invoicetime = xDoc.Descendants("InvoiceTime").ElementAt(0).Value;
+                    randomnumber = xDoc.Descendants("RandomNumber").ElementAt(0).Value;
+                    InvoiceGenerated?.Invoke(datanumber, invoicenumber, invoicedate, invoicetime, randomnumber);
+                    break;
+                case "0" : // 發票配號成功但上傳失敗
+                    invoicenumber = xDoc.Descendants("InvoiceNumber").ElementAt(0).Value;
+                    datanumber = xDoc.Descendants("DataNumber").ElementAt(0).Value;
+                    randomnumber = xDoc.Descendants("RandomNumber").ElementAt(0).Value;
+                    description = xDoc.Descendants("Description").ElementAt(0).Value;
+                    InvoiceUploadFailed?.Invoke(datanumber, invoicenumber, randomnumber, description);
+                    break;
+                case "-1" : // 配號失敗
+                    datanumber = xDoc.Descendants("DataNumber").ElementAt(0).Value;
+                    description = xDoc.Descendants("Description").ElementAt(0).Value;
+                    InvoiceAssignNumberFailed?.Invoke(datanumber, description);
+                    break;
+                default :
+                    break;
+            }
+        }
+
         private void GeneratePreinvoiceXML()
         {
             XDocument xDoc = new XDocument();
@@ -376,6 +422,25 @@ namespace TCCInvoice
             xDoc.Save(PREINVOICE_PATH + dataNumber + ".xml");
         }
 
+        private void BackupResponse(int status)
+        {
+            XDocument xDoc = new XDocument();
+            xDoc.Declaration = new XDeclaration("1.0", "UTF-8", "");
+
+            XElement root = new XElement("Response");
+            root.Add(new XElement("Status", status.ToString()),
+                     new XElement("Description", responseInvoiceError),
+                     new XElement("DataNumber", responseDataNumber),
+                     new XElement("InvoiceNumber", responseInvoiceNumber),
+                     new XElement("InvoiceDate", responseInvoiceDate),
+                     new XElement("InvoiceTime", responseInvoiceTime),
+                     new XElement("RandomNumber", randomNumber)
+                    );
+
+            xDoc.Add(root);
+            xDoc.Save(RESPONSE_BACKUP_PATH + responseDataNumber + ".xml");
+        }
+
         private void Reset()
         {
             dataNumber = null;

+ 9 - 14
TCCInvoice/Program.cs

@@ -21,28 +21,21 @@ namespace TCCInvoice
             myInvoice.InvoiceUploadFailed += MyInvoice_InvoiceUploadFailed;
 
             // 填具待開立發票的相關資料(Preinvoice)
-            myInvoice.DataNumber = "202202120223";
+            myInvoice.DataNumber = "202202150008";
             myInvoice.DataDate = DateTime.Today;
             myInvoice.BuyerId = null; // 一般消費者
             myInvoice.TotalAmount = 524;
             myInvoice.CarrierId1 = "/CPDF.O2";
+            myInvoice.MainRemark = "交易訂單號:1234567888";
             myInvoice.ContactEmail = "snoopy.h.huang@outlook.com";
             myInvoice.ContactPhone = "0929168960";
             myInvoice.AddInvoiceItem(0, "充電服務費", 41.5793, "度", 12, 499, "充電服務費每度12元");
             myInvoice.AddInvoiceItem(1, "占用費", 30, "分鐘", 50, 25, "占用費每小時50元");
-            //開立發票
+            // 開立發票
             myInvoice.GetInvoiceResponse();
-
-            //下一張
-            //myInvoice.DataNumber = "202202031234567890";
-            //myInvoice.DataDate = DateTime.Today;
-            //myInvoice.BuyerId = "30435973"; //營業人
-            //myInvoice.TotalAmount = 1204;
-            //myInvoice.CarrierId1 = null;
-            //myInvoice.ContactEmail = "snoopy_huang@phihong.com.tw";
-            //myInvoice.ContactPhone = "0972637981";
-            //myInvoice.AddInvoiceItem(0, "充電服務費", 120.4130, "度", 10, 1204, "每度10元");
-            //myInvoice.GetInvoiceResponse();
+            
+            // 搜尋發票
+            myInvoice.SearchResponseByDataNumber("202202150004");
 
             Console.WriteLine("Press enter to exit");
             Console.ReadLine();
@@ -66,11 +59,13 @@ namespace TCCInvoice
             Console.WriteLine("錯誤代碼與描述:" + description);
         }
 
-        private static void MyInvoice_InvoiceUploadFailed(string dataNumber, string invoiceNumber, string description)
+        private static void MyInvoice_InvoiceUploadFailed(string dataNumber, string invoiceNumber, string randomNumber, 
+                                                          string description)
         {
             Console.WriteLine("發票已配號但是上傳失敗-----");
             Console.WriteLine("單據編號:" + dataNumber);
             Console.WriteLine("發票配號:" + invoiceNumber);
+            Console.WriteLine("隨機碼:" + randomNumber);
             Console.WriteLine("錯誤代碼與描述:" + description);
         }
     }