修改MSK SPOT订舱

master
jianghaiqing 5 months ago
parent ed25bb1ecd
commit bac918c157

@ -157,9 +157,9 @@ namespace Myshipping.Application.Service.BookingOrder
/// <param name="model">请求船期详情</param>
/// <returns>返回船期结果</returns>
[HttpPost("/BookingMSKSPOTAPI/SearchShipSailingSchedule")]
public async Task<List<MSKAPISPOTSearchScheduleRateResultDataDto>> SearchShipSailingSchedule(QueryMSKSPOTShipSailingScheduleDto model)
public async Task<List<MSKAPISPOTScheduleRateResultShowDto>> SearchShipSailingSchedule(QueryMSKSPOTShipSailingScheduleDto model)
{
List<MSKAPISPOTSearchScheduleRateResultDataDto> list = new List<MSKAPISPOTSearchScheduleRateResultDataDto>();
List<MSKAPISPOTScheduleRateResultShowDto> list = new List<MSKAPISPOTScheduleRateResultShowDto>();
/*
MSKApiSailingSchedulePoint2Point
@ -285,12 +285,158 @@ namespace Myshipping.Application.Service.BookingOrder
if (resultInfo != null && resultInfo.code == 200
&& resultInfo.data != null && resultInfo.data.Count > 0)
{
list = resultInfo.data;
foreach (var scheduleModel in list)
foreach (var scheduleModel in resultInfo.data)
{
await CacheShipSailingSchedule(scheduleModel);
CacheShipSailingSchedule(scheduleModel).GetAwaiter().GetResult();
}
list = resultInfo.data.Select(a =>
{
MSKAPISPOTScheduleRateResultShowDto showDto = new MSKAPISPOTScheduleRateResultShowDto
{
priceID = a.priceID,
PId = a.PId,
MD5 = a.MD5,
totalAmount = a.totalAmount.HasValue ? (decimal)a.totalAmount.Value : 0,
TotalCurrency = a.totalCurrency,
orignCarrierCityGeoID = a.originGeoId,
orignUNLocationCode = a.originUnLocCode,
orignCityName = a.originCityName,
originRegionName = a.originRegionName,
originCountryName = a.originCountryName,
deliveryCarrierCityGeoID = a.destinationGeoId,
deliveryUNLocationCode = a.destinationUnLocCode,
deliveryCityName = a.destinationCityName,
deliveryRegionName = a.destinationRegionName,
deliveryCountryName = a.destinationCountryName,
vesselName = a.vesselName,
carrierDepartureVoyageNumber = a.voyageNumber,
Legs = new List<MSKAPISPOTScheduleRateResultShowLegsDto>()
};
//ETD
if (!string.IsNullOrWhiteSpace(a.departureDate))
{
DateTime currDate = DateTime.MinValue;
if (DateTime.TryParse(a.departureDate, out currDate))
{
showDto.ETD = currDate;
}
else
{
throw Oops.Bah($"查询船期错误priceID={a.priceID} pid={a.PId} 预计离港日期departureDate={a.departureDate} 格式解析错误");
}
}
//ETA
if (!string.IsNullOrWhiteSpace(a.arrivalDate))
{
DateTime currDate = DateTime.MinValue;
if (DateTime.TryParse(a.arrivalDate, out currDate))
{
showDto.ETA = currDate;
}
else
{
throw Oops.Bah($"查询船期错误priceID={a.priceID} pid={a.PId} 预计到达日期 arrivalDate={a.arrivalDate} 格式解析错误");
}
}
//计算预计天数
if (showDto.ETD.HasValue && showDto.ETA.HasValue)
{
TimeSpan ts = showDto.ETD.Value.Subtract(showDto.ETA.Value);
var timeDiff = ts.TotalHours;
showDto.days = (int)Math.Ceiling(timeDiff / 24.0);
}
if (a.isTransfer.Equals("true", StringComparison.OrdinalIgnoreCase))
showDto.isTransfer = true;
//Legs
if (a.scheduleDetails != null && a.scheduleDetails.Count > 0)
{
var legs = a.scheduleDetails.Select(b =>
{
MSKAPISPOTScheduleRateResultShowLegsDto leg = new MSKAPISPOTScheduleRateResultShowLegsDto
{
vesselName = b.transport.vessel.longName,
VoyageNo = b.transport.voyageNumber,
From = new MSKAPISPOTScheduleRateResultShowLegsLocationDto {
CityGeoId = b.fromLocation.cityGeoId,
CityName = b.fromLocation.cityName,
CountryCode = b.fromLocation.countryCode,
CountryName = b.fromLocation.countryName,
rkstCode = b.fromLocation.rkstCode,
SiteGeoId = b.fromLocation.siteGeoId,
LocationType = "From",
RegionName = b.fromLocation.regionName,
SiteName = b.fromLocation.siteName,
UnLocCode = b.fromLocation.unLocCode,
},
To = new MSKAPISPOTScheduleRateResultShowLegsLocationDto {
CityGeoId = b.toLocation.cityGeoId,
CityName = b.toLocation.cityName,
CountryCode = b.toLocation.countryCode,
CountryName = b.toLocation.countryName,
rkstCode = b.toLocation.rkstCode,
SiteGeoId = b.toLocation.siteGeoId,
LocationType = "To",
RegionName = b.toLocation.regionName,
SiteName = b.toLocation.siteName,
UnLocCode = b.toLocation.unLocCode,
}
};
//ETD
if (!string.IsNullOrWhiteSpace(b.fromLocation.date))
{
DateTime currDate = DateTime.MinValue;
if (DateTime.TryParse($"{b.fromLocation.date} {b.fromLocation.time}", out currDate))
{
leg.ETD = currDate;
}
else
{
throw Oops.Bah($"查询船期错误,航程明细 priceID={a.priceID} pid={a.PId} 预计离港日期fromLocation.date={b.fromLocation.date} {b.fromLocation.time} 格式解析错误");
}
}
//ETA
if (!string.IsNullOrWhiteSpace(b.toLocation.date))
{
DateTime currDate = DateTime.MinValue;
if (DateTime.TryParse(a.arrivalDate, out currDate))
{
leg.ETD = currDate;
}
else
{
throw Oops.Bah($"查询船期错误,航程明细 priceID={a.priceID} pid={a.PId} 预计到达日期 toLocation.date={b.toLocation.date} {b.toLocation.time} 格式解析错误");
}
}
return leg;
}).ToList();
showDto.Legs = legs.OrderBy(t=>t.ETD).Select((t,idx)=> {
t.SortNo = idx + 1;
return t;
}).ToList();
}
return showDto;
}).ToList();
}
else
{
@ -315,7 +461,7 @@ namespace Myshipping.Application.Service.BookingOrder
/// <param name="model">船期查询结果明细</param>
/// <param name="busiType">船期类型 MSKSPOT-马士基即期</param>
/// <returns>返回主键ID</returns>
private async Task<long> CacheShipSailingSchedule(MSKAPISPOTSearchScheduleRateResultDataDto model,string busiType = "MSKSPOT")
private async Task CacheShipSailingSchedule(MSKAPISPOTSearchScheduleRateResultDataDto model,string busiType = "MSKSPOT")
{
/*
1IDKEY
@ -344,8 +490,6 @@ namespace Myshipping.Application.Service.BookingOrder
{
await _cache.SetTimeoutAsync(shareKey, Newtonsoft.Json.JsonConvert.SerializeObject(model), expireTimeSpan);
}
return model.PId;
}
#endregion

@ -40,6 +40,282 @@ namespace Myshipping.Application
public long PId { get; set; }
}
public class MSKAPISPOTScheduleRateResultShowDto
{
/// <summary>
/// 主键ID
/// </summary>
public long PId { get; set; }
/// <summary>
/// 船期MD5
/// </summary>
public string MD5 { get; set; }
/// <summary>
/// 价格id, 可进一步通过API进行其他操作
/// </summary>
public string priceID { get; set; }
/// <summary>
/// 币别
/// </summary>
public string TotalCurrency { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal totalAmount { get; set; }
/// <summary>
/// 是否中转
/// </summary>
public bool isTransfer { get; set; }
/// <summary>
/// ETD
/// </summary>
public Nullable<DateTime> ETD { get; set; }
/// <summary>
/// ETA
/// </summary>
public Nullable<DateTime> ETA { get; set; }
/// <summary>
/// 城市名(始发地)
/// </summary>
public string orignCityName { get; set; }
/// <summary>
/// 地点的GEO ID(始发地)
/// </summary>
public string orignCarrierSiteGeoID { get; set; }
/// <summary>
/// 地点的CITY GEO ID(始发地)
/// </summary>
public string orignCarrierCityGeoID { get; set; }
/// <summary>
/// 地点的名称(始发地)
/// </summary>
public string orignLocationName { get; set; }
/// <summary>
/// 省
/// </summary>
public string originRegionName { get; set; }
/// <summary>
/// 国家代码(始发地)
/// </summary>
public string orignCountryCode { get; set; }
/// <summary>
///国家名称(始发地)
/// </summary>
public string originCountryName { get; set; }
/// <summary>
/// 位置类型(始发地)
/// </summary>
public string orignLocationType { get; set; }
/// <summary>
/// 五字码(始发地)
/// </summary>
public string orignUNLocationCode { get; set; }
/// <summary>
/// 区代码(始发地)
/// </summary>
public string orignUNRegionCode { get; set; }
/// <summary>
/// 城市名(目的地)
/// </summary>
public string deliveryCityName { get; set; }
/// <summary>
/// 地点的GEO ID(目的地)
/// </summary>
public string deliveryCarrierSiteGeoID { get; set; }
/// <summary>
/// 地点的CITY GEO ID(目的地)
/// </summary>
public string deliveryCarrierCityGeoID { get; set; }
/// <summary>
/// 地点的名称(目的地)
/// </summary>
public string deliveryLocationName { get; set; }
/// <summary>
/// 省
/// </summary>
public string deliveryRegionName { get; set; }
/// <summary>
/// 国家代码(目的地)
/// </summary>
public string deliveryCountryCode { get; set; }
/// <summary>
/// 国家名称(目的地)
/// </summary>
public string deliveryCountryName { get; set; }
/// <summary>
/// 位置类型(目的地)
/// </summary>
public string deliveryLocationType { get; set; }
/// <summary>
/// 五字码(目的地)
/// </summary>
public string deliveryUNLocationCode { get; set; }
/// <summary>
/// 区代码(目的地)
/// </summary>
public string deliveryUNRegionCode { get; set; }
/// <summary>
/// IMO
/// </summary>
public string vesselIMONumber { get; set; }
/// <summary>
/// 航次号
/// </summary>
public string carrierVesselCode { get; set; }
/// <summary>
/// 运输方式
/// </summary>
public string transportMode { get; set; }
/// <summary>
/// 船名
/// </summary>
public string vesselName { get; set; }
/// <summary>
/// 航次代码
/// </summary>
public string carrierDepartureVoyageNumber { get; set; }
/// <summary>
/// 承运人代码(MAEU, SEAU, SEJJ, MCPU, MAEI)
/// </summary>
public string vesselOperatorCarrierCode { get; set; }
/// <summary>
/// 行程天数
/// </summary>
public int days { get; set; }
/// <summary>
/// 航程明细
/// </summary>
public List<MSKAPISPOTScheduleRateResultShowLegsDto> Legs { get; set; }
}
public class MSKAPISPOTScheduleRateResultShowLegsDto
{
/// <summary>
/// 排序值
/// </summary>
public int SortNo { get; set; }
/// <summary>
/// 船名
/// </summary>
public string vesselName { get; set; }
/// <summary>
/// 航次
/// </summary>
public string VoyageNo { get; set; }
/// <summary>
/// ETD
/// </summary>
public Nullable<DateTime> ETD { get; set; }
/// <summary>
/// ATD
/// </summary>
public Nullable<DateTime> ETA { get; set; }
/// <summary>
/// 起始地
/// </summary>
public MSKAPISPOTScheduleRateResultShowLegsLocationDto From { get; set; }
/// <summary>
/// 目的地
/// </summary>
public MSKAPISPOTScheduleRateResultShowLegsLocationDto To { get; set; }
}
public class MSKAPISPOTScheduleRateResultShowLegsLocationDto
{
/// <summary>
/// 定位类型 From-起始地 To-目的地
/// </summary>
public string LocationType { get; set; }
/// <summary>
/// 码头定位ID
/// </summary>
public string SiteGeoId { get; set; }
/// <summary>
/// 城市定位ID
/// </summary>
public string CityGeoId { get; set; }
/// <summary>
///
/// </summary>
public string rkstCode { get; set; }
/// <summary>
/// 城市定位ID
/// </summary>
public string UnLocCode { get; set; }
/// <summary>
/// 码头全称
/// </summary>
public string SiteName { get; set; }
/// <summary>
/// 城市名
/// </summary>
public string CityName { get; set; }
/// <summary>
/// 省
/// </summary>
public string RegionName { get; set; }
/// <summary>
/// 特别行政区或国家代码
/// </summary>
public string CountryCode { get; set; }
/// <summary>
/// 特别行政区或国家名称
/// </summary>
public string CountryName { get; set; }
}
/// <summary>
/// 马士基即期船期查询结果
/// </summary>
@ -146,7 +422,7 @@ namespace Myshipping.Application
public string voyageNumber { get; set; }
/// <summary>
/// 航次
/// 海运费
/// </summary>
public Nullable<long> oceanFreight { get; set; }

@ -26,7 +26,7 @@ namespace Myshipping.Application.Service.BookingOrder
/// </summary>
/// <param name="model">请求船期详情</param>
/// <returns>返回船期结果</returns>
Task<List<MSKAPISPOTSearchScheduleRateResultDataDto>> SearchShipSailingSchedule(QueryMSKSPOTShipSailingScheduleDto model);
Task<List<MSKAPISPOTScheduleRateResultShowDto>> SearchShipSailingSchedule(QueryMSKSPOTShipSailingScheduleDto model);
/// <summary>
/// 发送马士基订舱请求

@ -3784,7 +3784,7 @@ namespace Myshipping.Application
cautionNoticeTaskWholeShipDto.VoynoNewVal = bcTargetDto.VoyNo;
cautionNoticeTaskWholeShipDto.IsVesselChange = true;
//isNeedWholeShip = true;
isNeedWholeShip = true;
}
else
{
@ -3860,26 +3860,6 @@ namespace Myshipping.Application
_logger.LogInformation($"触发整船提醒完成,结果={JSON.Serialize(wholeShipRlt)}");
}
else
{
if (cautionNoticeTaskWholeShipDto.IsVesselChange)
{
if (bookingSlotAllocList.Count > 0)
{
bookingSlotAllocList.ForEach(async ca =>
{
var bookingInfo = _repBookingOrder.AsQueryable().Filter(null, true).First(x => x.Id == ca.Alloc.BOOKING_ID && x.IsDeleted == false
&& x.TenantId == UserManager.TENANT_ID);
CreateTask(CautionNoticeTaskEnum.ChangeVesselVoyno, bcSrcDto, userList, bookingInfo, slotInfo, srcVesselVoyno, targetVesselVoyno, $"提单号:{bcSrcDto.MBLNo} \r\n船名航次变更了 \r\n原{srcVesselVoyno} \r\n新{targetVesselVoyno}", true);
});
}
else if (slotInfo != null)
{
CreateTask(CautionNoticeTaskEnum.ChangeVesselVoyno, bcSrcDto, userList, null, slotInfo, srcVesselVoyno, targetVesselVoyno, $"提单号:{bcSrcDto.MBLNo} \r\n船名航次变更了 \r\n原{srcVesselVoyno} \r\n新{targetVesselVoyno}", true);
}
}
}
}
}

Loading…
Cancel
Save