You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BookingHeChuan/Myshipping.Application/EDI/TSLEdiHelper.cs

2067 lines
90 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Furion.LinqBuilder;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
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 文本字段判断每行是否符合
/// <summary>
/// edi 文本格式处理判断例如1行35个字符不超过5行
/// </summary>
/// <param name="fileType">文件类型例如txt、xml</param>
/// <param name="str">要处理的数据</param>
/// <param name="length">每行长度</param>
/// <param name="sMBLNO">主提单号</param>
/// <param name="sType">数据类型(例如:发货人内容、货描等)</param>
/// <param name="rowNum">限制录入的行数“0”代表不限制</param>
/// <param name="sSymbol">限录后多出的放到货描中的数据的连接符(例如:“*”发货人内容、“**”收件人等)</param>
/// <returns></returns>
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 + "<br />提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据!";
}
else
{
error = error + "<br />提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据,多余信息请手动以“" + sSymbol + "”号开头放到货物描述中!(例如:“货描内容" + sSymbol + "超出部分”)";
}
}
for (int j = 0; j < argAGENT.Length; j++)
{
//List<System.String> AgentList = formatlengthStr(argAGENT[j].ToString(), 35);
if (argAGENT[j].ToString().Length > length)
{
error = error + "<br />提单号:" + sMBLNO + " " + sType + " 第" + (j + 1) + "行超过" + length + "个字符";
}
}
}
}
else
{
if (argAGENT.Length > rowNum && rowNum != 0)
{
if (isHuoMiao)
{
error = error + "<br />提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据!";
}
else
{
error = error + "<br />提单号:" + sMBLNO + " " + sType + " 不允许录入超过" + rowNum + "行数据,多余信息请手动以“" + sSymbol + "”号开头放到货物描述中!(例如:“货描内容" + sSymbol + "超出部分”)";
}
}
for (int j = 0; j < argAGENT.Length; j++)
{
//List<System.String> AgentList = formatlengthStr(argAGENT[j].ToString(), 35);
if (argAGENT[j].ToString().Length > length)
{
error = error + "<br />提单号:" + sMBLNO + " " + sType + " 第" + (j + 1) + "行超过" + length + "个字符";
}
}
}
}
return error;
}
#endregion
#region 字符转义
/// <summary>
/// 各种文本转义字符
/// </summary>
/// <param name="fileType">文件类型例如txt、xml</param>
/// <param name="str">文本字符串</param>
/// <returns></returns>
public static string formatEdiStr(string fileType, string str)
{
if (fileType == "txt")
{
return str.Replace("?", "??").Replace(":", "?:").Replace("+", "?+").Replace("'", "?'");
}
else if (fileType == "xml")
{
return str.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\"", "&quot;").Replace("'", "&apos;");
}
else if (fileType == "sitc")
{
return str.Replace("?", "??").Replace(":", "?:").Replace("'", "?'");
}
else
{
return str;
}
}
#endregion
#region 格式化每行
public static List<System.String> 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<System.String> DestList = new List<System.String>();
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 + "<br />发送方代码不能为空"; }
if (string.IsNullOrEmpty(InttrEdi.SENDNAME))
{ error = error + "<br />发送方名称不能为空"; }
if (string.IsNullOrEmpty(InttrEdi.RECEIVECODE))
{ error = error + "<br />接收方代码不能为空"; }
if (InttrEdi.filetype == "B")
{
if (InttrEdi.UseForWarderCode)
{
if (string.IsNullOrEmpty(InttrEdi.ForWarderCode))
{ error = error + "<br />货代代码不能为空"; }
if (string.IsNullOrEmpty(InttrEdi.ForWarderName))
{ error = error + "<br />货代称呼不能为空"; }
}
}
foreach (var headData in InttrEdi.BSLIST)
{
if (InttrEdi.filetype == "B")
{
if (InttrEdi.UseForWarderCode)
{
if (string.IsNullOrEmpty(headData.ORDERNO))
{ error = error + "<br />订舱编号不能为空"; }
}
}
if (string.IsNullOrEmpty(headData.OpEName))
{ error = error + "<br />操作的英文名不能为空"; }
if (string.IsNullOrEmpty(headData.OpTel))
{ error = error + "<br />操作的电话不能为空"; }
if (string.IsNullOrEmpty(headData.OpEmail))
{ error = error + "<br />操作的邮箱不能为空"; }
if (string.IsNullOrEmpty(headData.MBLNO))
{ error = error + "<br />主提单号不能为空"; }
if (string.IsNullOrEmpty(headData.BLFRT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 付费方式不能为空"; }
if (string.IsNullOrEmpty(headData.SERVICE))
{ error = error + "<br />提单号:" + headData.MBLNO + " 运输条款不能为空"; }
//if (string.IsNullOrEmpty(headData.CONTRACTNO))
//{ error = error + "<br />提单号:" + headData.MBLNO + " 运费协议号不能为空"; }
if (string.IsNullOrEmpty(headData.CARGOID))
{ error = error + "<br />提单号:" + 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 + "<br />EDI信息联系人不能为空"; }
if (string.IsNullOrEmpty(headData.EDIATTNTEL))
{ error = error + "<br />EDI信息联系人电话不能为空"; }
if (string.IsNullOrEmpty(headData.EDIATTNEMAIL))
{ error = error + "<br />EDI信息联系人邮箱不能为空"; }
}
}
if (InttrEdi.filetype == "E")
{
if (string.IsNullOrEmpty(headData.VESSEL))
{ error = error + "<br />提单号:" + headData.MBLNO + " 船名不能为空"; }
if (string.IsNullOrEmpty(headData.VOYNO))
{ error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 请在SI备注中输入:COSCO 销售的营销代码(此代码船公司会直接提供)";
}
else
{
//if (carrier != "YML")
//error = error + "<br />提单号:" + bill.MBLNO + " EDI备注中不能为空";
}
}
else
{
if (StringIsChinese(headData.SIREMARK))
{
error = error + "<br />提单号:" + headData.MBLNO + " SI备注中含有中文或双字节字符";
}
}
}
else
{
if (headData.EDIREMARK.IndexOf("PLEASE BOOK OCEAN CARRIER") > -1 || headData.EDIREMARK.ToString().Trim() == "")
{
if (headData.CARRIEREDICODE == "COSU")
{
error = error + "<br />提单号:" + headData.MBLNO + " 请在EDI备注中输入:COSCO 销售的营销代码(此代码船公司会直接提供)";
}
else
{
//if (carrier != "YML")
//error = error + "<br />提单号:" + bill.MBLNO + " EDI备注中不能为空";
}
}
else
{
if (StringIsChinese(headData.EDIREMARK))
{
error = error + "<br />提单号:" + headData.MBLNO + " EDI备注中含有中文或双字节字符";
}
}
}
//if (string.IsNullOrEmpty(headData.CARRIER))
//{ error = error + "<br />提单号:" + headData.MBLNO + " 船公司不能为空"; }
if (string.IsNullOrEmpty(headData.CARRIEREDICODE))
{ error = error + "<br />提单号:" + headData.MBLNO + " 船公司EDI代码不能为空"; }
if (string.IsNullOrEmpty(headData.SHIPPER))
{
error = error + "<br />提单号:" + headData.MBLNO + " 发货人不能为空";
}
else
{
if (StringIsChinese(headData.SHIPPER))
{
error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 收货人不能为空";
}
else
{
if (StringIsChinese(headData.CONSIGNEE))
{
error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 运输条款为:CY-DOOREDI信息中的DOOR地址不能为空";
}
else
{
if (StringIsChinese(headData.CONSIGNEEDOORADDR))
{
error = error + "<br />提单号:" + headData.MBLNO + " DOOR地址含有中文或双字节字符";
}
}
}
if (headData.SERVICE == "DOOR-CY")
{
if (string.IsNullOrEmpty(headData.SHIPPERDOORADDR))
{
error = error + "<br />提单号:" + headData.MBLNO + " 运输条款为:DOOR-CYEDI信息中的联系人地址不能为空";
}
else
{
if (StringIsChinese(headData.SHIPPERDOORADDR))
{
error = error + "<br />提单号:" + headData.MBLNO + " 联系人地址含有中文或双字节字符";
}
}
}
if (string.IsNullOrEmpty(headData.NOTIFYPARTY))
{
error = error + "<br />提单号:" + headData.MBLNO + " 通知人不能为空";
}
else
{
if (StringIsChinese(headData.NOTIFYPARTY))
{
error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 唛头不能为空";
}
else
{
if (StringIsChinese(headData.MARKS))
{
error = error + "<br />提单号:" + headData.MBLNO + " 唛头含有中文或双字节字符";
}
else
{
error += formatlengthError("txt", headData.MARKS, 35, headData.MBLNO, "唛头", 0, "", false);
}
}
if (string.IsNullOrEmpty(headData.DESCRIPTION))
{
error = error + "<br />提单号:" + headData.MBLNO + " 货物描述不能为空";
}
else
{
if (StringIsChinese(headData.DESCRIPTION))
{
error = error + "<br />提单号:" + headData.MBLNO + " 货物描述含有中文或双字节字符";
}
else
{
//error += formatlengthError("txt", bill.DESCRIPTION, 35, bill.MBLNO, "货物描述", 0, "");
}
}
if (string.IsNullOrEmpty(headData.PORTLOADID) || headData.PORTLOADID.Length != 5)
{ error = error + "<br />提单号:" + headData.MBLNO + " 装货港代码不能为空或录入不正确(必须是5位代码)"; }
if (string.IsNullOrEmpty(headData.PORTLOAD))
{ error = error + "<br />提单号:" + headData.MBLNO + " 装货港不能为空"; }
if (string.IsNullOrEmpty(headData.ETD))
{
error = error + "<br />提单号:" + headData.MBLNO + " 开船日期不能为空";
return error;
}
if (string.IsNullOrEmpty(headData.PORTDISCHARGEID) || headData.PORTDISCHARGEID.Length != 5)
{ error = error + "<br />提单号:" + headData.MBLNO + " 卸货港代码不能为空或录入不正确(必须是5位代码)"; }
if (string.IsNullOrEmpty(headData.PORTDISCHARGE))
{ error = error + "<br />提单号:" + headData.MBLNO + " 卸货港不能为空"; }
if (string.IsNullOrEmpty(headData.DESTINATION))
{
if (string.IsNullOrEmpty(headData.DESTINATIONID) || headData.DESTINATIONID.Length != 5)
{ error = error + "<br />提单号:" + headData.MBLNO + " 目的地代码不能为空或录入不正确(必须是5位代码)"; }
}
if (string.IsNullOrEmpty(headData.KINDPKGS_EDI_CODE))
{ error = error + "<br />提单号:" + headData.MBLNO + " 包装EDI代码不能为空"; }
if (headData.PKGS == 0)
{ error = error + "<br />提单号:" + headData.MBLNO + " 件数不能为0"; }
if (headData.KGS == 0)
{ error = error + "<br />提单号:" + headData.MBLNO + " 毛重不能为0"; }
if (headData.CBM == 0)
{ error = error + "<br />提单号:" + headData.MBLNO + " 尺码不能为0"; }
if (headData.CARGOID == "D")
{
if (string.IsNullOrEmpty(headData.DCLASS))
{ error = error + "<br />提单号:" + headData.MBLNO + " 危险品分类不能为空"; }
if (string.IsNullOrEmpty(headData.DUNNO))
{ error = error + "<br />提单号:" + headData.MBLNO + " 危险品编号不能为空"; }
}
if (headData.CARGOID == "R")
{
if (headData.TEMPSET == null || headData.TEMPSET == "")
{ error = error + "<br />提单号:" + headData.MBLNO + " 设置温度不能为空"; }
if (headData.REEFERF == null || headData.REEFERF == "")
{ error = error + "<br />提单号:" + headData.MBLNO + " 通风度不能为空"; }
}
if (headData.BLFRT != null && headData.BLFRT.IndexOf("PREPAID") >= 0)
{
if (string.IsNullOrEmpty(headData.PREPARDAT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 预付地点不能为空"; }
if (string.IsNullOrEmpty(headData.PREPARDATID))
{ error = error + "<br />提单号:" + headData.MBLNO + " 预付地点EDI代码不能为空"; }
}
else if (headData.BLFRT != null && headData.BLFRT.IndexOf("COLLECT") >= 0)
{
if (string.IsNullOrEmpty(headData.PAYABLEAT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 到付地点不能为空"; }
if (string.IsNullOrEmpty(headData.PAYABLEATID))
{ error = error + "<br />提单号:" + headData.MBLNO + " 到付地点EDI代码不能为空"; }
}
if (InttrEdi.filetype == "E")
{
if (string.IsNullOrEmpty(headData.ISSUEPLACEID))
{ error = error + "<br />提单号:" + headData.MBLNO + " 签单地点或到签单地点EDI代码不能为空"; }
}
var ctnlist = headData.CTNLIST;
if (ctnlist.Count == 0) { error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 集装箱箱型EDI代码不能为空"; }
if (string.IsNullOrEmpty(ctn.CNTRNO))
{ error = error + "<br />提单号:" + headData.MBLNO + " 箱号不能为空"; }
if (string.IsNullOrEmpty(ctn.SEALNO))
{ error = error + "<br />提单号:" + headData.MBLNO + " 封号不能为空"; }
if (headData.BYCOUNTRY == "BRAZIL")
{
if (ctn.TAREWEIGHT == 0)
{ error = error + "<br />提单号:" + headData.MBLNO + " 箱皮重不能为空"; }
}
if (ctn.KINDPKGS != headData.KINDPKGS)
{ error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + " 集装箱件数合计数必须等于委托单总件数"; }
if (dlKGS != Convert.ToDecimal(headData.KGS))
{ error = error + "<br />提单号:" + headData.MBLNO + " 集装箱重量合计数必须等于委托单总重量数"; }
if (dlCBM != Convert.ToDecimal(headData.CBM))
{ error = error + "<br />提单号:" + 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 + "<br />提单号:" + headData.MBLNO + "的“" + ctn.CNTRNO + "”未添加分箱明细!";
}
else
{
if (ctngoodssumpkgs != Convert.ToDecimal(ctn.PKGS))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细件数合计数不等于集装箱件数"; }
if (ctngoodssumkgs != Convert.ToDecimal(ctn.KGS))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细毛重合计数不等于集装箱毛重"; }
if (ctngoodssumcbm != Convert.ToDecimal(ctn.CBM))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctn.CNTRNO + " 分箱明细尺码合计数不等于集装箱毛重"; }
}
}
foreach (var ctngood in headData.CTNGOODSLIST)
{
if (string.IsNullOrEmpty(ctngood.KINDPKGS))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱明细包装类型不能为空"; }
if (string.IsNullOrEmpty(ctngood.DESCRIPTION))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱货物描述不能为空"; }
else
{
error += formatlengthError("txt", ctngood.DESCRIPTION, 70, headData.MBLNO, "的“" + ctngood.CNTRNO + "”箱号的分箱货物描述", 0, "", false);
}
//if (string.IsNullOrEmpty(ctngood.HSCODE))
//{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱HS编码不能为空"; }
if (string.IsNullOrEmpty(ctngood.KINDPKGS_EDI_CODE))
{ error = error + "<br />提单号:" + headData.MBLNO + ",箱号:" + ctngood.CNTRNO + " 中的分箱明细包装类型代码不能为空"; }
}
}
#endregion
}
}
return error;
}
#endregion
#region 订舱
public static string CreateEdiTSL(EDIBaseModel InttrEdi)
{
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 + "SO:ZZZ+" + InttrEdi.RECEIVECODE + ":UN+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'");
r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMBF:D:99B:UN'");
icount = icount + 2;
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'");
r.WriteLine("DTM+137:" + DateTime.Now.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;
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);
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 == "海运单" || 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+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.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 (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;
}
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 + "+++:::" + 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 + 5;
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++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'");
else
r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + 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+++" + 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 (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++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'");
else
r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + 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<System.String> 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];
}
}
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 (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+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<MsOpSeaeCtnEDIBaseModel>();
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'");
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 CreateEdiTSLSI(EDIBaseModel InttrEdi)
{
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);
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 == "海运单" || 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+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++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'");
else
r.WriteLine("NAD+HI+" + InttrEdi.SENDCODE + ":160:86++" + 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+++" + 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<System.String> 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<MsOpSeaeCtnDetailEDIBaseModel>();
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();
return filename;
}
#endregion
}
}