diff --git a/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs b/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs index eafa4fde..5c7e76d6 100644 --- a/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs +++ b/Myshipping.Application/EDI/ZhongYuanSoApiHelper.cs @@ -108,8 +108,8 @@ namespace Myshipping.Application.EDI } //目的地,2024-5-9,衣国豪需求,由目的港改为目的地 - var mapPort = mappingPort.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.DESTINATIONCODE); - if (mapPort == null) + var mapDestination = mappingPort.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.DESTINATIONCODE); + if (mapDestination == null) { return new KeyValuePair(false, $"未找到目的地映射信息:{custOrder.DESTINATIONCODE}"); } @@ -126,28 +126,37 @@ namespace Myshipping.Application.EDI { return new KeyValuePair(false, $"映射配置不正确:{mappService.MapCode}"); } - - var mapServArr = mappService.MapCode.Split('-'); + string[] arrService = null; + if (mappService == null) + { + arrService = custOrder.SERVICE.Split('-'); + } + else + { + arrService = mappService.MapCode.Split('-'); + } //var startDay = template.StartDay.HasValue ? template.StartDay.Value : 1; //var endWeek = template.EndWeek.HasValue ? template.EndWeek.Value : 2; - postModel.routes = new ZhongYuanSoApiRoute() - { - originCity = mapPortLoad.MapCode, - destinationCity = mapPort.MapCode, - polPortName = custOrder.PolPortName, - podPortName = custOrder.PodPortName, - vesselName = custOrder.VESSEL, - voyageNumber = custOrder.VOYNO, - serviceCode = custOrder.LANECODE, - //sailSchedulePriority = template.Priority.Split(',').ToList(), - outboundHaulage = mapServArr[0], - inboundHaulage = mapServArr[1], - searchConditionDate = custOrder.ETD.Value.AddDays(-2).ToString("yyyy-MM-dd"), - numberOfWeeks = 2, - etd = custOrder.ETD.Value.ToString("yyyy-MM-dd"), - }; + // 路线数据 + //postModel.routes = new ZhongYuanSoApiRoute() + //{ + // originCity = mapPortLoad.MapCode, + // destinationCity = mapPort.MapCode, + // polPortName = custOrder.PolPortName, + // podPortName = custOrder.PodPortName, + // vesselName = custOrder.VESSEL, + // voyageNumber = custOrder.VOYNO, + // serviceCode = custOrder.LANECODE, + // //sailSchedulePriority = template.Priority.Split(',').ToList(), + // outboundHaulage = mapServArr[0], + // inboundHaulage = mapServArr[1], + // searchConditionDate = custOrder.ETD.Value.AddDays(-2).ToString("yyyy-MM-dd"), + // numberOfWeeks = 2, + // etd = custOrder.ETD.Value.ToString("yyyy-MM-dd"), + //}; + #region 收发通及货代 //发货人 @@ -313,6 +322,10 @@ namespace Myshipping.Application.EDI var ctns = await repCtn.AsQueryable().Filter(null, true).Where(x => x.BILLID == custOrder.Id).ToListAsync(); postModel.boxInfos = new List(); + + // 箱型转换:用于订舱参数“路线信息”里的箱型数据 + var mapCtnCodeList = new List(); + foreach (var ctn in ctns) { if (!ctn.CTNNUM.HasValue || !ctn.KGS.HasValue) @@ -325,6 +338,7 @@ namespace Myshipping.Application.EDI { return new KeyValuePair(false, $"未找箱型映射信息:{ctn.CTNCODE}"); } + mapCtnCodeList.Add(mapCtn.MapName); var apiBox = new ZhongYuanSoApiBoxInfo() { @@ -337,7 +351,6 @@ namespace Myshipping.Application.EDI postModel.boxInfos.Add(apiBox); } - var mapFrt = mappingFrt.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.FRTCODE); if (mapFrt == null) { @@ -383,9 +396,39 @@ namespace Myshipping.Application.EDI remarksForEntireBooking = custOrder.SOREMARK }; - Log.Information($"发送API数据给爬虫({sCfgSpiderUrl.Value}):{postModel.ToJsonString()}"); - var rtn = await sCfgSpiderUrl.Value.SetBody(postModel) - .PostAsStringAsync(); + // 船期数据 + if (string.IsNullOrEmpty(custOrder.ExtendData)) + { + return new KeyValuePair(false, $"船期数据信息不存在,请选择船期"); + } + var extData = JObject.Parse(custOrder.ExtendData); + postModel.shipInfo = extData.GetJObjectValue("shipInfo"); + + // 路线数据(中远-新格式) + postModel.routes = new + { + numberOfWeeks = 2, + searchConditionDate = custOrder.ETD.Value.AddDays(-2).ToString("yyyy-MM-dd"), + originName = mapPortLoad.MapName, + destinationName = mapDestination.MapName, + outboundHaulage = arrService[0], + inboundHaulage = arrService[1], + + contractNo = custOrder.CONTRACTNO, + cargoNature = custOrder.CARGOID switch + { + "S" => "General", + "R" => "Reefer", + "D" => "Dangerous", + _ => "" + }, + containerTypeList = mapCtnCodeList + }; + + var postModelJson = postModel.ToJsonString(); + Log.Information($"发送API数据给爬虫({sCfgSpiderUrl.Value}):{postModelJson}"); + var rtn = await sCfgSpiderUrl.Value.SetBody(postModel).PostAsStringAsync(); + //var rtn = await "http://www.baidu323.com".SetBody(postModel).PostAsStringAsync(); Log.Information($"爬虫返回:{rtn}"); var jobjRtn = JObject.Parse(rtn); @@ -491,7 +534,8 @@ namespace Myshipping.Application.EDI /// /// 路线信息 /// - public ZhongYuanSoApiRoute routes { get; set; } + public object routes { get; set; } + //public ZhongYuanSoApiRoute routes { get; set; } /// /// 发货人信息 @@ -537,6 +581,11 @@ namespace Myshipping.Application.EDI /// 特殊要求及备注 /// public ZhongYuanSoApiSpecial special { get; set; } + + /// + /// 船期数据 + /// + public dynamic shipInfo { get; set; } } /// diff --git a/Myshipping.Application/Service/BookingCustomerOrder/BookingCustomerOrderService.cs b/Myshipping.Application/Service/BookingCustomerOrder/BookingCustomerOrderService.cs index f8d96b62..893dc62b 100644 --- a/Myshipping.Application/Service/BookingCustomerOrder/BookingCustomerOrderService.cs +++ b/Myshipping.Application/Service/BookingCustomerOrder/BookingCustomerOrderService.cs @@ -330,10 +330,10 @@ namespace Myshipping.Application //日志动态 SaveAuditLog(input.Id == 0 ? "已录入" : "已修改", entity.Id); - //EMC需要保存船期原始数据 - if (input.CARRIERID == "EMC" && input.ShipData != null) + //EMC、COSCO需要保存船期原始数据 + if (input.CARRIERID is "EMC" or "COSCO" && input.ShipData != null) { - _logger.LogInformation($"保存船期数据EMC:{input.ShipData}"); + _logger.LogInformation($"保存船期数据:{input.ShipData}"); JObject jobjExt = new JObject(); if (!string.IsNullOrEmpty(entity.ExtendData)) { @@ -985,7 +985,8 @@ namespace Myshipping.Application { apiUrl += "/"; } - apiUrl += "v1/cosco/ship/schedule"; + //apiUrl += "v1/cosco/ship/schedule"; 旧的地址 + apiUrl += "v1/cosco/new_booking/ship/query"; //起运港 var mapPortLoad = mappingPortLoad.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.PORTLOADCODE); @@ -1001,6 +1002,20 @@ namespace Myshipping.Application throw Oops.Bah($"未找到目的地映射信息:{custOrder.DESTINATIONCODE}"); } + //箱型转换 + var disCtnCode = ctns.Select(x => x.CTNCODE).Distinct().ToList(); + var mapCtnCodeList = new List(); + foreach (var ctnall in disCtnCode) + { + //var all = mappingCtn.Where(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" ).ToList(); + var mapCtn = mappingCtn.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == ctnall); + if (mapCtn == null) + { + throw Oops.Bah($"未找到箱型映射信息:{ctnall}"); + } + mapCtnCodeList.Add(mapCtn.MapName); + } + //运输方式 var mapService = mappingService.FirstOrDefault(x => x.Module == "DjyCustBooking" && x.CarrierCode == "COSCO" && x.Code == custOrder.SERVICE); string[] arrService = null; @@ -1019,15 +1034,28 @@ namespace Myshipping.Application userSecret = sCfgUserSecret.Value, webAccount = custOrder.BookingAccount, webPassword = custOrder.BookingPassword, - numberOfWeeks = 2, - searchConditionDate = custOrder.ETD.Value.AddDays(-2).ToString("yyyy-MM-dd"), - originName = mapPortLoad.MapName, - destinationName = mapDestination.MapName, - cargoNature = "BOTH", - outboundHaulage = arrService[0], - inboundHaulage = arrService[1] + routes = new + { + numberOfWeeks = 2, + searchConditionDate = custOrder.ETD.Value.AddDays(-2).ToString("yyyy-MM-dd"), + originName = mapPortLoad.MapName, + destinationName = mapDestination.MapName, + outboundHaulage = arrService[0], + inboundHaulage = arrService[1], + + // 2024-10-8调整: + contractNo = custOrder.CONTRACTNO, + cargoNature = custOrder.CARGOID switch + { + "S" => "General", + "R" => "Reefer", + "D" => "Dangerous", + _ => "" + }, + containerTypeList = mapCtnCodeList + } }; - + _logger.LogInformation($"发送查询API数据给爬虫({apiUrl}):{postModel.ToJsonString()}"); var rtnQuery = await apiUrl.SetBody(postModel) .PostAsStringAsync(); @@ -3110,9 +3138,9 @@ namespace Myshipping.Application throw Oops.Bah("服务项目不能为空"); } - if (input.CARRIERID == "EMC" && string.IsNullOrEmpty(input.ShipInfoJson)) + if (input.CARRIERID is "EMC" or "COSCO" && string.IsNullOrEmpty(input.ShipInfoJson)) { - throw Oops.Bah($"长荣订舱需提供船期数据"); + throw Oops.Bah($"【长荣或中远】订舱需提供船期数据"); } #endregion @@ -3148,7 +3176,7 @@ namespace Myshipping.Application jobjExt = JObject.Parse(custOrder.ExtendData); } - if (custOrder.CARRIERID == "EMC") + if (custOrder.CARRIERID is "EMC" or "COSCO") { jobjExt["shipInfo"] = JObject.Parse(input.ShipInfoJson); } diff --git a/Myshipping.Application/Service/BookingCustomerOrder/Dto/Dtos.cs b/Myshipping.Application/Service/BookingCustomerOrder/Dto/Dtos.cs index 70e1e3a3..9bccd366 100644 --- a/Myshipping.Application/Service/BookingCustomerOrder/Dto/Dtos.cs +++ b/Myshipping.Application/Service/BookingCustomerOrder/Dto/Dtos.cs @@ -823,7 +823,7 @@ namespace Myshipping.Application public List ServiceItemList { get; set; } /// - /// 船期数据(EMC需要) + /// 船期数据(EMC、COSCO需要) /// public dynamic ShipData { get; set; } } diff --git a/Myshipping.Web.Core/dbsettings.json b/Myshipping.Web.Core/dbsettings.json index fb372840..1192b24f 100644 --- a/Myshipping.Web.Core/dbsettings.json +++ b/Myshipping.Web.Core/dbsettings.json @@ -30,8 +30,9 @@ { "DbNumber": "common", "DbType": "SqlServer", - "DbString": "Server=60.209.125.238,32009;Database=DevCommonDB;User=sa;Password=Djy@Sql2022.test;MultipleActiveResultSets=True;", - //"DbString": "Server=47.104.73.97,6762;Database=CommonDB;User=sa;Password=QDdjy#2020*;MultipleActiveResultSets=True;" + //"DbString": "Server=60.209.125.238,32009;Database=DevCommonDB;User=sa;Password=Djy@Sql2022.test;MultipleActiveResultSets=True;", + //"DbString": "Server=47.104.73.97,6762;Database=CommonDB;User=sa;Password=QDdjy#2020*;MultipleActiveResultSets=True;", + "DbString": "Server=47.104.73.97,6762;Database=CommonDBDJY;User=sa;Password=QDdjy#2020*;MultipleActiveResultSets=True;" }, { "DbNumber": "pingtai",