using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Security; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Web; using System.Linq; using System.Text.RegularExpressions; using Newtonsoft.Json.Linq; namespace Myshipping.Application.EDI.CargoSmart { public class CargoSmartEdiHelper { public CargoSmartEdiHelper() { } #region 基本函数 public static string GetCarrierName(string str) { if (str == "ANNU") return "ANL"; if (str == "CMA") return "CMACGM"; if (str == "CHNL") return "CNC"; 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 (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 IsCreateCargoSmartEDI(MsCargoSmartEdiModel 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 (headData.CARRIER != "YML") { if (string.IsNullOrEmpty(headData.OpEName)) { error = error + "
操作的英文名不能为空"; } if (string.IsNullOrEmpty(headData.OpTel)) { error = error + "
操作的电话不能为空"; } if (string.IsNullOrEmpty(headData.OpEmail)) { error = error + "
操作的邮箱不能为空"; } } 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 { 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 { 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 (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 { 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); } 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 (string.IsNullOrEmpty(ctn.TAREWEIGHT) || Convert.ToDecimal(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 if (headData.BYCOUNTRY == "USA") { if (string.IsNullOrEmpty(headData.CONSIGNEEPOSTCODE)) { error = error + "
提单号:" + headData.MBLNO + " 收货人邮编不能为空"; } if (string.IsNullOrEmpty(headData.NOTIFYPARTYPOSTCODE)) { error = error + "
提单号:" + headData.MBLNO + " 通知人邮编不能为空"; } } else if (headData.BYCOUNTRY == "CANADA") { if (string.IsNullOrEmpty(headData.CONSIGNEEPOSTCODE)) { error = error + "
提单号:" + headData.MBLNO + " 收货人邮编不能为空"; } } else if (headData.BYCOUNTRY == "BRAZIL") { if (string.IsNullOrEmpty(headData.CONSIGNEECOUNTRY)) { error = error + "
提单号:" + headData.MBLNO + " 收货人国家代码不能为空"; } if (string.IsNullOrEmpty(headData.CONSIGNEETAXNO)) { error = error + "
提单号:" + headData.MBLNO + " 收货人税号不能为空"; } if (string.IsNullOrEmpty(headData.NOTIFYPARTYCOUNTRY)) { error = error + "
提单号:" + headData.MBLNO + " 通知人国家代码不能为空"; } if (string.IsNullOrEmpty(headData.NOTIFYPARTYTAXNO)) { error = error + "
提单号:" + headData.MBLNO + " 通知人税号不能为空"; } if (string.IsNullOrEmpty(headData.GOODSNCM)) { error = error + "
提单号:" + headData.MBLNO + " 货物NCM编码不能为空"; } } } } return error; } #endregion #region 订舱 public static string CreateEdiCargoSmart(MsCargoSmartEdiModel InttrEdi) { string filename = InttrEdi.filerpath + "\\IFTMINB_" + 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 + ":01+" + InttrEdi.RECEIVECODE + ":01+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'"); r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'"); icount = icount + 2; if (bill.CARRIEREDICODE == "HLCU") { if (InttrEdi.filerole == "9") r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+9'"); else if (InttrEdi.filerole == "1") r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+1'"); else r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+5'"); } else { if (InttrEdi.filerole == "9") r.WriteLine("BGM+335+" + bill.MBLNO + "SO+9'"); else if (InttrEdi.filerole == "1") r.WriteLine("BGM+335+" + bill.ORDERNO + "SO+1'"); else r.WriteLine("BGM+335+" + bill.MBLNO + "SO+5'"); } if (bill.CARRIEREDICODE == "MSCU") r.WriteLine("DTM+318:" + DateTime.Now.ToString("yyyyMMddHHmm") + ":203'"); else r.WriteLine("DTM+137:" + DateTime.Now.ToString("yyyyMMddHHmm") + ":203'"); icount = icount + 2; 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'"); } var str_pay = ""; if (bill.BLFRT.IndexOf("PREPAID") >= 0) str_pay = bill.PREPARDAT; if (bill.BLFRT.IndexOf("COLLECT") >= 0) str_pay = bill.PAYABLEAT; 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++) { if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { r.WriteLine("FTX+AAI+++" + EdiRemarkList[i] + "'"); } else r.WriteLine("FTX+AAA+++" + EdiRemarkList[i] + "'"); icount = icount + 1; } } if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { r.WriteLine("CNT+7:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + ":KGM'");//按照四舍五入的国际标准 r.WriteLine("CNT+11:" + bill.PKGS + "'"); r.WriteLine("CNT+15:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + ":CBM'"); icount = icount + 3; 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.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.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { 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 (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { r.WriteLine("DTM+95:" + Convert.ToDateTime(bill.ISSUEDATE).ToString("yyyyMMdd") + ":102'"); icount = icount + 1; } if (InttrEdi.UseForWarderCode) { r.WriteLine("RFF+FF:" + bill.ORDERNO.Trim() + "'"); r.WriteLine("RFF+ON:" + bill.ORDERNO.Trim() + "'"); icount = icount + 2; } else { if (bill.ORDERNO.Trim() != "") { r.WriteLine("RFF+FF:" + bill.ORDERNO.Trim() + "'"); r.WriteLine("RFF+ON:" + bill.ORDERNO.Trim() + "'"); icount = icount + 2; } } if (bill.CARRIEREDICODE != "COSU") { if (bill.CARRIEREDICODE == "HLCU") { //r.WriteLine("RFF+ON:" + bill.CUSTNO + "'"); r.WriteLine("RFF+BM:" + bill.MBLNO + "'"); } else { r.WriteLine("RFF+BN:" + bill.MBLNO + "'"); r.WriteLine("RFF+BM:" + bill.MBLNO + "'"); } icount = icount + 2; } r.WriteLine("RFF+CT:" + bill.CONTRACTNO + "'"); 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 + 2; 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); if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { var tmpcarrier = "CMDU"; if (bill.CARRIEREDICODE == "ANL2") tmpcarrier = "ANNU"; if (bill.CARRIEREDICODE == "CNC2") tmpcarrier = "CHNL"; r.WriteLine("TDT+20+" + voyno + "+1++" + tmpcarrier + "+++:::" + bill.VESSEL + "'"); } else r.WriteLine("TDT+20+" + voyno + "+1++" + bill.CARRIEREDICODE + "+++:::" + bill.VESSEL + "'"); r.WriteLine("LOC+9+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'"); 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+11+" + bill.PORTDISCHARGEID + ":139:6:" + bill.PORTDISCHARGE + "'"); icount = icount + 5; if (bill.DESTINATION != "") { r.WriteLine("LOC+7+" + bill.DESTINATIONID + ":139:6:" + bill.DESTINATION + "'"); icount = icount + 1; } Shipping = ""; 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 (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { if (i == 0) Shipping = "NAD+SH+++" + ShippingList[0] + "+"; } else 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]; } } 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 (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { if (i == 0) Shipping = "NAD+NI+++" + ShippingList[0] + "+"; } else 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; if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { var tmpcarrier = "CMDU"; if (bill.CARRIEREDICODE == "ANL2") tmpcarrier = "ANNU"; if (bill.CARRIEREDICODE == "CNC2") tmpcarrier = "CHNL"; r.WriteLine("NAD+CA+" + tmpcarrier + "'"); } else r.WriteLine("NAD+CA+" + bill.CARRIEREDICODE + ":160:86++" + GetCarrierName(bill.CARRIEREDICODE) + "'"); icount = icount + 1; if (bill.SERVICE == "DOOR-DOOR") { Shipping = formatEdiStr("txt", bill.SHIPPER); ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+SF+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i >= 2) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount = icount + 4; Shipping = formatEdiStr("txt", bill.CONSIGNEE); if (Shipping.ToUpper().IndexOf("TO ORDER") >= 0 || Shipping.ToUpper().IndexOf("SAME AS") >= 0) Shipping = formatEdiStr("txt", bill.NOTIFYPARTY); ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+ST+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i >= 2) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount = icount + 4; } if (bill.SERVICE == "DOOR-CY") { Shipping = formatEdiStr("txt", bill.SHIPPERDOORADDR); ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+SF+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i >= 2) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount = icount + 4; } if (bill.SERVICE == "CY-DOOR") { Shipping = formatEdiStr("txt", bill.CONSIGNEEDOORADDR); ShippingList = formatlengthStr(Shipping, 35); if (ShippingList.Count != 0 && Shipping.Length > 0) { for (var i = 0; i < ShippingList.Count; i++) { if (i == 0) Shipping = "NAD+ST+++" + ShippingList[0] + "+"; if (i == 1) Shipping = Shipping + ShippingList[i]; if (i >= 2) Shipping = Shipping + ":" + ShippingList[i]; } } r.WriteLine(Shipping + "'"); r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount = icount + 4; } if (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) + "'"); } 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++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'"); else r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'"); } } if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { var alsendcode2 =""; if (alsendcode2 == "") alsendcode2 = InttrEdi.SENDCODE; //if (ftpset.SENDNAME.Length > 35) // r.WriteLine("NAD+HI+" + alsendcode2 + ":160:86++" + ftpset.SENDNAME.Substring(0, 35) + "+" + ftpset.SENDNAME.Substring(35) + "'"); //else r.WriteLine("NAD+HI+" + alsendcode2 + ":160:86++" + InttrEdi.SENDCODE + "'"); icount = icount + 1; r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); var copynum = GetBillNum(bill.COPYNOBILL); if (bill.ISSUETYPE == "正本") { r.WriteLine("DOC+705+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "海运单" || bill.ISSUETYPE == "Seaway" || bill.ISSUETYPE == "WAYBILL" || bill.ISSUETYPE == "SWB" || bill.ISSUETYPE == "SWB正本" || bill.ISSUETYPE == "SWB无正本") { r.WriteLine("DOC+710+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; } else if (bill.ISSUETYPE == "BILL COPY" || bill.ISSUETYPE == "电放") { r.WriteLine("DOC+705+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "正副本") { r.WriteLine("DOC+705+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "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++; if (InttrEdi.SENDNAME.Length > 35) r.WriteLine("NAD+BK+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'"); else r.WriteLine("NAD+BK+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'"); r.WriteLine("CTA+IC+:" + bill.OpEName + "'"); r.WriteLine("COM+" + bill.OpTel + ":TE'"); r.WriteLine("COM+" + bill.OpEmail + ":EM'"); r.WriteLine("GID+1+" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + "::6:" + bill.KINDPKGS + "'"); icount = icount + 8; 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++) { 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + "'"); r.WriteLine("MEA+VOL+AAW+CBM:" + 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 MsOpSeaeCtnEdiModel(); 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.CTNNUM + "+2'"); r.WriteLine("EQN+" + ctn.CTNNUM.ToString() + "'"); icount = icount + 2; if (bill.CARGOID == "R") { if (bill.REEFERF != "") r.WriteLine("MEA+AAE+AAS+CBM:" + bill.REEFERF + "'"); if (bill.HUMIDITY != "") r.WriteLine("MEA+AAE+AAO+HMD:" + bill.HUMIDITY + "'"); r.WriteLine("TMP+2+" + bill.TEMPSET + ":CEL'"); icount = icount + 2; } } } r.WriteLine("UNT+" + icount.ToString() + "+" + bsno + "'"); r.WriteLine("UNZ+" + InttrEdi.BSLIST.Count.ToString() + "+" + bsno + "'"); r.Close(); f.Close(); return filename; } #endregion #region 确认 public static string CreateEdiCargoSmartSI(MsCargoSmartEdiModel InttrEdi) { string filename = InttrEdi.filerpath + "\\IFTMIN_" + 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 + ":01+" + InttrEdi.RECEIVECODE + ":01+" + 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'"); 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'"); } var str_pay = ""; if (bill.BLFRT.IndexOf("PREPAID") >= 0) str_pay = bill.PREPARDAT; if (bill.BLFRT.IndexOf("COLLECT") >= 0) str_pay = bill.PAYABLEAT; r.WriteLine("FTX+AAS+++" + bill.BLFRT + " Payable at " + str_pay + " " + bill.SERVICE + " " + bill.PKGS.ToString() + bill.KINDPKGS + "'"); icount = icount + 5; 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+AAS+++" + EdiRemarkList[i] + "'"); icount = icount + 1; } } if (bill.BYCOUNTRY == "USA") { if (bill.SCACCODE != "") r.WriteLine("FTX+CCI++MFS+1:US:" + bill.SCACCODE + "'"); else r.WriteLine("FTX+CCI++MFS+5:US'"); icount = icount + 1; } else if (bill.BYCOUNTRY == "CANADA") { if (bill.SCACCODE != "") r.WriteLine("FTX+CCI++MFS+1:CA:" + bill.SCACCODE + "'"); else r.WriteLine("FTX+CCI++MFS+5:CA'"); 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.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; r.WriteLine("DTM+95:" + Convert.ToDateTime(bill.ISSUEDATE).ToString("yyyyMMdd") + ":102'"); icount = icount + 1; if (bill.CARRIEREDICODE == "MASK") { Shipping = formatEdiStr("txt", bill.BSNOLIST); Shipping = Shipping.Replace("\n", "\\"); Shipping = Shipping.Replace("\r", " "); EdiRemarkList = Shipping.Split('\\'); if (EdiRemarkList.Length != 0) { for (var i = 0; i < EdiRemarkList.Length; i++) { r.WriteLine("RFF+BN:" + EdiRemarkList[i] + "'"); icount = icount + 1; } } else { //if (billams.ORDERNO != "") // r.WriteLine("RFF+BN:" + billams.ORDERNO + "'"); //else r.WriteLine("RFF+BN:" + bill.MBLNO + "'"); icount = icount + 1; } } else { //if (billams.ORDERNO != "") // r.WriteLine("RFF+BN:" + billams.ORDERNO + "'"); //else r.WriteLine("RFF+BN:" + bill.MBLNO + "'"); icount = icount + 1; } r.WriteLine("RFF+BM:" + bill.MBLNO + "'"); r.WriteLine("RFF+CT:" + bill.CONTRACTNO + "'"); icount = icount + 2; if (bill.CARRIEREDICODE == "UASC") { r.WriteLine("RFF+SI:" + bill.ORDERNO + "'"); icount = icount + 1; } if (bill.BYCOUNTRY == "USA") { r.WriteLine("REF+TN:" + bill.ITNCODE + "'"); 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; 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; } if (bill.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { var tmpcarrier = "CMDU"; if (bill.CARRIEREDICODE == "ANL2") tmpcarrier = "ANNU"; if (bill.CARRIEREDICODE == "CNC2") tmpcarrier = "CHNL"; r.WriteLine("TDT+20+" + voyno + "+1++" + tmpcarrier + "+++:::" + bill.VESSEL + "'"); } else r.WriteLine("TDT+20+" + voyno + "+1++" + bill.CARRIEREDICODE + "+++:::" + bill.VESSEL + "'"); r.WriteLine("LOC+9+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'"); r.WriteLine("LOC+88+" + 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; } 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+SH+++" + 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; if (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) + "'"); } 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++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'"); else r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'"); } } icount++; 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+N1+++" + 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; 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+N2+++" + 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.CARRIEREDICODE == "CMA2" || bill.CARRIEREDICODE == "ANL2" || bill.CARRIEREDICODE == "CNC2") { var tmpcarrier = "CMDU"; if (bill.CARRIEREDICODE == "ANL2") tmpcarrier = "ANNU"; if (bill.CARRIEREDICODE == "CNC2") tmpcarrier = "CHNL"; r.WriteLine("NAD+CA+" + tmpcarrier + "'"); } else r.WriteLine("NAD+CA+" + bill.CARRIEREDICODE + ":160:86++" + GetCarrierName(bill.CARRIEREDICODE) + "'"); if (InttrEdi.SENDNAME.Length > 35) r.WriteLine("NAD+SI+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'"); else r.WriteLine("NAD+SI+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'"); r.WriteLine("CTA+IC+:" + bill.EDIATTN + "'"); r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'"); r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount = icount + 5; var copynum = GetBillNum(bill.COPYNOBILL); if (bill.ISSUETYPE == "正本") { r.WriteLine("DOC+705+++" + 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 == "电放") { r.WriteLine("DOC+705+++" + GetBillNum(bill.NOBILL) + "'"); icount = icount + 1; if (copynum != "") { r.WriteLine("DOC+707+++" + copynum + "'"); icount = icount + 1; } } else if (bill.ISSUETYPE == "正副本") { r.WriteLine("DOC+705+++" + 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.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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + "'"); r.WriteLine("MEA+VOL+AAW+CBM:" + 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(ctn.KGS), 3) + "'"); r.WriteLine("MEA+VOL+AAW+CBM:" + 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(ctngood.KGS), 3) + "'"); icount++; r.WriteLine("MEA+VOL+AAW+CBM:" + 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(ctngood.KGS), 3) + "'"); //MEA+AAE+AAW+MTQ:50.11' r.WriteLine("MEA+VOL+AAW+CBM:" + 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 MsOpSeaeCtnDetailEdiModel(); 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(ctngoodsum.KGS), 3) + "'"); icount++; r.WriteLine("MEA+VOL+AAW+CBM:" + 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(i.KGS), 3) + "'"); //MEA+AAE+AAW+MTQ:50.11' r.WriteLine("MEA+VOL+AAW+CBM:" + 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+WT+G+KGM:" + Math.Round(Convert.ToDecimal(ctn.KGS), 3) + "'"); r.WriteLine("MEA+VOL+AAW+CBM:" + 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(); return filename; } #endregion #region VGM public static string CreateEdiCMAVGM(MsCargoSmartEdiModel InttrEdi) { string filename = InttrEdi.filerpath + "\\VERMAS_" + 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+UNOA:2+" + InttrEdi.SENDCODE + ":ZZ+" + InttrEdi.RECEIVECODE + ":01+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'"); r.WriteLine("UNH+" + bill.ORDERNO+ "+VERMAS:D:16A:UN'"); icount = icount + 2; //9->首次发送 4->更改发送 1->取消 r.WriteLine("BGM+XXX+" + bill.MBLNO + "+" + InttrEdi.filerole + "'"); icount++; r.WriteLine("DTM+137:" + DateTime.Now.ToString("yyyyMMddHHmm") + ":203'"); icount = icount + 2; var Shipping = ""; 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]; 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; r.WriteLine("NAD+CA+" + bill.CARRIEREDICODE + ":160:86++" + GetCarrierName(bill.CARRIEREDICODE) + "'"); icount = icount + 1; r.WriteLine("NAD+TB+" + bill.EDIATTN + "'"); icount++; foreach (var ctn in bill.CTNLIST) { r.WriteLine("EQD+CN+" + ctn.CNTRNO + "'"); icount = icount + 1; r.WriteLine("RFF+BM:" + bill.MBLNO + "'"); icount = icount + 1; r.WriteLine("RFF+BN:" + bill.MBLNO + "'"); icount = icount + 1; r.WriteLine("MEA+AAE+VGM+KGM:" + ctn.WEIGHKGS + "'"); icount = icount + 1; var SM = "SM1"; if (ctn.WEIGHTYPE == "累加") SM = "SM2"; if (ctn.WEIGHTYPE == "总重") SM = "SM1"; r.WriteLine("DOC+"+SM+":VGM:306+'"); icount = icount + 1; r.WriteLine("NAD+SPC+++" + InttrEdi.SENDNAME + "'"); icount = icount + 1; r.WriteLine("NAD+WPA+++" + InttrEdi.SENDNAME + "'"); icount = icount + 1; if (ctn.VGMCONNCOM != "") { r.WriteLine("NAD+WPA+++" + ctn.VGMCONNCOM + "+++++CN'"); icount++; } r.WriteLine("CTA+RP+:" + ctn.WEIGHSIGN + "'"); icount = icount + 1; r.WriteLine("NAD+AM+++" + InttrEdi.SENDNAME + "'"); icount++; r.WriteLine("CTA+RP+:" + ctn.WEIGHSIGN + "'"); icount++; r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'"); icount++; } } r.WriteLine("UNT+" + icount.ToString() + "+001'"); r.WriteLine("UNZ+" + InttrEdi.BSLIST.Count.ToString() + "+" + bsno + "'"); r.Close(); f.Close(); return filename; } #endregion } public class MsCargoSmartEdiModel { /// /// 发送方代码 M /// public string SENDCODE { get; set; } /// /// 发送方名称 M /// public string SENDNAME { get; set; } /// /// 接收方代码 M /// public string RECEIVECODE { get; set; } /// /// 文件类型 (B订舱,E SI确认)M /// public string filetype { get; set; } /// /// 文件功能 (9原始,1 更新,5 退舱 )M /// public string filerole { get; set; } /// /// 文件路径 M /// public string filerpath { get; set; } /// /// 是否使用货代代码。 M /// public bool UseForWarderCode { get; set; } /// /// 货代代码。 O /// public string ForWarderCode { get; set; } /// /// 货代名称 O /// public string ForWarderName { get; set; } /// /// 业务信息列表 M /// public List BSLIST { get; set; } } public class MsOpSeaeEdiModel { /// /// 委托方 /// public string WEITUO { get; set; } /// /// 操作英文名称 M /// public string OpEName { get; set; } /// /// 操作电话 M /// public string OpTel { get; set; } /// /// 操作邮箱 M /// public string OpEmail { get; set; } /// /// EDI联系人名称 O /// public string EDIATTN { get; set; } /// /// EDI联系人电话 O /// public string EDIATTNTEL { get; set; } /// /// EDI联系人邮箱 O /// public string EDIATTNEMAIL { get; set; } /// /// 订舱编号 O /// public string ORDERNO { get; set; } /// /// 主提单号 M /// public string MBLNO { get; set; } /// /// 付费方式 M /// public string BLFRT { get; set; } /// /// 船名 O /// public string VESSEL { get; set; } /// /// 航次 O /// public string VOYNO { get; set; } /// /// 内部航次 O /// public string NVOYNO { get; set; } /// /// 开船日期 M /// public string ETD { get; set; } /// /// EDI备注 /// public string EDIREMARK { get; set; } /// /// SI备注 /// public string SIREMARK { get; set; } /// /// 船公司名称 M /// public string CARRIER { get; set; } /// /// 船公司EDI代码 M /// public string CARRIEREDICODE { get; set; } /// /// 发货人 M /// public string SHIPPER { get; set; } /// /// 收货人 M /// public string CONSIGNEE { get; set; } /// /// 通知人 M /// public string NOTIFYPARTY { get; set; } /// /// 第二通知人 /// public string NOTIFYPARTY2 { get; set; } /// /// 收货地所在国家 O /// public string BYCOUNTRY { get; set; } ///// ///// AMS发货人 O ///// //public string AMSSHIPPER { get; set; } ///// ///// AMS收货人 O ///// //public string AMSCONSIGNEE { get; set; } ///// ///// AMS通知人 O ///// //public string AMSNOTIFYPARTY { get; set; } /// /// HS编码 /// public string HSCODE { get; set; } /// /// 唛头 M /// public string MARKS { get; set; } /// /// 货物描述 M /// public string DESCRIPTION { get; set; } /// /// 起运港代码(每船公司可能不同) M /// public string PORTLOADID { get; set; } /// /// 起运港 M /// public string PORTLOAD { get; set; } /// ///卸货港代码(每船公司可能不同) M /// public string PORTDISCHARGEID { get; set; } /// /// 卸货港 M /// public string PORTDISCHARGE { get; set; } /// ///目的地代码(每船公司可能不同) /// public string DESTINATIONID { get; set; } /// /// 目的地 /// public string DESTINATION { get; set; } /// /// 件数 M /// public Int32 PKGS { get; set; } /// /// 包装 M /// public string KINDPKGS { get; set; } /// /// 包装代码 M /// public string KINDPKGS_EDI_CODE { get; set; } /// /// 重量 M /// public decimal KGS { get; set; } /// /// 体积 M /// public decimal CBM { get; set; } /// /// 货物标识 M /// public string CARGOID { get; set; } /// /// 危险品类别 O /// public string DCLASS { get; set; } /// /// 危险品编号 O /// public string DUNNO { get; set; } /// /// 设置温度 O /// public string TEMPSET { get; set; } /// /// 通风度 O /// public string REEFERF { get; set; } /// /// 湿度 /// public string HUMIDITY { get; set; } /// /// 预付地点 O /// public string PREPARDAT { get; set; } /// /// 到付地点 O /// public string PAYABLEAT { get; set; } /// /// 预付地点EDI代码 O /// public string PREPARDATID { get; set; } /// /// 到付地点EDI代码 O /// public string PAYABLEATID { get; set; } /// /// 签单方式 M(SI) /// public string ISSUETYPE { get; set; } /// /// 签单时间 O(SI/SO) /// public string ISSUEDATE { get; set; } /// /// 提单份数 M(SI) /// public string NOBILL { get; set; } /// /// 签单地点 M(SI) /// public string ISSUEPLACE { get; set; } /// /// 提单副本份数 M(SI) /// public string COPYNOBILL { get; set; } /// /// 签单地点EDI代码 M(SI) /// public string ISSUEPLACEID { get; set; } /// /// 运输条款 M /// public string SERVICE { get; set; } /// /// 运费协议号 M /// public string CONTRACTNO { get; set; } /// /// 收货人邮编 O /// public string CONSIGNEEPOSTCODE { get; set; } /// /// 收货人国家 O /// public string CONSIGNEECOUNTRY { get; set; } /// /// 收货人税号 O /// public string CONSIGNEETAXNO { get; set; } /// /// 通知人邮编 O /// public string NOTIFYPARTYPOSTCODE { get; set; } /// /// 通知人国家 O /// public string NOTIFYPARTYCOUNTRY { get; set; } /// /// 通知人税号 O /// public string NOTIFYPARTYTAXNO { get; set; } /// /// 货物NCM编号 O /// public string GOODSNCM { get; set; } /// /// 收货人DOOR地址 O /// public string CONSIGNEEDOORADDR { get; set; } /// /// 发货人DOOR地址 O /// public string SHIPPERDOORADDR { get; set; } /// /// SCAC代码 O /// public string SCACCODE { get; set; } /// /// ITN编号 O /// public string ITNCODE { get; set; } /// /// 付费方 O /// public string FREIGHTPAYER { get; set; } /// /// 是否SOC箱 O /// public bool ISCONTAINERSOC { get; set; } /// /// 拆并单列表 O /// public string BSNOLIST { get; set; } /// /// 集装箱明细 M /// public List CTNLIST { get; set; } /// /// 集装箱多品名明细 M /// public List CTNGOODSLIST { get; set; } } public class MsOpSeaeCtnEdiModel { /// /// 箱型EDI代码 M /// public string CTNALLCODE { get; set; } public Int32 CTNNUM { get; set; } /// /// 箱号 M /// public string CNTRNO { get; set; } /// /// 封号 M /// public string SEALNO { get; set; } /// /// 件数 M /// public Int32 PKGS { get; set; } /// /// 包装 M /// public string KINDPKGS { get; set; } /// /// 包装代码 M /// public string KINDPKGS_EDI_CODE { get; set; } /// /// 重量 M /// public decimal KGS { get; set; } /// /// 体积 M /// public decimal CBM { get; set; } /// /// 箱皮重 /// public string TAREWEIGHT { get; set; } /// /// 称重重量 /// public string WEIGHKGS { get; set; } /// /// 称重方式 (累加、总重) /// public string WEIGHTYPE { get; set; } /// /// 称重签名 /// public string WEIGHSIGN { get; set; } /// /// 称重公司 /// public string VGMCONNCOM { get; set; } } public class MsOpSeaeCtnDetailEdiModel { /// /// 箱号 M /// public string CNTRNO { get; set; } /// /// HS编码 M /// public string HSCODE { get; set; } /// /// 唛头 M /// public string MARKS { get; set; } /// /// 货物描述 M /// public string DESCRIPTION { get; set; } /// /// 件数 M /// public Int32 PKGS { get; set; } /// /// 包装 M /// public string KINDPKGS { get; set; } /// /// 包装代码 M /// public string KINDPKGS_EDI_CODE { get; set; } /// /// 重量 M /// public decimal KGS { get; set; } /// /// 体积 M /// public decimal CBM { get; set; } } }