diff --git a/ds-wms-service/DS.WMS.Core/Op/EDI/InttraEdiHelper.cs b/ds-wms-service/DS.WMS.Core/Op/EDI/InttraEdiHelper.cs index b214b77e..a9750168 100644 --- a/ds-wms-service/DS.WMS.Core/Op/EDI/InttraEdiHelper.cs +++ b/ds-wms-service/DS.WMS.Core/Op/EDI/InttraEdiHelper.cs @@ -328,8 +328,14 @@ namespace DS.WMS.Core.Op.EDI if (string.IsNullOrEmpty(headData.OpEmail)) { error = error + "
操作的邮箱不能为空"; } } - if (string.IsNullOrEmpty(headData.MBLNO)) - { error = error + "
主提单号不能为空"; } + + //截单时必需校验提单号,订舱时CMA可以不校验提单号必填 + if (InttrEdi.filetype == "E" || (InttrEdi.filetype == "B" && (headData.CARRIEREDICODE != "HLCU" && headData.CARRIEREDICODE != "CMDU" && headData.CARRIEREDICODE != "CHNL"))) + { + if (string.IsNullOrEmpty(headData.MBLNO)) + { error = error + "
主提单号不能为空"; } + } + if (string.IsNullOrEmpty(headData.BLFRT)) { error = error + "
提单号:" + headData.MBLNO + " 付费方式不能为空"; } @@ -359,12 +365,14 @@ namespace DS.WMS.Core.Op.EDI } - if (string.IsNullOrEmpty(headData.VESSEL)) - { error = error + "
提单号:" + headData.MBLNO + " 船名不能为空"; } - - if (string.IsNullOrEmpty(headData.VOYNO)) - { error = error + "
提单号:" + headData.MBLNO + " 航次不能为空"; } + if (InttrEdi.filetype == "E") + { + if (string.IsNullOrEmpty(headData.VESSEL)) + { error = error + "
提单号:" + headData.MBLNO + " 船名不能为空"; } + if (string.IsNullOrEmpty(headData.VOYNO)) + { error = error + "
提单号:" + headData.MBLNO + " 航次不能为空"; } + } if (InttrEdi.filetype == "E") { if (headData.SIREMARK.IndexOf("PLEASE BOOK OCEAN CARRIER") > -1 || headData.SIREMARK.ToString().Trim() == "") @@ -417,32 +425,79 @@ namespace DS.WMS.Core.Op.EDI { error = error + "
提单号:" + headData.MBLNO + " 船公司EDI代码不能为空"; } - if (string.IsNullOrEmpty(headData.SHIPPER)) + //CMA 订舱时,发货人可以不填 + if (InttrEdi.filetype.Equals("B", StringComparison.OrdinalIgnoreCase) && headData.CARRIEREDICODE.Equals("CMDU", StringComparison.OrdinalIgnoreCase)) { - error = error + "
提单号:" + headData.MBLNO + " 发货人不能为空"; + if (!string.IsNullOrWhiteSpace(headData.SHIPPER)) + { + if (StringIsChinese(headData.SHIPPER)) + { + error = error + "
提单号:" + headData.MBLNO + " 发货人含有中文或双字节字符"; + } + else + { + if (headData.CARRIEREDICODE == "HLCU") + { + error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "-", false); + } + else + { + error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "*", false); + } + } + } } else { - if (StringIsChinese(headData.SHIPPER)) + if (string.IsNullOrEmpty(headData.SHIPPER)) { - error = error + "
提单号:" + headData.MBLNO + " 发货人含有中文或双字节字符"; + error = error + "
提单号:" + headData.MBLNO + " 发货人不能为空"; } else { - if (headData.CARRIEREDICODE == "HLCU") + if (StringIsChinese(headData.SHIPPER)) { - error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "-", false); + error = error + "
提单号:" + headData.MBLNO + " 发货人含有中文或双字节字符"; } else { - error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "*", false); + if (headData.CARRIEREDICODE == "HLCU") + { + error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "-", false); + } + else + { + error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 6, "*", false); + } } } } + //} - //改为截单时校验 - if (InttrEdi.filetype == "E") + //CMA 订舱时,收货人可以不填 + if (InttrEdi.filetype.Equals("B", StringComparison.OrdinalIgnoreCase) && headData.CARRIEREDICODE.Equals("CMDU", StringComparison.OrdinalIgnoreCase)) + { + if (!string.IsNullOrWhiteSpace(headData.CONSIGNEE)) + { + if (StringIsChinese(headData.CONSIGNEE)) + { + error = error + "
提单号:" + headData.MBLNO + " 收货人含有中文或双字节字符"; + } + else + { + if (headData.CARRIEREDICODE == "HLCU") + { + error += formatlengthError("txt", headData.CONSIGNEE, 35, headData.MBLNO, "收货人", 6, "--", false); + } + else + { + error += formatlengthError("txt", headData.CONSIGNEE, 35, headData.MBLNO, "收货人", 6, "**", false); + } + } + } + } + else { if (string.IsNullOrEmpty(headData.CONSIGNEE)) { @@ -498,8 +553,29 @@ namespace DS.WMS.Core.Op.EDI } } - //改为截单时校验 - if (InttrEdi.filetype == "E") + //CMA 订舱时,通知人可以不填 + if (InttrEdi.filetype.Equals("B", StringComparison.OrdinalIgnoreCase) && headData.CARRIEREDICODE.Equals("CMDU", StringComparison.OrdinalIgnoreCase)) + { + if (!string.IsNullOrWhiteSpace(headData.NOTIFYPARTY)) + { + if (StringIsChinese(headData.NOTIFYPARTY)) + { + error = error + "
提单号:" + headData.MBLNO + " 通知人含有中文或双字节字符"; + } + else + { + if (headData.CARRIEREDICODE == "HLCU") + { + error += formatlengthError("txt", headData.NOTIFYPARTY, 35, headData.MBLNO, "通知人", 6, "---", false); + } + else + { + error += formatlengthError("txt", headData.NOTIFYPARTY, 35, headData.MBLNO, "通知人", 6, "***", false); + } + } + } + } + else { if (string.IsNullOrEmpty(headData.NOTIFYPARTY)) { @@ -527,26 +603,26 @@ namespace DS.WMS.Core.Op.EDI } } } + } - if (!string.IsNullOrEmpty(headData.NOTIFYPARTY2)) - { - error += formatlengthError("txt", headData.NOTIFYPARTY2, 35, headData.MBLNO, "第二通知人", 5, "", false); - } + if (!string.IsNullOrEmpty(headData.NOTIFYPARTY2)) + { + error += formatlengthError("txt", headData.NOTIFYPARTY2, 35, headData.MBLNO, "第二通知人", 5, "", false); + } - if (string.IsNullOrEmpty(headData.MARKS)) + if (string.IsNullOrEmpty(headData.MARKS)) + { + error = error + "
提单号:" + headData.MBLNO + " 唛头不能为空"; + } + else + { + if (StringIsChinese(headData.MARKS)) { - error = error + "
提单号:" + headData.MBLNO + " 唛头不能为空"; + error = error + "
提单号:" + headData.MBLNO + " 唛头含有中文或双字节字符"; } else { - if (StringIsChinese(headData.MARKS)) - { - error = error + "
提单号:" + headData.MBLNO + " 唛头含有中文或双字节字符"; - } - else - { - error += formatlengthError("txt", headData.MARKS, 35, headData.MBLNO, "唛头", 0, "", false); - } + error += formatlengthError("txt", headData.MARKS, 35, headData.MBLNO, "唛头", 0, "", false); } } @@ -770,7 +846,7 @@ namespace DS.WMS.Core.Op.EDI #region 订舱 public static EdiDataResult CreateEdiINTTR(EDIBaseModel InttrEdi) { - EdiDataResult result = new EdiDataResult { Succeeded = false }; + var result = new EdiDataResult { Succeeded = false }; string filename = InttrEdi.filerpath + "\\" + InttrEdi.BSLIST[0].MBLNO + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt"; @@ -790,10 +866,10 @@ namespace DS.WMS.Core.Op.EDI { bsno = bill.ORDERNO; r.WriteLine("UNB+UNOC:2+" + InttrEdi.SENDCODE + "SO:ZZZ+" + InttrEdi.RECEIVECODE + ":ZZZ+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'"); - r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'"); + r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMIN:D:99B:UN'"); icount = icount + 2; - if (bill.CARRIEREDICODE == "HLCU") + if (bill.CARRIEREDICODE == "HLCU" || bill.CARRIEREDICODE == "CMDU" || bill.CARRIEREDICODE == "CHNL") { if (InttrEdi.filerole == "9") r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+9'"); @@ -834,6 +910,9 @@ namespace DS.WMS.Core.Op.EDI r.WriteLine("TSR+30+2'"); } + //2024-05-22 少了一行计数追加上 JHQ + //icount = icount + 1; + var str_pay = ""; if (bill.BLFRT.IndexOf("PREPAID") >= 0) str_pay = bill.PREPARDAT; @@ -937,7 +1016,7 @@ namespace DS.WMS.Core.Op.EDI } } - if (bill.CARRIEREDICODE != "COSU") + if (bill.CARRIEREDICODE != "COSU" && !string.IsNullOrWhiteSpace(bill.MBLNO)) { if (bill.CARRIEREDICODE == "HLCU") { @@ -951,6 +1030,7 @@ namespace DS.WMS.Core.Op.EDI } icount = icount + 2; } + r.WriteLine("RFF+CT:" + bill.CONTRACTNO + "'"); if (bill.BLFRT.IndexOf("PREPAID") >= 0) @@ -1271,6 +1351,7 @@ namespace DS.WMS.Core.Op.EDI else r.WriteLine("NAD+FW+++" + formatEdiStr("txt", bill.WEITUO) + "'"); + icount = icount + 1; } else { @@ -1278,7 +1359,7 @@ namespace DS.WMS.Core.Op.EDI if (InttrEdi.UseForWarderCode) { r.WriteLine("NAD+FW+" + InttrEdi.ForWarderCode + ":160:86++" + InttrEdi.ForWarderName + "'"); - icount++; + icount = icount + 1; } else { @@ -1286,6 +1367,8 @@ namespace DS.WMS.Core.Op.EDI r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'"); else r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'"); + + icount = icount + 1; } } @@ -1456,9 +1539,6 @@ namespace DS.WMS.Core.Op.EDI r.Close(); f.Close(); - //result.succ = true; - //result.extra = filename; - //return result; result.Succeeded = true; result.ExtraData1 = filename; return result; diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs index 03fffc19..aa3a83bb 100644 --- a/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs +++ b/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs @@ -1202,11 +1202,18 @@ namespace DS.WMS.Core.Op.Method } #endregion + string needMappingModule = string.Empty; + + if (ediRouteEnum == EDIRouteEnum.INTTRA) + { + needMappingModule = "INTTRA_EDI"; + } + #region 卸货港 //卸货港 if (order.DischargePortId > 0) { - var portRlt = GetPortEDICode(order.DischargePortId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "卸货港"); + var portRlt = GetPortEDICode(order.DischargePortId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "卸货港", needMappingModule); if (portRlt.Succeeded) primaryModel.PORTDISCHARGEID = portRlt.Data; @@ -1217,7 +1224,7 @@ namespace DS.WMS.Core.Op.Method //中转港 if (order.TransPortId > 0) { - var portRlt = GetPortEDICode(order.TransPortId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.TransPort, "中转港"); + var portRlt = GetPortEDICode(order.TransPortId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.TransPort, "中转港", needMappingModule); if (portRlt.Succeeded) primaryModel.TRANSPORTID = portRlt.Data; @@ -1228,7 +1235,7 @@ namespace DS.WMS.Core.Op.Method //交货地 if (order.DeliveryPlaceId > 0) { - var portRlt = GetPortEDICode(order.DeliveryPlaceId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DeliveryPlace, "交货地"); + var portRlt = GetPortEDICode(order.DeliveryPlaceId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DeliveryPlace, "交货地", needMappingModule); if (portRlt.Succeeded) primaryModel.PLACEDELIVERYID = portRlt.Data; @@ -1242,7 +1249,7 @@ namespace DS.WMS.Core.Op.Method //目的地 if (order.DeliveryPlaceId > 0) { - var portRlt = GetPortEDICode(order.DeliveryPlaceId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "目的地"); + var portRlt = GetPortEDICode(order.DeliveryPlaceId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "交货地", needMappingModule); if (portRlt.Succeeded) primaryModel.DESTINATIONID = portRlt.Data; @@ -1255,7 +1262,7 @@ namespace DS.WMS.Core.Op.Method //目的地 if (order.DestinationId > 0) { - var portRlt = GetPortEDICode(order.DestinationId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "目的地"); + var portRlt = GetPortEDICode(order.DestinationId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.DischargePort, "目的地", needMappingModule); if (portRlt.Succeeded) primaryModel.DESTINATIONID = portRlt.Data; @@ -1268,7 +1275,7 @@ namespace DS.WMS.Core.Op.Method //到付地点 if (order.PayableAtId > 0) { - var portRlt = GetPortEDICode(order.PayableAtId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.PayableAt, "到付地点"); + var portRlt = GetPortEDICode(order.PayableAtId, portList, mapPortList, order.CarrierId, CONST_MAPPING_MODULE, order.PayableAt, "到付地点", needMappingModule); if (portRlt.Succeeded) primaryModel.PAYABLEATID = portRlt.Data; @@ -2413,9 +2420,11 @@ namespace DS.WMS.Core.Op.Method /// 模块代码 /// 港口名称 /// 港口分类(装货港、卸货港、交货地等) + /// 是否必需用映射 /// /// - private DataResult GetPortEDICode(long portId,List codePortList,List mapPortList, long carrierId, string moduleName,string portName,string portCategory) + private DataResult GetPortEDICode(long portId,List codePortList,List mapPortList, long carrierId, string moduleName, + string portName,string portCategory,string needMappingModule = "") { //如果历史港口映射有记录直接返回 if (mapPortList.Any(a => a.LinkId == portId)) @@ -2430,8 +2439,15 @@ namespace DS.WMS.Core.Op.Method var tenantDb = saasService.GetBizDbScopeById(user.TenantId); + string MappingModule = CONST_MAPPING_MODULE; + + if (!string.IsNullOrWhiteSpace(needMappingModule)) + { + MappingModule = needMappingModule; + } + var mapPortInfo = tenantDb.Queryable() - .First(a => a.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase) && a.CarrierId == carrierId && a.LinkId == portId); + .First(a => a.Module.Equals(MappingModule, StringComparison.OrdinalIgnoreCase) && a.CarrierId == carrierId && a.LinkId == portId); if (mapPortInfo != null) { @@ -2442,6 +2458,11 @@ namespace DS.WMS.Core.Op.Method return DataResult.FailedData(mapPortInfo.MapCode); } + else + { + if (!string.IsNullOrWhiteSpace(needMappingModule)) + throw new Exception($"{portCategory} {portName} 未配置模块{needMappingModule} 映射"); + } if (codePortList.Any(a => a.Id == portId)) { diff --git a/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user b/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user index 21e5222f..da141c5a 100644 --- a/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user +++ b/ds-wms-service/DS.WMS.OpApi/DS.WMS.OpApi.csproj.user @@ -1,7 +1,7 @@  - D:\Code\ds8-solution-pro\ds-wms-service\DS.WMS.OpApi\Properties\PublishProfiles\FolderProfile.pubxml + E:\MyCode\Dongsheng8\ds-wms-service\DS.WMS.OpApi\Properties\PublishProfiles\FolderProfile.pubxml MvcControllerEmptyScaffolder root/Common/MVC/Controller