From 07a9b9127da141cbc8afcb2932ed31208cf31af1 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期一, 19 五月 2025 14:01:29 +0800
Subject: [PATCH] 1.携客云送货单异常处理优化

---
 service/Warehouse/MesXkyService.cs |  339 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 226 insertions(+), 113 deletions(-)

diff --git a/service/Warehouse/MesXkyService.cs b/service/Warehouse/MesXkyService.cs
index 9f4ab07..e2822f3 100644
--- a/service/Warehouse/MesXkyService.cs
+++ b/service/Warehouse/MesXkyService.cs
@@ -29,8 +29,9 @@
     /// <summary>
     /// 绯荤粺鑷姩鏃ュ織妯℃澘锛堢敤浜庢惡瀹簯鎺ュ彛璋冪敤璁板綍锛�
     /// </summary>
-    private string _logMessageDhdBar = "銆怱ysAuto銆戣幏鍙栨惡瀹簯閫佽揣鍗曟潯鐮併��";
+    private string _logMessageDhdBar = "";
 
+    //鑾峰彇鎼哄浜戝埌璐у崟
     public dynamic GetXkyDhd(XKYGetDhdRequest entity)
     {
         _logMessageDHD = "銆怱ysAuto銆戣幏鍙栨惡瀹簯閫佽揣鍗曘��";
@@ -93,53 +94,11 @@
                 _responseData = JsonConvert.DeserializeObject(result2);
             }
 
-
-            //// 鏂板鏃ュ織璁板綍锛堝湪杩斿洖鍝嶅簲鍓嶏級
-            //using (var conn = new SqlConnection(DbHelperSQL.strConn))
-            //{
-            //    using (var cmd = new SqlCommand("prc_log_create", conn))
-            //    {
-            //        try
-            //        {
-            //            conn.Open();
-            //            cmd.CommandType = CommandType.StoredProcedure;
-            //            SqlParameter[] logParams =
-            //            {
-            //                new("@edtUserGuid", SqlDbType.UniqueIdentifier) { Value = Guid.Parse("11111111-1111-1111-1111-111111111111") },
-            //                new("@abtGuid", SqlDbType.UniqueIdentifier) { Value = DBNull.Value },
-            //                new("@abtTable", SqlDbType.NVarChar, 40) { Value = "DELIVERY_NOTICE" },
-            //                new("@detail", SqlDbType.NVarChar, 2500) { Value = "銆怱ysAuto銆戣幏鍙栨惡瀹簯閫佽揣鍗曘��" },
-            //                new("@hNo", SqlDbType.NVarChar, 100) { Value = "" },
-            //                new("@SendJson", SqlDbType.NVarChar) { Value = json },
-            //                new("@RtnJson", SqlDbType.NVarChar) { Value = JsonConvert.SerializeObject(responseJson) },
-            //                new("@xkyBeginTime", SqlDbType.NVarChar) { Value = (entity.startDate/1000).ToString() },
-            //                new("@xkyEndTime", SqlDbType.NVarChar) { Value = (entity.endDate/1000).ToString()},
-            //                new("@sendStatus", SqlDbType.NVarChar) { Value = responseJson.result.ToString()},
-            //                new("@executeTime", SqlDbType.NVarChar) { Value =  executeTime},
-            //            };
-
-            //            foreach (var param in logParams)
-            //                cmd.Parameters.Add(param);
-
-            //            cmd.ExecuteNonQuery();
-            //        }
-            //        catch (Exception logEx)
-            //        {
-            //            // 鏃ュ織璁板綍澶辫触涓嶄腑鏂富娴佺▼
-            //            Console.WriteLine($"鏃ュ織璁板綍澶辫触: {logEx.Message}");
-            //        }
-            //        finally
-            //        {
-            //            conn.Close();
-            //        }
-            //    }
-            //}
-
             if (_responseData.result != 1)
                 throw new ApplicationException(_responseData.errorMsg);
 
             sendStatus = _responseData.result;
-            // 鍘�120-131琛屾浛鎹负锛�
+            //鍌ㄥ瓨閫佽揣鍗曞彿璇︾粏
             if (SaveDeliveryNotice(_responseData) > 0)
                 sendStatus = 1;
             else
@@ -171,7 +130,7 @@
                 edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
                 abtGuid: null,
                 abtTable: "DELIVERY_NOTICE",
-                detail: _logMessageDHD,
+                detail: _logMessageDHD+ $"绯荤粺寮傚父閿欒锛歿e.Message}\n璺熻釜锛歿e.StackTrace}",
                 orderNo: "",
                 sendJson: _requestJson,
                 rtnJson: JsonConvert.SerializeObject(_responseData),
@@ -185,34 +144,36 @@
 
     }
 
-
-    //public dynamic GetXkyDHD(XKYGetDhdRequest entity)
-    //{
-
-    //   return XKY_GET_DHD(entity);
-
-    //}
-
     //瀵硅幏鍙栧埌鐨勬惡瀹簯閫佽揣鍗曞仛澶勭悊
     private int SaveDeliveryNotice(dynamic responseJson)
     {
+        var result = 1;
         List<DeliveryNotice> noticeList = JsonConvert.DeserializeObject<List<DeliveryNotice>>(responseJson.dataList.ToString());
+
+        // 鏂板鍒楄〃绌哄�兼鏌�
+        if (noticeList == null || !noticeList.Any() || noticeList.Count < 1)
+        {
+            _logMessageDhdBar += $"鏈鑾峰彇鏀惰揣鍗曟暟鎹负绌�";
+            return result;
+        }
+
+
         noticeList.ForEach(n => n.Id = Guid.NewGuid());
     
         var deliveryNos = noticeList.Select(n => n.DeliveryNo).Distinct().ToList();
-        var noticeIds = noticeList.Select(n => n.Id).ToList(); // 淇濇寔GUID绫诲瀷
+        //var noticeIds = noticeList.Select(n => n.Id).ToList(); // 淇濇寔GUID绫诲瀷
 
-        var result = 0;
         Db.Ado.UseTran(() =>
         {
-            // 鍒犻櫎鍏宠仈閫佽揣鏄庣粏鏁版嵁
-            Db.Deleteable<DeliveryNoticeDetail>()
-            .Where(d => noticeIds.Contains(Guid.Parse(d.Pid)))
-              .ExecuteCommand();
-
             // 娣诲姞绌哄�兼鏌�
             if (deliveryNos.Any())
             {
+                // 鍒犻櫎鍏宠仈閫佽揣鏄庣粏鏁版嵁
+                Db.Deleteable<DeliveryNoticeDetail>()
+                .Where(d => deliveryNos.Contains(d.DeliveryNo))
+                  .ExecuteCommand();
+
+
                 //鍒犻櫎鍏宠仈閫佽揣鏉$爜鏄庣粏
                 Db.Deleteable<TblBarcodeInformation>()
                   .Where(b => deliveryNos.Contains(b.DeliveryNo))
@@ -229,8 +190,8 @@
         }, 
         ex => {
             // 澧炲己寮傚父淇℃伅
-            _logMessageDHD = _logMessageDHD + $"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}";
-            //throw new Exception($"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}");
+            //_logMessageDHD = _logMessageDHD + $"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}";
+            throw new Exception($"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}");
         });
 
         return result;
@@ -297,65 +258,23 @@
                 _responseData = JsonConvert.DeserializeObject(result2);
             }
 
-
-            //// 鏂板鏃ュ織璁板綍锛堝湪杩斿洖鍝嶅簲鍓嶏級
-            //using (var conn = new SqlConnection(DbHelperSQL.strConn))
-            //{
-            //    using (var cmd = new SqlCommand("prc_log_create", conn))
-            //    {
-            //        try
-            //        {
-            //            conn.Open();
-            //            cmd.CommandType = CommandType.StoredProcedure;
-            //            SqlParameter[] logParams =
-            //            {
-            //                new("@edtUserGuid", SqlDbType.UniqueIdentifier) { Value = Guid.Parse("11111111-1111-1111-1111-111111111111") },
-            //                new("@abtGuid", SqlDbType.UniqueIdentifier) { Value = DBNull.Value },
-            //                new("@abtTable", SqlDbType.NVarChar, 40) { Value = "DELIVERY_NOTICE" },
-            //                new("@detail", SqlDbType.NVarChar, 2500) { Value = "銆怱ysAuto銆戣幏鍙栨惡瀹簯閫佽揣鍗曘��" },
-            //                new("@hNo", SqlDbType.NVarChar, 100) { Value = "" },
-            //                new("@SendJson", SqlDbType.NVarChar) { Value = json },
-            //                new("@RtnJson", SqlDbType.NVarChar) { Value = JsonConvert.SerializeObject(responseJson) },
-            //                new("@xkyBeginTime", SqlDbType.NVarChar) { Value = (entity.startDate/1000).ToString() },
-            //                new("@xkyEndTime", SqlDbType.NVarChar) { Value = (entity.endDate/1000).ToString()},
-            //                new("@sendStatus", SqlDbType.NVarChar) { Value = responseJson.result.ToString()},
-            //                new("@executeTime", SqlDbType.NVarChar) { Value =  executeTime},
-            //            };
-
-            //            foreach (var param in logParams)
-            //                cmd.Parameters.Add(param);
-
-            //            cmd.ExecuteNonQuery();
-            //        }
-            //        catch (Exception logEx)
-            //        {
-            //            // 鏃ュ織璁板綍澶辫触涓嶄腑鏂富娴佺▼
-            //            Console.WriteLine($"鏃ュ織璁板綍澶辫触: {logEx.Message}");
-            //        }
-            //        finally
-            //        {
-            //            conn.Close();
-            //        }
-            //    }
-            //}
-
             if (_responseData.result != 1)
                 throw new ApplicationException(_responseData.errorMsg);
 
             sendStatus = _responseData.result;
-            // 鍘�120-131琛屾浛鎹负锛�
-            //if (SaveDeliveryNotice(_responseData) > 0)
-            //    sendStatus = 1;
-            //else
-            //    sendStatus = 0;
+            // 瀵规暟鎹仛澶勭悊瀛樺叆mes
+            if (SaveDeliveryNoticeDetail(_responseData) > 0)
+                sendStatus = 1;
+            else
+                sendStatus = 0;
 
             var logService = new LogService();
             logService.CreateLogI(
                 db: Db,
                 edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
                 abtGuid: null,
-                abtTable: "DELIVERY_NOTICE",
-                detail: _logMessageDHD,
+                abtTable: "DELIVERY_NOTICE_DETAIL",
+                detail: _logMessageDhdDetail,
                 orderNo: "",
                 sendJson: _requestJson,
                 rtnJson: JsonConvert.SerializeObject(_responseData),
@@ -374,8 +293,8 @@
                 db: Db,
                 edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
                 abtGuid: null,
-                abtTable: "DELIVERY_NOTICE",
-                detail: _logMessageDHD,
+                abtTable: "DELIVERY_NOTICE_DETAIL",
+                detail: _logMessageDhdDetail,
                 orderNo: "",
                 sendJson: _requestJson,
                 rtnJson: JsonConvert.SerializeObject(_responseData),
@@ -389,4 +308,198 @@
 
     }
 
+    //瀵硅幏鍙栧埌鐨勬惡瀹簯閫佽揣鍗曞仛澶勭悊
+    private int SaveDeliveryNoticeDetail(dynamic responseJson)
+    {
+        var result = 0;
+        List<DeliveryNoticeDetail> noticeList = JsonConvert.DeserializeObject<List<DeliveryNoticeDetail>>(responseJson.data.lineList.ToString());
+        // 鑾峰彇閫佽揣鍗曞彿骞舵牎楠�
+        var deliveryNoObj = responseJson.data.deliveryNo;
+        if (deliveryNoObj == null || string.IsNullOrEmpty(deliveryNoObj.ToString()))
+        {
+            _logMessageDhdDetail += $"銆愬紓甯搞�戣幏鍙栭�佽揣鍗曞け璐ワ細{responseJson}";
+            return result;
+        }
+        string deliveryNo = deliveryNoObj.ToString();
+
+        // 鏂板鍒楄〃绌哄�兼鏌�
+        if (noticeList == null || !noticeList.Any())
+        {
+            _logMessageDhdBar += $"銆愬紓甯搞�戦�佽揣鏄庣粏鏁版嵁涓虹┖锛岄�佽揣鍗曞彿锛歿deliveryNo}";
+            return result;
+        }
+
+        //璧嬪�糶uid鍜屽埌璐у崟鍙�
+        noticeList.ForEach(n => n.Id = Guid.NewGuid());
+        noticeList.ForEach(n => n.DeliveryNo = deliveryNo);
+        noticeList.ForEach(n => n.SynchronousDate = DateTime.Now);
+
+
+        Db.Ado.UseTran(() =>
+        {
+            // 鍒犻櫎鍏宠仈閫佽揣鏄庣粏鏁版嵁
+            Db.Deleteable<DeliveryNoticeDetail>()
+            .Where(d => d.DeliveryNo == deliveryNo)
+              .ExecuteCommand();
+
+            // 鎵归噺鎻掑叆浼樺寲
+            result = Db.Fastest<DeliveryNoticeDetail>().BulkCopy(noticeList);
+        },
+        ex => {
+            // 澧炲己寮傚父淇℃伅
+            _logMessageDhdDetail = _logMessageDhdDetail + $"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}";
+            //throw new Exception($"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}");
+        });
+
+        return result;
+    }
+
+    //鑾峰彇鎼哄浜戝埌璐у崟鏉$爜
+    public dynamic GetXkyDhdBar(XKYGetDhdDeatilRequest entity)
+    {
+        _logMessageDhdBar = "銆怱ysAuto銆戣幏鍙栨惡瀹簯閫佽揣鍗曟潯鐮併��";
+        /// <summary>
+        /// 璇锋眰鎶ユ枃缂撳瓨锛堝瓨鍌ㄥ簭鍒楀寲鍚庣殑JSON璇锋眰鍐呭锛�
+        /// </summary>
+        string _requestJson = string.Empty;
+
+        /// <summary>
+        /// 鍔ㄦ�佸搷搴斿璞★紙瀛樺偍鍙嶅簭鍒楀寲鐨勬惡瀹簯鎺ュ彛鍝嶅簲锛�
+        /// </summary>
+        dynamic _responseData = new System.Dynamic.ExpandoObject();
+
+        /// <summary>
+        /// 鎺ュ彛鎵ц鏃堕棿锛堟牸寮忥細yyyy-MM-dd HH:mm:ss锛�
+        /// </summary>
+        string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+        /// <summary>
+        /// 鎺ュ彛璋冪敤鐘舵�侊紙0-澶辫触 1-鎴愬姛锛�
+        /// </summary>
+        int sendStatus = 0;
+
+        try
+        {
+            string ErrorMsg = "";
+            ApiCommonParam Apiparam = ApiCommonParam.NewApiCommon();
+
+            _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            string sendJson = JsonConvert.SerializeObject(entity);
+            ArrayList SQLStringList = new ArrayList();
+            var url = "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json";
+            HttpClient httpClient = new HttpClient();
+            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
+
+            _requestJson = "{\"commonParam\":" + JsonConvert.SerializeObject(Apiparam) + ",\"body\":" + sendJson + "}";
+            byte[] postData = Encoding.UTF8.GetBytes(_requestJson);
+
+            // 鍒涘缓璇锋眰瀵硅薄
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+            request.Method = "POST";
+            request.ContentType = "application/json";
+            request.ContentLength = postData.Length;
+
+            // 鍙戦�佽姹傛暟鎹�
+            using (Stream stream = request.GetRequestStream())
+            {
+                stream.Write(postData, 0, postData.Length);
+            }
+
+            // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲
+            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+            using (Stream stream = response.GetResponseStream())
+            using (StreamReader reader = new StreamReader(stream))
+            {
+                string result2 = reader.ReadToEnd();
+
+                _responseData = JsonConvert.DeserializeObject(result2);
+            }
+
+            if (_responseData.result != 1)
+                throw new ApplicationException(_responseData.errorMsg);
+
+            sendStatus = _responseData.result;
+            // 瀵规暟鎹仛澶勭悊瀛樺叆mes
+            if (SaveDeliveryNoticeBar(_responseData, entity.deliveryNo) > 0)
+                sendStatus = 1;
+            else
+                sendStatus = 0;
+
+            var logService = new LogService();
+            logService.CreateLogI(
+                db: Db,
+                edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
+                abtGuid: null,
+                abtTable: "TBL_BARCODE_INFORMATION",
+                detail: _logMessageDhdBar,
+                orderNo: "",
+                sendJson: _requestJson,
+                rtnJson: JsonConvert.SerializeObject(_responseData),
+                xkyBeginTime: "",
+                xkyEndTime: "",
+                sendStatus: sendStatus,
+                executeTime: _executeTimestamp
+            );
+
+            return _responseData;
+        }
+        catch (Exception e)
+        {
+            var logService = new LogService();
+            logService.CreateLogI(
+                db: Db,
+                edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"),
+                abtGuid: null,
+                abtTable: "TBL_BARCODE_INFORMATION",
+                detail: _logMessageDhdBar,
+                orderNo: "",
+                sendJson: _requestJson,
+                rtnJson: JsonConvert.SerializeObject(_responseData),
+                xkyBeginTime: "",
+                xkyEndTime: "",
+                sendStatus: 0,
+                executeTime: _executeTimestamp
+            );
+            throw new Exception(e.Message);
+        }
+
+    }
+
+    //瀵硅幏鍙栧埌鐨勬惡瀹簯閫佽揣鍗曟潯鐮佸仛澶勭悊
+    private int SaveDeliveryNoticeBar(dynamic responseJson,string deliveryNo)
+    {
+        var result = 0;
+        List<TblBarcodeInformation> noticeList = JsonConvert.DeserializeObject<List<TblBarcodeInformation>>(responseJson.dataList.ToString());
+        
+        // 鏂板鍒楄〃绌哄�兼鏌�
+        if (noticeList == null || !noticeList.Any())
+        {
+            _logMessageDhdBar += $"銆愬紓甯搞�戞潯鐮佹暟鎹负绌猴紝閫佽揣鍗曞彿锛歿deliveryNo}";
+            return result;
+        }
+
+        // 璧嬪�糶uid鍜屽埌璐у崟鍙�
+        noticeList.ForEach(n => n.Id = Guid.NewGuid());
+        noticeList.ForEach(n => n.DeliveryNo = deliveryNo);
+        noticeList.ForEach(n => n.SynchronousDate = DateTime.Now);
+
+
+        Db.Ado.UseTran(() =>
+        {
+            // 鍒犻櫎鍏宠仈閫佽揣鏄庣粏鏁版嵁
+            Db.Deleteable<TblBarcodeInformation>()
+            .Where(d => d.DeliveryNo == deliveryNo)
+              .ExecuteCommand();
+
+            // 鎵归噺鎻掑叆浼樺寲
+            result = Db.Fastest<TblBarcodeInformation>().BulkCopy(noticeList);
+        },
+        ex => {
+            // 澧炲己寮傚父淇℃伅
+            _logMessageDhdBar = _logMessageDhdBar + $"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}";
+            //throw new Exception($"鏁版嵁搴撴搷浣滃け璐ワ細{ex.Message}\n璺熻釜锛歿ex.StackTrace}");
+        });
+
+        return result;
+    }
 }

--
Gitblit v1.9.3