using MES.Service.Models; using NewPdaSqlServer.DB; using NewPdaSqlServer.util; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections; using System.Data; using System.Net; using System.Net.Http.Headers; using System.Text; using NewPdaSqlServer.Dto.Xky; using static NewPdaSqlServer.Controllers.Warehouse.MesXkyController; namespace NewPdaSqlServer.service.QC; public class MesXkyService : RepositoryNoEntity { /// /// 送货单日志模板(用于携客云接口调用记录) /// private string _logMessageDHD = ""; /// /// 送货单明细日志模板(用于携客云接口调用记录) /// private string _logMessageDhdDetail = ""; /// /// 送货单条码日志模板(用于携客云接口调用记录) /// private string _logMessageDhdBar = ""; /// /// 送货单货物送达日志模板(用于携客云接口调用记录) /// private string _logMessageDhdHwsd = ""; //获取携客云到货单 public dynamic GetXkyDhd(XKYGetDhdRequest entity) { _logMessageDHD = "【SysAuto】获取携客云送货单。"; /// /// 请求报文缓存(存储序列化后的JSON请求内容) /// string _requestJson = string.Empty; /// /// 动态响应对象(存储反序列化的携客云接口响应) /// dynamic _responseData = new System.Dynamic.ExpandoObject(); /// /// 接口执行时间戳(格式:yyyy-MM-dd HH:mm:ss) /// string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /// /// 接口调用状态(0-失败 1-成功) /// int sendStatus = 0; try { string ErrorMsg = ""; ApiCommonParam Apiparam = ApiCommonParam.NewApiCommon(); _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //string data_inserted = "{\r\n \"startDate\": 1746759300000,\r\n \"endDate\": 1746762300000,\r\n \"erpCode\": \"GXF001\"\r\n}"; string sendJson = JsonConvert.SerializeObject(entity); ArrayList SQLStringList = new ArrayList(); // var client = new HttpClient(); var url = "https://openapi.xiekeyun.com/delivery/getNoList.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("https://openapi.xiekeyun.com/delivery/getNoList.json"); 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; //储存送货单号详细 if (SaveDeliveryNotice(_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, orderNo: "", sendJson: _requestJson, rtnJson: JsonConvert.SerializeObject(_responseData), xkyBeginTime: (entity.startDate / 1000).ToString(), xkyEndTime: (entity.endDate / 1000).ToString(), 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: "DELIVERY_NOTICE", detail: _logMessageDHD+ $"系统异常错误:{e.Message}\n跟踪:{e.StackTrace}", orderNo: "", sendJson: _requestJson, rtnJson: JsonConvert.SerializeObject(_responseData), xkyBeginTime: (entity.startDate / 1000).ToString(), xkyEndTime: (entity.endDate / 1000).ToString(), sendStatus: 0, executeTime: _executeTimestamp ); throw new Exception(e.Message); } } //对获取到的携客云送货单做处理 private int SaveDeliveryNotice(dynamic responseJson) { var result = 1; List noticeList = JsonConvert.DeserializeObject>(responseJson.dataList.ToString()); // 新增列表空值检查 if (noticeList == null || !noticeList.Any() || noticeList.Count < 1) { _logMessageDHD += $"本次获取收货单数据为空"; 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类型 Db.Ado.UseTran(() => { // 添加空值检查 if (deliveryNos.Any()) { // 删除关联送货明细数据 Db.Deleteable() .Where(d => deliveryNos.Contains(d.DeliveryNo)) .ExecuteCommand(); //删除关联送货条码明细 Db.Deleteable() .Where(b => deliveryNos.Contains(b.DeliveryNo)) .ExecuteCommand(); //删除送货单 Db.Deleteable() .Where(n => deliveryNos.Contains(n.DeliveryNo)) .ExecuteCommand(); } // 批量插入优化 result = Db.Fastest().BulkCopy(noticeList); }, ex => { // 增强异常信息 //_logMessageDHD = _logMessageDHD + $"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"; throw new Exception($"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"); }); return result; } //获取携客云到货单明细 public dynamic GetXkyDhdDetail(XKYGetDhdDeatilRequest entity) { _logMessageDhdDetail = "【SysAuto】获取携客云送货单明细。"; /// /// 请求报文缓存(存储序列化后的JSON请求内容) /// string _requestJson = string.Empty; /// /// 动态响应对象(存储反序列化的携客云接口响应) /// dynamic _responseData = new System.Dynamic.ExpandoObject(); /// /// 接口执行时间(格式:yyyy-MM-dd HH:mm:ss) /// string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /// /// 接口调用状态(0-失败 1-成功) /// 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/delivery/getDetail.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 (SaveDeliveryNoticeDetail(_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: "DELIVERY_NOTICE_DETAIL", detail: _logMessageDhdDetail, 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: "DELIVERY_NOTICE_DETAIL", detail: _logMessageDhdDetail + $"系统异常错误:{e.Message}\n跟踪:{e.StackTrace}", orderNo: "", sendJson: _requestJson, rtnJson: JsonConvert.SerializeObject(_responseData), xkyBeginTime: "", xkyEndTime: "", sendStatus: 0, executeTime: _executeTimestamp ); throw new Exception(e.Message); } } //对获取到的携客云送货单做处理 private int SaveDeliveryNoticeDetail(dynamic responseJson,string deliveryNo) { var result = 1; List noticeList = JsonConvert.DeserializeObject>(responseJson.data.lineList.ToString()); // 新增列表空值检查 if (noticeList == null || !noticeList.Any() || noticeList.Count < 1) { _logMessageDhdBar += $"送货明细数据为空,送货单号:{deliveryNo}"; return result; } // 获取送货单号并校验 var deliveryNoObj = responseJson.data.deliveryNo; if (deliveryNoObj == null || string.IsNullOrEmpty(deliveryNoObj.ToString())) { throw new Exception($"【异常】获取送货单失败:{responseJson}"); } deliveryNo = deliveryNoObj.ToString(); //赋值guid和到货单号 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() .Where(d => d.DeliveryNo == deliveryNo) .ExecuteCommand(); // 批量插入优化 result = Db.Fastest().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 = "【SysAuto】获取携客云送货单条码。"; /// /// 请求报文缓存(存储序列化后的JSON请求内容) /// string _requestJson = string.Empty; /// /// 动态响应对象(存储反序列化的携客云接口响应) /// dynamic _responseData = new System.Dynamic.ExpandoObject(); /// /// 接口执行时间(格式:yyyy-MM-dd HH:mm:ss) /// string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /// /// 接口调用状态(0-失败 1-成功) /// 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 + $"系统异常错误:{e.Message}\n跟踪:{e.StackTrace}", 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 = 1; List noticeList = JsonConvert.DeserializeObject>(responseJson.dataList.ToString()); if (noticeList == null || !noticeList.Any()) { _logMessageDhdBar += $"条码数据为空,送货单号:{deliveryNo}"; return result; } var barcodeList = noticeList.Select(n => new TblBarcodeInformation { Id = Guid.NewGuid(), DeliveryNo = deliveryNo, SynchronousDate = DateTime.Now, // 直接映射字段 ProductCode = n.ProductCode, SmallBarcode = n.SmallBarcode, BigBarcode = n.BigBarcode, OuterBarcode = n.OuterBarcode, IncludeQty = n.IncludeQty.ToString(), SmallPackageSn = n.SmallPackageSn, BigPackageSn = n.BigPackageSn, OutPackageSn = n.OuterPackageSn, PackLevel = n.PackLevel.ToString(), // 尺寸字段映射 SmallPackageLength = n.SmallPackageLength?.ToString(), SmallPackageWidth = n.SmallPackageWidth?.ToString(), SmallPackageHeight = n.SmallPackageHeight?.ToString(), BigPackageLength = n.BigPackageLength?.ToString(), BigPackageWidth = n.BigPackageWidth?.ToString(), BigPackageHeight = n.BigPackageHeight?.ToString(), OuterPackageLength = n.OuterPackageLength?.ToString(), OuterPackageWidth = n.OuterPackageWidth?.ToString(), OuterPackageHeight = n.OuterPackageHeight?.ToString(), // 动态字段映射 PoErpNo = n.DynamicData?.PoErpNo ?? n.PoErpNo, PoLineNo = n.DynamicData?.PoLineNo ?? n.PoLineNo, InnerVendorCode = n.DynamicData?.InnerVendorCode, Customize1 = n.DynamicData?.Customize1, Customize2 = n.DynamicData?.Customize2, Customize3 = n.DynamicData?.Customize3, // 其他字段 DnLines = n.DnLines // 根据数据库注释,ExtendN01对应项目(单身extendN01),这里映射dnLines }).ToList(); Db.Ado.UseTran(() => { // 删除关联送货明细数据 Db.Deleteable() .Where(d => d.DeliveryNo == deliveryNo) .ExecuteCommand(); // 批量插入优化(使用正确的barcodeList) result = Db.Fastest().BulkCopy(barcodeList); }, ex => { // 增强异常信息 //_logMessageDhdBar = _logMessageDhdBar + $"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"; throw new Exception($"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"); }); return result; } public dynamic GetXkyHwsd(XKYGetDhdHwsdRequest entity) { _logMessageDhdHwsd = "【SysAuto】携客云送货单货物送达。"; /// /// 请求报文缓存(存储序列化后的JSON请求内容) /// string _requestJson = string.Empty; /// /// 动态响应对象(存储反序列化的携客云接口响应) /// dynamic _responseData = new System.Dynamic.ExpandoObject(); /// /// 接口执行时间(格式:yyyy-MM-dd HH:mm:ss) /// string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /// /// 接口调用状态(0-失败 1-成功) /// 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/delivery/updateDeliveryStatus.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; var logService = new LogService(); logService.CreateLogI( db: Db, edtUserGuid: Guid.Parse("11111111-1111-1111-1111-111111111111"), abtGuid: null, abtTable: "MES_INV_ITEM_ARN", 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: "MES_INV_ITEM_ARN", detail: _logMessageDhdBar + $"系统异常错误:{e.Message}\n跟踪:{e.StackTrace}", orderNo: "", sendJson: _requestJson, rtnJson: JsonConvert.SerializeObject(_responseData), xkyBeginTime: "", xkyEndTime: "", sendStatus: 0, executeTime: _executeTimestamp ); throw new Exception(e.Message); } } }