diff --git a/Myshipping.Application/EDI/VOLTAEdiNewHelper.cs b/Myshipping.Application/EDI/VOLTAEdiNewHelper.cs new file mode 100644 index 00000000..86c23960 --- /dev/null +++ b/Myshipping.Application/EDI/VOLTAEdiNewHelper.cs @@ -0,0 +1,1224 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace Myshipping.Application.EDI.VOLTA +{ + public static class VOLTAEdiNewHelper + { + #region 基本函数 + + public static string GetBillNum2(string str) + { + if (str == "ZERO") return "00"; + if (str == "ONE") return "01"; + if (str == "TWO") return "02"; + if (str == "THREE") return "03"; + if (str == "FOUR") return "04"; + if (str == "FIVE") return "05"; + if (str == "SIX") return "06"; + if (str == "SERVEN") return "07"; + if (str == "EIGHT") return "08"; + if (str == "NINE") return "09"; + if (str == "TEN") return "10"; + else return ""; + } + + + public static string GetDateStr(string datestr, string dateformat) + { + var result = ""; + + if (datestr == null || datestr == "") + { + result = ""; + } + else + { + result = Convert.ToDateTime(datestr).ToString(dateformat); + + } + + return result; + + } + + #region 判断中文字符 + public static bool IsChinese(char c) + { + return (int)c > 0x80; + } + public static bool StringIsChinese(string str) + { + var result = false; + for (int i = 1; i < str.Length; i++) + { + if (IsChinese(str[i])) + { + result = true; + return result; + } + } + for (int i = 0; i < str.Length; i++) + { + string stemp = str.Substring(i, 1); + int ilen = System.Text.Encoding.Default.GetByteCount(stemp); + if (ilen == 2) + { + result = true; + return result; + } + + } + + return result; + } + + #endregion + + public static string formatListStr(List DestList, int lineCount, bool isformat = false) + { + var result = ""; + for (var i = 0; i < lineCount; i++) + { + if (DestList.Count > i) + { + if (isformat) + result = result + formatEdiStr("txt", DestList[i]); + else + result = result + DestList[i]; + } + if (i != (lineCount - 1)) + result = result + ":"; + + + } + return result; + } + + + #region 文本字段判断每行是否符合 + /// + /// edi 文本格式处理判断(例如:1行35个字符不超过5行) + /// + /// 文件类型(例如:txt、xml) + /// 要处理的数据 + /// 每行长度 + /// 主提单号 + /// 数据类型(例如:发货人内容、货描等) + /// 限制录入的行数(“0”代表不限制) + /// 限录后多出的放到货描中的数据的连接符(例如:“*”发货人内容、“**”收件人等) + /// + public static System.String formatlengthError(string fileType, string str, int length, string sMBLNO, string sType, int rowNum, string sSymbol, bool isHuoMiao) + { + string error = ""; + string Shipping = str; + if (fileType == "txt") + { + Shipping = formatEdiStr("txt", str); + } + else if (fileType == "xml") + { + Shipping = formatEdiStr("txt", str); + } + string[] argAGENT = Shipping.Split(new string[] { "\r\n" }, StringSplitOptions.None); + if (argAGENT.Length > 0) + { + if (argAGENT.Length == 1) + { + argAGENT = Shipping.Split(new string[] { "\n" }, StringSplitOptions.None); + if (argAGENT.Length > 0) + { + if (argAGENT.Length > rowNum && rowNum != 0) + { + if (isHuoMiao) + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据!"; + } + else + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据,多余信息请手动以“" + sSymbol + "”号开头放到货物描述中!(例如:“货描内容" + sSymbol + "超出部分”)"; + } + } + for (int j = 0; j < argAGENT.Length; j++) + { + //List AgentList = formatlengthStr(argAGENT[j].ToString(), 35); + if (argAGENT[j].ToString().Length > length) + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 第" + (j + 1) + "行超过" + length + "个字符"; + } + } + } + } + else + { + if (argAGENT.Length > rowNum && rowNum != 0) + { + if (isHuoMiao) + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据!"; + } + else + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据,多余信息请手动以“" + sSymbol + "”号开头放到货物描述中!(例如:“货描内容" + sSymbol + "超出部分”)"; + } + } + for (int j = 0; j < argAGENT.Length; j++) + { + //List AgentList = formatlengthStr(argAGENT[j].ToString(), 35); + if (argAGENT[j].ToString().Length > length) + { + error = error + "
提单号:" + sMBLNO + " " + sType + " 第" + (j + 1) + "行超过" + length + "个字符"; + } + } + } + } + return error; + } + #endregion + + #region 字符转义 + /// + /// 各种文本转义字符 + /// + /// 文件类型(例如:txt、xml) + /// 文本字符串 + /// + public static string formatEdiStr(string fileType, string str) + { + if (str == null) + str = string.Empty; + + if (fileType == "txt") + { + return str.Replace("?", "??").Replace(":", "?:").Replace("+", "?+").Replace("'", "?'"); + } + else if (fileType == "xml") + { + return str.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'"); + } + else if (fileType == "sitc") + { + return str.Replace("?", "??").Replace(":", "?:").Replace("'", "?'"); + } + else + { + return str; + } + } + #endregion + #region 格式化每行 + public static List formatlengthStr(string str, int length, bool formatstr = false, bool nodelsp = false) + { + //2022-12-28 JHQ 传的字段是null会导致报错,这里改为如果是NULL则默认赋空字符串。 + if (str == null) + str = ""; + + str = str.Replace("\r\n", "\\"); + str = str.Replace("\n", "\\"); + str = str.Replace("\r", " "); + string[] StrList = str.Split('\\'); + var strtemp = ""; + var strnewline = ""; + var strtempnewline = ""; + char[] spstring = { ' ', ';', ',', '.', ':', '/', '(', ')', '?', '+', '-' }; + List DestList = new List(); + for (var i = 0; i <= StrList.Length - 1; i++) + { + if (StrList[i].Length <= length) + { + if (formatstr) + DestList.Add(formatEdiStr("txt", StrList[i])); + else + DestList.Add(StrList[i]); + + } + else + { + strtemp = StrList[i] + " "; + strtempnewline = ""; + strnewline = ""; + for (var j = 0; j < strtemp.Length; j++) + { + strtempnewline = strtempnewline + strtemp[j]; + if (strtemp[j] == ' ' || strtemp[j] == ':' || strtemp[j] == ',' || strtemp[j] == '.' || strtemp[j] == ':' || strtemp[j] == '/' + || strtemp[j] == '?' || strtemp[j] == ')' || strtemp[j] == '}' || strtemp[j] == '+' || strtemp[j] == '-') + { + if ((strnewline.Length + strtempnewline.Length) <= length) + strnewline = strnewline + strtempnewline; + else + { + if (formatstr) + DestList.Add(formatEdiStr("txt", strnewline)); + else + DestList.Add(strnewline); + strnewline = strtempnewline; + + } + strtempnewline = ""; + } + } + if (nodelsp) + { + if (formatstr) + DestList.Add(formatEdiStr("txt", strnewline)); + else DestList.Add(strnewline); + } + else if (strnewline.Trim() != "") + { + if (formatstr) + DestList.Add(formatEdiStr("txt", strnewline)); + else DestList.Add(strnewline); + } + } + + } + + return DestList; + } + #endregion + #endregion + + #region 检查 + public static string IsCreateVOLTAEDI(EDIBaseModel InttrEdi) + { + var error = ""; + + if (string.IsNullOrEmpty(InttrEdi.SENDCODE)) + { error = error + "
发送方代码不能为空"; } + + if (string.IsNullOrEmpty(InttrEdi.SENDNAME)) + { error = error + "
发送方名称不能为空"; } + + if (string.IsNullOrEmpty(InttrEdi.RECEIVECODE)) + { error = error + "
接收方代码不能为空"; } + + //if (InttrEdi.filetype == "B") + //{ + // if (InttrEdi.UseForWarderCode) + // { + // if (string.IsNullOrEmpty(InttrEdi.ForWarderCode)) + // { error = error + "
货代代码不能为空"; } + + // if (string.IsNullOrEmpty(InttrEdi.ForWarderName)) + // { error = error + "
货代称呼不能为空"; } + // } + //} + + + foreach (var headData in InttrEdi.BSLIST) + { + + if (string.IsNullOrEmpty(headData.MBLNO)) + { error = error + "
主提单号不能为空"; } + + if (string.IsNullOrEmpty(headData.BLFRT)) + { 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 != "B" || headData.CARRIEREDICODE == "YML") + { + if (string.IsNullOrEmpty(headData.ETD)) + { + error = error + "
提单号:" + headData.MBLNO + " 开船日期不能为空"; + return error; + } + } + } + + if (headData.CARRIEREDICODE != "ZIM") + { + if (string.IsNullOrEmpty(headData.PLACERECEIPTID) || headData.PLACERECEIPTID.Length != 5) + { error = error + "
提单号:" + headData.MBLNO + " 收货地代码不能为空或录入不正确(必须是5位代码)"; } + + if (string.IsNullOrEmpty(headData.PLACERECEIPT)) + { error = error + "
提单号:" + headData.MBLNO + " 收货地不能为空"; } + + } + + + if (string.IsNullOrEmpty(headData.PORTLOADID) || headData.PORTLOADID.Length != 5) + { error = error + "
提单号:" + headData.MBLNO + " 装货港代码不能为空或录入不正确(必须是5位代码)"; } + + if (string.IsNullOrEmpty(headData.PORTLOAD)) + { error = error + "
提单号:" + headData.MBLNO + " 装货港不能为空"; } + + + if (string.IsNullOrEmpty(headData.PORTDISCHARGEID) || headData.PORTDISCHARGEID.Length != 5) + { error = error + "
提单号:" + headData.MBLNO + " 卸货港代码不能为空或录入不正确(必须是5位代码)"; } + if (string.IsNullOrEmpty(headData.PORTDISCHARGE)) + { error = error + "
提单号:" + headData.MBLNO + " 卸货港不能为空"; } + + if (string.IsNullOrEmpty(headData.PLACEDELIVERY) || headData.PLACEDELIVERYID.Length != 5) + { error = error + "
提单号:" + headData.MBLNO + " 交货地代码不能为空或录入不正确(必须是5位代码)"; } + if (string.IsNullOrEmpty(headData.PLACEDELIVERY)) + { error = error + "
提单号:" + headData.MBLNO + " 交货地不能为空"; } + + if (string.IsNullOrEmpty(headData.DESTINATION)) + { + if (string.IsNullOrEmpty(headData.DESTINATIONID) || headData.DESTINATIONID.Length != 5) + { error = error + "
提单号:" + headData.MBLNO + " 目的地代码不能为空或录入不正确(必须是5位代码)"; } + } + + if (string.IsNullOrEmpty(headData.KINDPKGS_EDI_CODE)) + { error = error + "
提单号:" + headData.MBLNO + " 包装EDI代码不能为空"; } + if (headData.PKGS == 0) + { error = error + "
提单号:" + headData.MBLNO + " 件数不能为0"; } + if (headData.KGS == 0) + { error = error + "
提单号:" + headData.MBLNO + " 毛重不能为0"; } + if (headData.CBM == 0) + { error = error + "
提单号:" + headData.MBLNO + " 尺码不能为0"; } + + if (string.IsNullOrEmpty(headData.CARGOID)) + { error = error + "
提单号:" + headData.MBLNO + " 货物标识不能为空"; } + + if (headData.CARGOID == "D") + { + if (string.IsNullOrEmpty(headData.DCLASS)) + { error = error + "
提单号:" + headData.MBLNO + " 危险品分类不能为空"; } + + if (string.IsNullOrEmpty(headData.DUNNO)) + { error = error + "
提单号:" + headData.MBLNO + " 危险品编号不能为空"; } + } + if (headData.CARGOID == "R") + { + if (headData.TEMPSET == null || headData.TEMPSET == "") + { error = error + "
提单号:" + headData.MBLNO + " 设置温度不能为空"; } + if (headData.REEFERF == null || headData.REEFERF == "") + { error = error + "
提单号:" + headData.MBLNO + " 通风度不能为空"; } + } + if (headData.ISSUEPLACE == null || headData.ISSUEPLACE == "") + { error = error + "
提单号:" + headData.MBLNO + "签单地点不能为空"; } + + if (headData.CARRIEREDICODE == "APL") + if (headData.ISSUETYPE == null || headData.ISSUETYPE == "") + { error = error + "
提单号:" + headData.MBLNO + "签单方式不能为空"; } + if (headData.SERVICE == "" || headData.SERVICE == null) + { error = error + "
提单号:" + headData.MBLNO + "运输条款不能为空"; } + + if (string.IsNullOrEmpty(headData.MARKS)) + { + error = error + "
提单号:" + headData.MBLNO + " 唛头不能为空"; + } + else + { + if (StringIsChinese(headData.MARKS)) + { + error = error + "
提单号:" + headData.MBLNO + " 唛头含有中文或双字节字符"; + } + else + { + error += formatlengthError("txt", headData.MARKS, 35, headData.MBLNO, "唛头", 0, "", false); + } + } + + if (!new string[] { "ORI", "TER", "EXP" }.Contains(headData.ISSUETYPE)) + { + error = error + "
提单号:" + headData.MBLNO + "签单方式未识别"; + } + + if (string.IsNullOrEmpty(headData.DESCRIPTION)) + { + error = error + "
提单号:" + headData.MBLNO + " 货物描述不能为空"; + } + else + { + if (StringIsChinese(headData.DESCRIPTION)) + { + error = error + "
提单号:" + headData.MBLNO + " 货物描述含有中文或双字节字符"; + } + else + { + //error += formatlengthError("txt", bill.DESCRIPTION, 35, bill.MBLNO, "货物描述", 0, ""); + } + } + + + if (string.IsNullOrEmpty(headData.SHIPPER)) + { + error = error + "
提单号:" + headData.MBLNO + " 发货人不能为空"; + } + else + { + 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); + } + } + } + //} + + + + if (string.IsNullOrEmpty(headData.CONSIGNEE)) + { + error = error + "
提单号:" + headData.MBLNO + " 收货人不能为空"; + } + else + { + 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); + } + } + } + + + + + if (string.IsNullOrEmpty(headData.NOTIFYPARTY)) + { + error = error + "
提单号:" + headData.MBLNO + " 通知人不能为空"; + } + else + { + 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); + } + } + } + + if (!string.IsNullOrEmpty(headData.NOTIFYPARTY2)) + { + error += formatlengthError("txt", headData.NOTIFYPARTY2, 35, headData.MBLNO, "第二通知人", 5, "", false); + } + + var ctnlist = headData.CTNLIST; + if (ctnlist.Count == 0) { error = error + "
提单号:" + headData.MBLNO + " 集装箱信息不能为空"; }; + + #region 集装箱判断检查 + if (ctnlist.Count != 0) + { + Decimal dlPKGS = 0; + Decimal dlKGS = 0; + Decimal dlCBM = 0; + foreach (var ctn in ctnlist) + { + if (string.IsNullOrEmpty(ctn.CTNALLCODE)) + { error = error + "
提单号:" + headData.MBLNO + " 集装箱箱型EDI代码不能为空"; } + if ((ctn.CTNALLCODE.IndexOf("RH") > 0 || ctn.CTNALLCODE.IndexOf("RF") > 0) && (headData.CARGOID != "R")) + { + { error = error + "
提单号:" + headData.MBLNO + " 集装箱箱型为冻柜,货类代码请选择冻柜"; } + } + + if (InttrEdi.filetype == "E") + { + + if (string.IsNullOrEmpty(ctn.CNTRNO)) + { error = error + "
提单号:" + headData.MBLNO + " 箱号不能为空"; } + if (string.IsNullOrEmpty(ctn.SEALNO)) + { error = error + "
提单号:" + headData.MBLNO + " 封号不能为空"; } + + if (ctn.KINDPKGS != headData.KINDPKGS) + { error = error + "
提单号:" + headData.MBLNO + " 中的包装类型与集装箱的包装类型不同"; } + dlPKGS += Convert.ToDecimal(ctn.PKGS); + dlKGS += Convert.ToDecimal(ctn.KGS); + dlCBM += Convert.ToDecimal(ctn.CBM); + } + } + if (InttrEdi.filetype == "E") + { + if (dlPKGS != Convert.ToDecimal(headData.PKGS)) + { error = error + "
提单号:" + headData.MBLNO + " 集装箱件数合计数必须等于委托单总件数"; } + if (dlKGS != Convert.ToDecimal(headData.KGS)) + { error = error + "
提单号:" + headData.MBLNO + " 集装箱重量合计数必须等于委托单总重量数"; } + if (dlCBM != Convert.ToDecimal(headData.CBM)) + { error = error + "
提单号:" + headData.MBLNO + " 集装箱尺码合计数必须等于委托单总尺码数"; } + } + } + + if (InttrEdi.filetype == "E") + { + if (headData.CTNGOODSLIST != null && headData.CTNGOODSLIST.Count > 0) + { + foreach (var ctn in ctnlist) + { + var isfind = false; + Int32 ctngoodssumpkgs = 0; + decimal ctngoodssumkgs = 0; + decimal ctngoodssumcbm = 0; + headData.CTNGOODSLIST.ForEach(i => + { + if (i.CNTRNO == ctn.CNTRNO) + { + isfind = true; + ctngoodssumpkgs = ctngoodssumpkgs + i.PKGS; + ctngoodssumkgs = ctngoodssumkgs + i.KGS; + ctngoodssumcbm = ctngoodssumcbm + i.CBM; + } + }); + if (!isfind) + { + error = error + "
提单号:" + headData.MBLNO + "的“" + ctn.CNTRNO + "”未添加分箱明细!"; + } + else + { + if (ctngoodssumpkgs != Convert.ToDecimal(ctn.PKGS)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细件数合计数不等于集装箱件数"; } + if (ctngoodssumkgs != Convert.ToDecimal(ctn.KGS)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细毛重合计数不等于集装箱毛重"; } + if (ctngoodssumcbm != Convert.ToDecimal(ctn.CBM)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细尺码合计数不等于集装箱毛重"; } + + } + + } + + foreach (var ctngood in headData.CTNGOODSLIST) + { + if (string.IsNullOrEmpty(ctngood.KINDPKGS)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱明细包装类型不能为空"; } + if (string.IsNullOrEmpty(ctngood.DESCRIPTION)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱货物描述不能为空"; } + else + { + error += formatlengthError("txt", ctngood.DESCRIPTION, 70, headData.MBLNO, "的“" + ctngood.CNTRNO + "”箱号的分箱货物描述", 0, "", false); + } + //if (string.IsNullOrEmpty(ctngood.HSCODE)) + //{ error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱HS编码不能为空"; } + if (string.IsNullOrEmpty(ctngood.KINDPKGS_EDI_CODE)) + { error = error + "
提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱明细包装类型代码不能为空"; } + + } + + } + + #endregion + + + } + + //2023-03-03 经过测试东胜的EDI根据付费方式,区分 到付-需要填到付地点不能填预付地点,预付只能填预付地点不能填到付地点 + //跟韩工确认增加判断 + if (!string.IsNullOrWhiteSpace(headData.BLFRT) && headData.BLFRT.IndexOf("PREPAID") >= 0) + { + //if (string.IsNullOrWhiteSpace(headData.PREPARDAT)) + //{ + // error = error + "
提单号:" + headData.MBLNO + " 付费方式是预付,预付地点不能为空"; + //} + + if (!string.IsNullOrWhiteSpace(headData.PAYABLEAT)) + { + error = error + "
提单号:" + headData.MBLNO + " 付费方式是预付,到付地点不能填写"; + } + } + else if (!string.IsNullOrWhiteSpace(headData.BLFRT) && headData.BLFRT.IndexOf("COLLECT") >= 0) + { + //if (string.IsNullOrWhiteSpace(headData.PAYABLEAT)) + //{ + // error = error + "
提单号:" + headData.MBLNO + " 付费方式是到付,到付地点不能为空"; + //} + + if (!string.IsNullOrWhiteSpace(headData.PREPARDAT)) + { + error = error + "
提单号:" + headData.MBLNO + " 付费方式是到付,预付地点不能填写"; + } + } + + } + return error; + } + #endregion + + #region 生成报文(订舱(filetype=="B"),截单(filetype=="E")) + public static CommonWebApiResult CreateEdiVOLTA(EDIBaseModel InttrEdi) + { + CommonWebApiResult result = new CommonWebApiResult { succ = false }; + + var filetype = "IFTMIN"; + if (InttrEdi.filetype != "E") filetype = "IFTMBF"; + + string filename = InttrEdi.filerpath + "\\" + filetype + "_" + InttrEdi.BSLIST[0].MBLNO + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt"; + + //如果是部署linux需要修改路径 + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + filename = filename.Replace("\\", "/"); + + //if (System.IO.File.Exists(filename)) + //{ + // System.IO.File.Delete(filename); + //} + FileStream f = new FileStream(filename, FileMode.Create); + StreamWriter r = new StreamWriter(f, Encoding.Default); + var icount = 0; + var bsno = ""; + var isfirst = true; + foreach (var bill in InttrEdi.BSLIST) + { + if (isfirst) + { + if (InttrEdi.filetype == "E") + r.WriteLine("00:IFTMIN:BOOKING:" + InttrEdi.filerole + ":" + InttrEdi.SENDCODE + ":" + InttrEdi.RECEIVECODE + ":" + DateTime.Now.ToString("yyyyMMddHHmm") + "'"); + else + r.WriteLine("00:IFTMBF:BOOKING:" + InttrEdi.filerole + ":" + InttrEdi.SENDCODE + ":" + InttrEdi.RECEIVECODE + ":" + DateTime.Now.ToString("yyyyMMddHHmm") + "'"); + isfirst = false; + icount++; + + } + + if (bill.CARRIEREDICODE == "ONEY") + { + var sendno = bill.EDIATTNEMAIL; + + if (filetype == "E") sendno = bill.AMSCODE; + var MBLNO = bill.MBLNO; + if (MBLNO.Substring(0, 4) == "ONEY") + { + MBLNO = MBLNO.Substring(4, MBLNO.Length - 4); + } + //2023-02-28 ONE的逻辑是去掉了提单号的前4位,跟韩工已确认,与东胜7相同 + //2023-03-03 韩工给提供了新的02行的处理SENDNAME改为读取FTP配置的 + /* + r.WriteLine("02" + + ":" + MBLNO//2 REFERENCE NO. 运编号 X(35) 一般为流水号 M + + ":" + MBLNO//3 B\L NO. 提单号 X(20) 船公司的提单号 C + + ":" + bill.SERVICE//4 DELIVERY TERM 交货条款 X(9) CY-CY(pier-pier/port):30CY-CFS(pier/port-door):29CFS-CY(door-pier/port):28CFS-CFS(door-door):27 M + + ":" + InttrEdi.SENDNAME//5 BOOKING PARTY 订舱人说明 X(70) 货代方企业名称或代码 C + + ":ONEY" //6 ISSUE PARTY CODE 签单人代码 X(13) 即接受订舱的人的代码 M + + ":"//7 ISSUE PARTY 签单人说明 X(35)   C + + ":"//8 APPLICANT 询价单位 X(13) 向船公司询价的单位代码 C + + ":"//9 FOB BK PARTY 国外订舱单位 X(13) 国外FOB货订舱单位的代码 C + + ":"//10 B/L TRANSHIP ID 转船标识 X(1) Y/N C + + ":"//11 BATCH ID 分批 X(1) Y/N C + + ":"//12 SHIPMENT DATE 装期 9(8) CCYYMMDD C + + ":"//13 EXPIRY DATE 效期 9(8) CCYYMMDD C + + ":" + bill.CONTRACTNO//14 QUOTATION NO. 运费协议号 X(30) MAERSK为必选 C + + ":"//15 CHARGE TYPE 费率本代码 X(1)   C + + ":" + bill.CONTRACTNO//16 S/C NO. 合约号 X(30)   C + + ":"//17 BOOKING NO. 船公司订舱编号 X(20) 船公司系统内部订舱编号 C + + ":"//18 SLOT CHARTER ID 舱位互用标识 X(1)   C + + ":" + sendno//19 AMS CODE AMS代码 X(15)   C + //注:QUOTATION NO.项填本票订舱货的运价是通过向中集询价后定下的特殊运价编号。 + + "'"); + */ + //2023-03-03 修改运输条款SERVICE改为EDI的映射值,经过韩工确认 + r.WriteLine("02" + + ":" + MBLNO//2 REFERENCE NO. 运编号 X(35) 一般为流水号 M + + ":" + MBLNO//3 B\L NO. 提单号 X(20) 船公司的提单号 C + + ":" + bill.SERVICEEDICODE//4 DELIVERY TERM 交货条款 X(9) CY-CY(pier-pier/port):30CY-CFS(pier/port-door):29CFS-CY(door-pier/port):28CFS-CFS(door-door):27 M + + ":" + formatEdiStr("txt", InttrEdi.SENDCOMPANYCODE) //5 BOOKING PARTY 订舱人说明 X(70) 货代方企业名称或代码 C + + ":ONEY" //6 ISSUE PARTY CODE 签单人代码 X(13) 即接受订舱的人的代码 M + + ":"//7 ISSUE PARTY 签单人说明 X(35)   C + + ":"//8 APPLICANT 询价单位 X(13) 向船公司询价的单位代码 C + + ":"//9 FOB BK PARTY 国外订舱单位 X(13) 国外FOB货订舱单位的代码 C + + ":"//10 B/L TRANSHIP ID 转船标识 X(1) Y/N C + + ":"//11 BATCH ID 分批 X(1) Y/N C + + ":"//12 SHIPMENT DATE 装期 9(8) CCYYMMDD C + + ":"//13 EXPIRY DATE 效期 9(8) CCYYMMDD C + + ":" + bill.CONTRACTNO//14 QUOTATION NO. 运费协议号 X(30) MAERSK为必选 C + + ":"//15 CHARGE TYPE 费率本代码 X(1)   C + + ":" + bill.CONTRACTNO//16 S/C NO. 合约号 X(30)   C + + ":"//17 BOOKING NO. 船公司订舱编号 X(20) 船公司系统内部订舱编号 C + + ":"//18 SLOT CHARTER ID 舱位互用标识 X(1)   C + + ":" + sendno//19 AMS CODE AMS代码 X(15)   C + //注:QUOTATION NO.项填本票订舱货的运价是通过向中集询价后定下的特殊运价编号。 + + "'"); + + } + else + if (InttrEdi.filetype == "E") + { + //2023-03-03 修改运输条款SERVICE改为EDI的映射值,经过韩工确认 + r.WriteLine("02" + + ":" + bill.ORDERNO//2 REFERENCE NO. 运编号 X(35) 一般为流水号 M + + ":" + bill.MBLNO//3 B\L NO. 提单号 X(20) 船公司的提单号 C + + ":" + bill.SERVICEEDICODE//4 DELIVERY TERM 交货条款 X(9) CY-CY(pier-pier/port):30CY-CFS(pier/port-door):29CFS-CY(door-pier/port):28CFS-CFS(door-door):27 M + + ":" + formatEdiStr("txt", !string.IsNullOrWhiteSpace(InttrEdi.ForWarderName) ? InttrEdi.ForWarderName.Replace("\n", " ").Replace("\r", " ") : "")//5 BOOKING PARTY 订舱人说明 X(70) 货代方企业名称或代码 C + + ":" + InttrEdi.RECEIVECODE//6 ISSUE PARTY CODE 签单人代码 X(13) 即接受订舱的人的代码 M + + ":"//7 ISSUE PARTY 签单人说明 X(35)   C + + ":"//8 APPLICANT 询价单位 X(13) 向船公司询价的单位代码 C + + ":"//9 FOB BK PARTY 国外订舱单位 X(13) 国外FOB货订舱单位的代码 C + + ":"//10 B/L TRANSHIP ID 转船标识 X(1) Y/N C + + ":"//11 BATCH ID 分批 X(1) Y/N C + + ":"//12 SHIPMENT DATE 装期 9(8) CCYYMMDD C + + ":"//13 EXPIRY DATE 效期 9(8) CCYYMMDD C + + ":" + bill.CONTRACTNO//14 QUOTATION NO. 运费协议号 X(30) MAERSK为必选 C + + ":"//15 CHARGE TYPE 费率本代码 X(1)   C + + ":" + bill.SERVICECONTRACTNO//16 S/C NO. 合约号 X(30)   C + + ":" + bill.ORDERNO//17 BOOKING NO. 船公司订舱编号 X(20) 船公司系统内部订舱编号 C + + ":::"//18 SLOT CHARTER ID 舱位互用标识 X(1)   C + + ":" + bill.EDIATTNEMAIL//21 AMS CODE AMS代码 X(15)   C + + ":" + bill.EDIATTN//22 AMS CODE AMS代码 X(15)   C + + ":" + bill.EDIATTNTEL//23 AMS CODE AMS代码 X(15)   C + //注:QUOTATION NO.项填本票订舱货的运价是通过向中集询价后定下的特殊运价编号。 + + "'"); + + } + else + { + var sendno = bill.EDIATTNEMAIL; + + //2023-03-03 修改运输条款SERVICE改为EDI的映射值,经过韩工确认 + r.WriteLine("02" + + ":" + bill.ORDERNO//2 REFERENCE NO. 运编号 X(35) 一般为流水号 M + + ":" + bill.MBLNO//3 B\L NO. 提单号 X(20) 船公司的提单号 C + + ":" + bill.SERVICEEDICODE//4 DELIVERY TERM 交货条款 X(9) CY-CY(pier-pier/port):30CY-CFS(pier/port-door):29CFS-CY(door-pier/port):28CFS-CFS(door-door):27 M + + ":" + formatEdiStr("txt", !string.IsNullOrWhiteSpace(InttrEdi.ForWarderName) ? InttrEdi.ForWarderName.Replace("\n", " ").Replace("\r", " ") : "")//5 BOOKING PARTY 订舱人说明 X(70) 货代方企业名称或代码 C + + ":" + InttrEdi.RECEIVECODE//6 ISSUE PARTY CODE 签单人代码 X(13) 即接受订舱的人的代码 M + + ":"//7 ISSUE PARTY 签单人说明 X(35)   C + + ":"//8 APPLICANT 询价单位 X(13) 向船公司询价的单位代码 C + + ":"//9 FOB BK PARTY 国外订舱单位 X(13) 国外FOB货订舱单位的代码 C + + ":"//10 B/L TRANSHIP ID 转船标识 X(1) Y/N C + + ":"//11 BATCH ID 分批 X(1) Y/N C + + ":"//12 SHIPMENT DATE 装期 9(8) CCYYMMDD C + + ":"//13 EXPIRY DATE 效期 9(8) CCYYMMDD C + + ":" + bill.CONTRACTNO//14 QUOTATION NO. 运费协议号 X(30) MAERSK为必选 C + + ":"//15 CHARGE TYPE 费率本代码 X(1)   C + + ":" + bill.CONTRACTNO//16 S/C NO. 合约号 X(30)   C + + ":"//17 BOOKING NO. 船公司订舱编号 X(20) 船公司系统内部订舱编号 C + + ":"//18 SLOT CHARTER ID 舱位互用标识 X(1)   C + + ":" + sendno//19 AMS CODE AMS代码 X(15)   C + //注:QUOTATION NO.项填本票订舱货的运价是通过向中集询价后定下的特殊运价编号。 + + "'"); + } + icount++; + + var ISSUETYPE = ""; + + //2023-03-02 测试这里有问题,签单方式用的中文,要改成英文正本-ORIGINAL 电放-TELEX + /* + if (bill.ISSUETYPE == "正本") + { + ISSUETYPE = "ORI"; + } + else if (bill.ISSUETYPE == "电放") + { + ISSUETYPE = "TER"; + } + else ISSUETYPE = "EXP"; + */ + //if (bill.ISSUETYPE == "ORIGINAL") + //{ + // ISSUETYPE = "ORI"; + //} + //else if (bill.ISSUETYPE == "TELEX") + //{ + // ISSUETYPE = "TER"; + //} + //else ISSUETYPE = "EXP"; + + if (new string[] { "ORI", "TER", "EXP" }.Contains(bill.ISSUETYPE)) + { + ISSUETYPE = bill.ISSUETYPE; + } + + r.WriteLine("03:" + ISSUETYPE + ":" + bill.ISSUEPLACEID.Trim() + ":" + bill.ISSUEPLACE.Trim() + ":" + GetDateStr(bill.ISSUEDATE, "yyyyMMdd") + ":" + GetBillNum2(bill.NOBILL) + ":" + bill.PREPARDAT + ":" + bill.PAYABLEAT + "'"); + icount++; + + //2024-09-13 参考韩工东胜7去掉ETD + //r.WriteLine("11:" + bill.VESSELID + ":" + bill.VESSEL + ":" + bill.VOYNO + ":::::" + GetDateStr(bill.ETD, "yyyyMMdd") + ":::::'"); + r.WriteLine("11:" + bill.VESSELID + ":" + bill.VESSEL + ":" + bill.VOYNO + "::::::::::'"); + icount++; + + var DESTINATIONID = bill.DESTINATIONID; + var DESTINATION = bill.DESTINATION; + if (bill.CARRIEREDICODE == "ONEY" || bill.CARRIEREDICODE == "ZIM") + { + DESTINATIONID = ""; + DESTINATION = ""; + } + + r.WriteLine("12" + + ":" + bill.PLACERECEIPTID//2 PLACE CODE OF RECEIPT 收货地代码 X(5) OOCL、HLC的订舱要求必选 O + + ":" + bill.PLACERECEIPT//3 PLACE OF RECEIPT 收货地 X(35)   C + + ":" + bill.PORTLOADID//4 LOAD PORT CODE 装货港代码 X(5) OOCL的订舱要求必选 O + + ":" + bill.PORTLOAD//5 LOAD PORT 装货港 X(35)   C + + ":" + bill.PORTDISCHARGEID//6 DISCHARGE PORT CODE 卸货港代码 X(5) OOCL的订舱要求必选 M + + ":" + bill.PORTDISCHARGE//7 DISCHARGE PORT 卸货港 X(35)   C + + ":" + bill.TRANSPORTID //8 TRANSFER PORT CODE 中转港代码 X(5)   C + + ":" + bill.TRANSPORT//9 TRANSFER PORT 中转港 X(35)   C + + ":" + bill.PLACEDELIVERYID//10 PLACE OF DELIVERY CODE 交货地代码 X(5) OOCL的订舱要求必选 O + + ":" + bill.PLACEDELIVERY//11 PLACE OF DELIVERY 交货地 X(35)   C + + ":" + DESTINATIONID//12 FINAL DESTINATION CODE 目的地代码 X(5)   C + + ":" + DESTINATION//13 FINAL DESTINATION CODE 目的地 X(35)   C + + "'"); + + icount = icount + 1; + + r.WriteLine("14:" + bill.BLFRTEDICODE + ":" + bill.BLFRT + "'"); + if (InttrEdi.filetype == "E") + r.WriteLine("15:::" + bill.BLFRTEDICODE + ":" + bill.PAYABLEATID + ":::::'"); + else + r.WriteLine("15:::" + bill.BLFRTEDICODE + "::::::'"); + icount = icount + 2; + + + var Shipping = ""; + if (InttrEdi.filetype == "E") + Shipping = formatEdiStr("txt", bill.SIREMARK); + else + Shipping = formatEdiStr("txt", bill.EDIREMARK); + + List ShippingList = formatlengthStr(Shipping, 70); + + if (!string.IsNullOrWhiteSpace(Shipping)) + { + r.WriteLine("17:" + formatListStr(ShippingList, 5) + "'"); + icount++; + } + + if (InttrEdi.filetype != "E" && !string.IsNullOrEmpty(bill.NVONO)) + { + r.WriteLine("18:NVO:" + bill.NVONO + "'"); + + } + + + Shipping = formatEdiStr("txt", bill.SHIPPER); + ShippingList = formatlengthStr(Shipping, 35); + + if (ShippingList.Count != 0 && Shipping.Length > 0) + { + //2024-09-13 韩工确认最大行数6改为9 + r.WriteLine("20::" + formatListStr(ShippingList, 9) + "'"); + icount = icount + 1; + + } + + + + Shipping = formatEdiStr("txt", bill.CONSIGNEE); + ShippingList = formatlengthStr(Shipping, 35); + + if (ShippingList.Count != 0 && Shipping.Length > 0) + { + //2024-09-13 韩工确认最大行数6改为9 + r.WriteLine("21::" + formatListStr(ShippingList, 9) + "'"); + icount = icount + 1; + + } + + + Shipping = formatEdiStr("txt", bill.NOTIFYPARTY); + ShippingList = formatlengthStr(Shipping, 35); + + if (ShippingList.Count != 0 && Shipping.Length > 0) + { + //2024-09-13 韩工确认最大行数6改为9 + r.WriteLine("22::" + formatListStr(ShippingList, 9) + "'"); + icount = icount + 1; + + } + + + Shipping = formatEdiStr("txt", !string.IsNullOrWhiteSpace(bill.NOTIFYPARTY2) ? bill.NOTIFYPARTY2 : ""); + ShippingList = formatlengthStr(Shipping, 35); + + if (!string.IsNullOrWhiteSpace(Shipping)) + { + + r.WriteLine("23::" + formatListStr(ShippingList, 6) + "'"); + icount = icount + 1; + + + + } + + Shipping = bill.AMSCONSIGNEE; + ShippingList = formatlengthStr(Shipping, 35); + + if (!string.IsNullOrWhiteSpace(Shipping)) + { + r.WriteLine("24::" + formatListStr(ShippingList, 6, true) + "'"); + icount = icount + 1; + + } + + + Shipping = bill.AMSNOTIFYPARTY; + ShippingList = formatlengthStr(Shipping, 35); + + if (!string.IsNullOrWhiteSpace(Shipping)) + { + r.WriteLine("25::" + formatListStr(ShippingList, 6, true) + "'"); + icount = icount + 1; + + } + + + + var cargoid = bill.CARGOID; + if (cargoid == "" || cargoid == " ") cargoid = "S"; + + var kingweight = bill.KINGTAREWEIGHT; + if (kingweight == 0) + kingweight = 100; + + r.WriteLine("41:1:" + bill.HSCODE + ":" + cargoid + ":" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + ":" + bill.KINDPKGS + ":" + kingweight.ToString() + ":" + + bill.CBM.ToString() + "::::::" + bill.KGS.ToString() + ":::'"); + + icount = icount + 1; + + if (cargoid == "R") + { + r.WriteLine("43::::::::::" + bill.REEFERF + ":C:" + bill.TEMPSET + ":" + bill.TEMPMIN + ":" + bill.TEMPMAX + ":::::'"); + + icount = icount + 1; + } + else if (cargoid == "D") + { + r.WriteLine("43:" + bill.DCLASS + ":" + bill.DPAGE + ":" + bill.DUNNO + ":" + bill.DLABEL + "::::::::::::'"); + + icount = icount + 1; + } + + Shipping = formatEdiStr("txt", bill.MARKS); + ShippingList = formatlengthStr(Shipping, 35); + + for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(10))); i++) + { + var tempstr = "44:"; + for (var z = 0; z < 10; z++) + { + if ((i * 10 + z) < ShippingList.Count) + tempstr = tempstr + ShippingList[i * 10 + z]; + if (z < 9) tempstr = tempstr + ":"; + } + if (tempstr != "44:") + { + r.WriteLine(tempstr + "'"); + icount++; + } + } + + Shipping = formatEdiStr("txt", bill.DESCRIPTION); + ShippingList = formatlengthStr(Shipping, 70); + + var m = 1; + var strtemp = ""; + if (ShippingList.Count != 0 && Shipping.Length > 0) + { + + for (var i = 0; i < ShippingList.Count; i++) + { + if (ShippingList[i] != "") + { + if (m <= 5) + { + if (m == 1) strtemp = "47:" + ShippingList[i] + ":"; + else + { + if (m == 5) + strtemp = strtemp + ShippingList[i]; + else + strtemp = strtemp + ShippingList[i] + ":"; + } + } + else + { + m = 1; + r.WriteLine(strtemp + "'"); + strtemp = "47:" + ShippingList[i] + ":"; + icount = icount + 1; + } + m = m + 1; + } + } + } + if (!string.IsNullOrWhiteSpace(strtemp)) + { + r.WriteLine(strtemp + "'"); + icount = icount + 1; + } + + var ISSOC = "N"; + if (bill.ISCONTAINERSOC) ISSOC = "Y"; + + var ctnsumlist = new List(); + + foreach (var ctn in bill.CTNLIST) + { + var newctnsum = ctnsumlist.Find(x => x.CTNALLCODE == ctn.CTNALLCODE); + if (newctnsum == null) + { + var ctnsum = new MsOpSeaeCtnEDIBaseModel(); + ctnsum.CTNALLCODE = ctn.CTNALLCODE; + ctnsum.CTNNUM = ctn.CTNNUM; + if (bill.ISCONTAINERSOC && !string.IsNullOrEmpty(ctn.CNTRNO)) + { + if (!string.IsNullOrEmpty(ctnsum.CNTRNO)) + { + ctnsum.CNTRNO = ctn.CNTRNO; + } + else + { + ctnsum.CNTRNO = ctnsum.CNTRNO + "," + ctn.CNTRNO; + + } + } + ctnsumlist.Add(ctnsum); + + } + else + { + newctnsum.CTNNUM = newctnsum.CTNNUM + ctn.CTNNUM; + if (bill.ISCONTAINERSOC && !string.IsNullOrEmpty(ctn.CNTRNO)) + { + if (!string.IsNullOrEmpty(newctnsum.CNTRNO)) + { + newctnsum.CNTRNO = ctn.CNTRNO; + } + else + { + newctnsum.CNTRNO = newctnsum.CNTRNO + "," + ctn.CNTRNO; + + } + } + + } + } + foreach (var ctnsum in ctnsumlist) + { + if (InttrEdi.filetype == "E") + { + r.WriteLine("48:" + ctnsum.CTNALLCODE + ":" + ctnsum.CTNNUM + ":F:::::" + ISSOC + "'"); + icount = icount + 1; + } + else + { + var cntrnostr = ""; + var isrstr = "N"; + if (cargoid == "R") isrstr = "Y"; + r.WriteLine("48:" + ctnsum.CTNALLCODE + ":" + ctnsum.CTNNUM + ":F:::::" + ISSOC + ":" + cntrnostr + ":::" + isrstr + "'"); + icount = icount + 1; + + } + + } + + foreach (var ctn in bill.CTNLIST) + { + + if (InttrEdi.filetype == "E") + { + r.WriteLine("51:" + ctn.CNTRNO + ":" + ctn.CTNALLCODE + ":" + + ctn.SEALNO + ":" + ctn.PKGS.ToString() + ":" + ctn.KGS.ToString() + "::" + ctn.CBM.ToString() + ":" + bill.EDIATTNEMAIL + "'"); + icount = icount + 1; + + if (bill.CTNGOODSLIST != null && bill.CTNGOODSLIST.Count != 0) + { + foreach (var ctnhs in bill.CTNGOODSLIST) + { + r.WriteLine("53:" + ctnhs.HSCODE + ":" + ctnhs.PKGS.ToString() + ":" + + ctnhs.KGS.ToString() + ":" + ctnhs.CBM.ToString() + ":" + ctnhs.KINDPKGS_EDI_CODE + ":" + ctnhs.KINDPKGS + "'"); + icount = icount + 1; + Shipping = formatEdiStr("txt", ctnhs.DESCRIPTION); + ShippingList = formatlengthStr(Shipping, 70); + m = 1; + strtemp = ""; + if (ShippingList.Count != 0 && Shipping.Length > 0) + { + + for (var i = 0; i < ShippingList.Count; i++) + { + if (!string.IsNullOrWhiteSpace(ShippingList[i])) + { + if (m <= 5) + { + if (m == 1) strtemp = "54:" + ShippingList[i] + ":"; + else + { + if (m == 5) + strtemp = strtemp + ShippingList[i]; + else + strtemp = strtemp + ShippingList[i] + ":"; + } + } + else + { + m = 1; + r.WriteLine(strtemp + "'"); + strtemp = "54:" + ShippingList[i] + ":"; + icount = icount + 1; + } + m = m + 1; + } + } + } + if (!string.IsNullOrWhiteSpace(strtemp)) + { + r.WriteLine(strtemp + "'"); + icount = icount + 1; + } + + + } + } + else + { + r.WriteLine("53:" + bill.HSCODE + ":" + ctn.PKGS.ToString() + ":" + + ctn.KGS.ToString() + ":" + ctn.CBM.ToString() + ":" + ctn.KINDPKGS_EDI_CODE + ":" + ctn.KINDPKGS + "'"); + + icount = icount + 1; + } + } + else + { + if (!string.IsNullOrEmpty(ctn.CNTRNO)) + { + r.WriteLine("51:" + ctn.CNTRNO + ":" + ctn.CTNALLCODE + ":" + + ctn.SEALNO + ":" + ctn.PKGS.ToString() + ":" + ctn.KGS.ToString() + ":'"); + icount = icount + 1; + } + } + //} + } + + } + + //icount = icount + 1; + r.WriteLine("99:" + icount.ToString() + "'"); + r.Close(); + f.Close(); + + result.succ = true; + result.extra = filename; + return result; + } + #endregion + } +} diff --git a/Myshipping.Application/Enum/EDIRouteEnum.cs b/Myshipping.Application/Enum/EDIRouteEnum.cs index 3328c7cd..be564669 100644 --- a/Myshipping.Application/Enum/EDIRouteEnum.cs +++ b/Myshipping.Application/Enum/EDIRouteEnum.cs @@ -55,6 +55,10 @@ namespace Myshipping.Application /// /// SITC /// - SITC + SITC, + /// + /// INTTRA + /// + VOLTA } } diff --git a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs index 57c9548e..3a75ac98 100644 --- a/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs +++ b/Myshipping.Application/Service/BookingOrder/BookingOrderService.cs @@ -9239,6 +9239,30 @@ namespace Myshipping.Application result.extra = currRlt.succ ? currRlt.extra : null; result.extra2 = currRlt.succ ? currRlt.extra2 : null; } + else if (ediRouteEnum == EDIRouteEnum.VOLTA) + { + #region VOLTA + string strCheck = VOLTAEdiNewHelper.IsCreateVOLTAEDI(ediModel); + + _logger.LogInformation($"调用SO(SI),校验:{strCheck},数据对象:{JsonConvert.SerializeObject(ediModel)}"); + + if (!string.IsNullOrWhiteSpace(strCheck)) + { + if (Regex.IsMatch(strCheck, "\\")) + { + strCheck = Regex.Replace(strCheck, "\\", "\n"); + } + + throw Oops.Bah($"发送{EDIRouteEnum.YT.ToString()}校验失败,{strCheck}"); + } + + + CommonWebApiResult currRlt = VOLTAEdiNewHelper.CreateEdiVOLTA(ediModel); + #endregion + + result.succ = currRlt.succ; + result.extra = currRlt.succ ? currRlt.extra.ToString() : ""; + } } catch (Exception ex) { @@ -10391,6 +10415,28 @@ namespace Myshipping.Application dto.YARDREMARK = item.BookingSlotTypeName; } + //这里判断一下ATD,优先以船期表为主。 + if (dto.ATD.HasValue) + { + var paramConfig = _djyTenantParamService.GetParaCodeWithValue(new[] { "SYNC_DONGSHENG_ATD_USE_SHIPSCHEDULE" }).GetAwaiter().GetResult().FirstOrDefault(); + + if (paramConfig != null && !string.IsNullOrWhiteSpace(paramConfig.ParaValue) && paramConfig.ParaValue.Equals("ENABLE", StringComparison.OrdinalIgnoreCase)) + { + //取船期表,最新的记录 + if (!string.IsNullOrWhiteSpace(item.VESSEL) && !string.IsNullOrWhiteSpace(item.VOYNO) && !string.IsNullOrWhiteSpace(item.PORTLOADCODE)) + { + var vesselInfo = _vesselInfo.AsQueryable().Filter(null, true).Where(a => a.Vessel == item.VESSEL && a.Voyno == item.VOYNO && a.PortLoadingId == item.PORTLOADCODE && a.IsDeleted == false + && a.TenantId == UserManager.TENANT_ID).OrderByDescending(a => a.CreatedTime.Value).First(); + + if (vesselInfo != null && vesselInfo.ATD.HasValue && dto.ATD != vesselInfo.ATD) + { + //每次强制适用船期ATD + dto.ATD = vesselInfo.ATD; + } + } + } + } + List statusList = new List(); if (App.Configuration["ServiceStatusOpenAuto"] == "1") @@ -11699,6 +11745,13 @@ namespace Myshipping.Application */ string batchNo = IDGen.NextID().ToString(); + var isVOLTASIExport = App.Configuration["IsVOLTASIExport"]; + + if(!string.IsNullOrWhiteSpace(isVOLTASIExport) && isVOLTASIExport == "0") + { + throw Oops.Bah("配置IsVOLTASIExport=0不弹出窗口"); + } + _logger.LogInformation("批次={no}获取请求VOLTA截单详情 {msg}", batchNo, JSON.Serialize(model)); if (!model.sendType.Equals("E", StringComparison.OrdinalIgnoreCase)) diff --git a/Myshipping.Web.Core/applicationconfig.json b/Myshipping.Web.Core/applicationconfig.json index 81539f2d..c0581e78 100644 --- a/Myshipping.Web.Core/applicationconfig.json +++ b/Myshipping.Web.Core/applicationconfig.json @@ -142,5 +142,6 @@ "SICompareUrl": "http://localhost:5110/api/TaskDraftCompare/ExcuteSISubmittedCompare", "EmailNoticeUrl": "http://47.104.73.97:8801/mail/send", "EmailNoticeDefaultUser": "jianghaiqing@myshipping.net", - "BookingAmendModifyWebApiUrl": "http://localhost:5110/api/TaskBookingAmendmentParser/ModifyBookingAmendmentFile" + "BookingAmendModifyWebApiUrl": "http://localhost:5110/api/TaskBookingAmendmentParser/ModifyBookingAmendmentFile", + "IsVOLTASIExport": "0" } \ No newline at end of file