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 System.Data.SqlClient; using System.Data; using static NewPdaSqlServer.Controllers.Warehouse.MesXkyController; namespace NewPdaSqlServer.service.QC; public class MesXkyService : RepositoryNoEntity { /// /// 系统自动日志模板(用于携客云接口调用记录) /// private string _logMessage = "【SysAuto】获取携客云送货单。"; /// /// 请求报文缓存(存储序列化后的JSON请求内容) /// private string _requestJson = string.Empty; /// /// 动态响应对象(存储反序列化的携客云接口响应) /// private dynamic _responseData = new System.Dynamic.ExpandoObject(); /// /// 接口执行时间戳(格式:yyyy-MM-dd HH:mm:ss) /// private string _executeTimestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); /// /// 接口调用状态(0-失败 1-成功) /// private int sendStatus = 0; public dynamic XKY_GET_DHD(XKYGetDhdRequest entity) { 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); } //// 新增日志记录(在返回响应前) //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 = "【SysAuto】获取携客云送货单。" }, // 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 (ProcessDeliveryNotice(_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: _logMessage, 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: _logMessage, 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); } } //public dynamic GetXkyDHD(XKYGetDhdRequest entity) //{ // return XKY_GET_DHD(entity); //} //对获取到的携客云送货单做处理 private int ProcessDeliveryNotice(dynamic responseJson) { List noticeList = JsonConvert.DeserializeObject>(responseJson.dataList.ToString()); 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 result = 0; Db.Ado.UseTran(() => { // 删除关联送货明细数据 Db.Deleteable() .Where(d => noticeIds.Contains(Guid.Parse(d.Pid))) .ExecuteCommand(); // 添加空值检查 if (deliveryNos.Any()) { //删除关联送货条码明细 Db.Deleteable() .Where(b => deliveryNos.Contains(b.DeliveryNo)) .ExecuteCommand(); //删除送货单 Db.Deleteable() .Where(n => deliveryNos.Contains(n.DeliveryNo)) .ExecuteCommand(); } // 批量插入优化 result = Db.Fastest().BulkCopy(noticeList); }, ex => { // 增强异常信息 _logMessage = _logMessage + $"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"; //throw new Exception($"数据库操作失败:{ex.Message}\n跟踪:{ex.StackTrace}"); }); return result; } }