diff --git a/Myshipping.Application/Service/BookingOrderSeaeEdi/BookingOrderSeaeEdiService.cs b/Myshipping.Application/Service/BookingOrderSeaeEdi/BookingOrderSeaeEdiService.cs index 255d4447..bdff8a68 100644 --- a/Myshipping.Application/Service/BookingOrderSeaeEdi/BookingOrderSeaeEdiService.cs +++ b/Myshipping.Application/Service/BookingOrderSeaeEdi/BookingOrderSeaeEdiService.cs @@ -349,11 +349,10 @@ namespace Myshipping.Application } #region 舱单发送前,校验 - if (isCheck == true && (type is "3" or "1" or "0")) + if (isCheck == true && (type is "1" or "0")) { var checkResult = new List(); // 需要在舱单发送前增加以下字段的比对,由舱单字段与订舱数据字段做比对,比对存在异常提醒客户是否确认发送,对比字段如下: - // 主单提单号:主单主单提单号与订舱主提单号不一致时提醒 // 船名航次,唛头,货描 ,起运港,卸货港:主单与订舱 或 分单与主单不一致时提醒 // 件数,重量,尺码(按箱子判断):分单之和>主单 或 主单 != 订舱 时提醒 @@ -371,13 +370,18 @@ namespace Myshipping.Application { throw Oops.Bah("未找到订舱数据"); } + var 订舱箱子列表 = await _repBookingCtn.AsQueryable() + .Filter(null, true) + .Where(x => x.BILLID == bkOrderId && x.IsDeleted == false) + .ToListAsync(); // 舱单主单 var mainSeaOrder = waitCheckSeaList.FirstOrDefault(x => string.IsNullOrWhiteSpace(x.HBLNO)); // 舱单分单 var subSeaOrderList = waitCheckSeaList.Where(x => !string.IsNullOrWhiteSpace(x.HBLNO)).ToList(); - // 校验1:船名航次,唛头,货描 ,起运港,卸货港 + // 校验1:船名航次,唛头,货描 ,起运港,卸货港,主单提单号 + if (bkOrder.MBLNO != mainSeaOrder.MBLNO) checkResult.Add("舱单主单与订舱【提单号】不一致"); if (bkOrder.VESSEL != mainSeaOrder.VESSEL) checkResult.Add("舱单主单与订舱【船名】不一致"); if (bkOrder.VOYNO != mainSeaOrder.VOYNO) checkResult.Add("舱单主单与订舱【航次】不一致"); if (bkOrder.MARKS != mainSeaOrder.MARKS) checkResult.Add("舱单主单与订舱【唛头】不一致"); @@ -386,12 +390,12 @@ namespace Myshipping.Application if (bkOrder.PORTDISCHARGEID != mainSeaOrder.PORTDISCHARGEID || bkOrder.PORTDISCHARGE != mainSeaOrder.PORTDISCHARGE) checkResult.Add("舱单主单与订舱【卸货港】不一致"); subSeaOrderList.ForEach(x => { - if (bkOrder.VESSEL != x.VESSEL) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【船名】不一致"); - if (bkOrder.VOYNO != x.VOYNO) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【航次】不一致"); - if (bkOrder.MARKS != x.MARKS) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【唛头】不一致"); - if (bkOrder.DESCRIPTION != x.DESCRIPTION) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【货描】不一致"); - if (bkOrder.PORTLOADID != x.PORTLOADID || bkOrder.PORTLOAD != x.PORTLOAD) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【起运港】不一致"); - if (bkOrder.PORTDISCHARGEID != x.PORTDISCHARGEID || bkOrder.PORTDISCHARGE != x.PORTDISCHARGE) checkResult.Add($"舱单分单【{x.HBLNO}】与主单【卸货港】不一致"); + if (bkOrder.VESSEL != x.VESSEL) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【船名】不一致"); + if (bkOrder.VOYNO != x.VOYNO) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【航次】不一致"); + if (bkOrder.MARKS != x.MARKS) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【唛头】不一致"); + if (bkOrder.DESCRIPTION != x.DESCRIPTION) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【货描】不一致"); + if (bkOrder.PORTLOADID != x.PORTLOADID || bkOrder.PORTLOAD != x.PORTLOAD) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【起运港】不一致"); + if (bkOrder.PORTDISCHARGEID != x.PORTDISCHARGEID || bkOrder.PORTDISCHARGE != x.PORTDISCHARGE) checkResult.Add($"舱单分单【{x.HBLNO}】与订舱【卸货港】不一致"); }); @@ -399,12 +403,21 @@ namespace Myshipping.Application var 主单箱子列表 = waitCheckSeaCtnList.Where(x => x.PId == mainSeaOrder.Id).ToList(); var 分单箱子列表 = waitCheckSeaCtnList.Where(x => x.PId != mainSeaOrder.Id).ToList(); - var 主单件数 = 主单箱子列表.Sum(x => x.PKGS); - if (主单件数 != (bkOrder.PKGS ?? 0)) checkResult.Add("舱单主单与订舱【件数】不一致"); - var 主单重量 = 主单箱子列表.Sum(x => x.KGS); - if (主单重量 != (bkOrder.KGS ?? 0)) checkResult.Add("舱单主单与订舱【重量】不一致"); - var 主单尺码 = 主单箱子列表.Sum(x => x.CBM); - if (主单尺码 != (bkOrder.CBM ?? 0)) checkResult.Add("舱单主单与订舱【尺码】不一致"); + foreach (var item in 主单箱子列表.GroupBy(x => x.CNTRNO)) + { + if (item.Sum(x => x.PKGS) != 订舱箱子列表.Where(x => x.CNTRNO == item.Key).Sum(x => x.PKGS)) + { + checkResult.Add($"箱号为【{item.Key}】的箱子,在舱单主单中的【件数】与订舱中同箱号箱子的【件数】不一致"); + } + if (item.Sum(x => x.KGS) != 订舱箱子列表.Where(x => x.CNTRNO == item.Key).Sum(x => x.KGS)) + { + checkResult.Add($"箱号为【{item.Key}】的箱子,在舱单主单中的【重量】与订舱中同箱号箱子的【重量】不一致"); + } + if (item.Sum(x => x.CBM) != 订舱箱子列表.Where(x => x.CNTRNO == item.Key).Sum(x => x.CBM)) + { + checkResult.Add($"箱号为【{item.Key}】的箱子,在舱单主单中的【尺码】与订舱中同箱号箱子的【尺码】不一致"); + } + } foreach (var item in 分单箱子列表.GroupBy(x => x.CNTRNO)) { @@ -423,11 +436,6 @@ namespace Myshipping.Application } // 校验3:箱号+封号+箱型 - var 订舱箱子列表 = await _repBookingCtn.AsQueryable() - .Filter(null, true) - .Where(x => x.BILLID == bkOrderId && x.IsDeleted == false) - .ToListAsync(); - var 订舱箱封号箱型列表 = 订舱箱子列表.Select(x => $"箱号[{x.CNTRNO}] 封号[{x.SEALNO}] 箱型[{x.CTNALL}]").ToList(); var 主单箱封号箱型列表 = 主单箱子列表.Select(x => $"箱号[{x.CNTRNO}] 封号[{x.SEALNO}] 箱型[{x.CTNALL}]").ToList(); var 分单箱封号箱型列表 = 分单箱子列表.Select(x => $"箱号[{x.CNTRNO}] 封号[{x.SEALNO}] 箱型[{x.CTNALL}]").Distinct().ToList(); @@ -437,15 +445,19 @@ namespace Myshipping.Application { checkResult.Add($"订舱中的下列箱信息在舱单主单中不存在:{string.Join(",", list1)}"); } - var list2 = 主单箱封号箱型列表.Except(订舱箱封号箱型列表); - if (list2.Any()) - { - checkResult.Add($"舱单主单中的下列箱信息在订舱中不存在:{string.Join(",", list2)}"); - } - var list3 = 分单箱封号箱型列表.Except(主单箱封号箱型列表); - if (list3.Any()) + else { - checkResult.Add($"舱单分单中的下列箱信息在舱单主单中不存在:{string.Join(",", list3)}"); + var list2 = 主单箱封号箱型列表.Except(订舱箱封号箱型列表); + if (list2.Any()) + { + checkResult.Add($"舱单主单中的下列箱信息在订舱中不存在:{string.Join(",", list2)}"); + } + + var list3 = 分单箱封号箱型列表.Except(主单箱封号箱型列表); + if (list3.Any()) + { + checkResult.Add($"舱单分单中存在未知的箱信息:{string.Join(",", list3)}"); + } } if (checkResult.Count > 0)