diff --git a/Myshipping.Application/Helper/PlaceToPortHelper.cs b/Myshipping.Application/Helper/PlaceToPortHelper.cs index 0a291702..2ee63f03 100644 --- a/Myshipping.Application/Helper/PlaceToPortHelper.cs +++ b/Myshipping.Application/Helper/PlaceToPortHelper.cs @@ -10,6 +10,13 @@ namespace Myshipping.Application.Helper { public static class PlaceToPortHelper { + /// + /// 根据收货地港口英文名解析出起始港对象 + /// + /// 收货地港口英文名 + /// 起始港缓存 + /// 起始港缓存映射 + /// 起始港对象 public static async Task PlaceReceiptToPortload(string portEnName, List cachePortLoad, Func>> cacheMapPortLoadFunc) { if (string.IsNullOrEmpty(portEnName)) @@ -42,6 +49,13 @@ namespace Myshipping.Application.Helper } return null; } + /// + /// 根据交货地港口英文名解析出目的港对象 + /// + /// 交货地港口英文名 + /// 目的港缓存 + /// 目的港缓存映射 + /// 目的港对象 public static async Task PlaceDeliveryToPort(string portEnName, List cachePort, Func>> cacheMapPortFunc) { if (string.IsNullOrEmpty(portEnName)) diff --git a/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs b/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs index 6c2539db..681ecc99 100644 --- a/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs +++ b/Myshipping.Application/Service/BookingSlot/BookingSlotService.cs @@ -1091,7 +1091,7 @@ namespace Myshipping.Application /// /// [HttpPost("/BookingSlot/refreshAllStock")] - public async Task RefreshAllStock([FromBody] long telentId) + public async Task RefreshAllStock([FromQuery] long telentId) { var n = await _repStock.DeleteAsync(x => x.TenantId == telentId); @@ -1131,18 +1131,18 @@ namespace Myshipping.Application /// 根据某租户下面所有收货地、交货地、计算出装货港、卸货港 /// [HttpPost("/BookingSlot/refreshAllPort")] - public async Task RefreshAllPort([FromBody] long telentId) + public async Task RefreshAllPort([FromQuery] long? telentId, [FromQuery] int? type) { var cachePort = await _cache.GetAllCodePort(); var cachePortLoad = await _cache.GetAllCodePortLoad(); var list = await _repBase.AsQueryable().Filter(null, true) - .Where(x => x.TenantId == telentId - && x.IsDeleted == false - && x.IS_CANCELLATION == false - && !string.IsNullOrEmpty(x.PLACERECEIPT) - && !string.IsNullOrEmpty(x.PLACEDELIVERY) - && (string.IsNullOrEmpty(x.PORTLOADID) || string.IsNullOrEmpty(x.PORTDISCHARGEID))) + .Where(x => x.IsDeleted == false && x.IS_CANCELLATION == false) + .WhereIF(telentId != null, x => x.TenantId == telentId) + .WhereIF(type == 1, x => !string.IsNullOrEmpty(x.PLACERECEIPT) && (string.IsNullOrEmpty(x.PORTLOADID) || string.IsNullOrEmpty(x.PORTLOAD))) + .WhereIF(type == 2, x => !string.IsNullOrEmpty(x.PLACEDELIVERY) && (string.IsNullOrEmpty(x.PORTDISCHARGEID) || string.IsNullOrEmpty(x.PORTDISCHARGE))) + .WhereIF(type == null, x => (!string.IsNullOrEmpty(x.PLACERECEIPT) || !string.IsNullOrEmpty(x.PLACEDELIVERY)) + && (string.IsNullOrEmpty(x.PORTDISCHARGE) || string.IsNullOrEmpty(x.PORTDISCHARGEID) || string.IsNullOrEmpty(x.PORTLOAD) || string.IsNullOrEmpty(x.PORTLOADID))) .Select(x => new BookingSlotBase() { Id = x.Id, @@ -1168,82 +1168,101 @@ namespace Myshipping.Application foreach (var item in list) { // 解析收货地,得到装货港名称及五字码 - var portEnName = item.PLACERECEIPT.Split(',')[0]?.Trim(); - if (!string.IsNullOrWhiteSpace(portEnName) - && (string.IsNullOrEmpty(item.PORTLOADID) || string.IsNullOrEmpty(item.PORTLOAD))) + if (!string.IsNullOrEmpty(item.PLACERECEIPT)) { - var portInfo = await PlaceToPortHelper.PlaceReceiptToPortload(portEnName, cachePortLoad, () => _cache.GetAllMappingPortLoad()); - if (portInfo != null) + var portEnName = item.PLACERECEIPT.Split(',')[0]?.Trim(); + if (!string.IsNullOrWhiteSpace(portEnName) + && (string.IsNullOrEmpty(item.PORTLOADID) || string.IsNullOrEmpty(item.PORTLOAD))) { - if (string.IsNullOrEmpty(item.PORTLOADID)) + var portInfo = await PlaceToPortHelper.PlaceReceiptToPortload(portEnName, cachePortLoad, () => _cache.GetAllMappingPortLoad()); + if (portInfo != null) { - updateIdSet.Add(item.Id); - item.PORTLOADID = portInfo.EdiCode; + //if (string.IsNullOrEmpty(item.PORTLOADID)) + { + updateIdSet.Add(item.Id); + item.PORTLOADID = portInfo.EdiCode; + } + //if (string.IsNullOrEmpty(item.PORTLOAD)) + { + //updateIdSet.Add(item.Id); + item.PORTLOAD = portInfo.EnName; + } } - if (string.IsNullOrEmpty(item.PORTLOAD)) + else { - updateIdSet.Add(item.Id); - item.PORTLOAD = portInfo.EnName; + _logger.LogInformation("通过收货地城市名称未匹配到港口信息,订舱编号:{SLOT_BOOKING_NO}", item.SLOT_BOOKING_NO); } } - else - { - _logger.LogInformation("通过收货地城市名称未匹配到港口信息,订舱编号:{SLOT_BOOKING_NO}", item.SLOT_BOOKING_NO); - } } // 解析交货地,得到为卸货港名称及五字码, 以及国家信息 - var portEnName2 = item.PLACEDELIVERY.Split(',')[0]?.Trim(); - if (!string.IsNullOrWhiteSpace(portEnName2)) + if (!string.IsNullOrEmpty(item.PLACEDELIVERY)) { - var portInfo = await PlaceToPortHelper.PlaceDeliveryToPort(portEnName2, cachePort, () => _cache.GetAllMappingPort()); - - if (portInfo != null - && (string.IsNullOrEmpty(item.PORTDISCHARGEID) - || string.IsNullOrEmpty(item.PORTDISCHARGE) - || string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY_CODE) - || string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY))) + var portEnName2 = item.PLACEDELIVERY.Split(',')[0]?.Trim(); + if (!string.IsNullOrWhiteSpace(portEnName2)) { - if (string.IsNullOrEmpty(item.PORTDISCHARGEID)) - { - updateIdSet.Add(item.Id); - item.PORTDISCHARGEID = portInfo.EdiCode; - } - if (string.IsNullOrEmpty(item.PORTDISCHARGE)) - { - updateIdSet.Add(item.Id); - item.PORTDISCHARGE = portInfo.EnName; - } - if (string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY_CODE)) + var portInfo = await PlaceToPortHelper.PlaceDeliveryToPort(portEnName2, cachePort, () => _cache.GetAllMappingPort()); + + if (portInfo != null + && (string.IsNullOrEmpty(item.PORTDISCHARGEID) + || string.IsNullOrEmpty(item.PORTDISCHARGE) + || string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY_CODE) + || string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY))) { - updateIdSet.Add(item.Id); - item.PORTDISCHARGE_COUNTRY_CODE = portInfo.CountryCode; + //if (string.IsNullOrEmpty(item.PORTDISCHARGEID)) + { + updateIdSet.Add(item.Id); + item.PORTDISCHARGEID = portInfo.EdiCode; + } + //if (string.IsNullOrEmpty(item.PORTDISCHARGE)) + { + //updateIdSet.Add(item.Id); + item.PORTDISCHARGE = portInfo.EnName; + } + //if (string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY_CODE)) + { + //updateIdSet.Add(item.Id); + item.PORTDISCHARGE_COUNTRY_CODE = portInfo.CountryCode; + } + //if (string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY)) + { + //updateIdSet.Add(item.Id); + item.PORTDISCHARGE_COUNTRY = portInfo.Country; + } } - if (string.IsNullOrEmpty(item.PORTDISCHARGE_COUNTRY)) + else { - updateIdSet.Add(item.Id); - item.PORTDISCHARGE_COUNTRY = portInfo.Country; + _logger.LogInformation("通过交货地城市名称未匹配到港口信息,订舱编号:{SLOT_BOOKING_NO}", item.SLOT_BOOKING_NO); } } - else - { - _logger.LogInformation("通过交货地城市名称未匹配到港口信息,订舱编号:{SLOT_BOOKING_NO}", item.SLOT_BOOKING_NO); - } } } if (updateIdSet.Count > 0) { var updateList = list.Where(x => updateIdSet.Contains(x.Id)).ToList(); - await _repBase.AsUpdateable(updateList).UpdateColumns(x => new - { - x.PORTLOADID, - x.PORTDISCHARGEID, - x.PORTLOAD, - x.PORTDISCHARGE, - x.PORTDISCHARGE_COUNTRY_CODE, - x.PORTDISCHARGE_COUNTRY, - }).ExecuteCommandAsync(); + await _repBase.AsUpdateable(updateList) + .UpdateColumnsIF(type == 1, x => new + { + x.PORTLOADID, + x.PORTLOAD, + }) + .UpdateColumnsIF(type == 2, x => new + { + x.PORTDISCHARGEID, + x.PORTDISCHARGE, + x.PORTDISCHARGE_COUNTRY_CODE, + x.PORTDISCHARGE_COUNTRY, + }) + .UpdateColumnsIF(type == null, x => new + { + x.PORTLOADID, + x.PORTDISCHARGEID, + x.PORTLOAD, + x.PORTDISCHARGE, + x.PORTDISCHARGE_COUNTRY_CODE, + x.PORTDISCHARGE_COUNTRY, + }).ExecuteCommandAsync(); var group = updateList.Where(x => !string.IsNullOrEmpty(x.VESSEL) && !string.IsNullOrEmpty(x.VOYNO) @@ -1263,21 +1282,24 @@ namespace Myshipping.Application x.CONTRACT_NO, x.TenantId }).ToList(); - - foreach (var item in group) + _ = Task.Run(async () => { - await _publisher.PublishAsync(new ChannelEventSource("BookingSlotStock:Update", new BookingSlotStockUpdateModel + foreach (var item in group) { - BOOKING_SLOT_TYPE = item.Key.BOOKING_SLOT_TYPE, - CARRIERID = item.Key.CARRIERID, - CONTRACT_NO = item.Key.CONTRACT_NO, - VESSEL = item.Key.VESSEL, - VOYNO = item.Key.VOYNO, - PORTLOADID = item.Key.PORTLOADID, - PORTDISCHARGEID = item.Key.PORTDISCHARGEID, - TenantId = item.Key.TenantId - })); - } + await Task.Delay(1000); + await _publisher.PublishAsync(new ChannelEventSource("BookingSlotStock:Update", new BookingSlotStockUpdateModel + { + BOOKING_SLOT_TYPE = item.Key.BOOKING_SLOT_TYPE, + CARRIERID = item.Key.CARRIERID, + CONTRACT_NO = item.Key.CONTRACT_NO, + VESSEL = item.Key.VESSEL, + VOYNO = item.Key.VOYNO, + PORTLOADID = item.Key.PORTLOADID, + PORTDISCHARGEID = item.Key.PORTDISCHARGEID, + TenantId = item.Key.TenantId + })); + } + }); } } #endregion