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