using Furion.LinqBuilder; using MySqlX.XDevAPI.Common; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Myshipping.Application.EDI.TSL { public class TSLEdiHelper { public TSLEdiHelper() { } #region 基本函数 public static string GetCarrierName(string str) { if (str == "MAEU") return "MAERSK LINE"; if (str == "MCCQ") return "MCC TRANSPORT SINGAPORE"; if (str == "ANNU") return "ANL CONTAINER LINE"; if (str == "CMDU") return "CMA CGM"; if (str == "CHNL") return "CNC"; if (str == "HLCU") return "HAPAG-LLOYD"; if (str == "SUDU") return "HAMBURG"; if (str == "MSCU") return "MSC"; if (str == "DAAE") return "DELMAS"; if (str == "UASC") return "UASC"; if (str == "COSU") return "COSCO"; else return ""; } public static string GetBillNum(string str) { if (str == "ZERO") return "0"; if (str == "ONE") return "1"; if (str == "TWO") return "2"; if (str == "THREE") return "3"; if (str == "FOUR") return "4"; if (str == "FIVE") return "5"; if (str == "SIX") return "6"; if (str == "SERVEN") return "7"; if (str == "EIGHT") return "8"; if (str == "NINE") return "9"; if (str == "TEN") return "10"; else return ""; } 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 ""; } #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 #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) { 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 IsCreateTSL(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 (InttrEdi.filetype == "B") { if (InttrEdi.UseForWarderCode) { if (string.IsNullOrEmpty(headData.ORDERNO)) { error = error + "
订舱编号不能为空"; } } } if (string.IsNullOrEmpty(headData.OpEName)) { error = error + "
操作的英文名不能为空"; } if (string.IsNullOrEmpty(headData.OpTel)) { error = error + "
操作的电话不能为空"; } if (string.IsNullOrEmpty(headData.OpEmail)) { error = error + "
操作的邮箱不能为空"; } //2023-05-19 只有截单时才要求主提单号必填 if (InttrEdi.filetype == "E") { if (string.IsNullOrEmpty(headData.MBLNO)) { error = error + "
主提单号不能为空"; } } if (string.IsNullOrEmpty(headData.BLFRT)) { error = error + "
提单号:" + headData.MBLNO + " 付费方式不能为空"; } if (string.IsNullOrEmpty(headData.SERVICE)) { error = error + "
提单号:" + headData.MBLNO + " 运输条款不能为空"; } //if (string.IsNullOrEmpty(headData.CONTRACTNO)) //{ error = error + "
提单号:" + headData.MBLNO + " 运费协议号不能为空"; } if (string.IsNullOrEmpty(headData.CARGOID)) { error = error + "
提单号:" + headData.MBLNO + " 货物标识不能为空"; } if (headData.CARGOID == "D" || headData.SERVICE == "DOOR-DOOR" || headData.SERVICE == "DOOR-CY" || headData.SERVICE == "CY-DOOR") { if (headData.CARRIER != "YML") { if (string.IsNullOrEmpty(headData.EDIATTN)) { error = error + "
EDI信息联系人不能为空"; } if (string.IsNullOrEmpty(headData.EDIATTNTEL)) { error = error + "
EDI信息联系人电话不能为空"; } if (string.IsNullOrEmpty(headData.EDIATTNEMAIL)) { error = error + "
EDI信息联系人邮箱不能为空"; } } } 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() == "") { if (headData.CARRIER == "COSU") { error = error + "
提单号:" + headData.MBLNO + " 请在SI备注中输入:COSCO 销售的营销代码(此代码船公司会直接提供)"; } else { //if (carrier != "YML") //error = error + "
提单号:" + bill.MBLNO + " EDI备注中不能为空"; } } else { if (StringIsChinese(headData.SIREMARK)) { error = error + "
提单号:" + headData.MBLNO + " SI备注中含有中文或双字节字符"; } } } else { if (headData.EDIREMARK.IndexOf("PLEASE BOOK OCEAN CARRIER") > -1 || headData.EDIREMARK.ToString().Trim() == "") { if (headData.CARRIEREDICODE == "COSU") { error = error + "
提单号:" + headData.MBLNO + " 请在EDI备注中输入:COSCO 销售的营销代码(此代码船公司会直接提供)"; } else { //if (carrier != "YML") //error = error + "
提单号:" + bill.MBLNO + " EDI备注中不能为空"; } } else { /* 2023-04-03 经过确认德翔需要能导出带中文的EDIREMARK,这里校验去掉 if (StringIsChinese(headData.EDIREMARK)) { error = error + "
提单号:" + headData.MBLNO + " EDI备注中含有中文或双字节字符"; } */ } } //if (string.IsNullOrEmpty(headData.CARRIER)) //{ error = error + "
提单号:" + headData.MBLNO + " 船公司不能为空"; } if (string.IsNullOrEmpty(headData.CARRIEREDICODE)) { error = error + "
提单号:" + headData.MBLNO + " 船公司EDI代码不能为空"; } 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 { //2023-03-02 测试发现与东胜的限制行数不同,东胜是8行,跟韩工确认限制从6改为8 //2023-06-19 合川操作提出收、发、通需要能录超过最大8行,查看TSL报文,允许最大10行,将最大8行改为10行 error += formatlengthError("txt", headData.SHIPPER, 35, headData.MBLNO, "发货人", 10, "*", 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 { //2023-03-02 测试发现与东胜的限制行数不同,东胜是8行,跟韩工确认限制从6改为8 //2023-06-19 合川操作提出收、发、通需要能录超过最大8行,查看TSL报文,允许最大10行,将最大8行改为10行 error += formatlengthError("txt", headData.CONSIGNEE, 35, headData.MBLNO, "收货人", 10, "**", false); } } } if (headData.SERVICE == "CY-DOOR") { if (string.IsNullOrEmpty(headData.CONSIGNEEDOORADDR)) { error = error + "
提单号:" + headData.MBLNO + " 运输条款为:CY-DOOR,EDI信息中的DOOR地址不能为空"; } else { if (StringIsChinese(headData.CONSIGNEEDOORADDR)) { error = error + "
提单号:" + headData.MBLNO + " DOOR地址含有中文或双字节字符"; } } } if (headData.SERVICE == "DOOR-CY") { if (string.IsNullOrEmpty(headData.SHIPPERDOORADDR)) { error = error + "
提单号:" + headData.MBLNO + " 运输条款为:DOOR-CY,EDI信息中的联系人地址不能为空"; } else { if (StringIsChinese(headData.SHIPPERDOORADDR)) { error = error + "
提单号:" + headData.MBLNO + " 联系人地址含有中文或双字节字符"; } } } 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 { //2023-03-02 测试发现与东胜的限制行数不同,东胜是8行,跟韩工确认限制从6改为8 //2023-06-19 合川操作提出收、发、通需要能录超过最大8行,查看TSL报文,允许最大10行,将最大8行改为10行 error += formatlengthError("txt", headData.NOTIFYPARTY, 35, headData.MBLNO, "通知人", 10, "***", false); } } } if (!string.IsNullOrEmpty(headData.NOTIFYPARTY2)) { error += formatlengthError("txt", headData.NOTIFYPARTY2, 35, headData.MBLNO, "第二通知人", 5, "", false); } 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 (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.PORTLOADID) || headData.PORTLOADID.Length != 5) { error = error + "
提单号:" + headData.MBLNO + " 装货港代码不能为空或录入不正确(必须是5位代码)"; } if (string.IsNullOrEmpty(headData.PORTLOAD)) { error = error + "
提单号:" + headData.MBLNO + " 装货港不能为空"; } if (string.IsNullOrEmpty(headData.ETD)) { error = error + "
提单号:" + headData.MBLNO + " 开船日期不能为空"; return error; } 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.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 (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.BLFRT != null && headData.BLFRT.IndexOf("PREPAID") >= 0) { if (string.IsNullOrEmpty(headData.PREPARDAT)) { error = error + "
提单号:" + headData.MBLNO + " 预付地点不能为空"; } if (string.IsNullOrEmpty(headData.PREPARDATID)) { error = error + "
提单号:" + headData.MBLNO + " 预付地点EDI代码不能为空"; } } else if (headData.BLFRT != null && headData.BLFRT.IndexOf("COLLECT") >= 0) { if (string.IsNullOrEmpty(headData.PAYABLEAT)) { error = error + "
提单号:" + headData.MBLNO + " 到付地点不能为空"; } if (string.IsNullOrEmpty(headData.PAYABLEATID)) { error = error + "
提单号:" + headData.MBLNO + " 到付地点EDI代码不能为空"; } } if (InttrEdi.filetype == "E") { if (string.IsNullOrEmpty(headData.ISSUEPLACEID)) { error = error + "
提单号:" + headData.MBLNO + " 签单地点或到签单地点EDI代码不能为空"; } } var ctnlist = headData.CTNLIST; if (ctnlist.Count == 0) { error = error + "
提单号:" + headData.MBLNO + " 集装箱信息不能为空"; }; if (InttrEdi.filetype == "E") { #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 (string.IsNullOrEmpty(ctn.CNTRNO)) { error = error + "
提单号:" + headData.MBLNO + " 箱号不能为空"; } if (string.IsNullOrEmpty(ctn.SEALNO)) { error = error + "
提单号:" + headData.MBLNO + " 封号不能为空"; } if (headData.BYCOUNTRY == "BRAZIL") { if (ctn.TAREWEIGHT == 0) { 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 (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 (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 } } return error; } #endregion #region 订舱 public static CommonWebApiResult CreateEdiTSL(EDIBaseModel InttrEdi) { CommonWebApiResult result = new CommonWebApiResult { succ = false }; string bno = InttrEdi.BSLIST[0].MBLNO; if(string.IsNullOrWhiteSpace(bno)) bno = InttrEdi.BSLIST[0].ORDERNO; string filename = InttrEdi.filerpath + "\\" + bno + 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 = ""; //2023-05-04 多次现取当前日期改完生成一下,公用一个日期 DateTime nowDate = DateTime.Now; foreach (var bill in InttrEdi.BSLIST) { bsno = bill.ORDERNO; r.WriteLine("UNB+UNOC:2+" + InttrEdi.SENDCODE + "SO:ZZZ+" + InttrEdi.RECEIVECODE + ":UN+" + nowDate.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'"); /* * 2023-03-02 这里对比了和川的报文,UNH后面取的是提单号,经过韩工确认这里改为取提单号 原代码 r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'"); * 2023-05-19 董怡含反馈主提单号订舱时不填,考虑实际情况,变更为填写bill.ORDERNO */ r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'"); icount = icount + 2; if (InttrEdi.filerole == "9") r.WriteLine("BGM+335+" + bill.ORDERNO + "+9'"); else if (InttrEdi.filerole == "1") r.WriteLine("BGM+335+" + bill.ORDERNO + "+1'"); else r.WriteLine("BGM+335+" + bill.ORDERNO + "+5'"); r.WriteLine("DTM+137:" + nowDate.ToString("yyyyMMddHHmm") + ":203'"); icount = icount + 2; var Shipping = ""; Shipping = formatEdiStr("txt", bill.EDIREMARK); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] EdiRemarkList = Shipping.Split('\\'); if (EdiRemarkList.Length != 0) { for (var i = 0; i < EdiRemarkList.Length; i++) { r.WriteLine("FTX+AAI+++" + EdiRemarkList[i] + "'"); icount = icount + 1; } } r.WriteLine("RFF+FF:" + bill.ORDERNO.Trim() + "'"); icount = icount + 1; if (!string.IsNullOrEmpty(bill.CONTRACTNO)) { r.WriteLine("RFF+CT:" + bill.CONTRACTNO.Trim() + "'"); icount = icount + 1; } /*件重尺*/ r.WriteLine("CNT+7:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + ":KGM'");//按照四舍五入的国际标准 r.WriteLine("CNT+11:" + bill.PKGS.ToString() + "'"); r.WriteLine("CNT+15:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + ":MTQ'"); icount = icount + 3; /* 2023-03-01 跟韩工确认,去掉这个UASC的判断,默认应该要显示CNT+16的信息 if (bill.CARRIEREDICODE == "UASC") { if (bill.CTNLIST.Count > 0) { var ctnnum = 0; foreach (var ctn in bill.CTNLIST) { ctnnum = ctnnum + ctn.CTNNUM; } r.WriteLine("CNT+16:" + ctnnum.ToString() + "'"); icount = icount + 1; } } */ //2023-03-01 跟韩工确认,去掉这个UASC的判断,默认应该要显示CNT+16的信息,以下是新修改 if (bill.CTNLIST.Count > 0) { var ctnnum = 0; foreach (var ctn in bill.CTNLIST) { ctnnum = ctnnum + ctn.CTNNUM; } r.WriteLine("CNT+16:" + ctnnum.ToString() + "'"); icount = icount + 1; } if (bill.SERVICE.ToUpper() == "DOOR-DOOR") { r.WriteLine("TSR+27+2'"); } else if (bill.SERVICE.ToUpper() == "DOOR-CY") { r.WriteLine("TSR+28+2'"); } else if (bill.SERVICE.ToUpper() == "CY-DOOR") { r.WriteLine("TSR+29+2'"); } else { r.WriteLine("TSR+30+2'"); } icount = icount + 1; var copynum = GetBillNum(bill.COPYNOBILL); //2023-03-02 测试这里有问题,签单方式用的中文,要改成英文正本-ORIGINAL 电放-TELEX //if (bill.ISSUETYPE == "正本") if (bill.ISSUETYPE == "ORIGINAL") { r.WriteLine("DOC+706+:26++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (!string.IsNullOrWhiteSpace(copynum)) { r.WriteLine("DOC+707+:26++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "海运单" || bill.ISSUETYPE.ToUpper() == "SEAWAY" || bill.ISSUETYPE.ToUpper() == "SEAWAY BILL" || bill.ISSUETYPE.ToUpper() == "WAYBILL" || bill.ISSUETYPE.ToUpper() == "SWB正本" || bill.ISSUETYPE.ToUpper() == "SWB无正本") { r.WriteLine("DOC+710+:26++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; } //else if (bill.ISSUETYPE.ToUpper() == "BILL COPY" || bill.ISSUETYPE == "电放") else if (bill.ISSUETYPE.ToUpper() == "BILL COPY" || bill.ISSUETYPE == "TELEX") { r.WriteLine("DOC+706+:26++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (!string.IsNullOrWhiteSpace(copynum)) { r.WriteLine("DOC+707+:26++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "正副本") { r.WriteLine("DOC+706+:26++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (!string.IsNullOrWhiteSpace(copynum)) { r.WriteLine("DOC+707+:26++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE.ToUpper() == "HOUSE BILL") { r.WriteLine("DOC+714+:26++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; } if (bill.BLFRT.ToUpper().IndexOf("PREPAID") > 0) { r.WriteLine("CPI+4++P'"); icount = icount + 1; } else if (bill.BLFRT.ToUpper().IndexOf("COLLECT") > 0) { r.WriteLine("CPI+4++C'"); icount = icount + 1; } else { r.WriteLine("CPI+4++B'"); icount = icount + 1; } if (bill.BLFRT == "FREIGHT COLLECT") { if (!string.IsNullOrWhiteSpace(bill.PAYABLEAT)) { r.WriteLine("LOC+57+" + bill.PAYABLEATID + "::6:" + bill.PAYABLEAT + "'"); icount = icount + 1; } } else { r.WriteLine("LOC+57+" + bill.PREPARDATID + "::6:" + bill.PREPARDAT + "'"); icount = icount + 1; } var voyno = ""; if (!string.IsNullOrEmpty(bill.NVOYNO)) voyno = bill.NVOYNO; else voyno = bill.VOYNO; if (voyno.IndexOf(".") >= 0) voyno = voyno.Substring(voyno.IndexOf(".") + 1, voyno.Length - voyno.IndexOf(".") - 1); r.WriteLine("TDT+20+" + voyno + "+1++" + bill.CARRIEREDICODE + ":172+++:::" + bill.VESSEL + "'"); r.WriteLine("DTM+133:" + Convert.ToDateTime(bill.ETD).ToString("yyyyMMdd") + ":102'");//yyyyMMddHHmm r.WriteLine("LOC+88+" + bill.PORTLOADID + "::6:" + bill.PORTLOAD + "+'"); r.WriteLine("LOC+9+" + bill.PORTLOADID + "::6:" + bill.PORTLOAD + "+'"); r.WriteLine("LOC+11+" + bill.PORTDISCHARGEID + "::6:" + bill.PORTDISCHARGE + "+'"); icount = icount + 5; if (!string.IsNullOrWhiteSpace(bill.DESTINATION)) { r.WriteLine("LOC+7+" + bill.DESTINATIONID + "::6:" + bill.DESTINATION + "+'"); icount = icount + 1; } r.WriteLine("NAD+CA+" + bill.CARRIEREDICODE + ":160:86++" + GetCarrierName(bill.CARRIEREDICODE) + "'"); icount = icount + 1; if (InttrEdi.SENDNAME.Length > 35) r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt",InttrEdi.SENDNAME.Substring(0, 35)) + "+" + formatEdiStr("txt", InttrEdi.SENDNAME.Substring(35)) + "'"); else r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt", InttrEdi.SENDNAME) + "'"); //r.WriteLine("CTA+IC+:" +billams.ATTN+ "'"); //r.WriteLine("COM+" +billams.ATTNTEL+ ":TE'"); //r.WriteLine("COM+" + billams.ATTNEMAIL + ":EM'"); r.WriteLine("CTA+IC+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpTel + ":TE'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); //2023-03-01 跟韩工确认这里FX不处理了,东胜还有。 r.WriteLine("NAD+MR+++" + formatEdiStr("txt", InttrEdi.SENDNAME) + "'"); //r.WriteLine("CTA+NT+:" +billams.ATTN+ "'"); //r.WriteLine("COM+" + billams.ATTNEMAIL + ":EM'"); r.WriteLine("CTA+NT+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); icount = icount + 7; if (!string.IsNullOrWhiteSpace(bill.WEITUO)) { if (bill.WEITUO.Length > 35) r.WriteLine("NAD+FW+++" + formatEdiStr("txt", bill.WEITUO.Substring(0, 35)) + "+" + formatEdiStr("txt", bill.WEITUO.Substring(35)) + "'"); else r.WriteLine("NAD+FW+++" + formatEdiStr("txt", bill.WEITUO) + "'"); icount = icount + 1; } else { if (InttrEdi.UseForWarderCode) { r.WriteLine("NAD+FW+" + InttrEdi.ForWarderCode + ":160:86++" + InttrEdi.ForWarderName + "'"); icount++; } else { if (InttrEdi.SENDNAME.Length > 35) r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt", InttrEdi.SENDNAME.Substring(0, 35)) + "+" + formatEdiStr("txt", InttrEdi.SENDNAME.Substring(35)) + "'"); else r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt", InttrEdi.SENDNAME) + "'"); icount = icount + 1; } } if (InttrEdi.UseForWarderCode) { r.WriteLine("NAD+BA+" + InttrEdi.ForWarderCode + ":160:86++" + InttrEdi.ForWarderName + "'"); icount++; r.WriteLine("CTA+IC+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpTel + ":TE'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); icount = icount + 3; } Shipping = ""; var DescriptionShipper = ""; Shipping = formatEdiStr("txt", bill.SHIPPER); List ShippingList = formatlengthStr(Shipping, 35); //2023-03-16 测试比对德翔有固定发货方代码,从FTP配置读取 string sendShipperCode = string.Empty; if(!string.IsNullOrWhiteSpace(InttrEdi.SENDSHIPPERCODE)) { sendShipperCode = InttrEdi.SENDSHIPPERCODE?.Trim(); } if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+CZ+"+ sendShipperCode + "++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 34) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 34); DescriptionShipper = ShippingList[i].Substring(34); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "-"; DescriptionShipper = "-" + DescriptionShipper; } else { Shipping = Shipping + "*"; DescriptionShipper = "*" + DescriptionShipper; } } else if (i > 4) { DescriptionShipper = DescriptionShipper + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); icount = icount + 1; Shipping = formatEdiStr("txt", bill.CONSIGNEE); ShippingList = formatlengthStr(Shipping, 35); var DescriptionConsignee = ""; if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+CN+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 33) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 33); DescriptionConsignee = ShippingList[i].Substring(33); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "--"; DescriptionConsignee = "--" + DescriptionConsignee; } else { Shipping = Shipping + "**"; DescriptionConsignee = "**" + DescriptionConsignee; } } else if (i > 4) { DescriptionConsignee = DescriptionConsignee + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } if (bill.BYCOUNTRY == "USA") { Shipping = Shipping + "+++" + bill.CONSIGNEEPOSTCODE; r.WriteLine(Shipping + "'"); } else if (bill.BYCOUNTRY == "CANADA") { Shipping = Shipping + "+++" + bill.CONSIGNEEPOSTCODE + "+CA"; r.WriteLine(Shipping + "'"); } else if (bill.BYCOUNTRY == "BRAZIL") { Shipping = Shipping + "++++" + bill.CONSIGNEECOUNTRY; r.WriteLine(Shipping + "'"); r.WriteLine("RFF+GN:" + bill.CONSIGNEETAXNO + "'"); icount = icount + 1; } else r.WriteLine(Shipping + "'"); icount = icount + 1; Shipping = formatEdiStr("txt", bill.NOTIFYPARTY); ShippingList = formatlengthStr(Shipping, 35); var DescriptionNotifyparty = ""; if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+NI+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 32) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 32); DescriptionNotifyparty = ShippingList[i].Substring(32); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "---"; DescriptionNotifyparty = "---" + DescriptionNotifyparty; } else { Shipping = Shipping + "***"; DescriptionNotifyparty = "***" + DescriptionNotifyparty; } } else if (i > 4) { DescriptionNotifyparty = DescriptionNotifyparty + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } if (bill.BYCOUNTRY == "USA") { Shipping = Shipping + "+++" + bill.NOTIFYPARTYPOSTCODE; r.WriteLine(Shipping + "'"); } else if (bill.BYCOUNTRY == "BRAZIL") { if (bill.NOTIFYPARTYCOUNTRY != "") Shipping = Shipping + "++++" + bill.NOTIFYPARTYCOUNTRY; r.WriteLine(Shipping + "'"); if (bill.NOTIFYPARTYTAXNO != "") { r.WriteLine("RFF+GN:" + bill.NOTIFYPARTYTAXNO + "'"); icount = icount + 1; } } else r.WriteLine(Shipping + "'"); icount = icount + 1; r.WriteLine("GID+1+" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + "::6:" + bill.KINDPKGS + "'"); icount = icount + 1; if (bill.CARGOID == "R") { r.WriteLine("GDS+14'"); icount = icount + 1; } else if (bill.CARGOID == "D") { r.WriteLine("GDS+11'"); icount = icount + 1; } else if (bill.CARGOID == "O") { r.WriteLine("GDS+5'"); icount = icount + 1; } if (!string.IsNullOrWhiteSpace(bill.HSCODE)) { r.WriteLine("PIA+5+" + bill.HSCODE + ":HS'"); icount = icount + 1; } Shipping = formatEdiStr("txt", bill.DESCRIPTION); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] DescriptionList = Shipping.Split('\\'); if (DescriptionList.Length != 0) { for (var i = 0; i < DescriptionList.Length; i++) { r.WriteLine("FTX+AAA+++" + DescriptionList[i] + "'"); icount = icount + 1; } } if (!string.IsNullOrWhiteSpace(DescriptionShipper)) { r.WriteLine("FTX+AAA+++" + DescriptionShipper + "'"); icount = icount + 1; } if (!string.IsNullOrWhiteSpace(DescriptionConsignee)) { r.WriteLine("FTX+AAA+++" + DescriptionConsignee + "'"); icount = icount + 1; } if (!string.IsNullOrWhiteSpace(DescriptionNotifyparty)) { r.WriteLine("FTX+AAA+++" + DescriptionNotifyparty + "'"); icount = icount + 1; } r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + "'"); r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + "'"); icount = icount + 2; Shipping = formatEdiStr("txt", bill.MARKS); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] MarksList = Shipping.Split('\\'); if (MarksList.Length != 0) { for (var i = 0; i < MarksList.Length; i++) { r.WriteLine("PCI++" + MarksList[i] + "'"); icount = icount + 1; } } if (bill.CARGOID == "D") { r.WriteLine("DGS+IMD+" + bill.DCLASS + "+" + bill.DUNNO + "'"); r.WriteLine("CTA+HG+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); icount = icount + 3; } var ctnsumlist = new List(); foreach (var ctn in bill.CTNLIST) { var isfind = false; ctnsumlist.ForEach(i => { if (i.CTNALLCODE == ctn.CTNALLCODE) { i.CTNNUM = i.CTNNUM + ctn.CTNNUM; isfind = true; } }); if (!isfind) { var ctnnum = new MsOpSeaeCtnEDIBaseModel(); ctnnum.CTNALLCODE = ctn.CTNALLCODE; ctnnum.CTNNUM = ctn.CTNNUM; ctnsumlist.Add(ctnnum); } } foreach (var ctn in ctnsumlist) { if (bill.ISCONTAINERSOC) r.WriteLine("EQD+CN++" + ctn.CTNALLCODE + "+1'"); else r.WriteLine("EQD+CN++" + ctn.CTNALLCODE + "+2'"); icount = icount + 1; if (bill.CARGOID == "R") { if (!string.IsNullOrWhiteSpace(bill.REEFERF)) { r.WriteLine("MEA+AAE+AAS+CBM:" + bill.REEFERF + "'"); icount = icount + 1; } if (!string.IsNullOrWhiteSpace(bill.HUMIDITY)) { r.WriteLine("MEA+AAE+AAO+HMD:" + bill.HUMIDITY + "'"); icount = icount + 1; } } r.WriteLine("EQN+" + ctn.CTNNUM.ToString() + "'"); icount = icount + 1; if (bill.CARGOID == "R") { r.WriteLine("TMP+2+" + bill.TEMPSET + ":CEL'"); icount = icount + 1; } } } r.WriteLine("UNT+" + icount.ToString() + "+" + bsno + "'"); r.WriteLine("UNZ+" + InttrEdi.BSLIST.Count.ToString() + "+" + bsno + "'"); r.Close(); f.Close(); result.succ = true; result.extra = filename; return result; } #endregion #region 确认 public static CommonWebApiResult CreateEdiTSLSI(EDIBaseModel InttrEdi) { CommonWebApiResult result = new CommonWebApiResult { succ = false }; string filename = InttrEdi.filerpath + "\\" + InttrEdi.BSLIST[0].MBLNO + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt"; //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 = ""; foreach (var bill in InttrEdi.BSLIST) { bsno = bill.ORDERNO; r.WriteLine("UNB+UNOC:2+" + InttrEdi.SENDCODE + ":ZZZ+" + InttrEdi.RECEIVECODE + ":UN+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'"); r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMIN:D:99B:UN'"); if (InttrEdi.filerole == "9") r.WriteLine("BGM+340+" + bill.MBLNO + "+9'"); else r.WriteLine("BGM+340+" + bill.MBLNO + "+5'"); icount = icount + 3; var Shipping = ""; Shipping = formatEdiStr("txt", bill.SIREMARK); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] EdiRemarkList = Shipping.Split('\\'); if (EdiRemarkList.Length != 0) { for (var i = 0; i < EdiRemarkList.Length; i++) { r.WriteLine("FTX+AAI+++" + EdiRemarkList[i] + "'"); icount = icount + 1; } } r.WriteLine("RFF+BN:" + bill.MBLNO + "'"); icount = icount + 1; r.WriteLine("RFF+BM:" + bill.MBLNO + "'"); icount = icount + 1; r.WriteLine("RFF+SI:" + bill.MBLNO + "'"); icount = icount + 1; if (!string.IsNullOrEmpty(bill.CONTRACTNO)) { r.WriteLine("RFF+CT:" + bill.CONTRACTNO + "'"); icount = icount + 1; } r.WriteLine("CNT+7:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + ":KGM'"); r.WriteLine("CNT+11:" + bill.PKGS.ToString() + "'"); r.WriteLine("CNT+15:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + ":MTQ'"); icount = icount + 3; if (bill.CARRIEREDICODE == "UASC") { if (bill.CTNLIST.Count > 0) { var ctnnum = 0; foreach (var ctn in bill.CTNLIST) { ctnnum = ctnnum + ctn.CTNNUM; } r.WriteLine("CNT+16:" + ctnnum.ToString() + "'"); icount = icount + 1; } } if (bill.SERVICE.ToUpper() == "DOOR-DOOR") { r.WriteLine("TSR+27+2'"); } else if (bill.SERVICE.ToUpper() == "DOOR-CY") { r.WriteLine("TSR+28+2'"); } else if (bill.SERVICE.ToUpper() == "CY-DOOR") { r.WriteLine("TSR+29+2'"); } else { r.WriteLine("TSR+30+2'"); } icount = icount + 1; var copynum = GetBillNum(bill.COPYNOBILL); //2023-03-02 测试这里有问题,签单方式用的中文,要改成英文正本-ORIGINAL 电放-TELEX if (bill.ISSUETYPE == "ORIGINAL") { r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "海运单" || bill.ISSUETYPE.ToUpper() == "SEAWAY" || bill.ISSUETYPE.ToUpper() == "SEAWAY BILL" || bill.ISSUETYPE.ToUpper() == "WAYBILL" || bill.ISSUETYPE.ToUpper() == "SWB正本" || bill.ISSUETYPE.ToUpper() == "SWB无正本") { r.WriteLine("DOC+710+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; } else if (bill.ISSUETYPE.ToUpper() == "BILL COPY" || bill.ISSUETYPE == "TELEX") { r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "正副本") { r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE.ToUpper() == "HOUSE BILL") { r.WriteLine("DOC+714+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; } if (bill.BLFRT.IndexOf("PREPAID") >= 0) r.WriteLine("CPI+4++P'"); else if (bill.BLFRT.IndexOf("COLLECT") >= 0) r.WriteLine("CPI+4++C'"); else r.WriteLine("CPI+4++B'"); icount = icount + 1; if (bill.BLFRT == "FREIGHT COLLECT") { if (bill.PAYABLEAT != "") { r.WriteLine("LOC+57+" + bill.PREPARDATID + "::6:" + bill.PAYABLEAT + "'"); icount = icount + 1; } } else { r.WriteLine("LOC+57+" + bill.PREPARDATID + "::6:" + bill.PREPARDAT + "'"); icount = icount + 1; } r.WriteLine("LOC+73+" + bill.ISSUEPLACEID + "::6:" + bill.ISSUEPLACE + "'"); icount = icount + 1; //if (billams.ORDERNO != "") // r.WriteLine("RFF+BN:" + billams.ORDERNO + "'"); //else if (bill.BYCOUNTRY == "USA") { r.WriteLine("REF+TN:" + bill.ITNCODE + "'"); icount = icount + 1; } var voyno = ""; if (bill.VOYNO.IndexOf(".") >= 0) { voyno = bill.VOYNO.Substring(bill.VOYNO.IndexOf(".") + 1, bill.VOYNO.Length - bill.VOYNO.IndexOf(".") - 1); } else { voyno = bill.VOYNO; } r.WriteLine("TDT+20+" + voyno + "+1++" + bill.CARRIEREDICODE + "+++:::" + bill.VESSEL + "'"); r.WriteLine("DTM+133:" + Convert.ToDateTime(bill.ETD).ToString("yyyyMMdd") + ":102'");//yyyyMMddHHmm r.WriteLine("LOC+88+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'"); r.WriteLine("LOC+9+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'"); r.WriteLine("LOC+11+" + bill.PORTDISCHARGEID + ":139:6:" + bill.PORTDISCHARGE + "'"); icount = icount + 4; if (bill.DESTINATION != "") { r.WriteLine("LOC+7+" + bill.DESTINATIONID + ":139:6:" + bill.DESTINATION + "'"); icount = icount + 1; } r.WriteLine("NAD+CA+" + bill.CARRIEREDICODE + ":160:86++" + GetCarrierName(bill.CARRIEREDICODE) + "'"); icount = icount + 1; if (InttrEdi.SENDNAME.Length > 35) r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt", InttrEdi.SENDNAME.Substring(0, 35)) + "+" + formatEdiStr("txt", InttrEdi.SENDNAME.Substring(35)) + "'"); else r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + formatEdiStr("txt", InttrEdi.SENDNAME) + "'"); //r.WriteLine("CTA+IC+:" +billams.ATTN+ "'"); //r.WriteLine("COM+" +billams.ATTNTEL+ ":TE'"); //r.WriteLine("COM+" + billams.ATTNEMAIL + ":EM'"); r.WriteLine("CTA+IC+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpTel + ":TE'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); r.WriteLine("NAD+MR+++" + formatEdiStr("txt", InttrEdi.SENDNAME) + "'"); //r.WriteLine("CTA+NT+:" +billams.ATTN+ "'"); //r.WriteLine("COM+" + billams.ATTNEMAIL + ":EM'"); r.WriteLine("CTA+NT+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); icount = icount + 7; var DescriptionShipper = ""; Shipping = formatEdiStr("txt", bill.SHIPPER); List ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+CZ+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 34) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 34); DescriptionShipper = ShippingList[i].Substring(34); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "-"; DescriptionShipper = "-" + DescriptionShipper; } else { Shipping = Shipping + "*"; DescriptionShipper = "*" + DescriptionShipper; } } else if (i > 4) { DescriptionShipper = DescriptionShipper + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); icount = icount + 1; Shipping = formatEdiStr("txt", bill.CONSIGNEE); ShippingList = formatlengthStr(Shipping, 35); var DescriptionConsignee = ""; if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+CN+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 33) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 33); DescriptionConsignee = ShippingList[i].Substring(33); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "--"; DescriptionConsignee = "--" + DescriptionConsignee; } else { Shipping = Shipping + "**"; DescriptionConsignee = "**" + DescriptionConsignee; } } else if (i > 4) { DescriptionConsignee = DescriptionConsignee + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); icount = icount + 1; Shipping = formatEdiStr("txt", bill.NOTIFYPARTY); ShippingList = formatlengthStr(Shipping, 35); var DescriptionNotifyparty = ""; if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+NI+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i >= 4 && ShippingList.Count > 5) { if (i == 4) { if (ShippingList[i].Length > 32) { Shipping = Shipping + ":" + ShippingList[i].Substring(0, 32); DescriptionNotifyparty = ShippingList[i].Substring(32); } else Shipping = Shipping + ":" + ShippingList[i]; if (bill.CARRIEREDICODE == "HLCU") { Shipping = Shipping + "---"; DescriptionNotifyparty = "---" + DescriptionNotifyparty; } else { Shipping = Shipping + "***"; DescriptionNotifyparty = "***" + DescriptionNotifyparty; } } else if (i > 4) { DescriptionNotifyparty = DescriptionNotifyparty + " " + ShippingList[i]; } } else if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); icount = icount + 1; Shipping = formatEdiStr("txt", bill.NOTIFYPARTY2); ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+N1+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i == 2 || i == 3) Shipping = Shipping + ":" + ShippingList[i]; if (i == 4) Shipping = Shipping + ":" + ShippingList[i]; } r.WriteLine(Shipping + "'"); } //判断集装箱是否包含分箱明细 if (bill.CTNGOODSLIST == null || bill.CTNGOODSLIST.Count == 0) { #region 取委托单货描、唛头信息 r.WriteLine("GID+1+" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + "::6:" + bill.KINDPKGS + "'"); icount = icount + 1; if (bill.HSCODE != "") { r.WriteLine("PIA+5+" + bill.HSCODE + ":HS'"); icount = icount + 1; } Shipping = formatEdiStr("txt", bill.DESCRIPTION); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] DescriptionList = Shipping.Split('\\'); if (DescriptionList.Length != 0) { for (var i = 0; i < DescriptionList.Length; i++) { //if (DescriptionList[i] != "") //{ r.WriteLine("FTX+AAA+++" + DescriptionList[i] + "'"); icount = icount + 1; //} } } if (DescriptionShipper != "") { r.WriteLine("FTX+AAA+++" + DescriptionShipper + "'"); icount = icount + 1; } if (DescriptionConsignee != "") { r.WriteLine("FTX+AAA+++" + DescriptionConsignee + "'"); icount = icount + 1; } if (DescriptionNotifyparty != "") { r.WriteLine("FTX+AAA+++" + DescriptionNotifyparty + "'"); icount = icount + 1; } r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + "'"); r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + "'"); icount = icount + 2; if (!string.IsNullOrEmpty(bill.GOODSNCM)) { r.WriteLine("RFF+ABT:" + bill.GOODSNCM + "'"); icount = icount + 1; } Shipping = formatEdiStr("txt", bill.MARKS); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] MarksList = Shipping.Split('\\'); if (MarksList.Length != 0) { for (var i = 0; i < MarksList.Length; i++) { //if (MarksList[i] != "") //{ r.WriteLine("PCI++" + MarksList[i] + "'"); icount = icount + 1; //} } } foreach (var ctn in bill.CTNLIST) { r.WriteLine("SGP+" + ctn.CNTRNO + "+" + ctn.PKGS.ToString() + "'"); r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(ctn.KGS), 3) + "'"); r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(ctn.CBM), 3) + "'"); icount = icount + 3; } #endregion } else { if (bill.CARRIEREDICODE == "UASC" || bill.CARRIEREDICODE == "HLCU" || bill.CARRIEREDICODE == "CMDU") { #region 取集装箱分箱_货描、唛头信息 if (bill.CTNGOODSLIST != null) { if (bill.CTNGOODSLIST.Count > 0) { var i = 0; foreach (var ctngood in bill.CTNGOODSLIST) { //GID+1+400:CT::6:CARTONS' r.WriteLine("GID+" + (i + 1) + "+" + ctngood.PKGS.ToString() + ":" + ctngood.KINDPKGS_EDI_CODE + "::6:" + ctngood.KINDPKGS + "'"); icount++; //PIA+5+HS_CODE1:HS' r.WriteLine("PIA+5+" + ctngood.HSCODE + ":HS'"); icount++; //FTX+AAA+++MATERIAL 1' //FTX+AAA+++HS-NO 39023012' Shipping = formatEdiStr("txt", ctngood.DESCRIPTION); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] DescriptionList = Shipping.Split('\\'); if (DescriptionList.Length != 0) { for (var j = 0; j < DescriptionList.Length; j++) { r.WriteLine("FTX+AAA+++" + DescriptionList[j] + "'"); icount++; } } //MEA+AAE+WT+KGM:3000' //MEA+AAE+AAW+MTQ:110.11' r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(ctngood.KGS), 3) + "'"); icount++; r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(ctngood.CBM), 3) + "'"); icount++; //PCI++MARKS AND NUMBERS:FOR MATERIAL 1: OUR PONUMBER: PO_123456' //if (isbill != 1) //{ // Shipping = formatEdiStr("txt", bill.MARKS); //} //else //{ Shipping = formatEdiStr("txt", ctngood.MARKS); //} if (string.IsNullOrEmpty(ctngood.MARKS)) Shipping = formatEdiStr("txt", bill.MARKS); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] MarksList = Shipping.Split('\\'); if (MarksList.Length != 0) { for (var j = 0; j < MarksList.Length; j++) { r.WriteLine("PCI++" + MarksList[j] + "'"); icount++; } } if (!string.IsNullOrEmpty(bill.GOODSNCM)) { r.WriteLine("RFF+ABT:" + bill.GOODSNCM + "'"); icount++; } // //SGP+MSCU1234567+100' r.WriteLine("SGP+" + ctngood.CNTRNO + "+" + ctngood.PKGS.ToString() + "'"); //MEA+AAE+WT+KGM:1000' r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(ctngood.KGS), 3) + "'"); //MEA+AAE+AAW+MTQ:50.11' r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(ctngood.CBM), 3) + "'"); icount = icount + 3; i = i + 1; } } } #endregion } else { #region 取集装箱分箱_货描、唛头信息 var ctngoodssumlist = new List(); foreach (var ctn in bill.CTNGOODSLIST) { var isfind = false; ctngoodssumlist.ForEach(i => { if (i.HSCODE == ctn.HSCODE && i.KINDPKGS == ctn.KINDPKGS && i.DESCRIPTION == ctn.DESCRIPTION && i.MARKS == ctn.MARKS) { i.PKGS = i.PKGS + ctn.PKGS; i.KGS = i.KGS + ctn.KGS; i.CBM = i.CBM + ctn.CBM; isfind = true; } }); if (!isfind) { var ctnnum = new MsOpSeaeCtnDetailEDIBaseModel(); ctnnum.HSCODE = ctn.HSCODE; ctnnum.KINDPKGS = ctn.KINDPKGS; ctnnum.KINDPKGS_EDI_CODE = ctn.KINDPKGS_EDI_CODE; ctnnum.DESCRIPTION = ctn.DESCRIPTION; ctnnum.MARKS = ctn.MARKS; ctnnum.PKGS = ctn.PKGS; ctnnum.KGS = ctn.KGS; ctnnum.CBM = ctn.CBM; ctngoodssumlist.Add(ctnnum); } } if (ctngoodssumlist != null) { if (ctngoodssumlist.Count > 0) { var goodct = 0; foreach (var ctngoodsum in ctngoodssumlist) { //GID+1+400:CT::6:CARTONS' r.WriteLine("GID+" + (goodct + 1) + "+" + ctngoodsum.PKGS.ToString() + ":" + ctngoodsum.KINDPKGS_EDI_CODE + "::6:" + ctngoodsum.KINDPKGS + "'"); icount++; //PIA+5+HS_CODE1:HS' r.WriteLine("PIA+5+" + ctngoodsum.HSCODE + ":HS'"); icount++; //FTX+AAA+++MATERIAL 1' //FTX+AAA+++HS-NO 39023012' Shipping = formatEdiStr("txt", ctngoodsum.DESCRIPTION); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] DescriptionList = Shipping.Split('\\'); if (DescriptionList.Length != 0) { for (var j = 0; j < DescriptionList.Length; j++) { r.WriteLine("FTX+AAA+++" + DescriptionList[j] + "'"); icount++; } } //MEA+AAE+WT+KGM:3000' //MEA+AAE+AAW+MTQ:110.11' r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(ctngoodsum.KGS), 3) + "'"); icount++; r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(ctngoodsum.CBM), 3) + "'"); icount++; //PCI++MARKS AND NUMBERS:FOR MATERIAL 1: OUR PONUMBER: PO_123456' //if (isbill != 1) //{ // Shipping = formatEdiStr("txt", bill.MARKS); //} //else //{ Shipping = formatEdiStr("txt", ctngoodsum.MARKS); //} if (ctngoodsum.MARKS == "") Shipping = formatEdiStr("txt", bill.MARKS); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); string[] MarksList = Shipping.Split('\\'); if (MarksList.Length != 0) { for (var j = 0; j < MarksList.Length; j++) { r.WriteLine("PCI++" + MarksList[j] + "'"); icount++; } } if (!string.IsNullOrEmpty(bill.GOODSNCM)) { r.WriteLine("RFF+ABT:" + bill.GOODSNCM + "'"); icount++; } goodct = goodct + 1; bill.CTNGOODSLIST.ForEach(i => { if (i.HSCODE == ctngoodsum.HSCODE && i.KINDPKGS == ctngoodsum.KINDPKGS && i.DESCRIPTION == ctngoodsum.DESCRIPTION && i.MARKS == ctngoodsum.MARKS) { //SGP+MSCU1234567+100' r.WriteLine("SGP+" + i.CNTRNO + "+" + i.PKGS.ToString() + "'"); //MEA+AAE+WT+KGM:1000' r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(i.KGS), 3) + "'"); //MEA+AAE+AAW+MTQ:50.11' r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(i.CBM), 3) + "'"); icount = icount + 3; } }); } } } #endregion } } if (bill.CARGOID == "D") { r.WriteLine("DGS+IMD+" + bill.DCLASS + "+" + bill.DUNNO + "'"); r.WriteLine("CTA+HG+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); icount = icount + 3; } #region 集装箱 主箱循环 foreach (var ctn in bill.CTNLIST) { if (bill.ISCONTAINERSOC) r.WriteLine("EQD+CN+" + ctn.CNTRNO + "+" + ctn.CTNALLCODE + "+1'"); else r.WriteLine("EQD+CN+" + ctn.CNTRNO + "+" + ctn.CTNALLCODE + "+2'"); r.WriteLine("MEA+AAE+WT+KGM:" + Math.Round(Convert.ToDecimal(ctn.KGS), 3) + "'"); r.WriteLine("MEA+AAE+AAW+MTQ:" + Math.Round(Convert.ToDecimal(ctn.CBM), 3) + "'"); icount = icount + 3; if (bill.CARGOID == "R") { if (bill.REEFERF != "") { r.WriteLine("MEA+AAE+AAS+CBM:" + bill.REEFERF + "'"); icount = icount + 1; } } r.WriteLine("SEL+" + ctn.SEALNO + "+CA'"); icount = icount + 1; if (bill.CARGOID == "R") { r.WriteLine("TMP+2+" + bill.TEMPSET + ":CEL'"); icount = icount + 1; } } #endregion } r.WriteLine("UNT+" + icount.ToString() + "+" + bsno + "'"); r.WriteLine("UNZ+" + InttrEdi.BSLIST.Count.ToString() + "+" + bsno + "'"); r.Close(); f.Close(); result.succ = true; result.extra = filename; return result; } #endregion } /// /// 订舱提单份数为空时,默认返回"0" /// public static class NoBillSOExts { public static string EmptyDefaultNum(this string s) { if (string.IsNullOrWhiteSpace(s)) return "0"; return s; } } }