|
|
using Google.Protobuf.WellKnownTypes;
|
|
|
using Myshipping.Application.EDI.ESL;
|
|
|
using MySqlX.XDevAPI.Common;
|
|
|
using NPOI.Util;
|
|
|
using StackExchange.Profiling.Internal;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace Myshipping.Application.EDI.PIL
|
|
|
{
|
|
|
public class PILEdiHelper
|
|
|
{
|
|
|
|
|
|
public PILEdiHelper()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
#region 基本函数
|
|
|
|
|
|
public static string GetDateStr(string datestr, string dateformat)
|
|
|
{
|
|
|
var result = "";
|
|
|
|
|
|
if (datestr == null || datestr == "")
|
|
|
{
|
|
|
result = "";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = Convert.ToDateTime(datestr).ToString(dateformat);
|
|
|
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
#region 判断中文字符
|
|
|
public static bool IsChinese(char c)
|
|
|
{
|
|
|
return (int)c > 0x80;
|
|
|
}
|
|
|
public static bool StringIsChinese(string str)
|
|
|
{
|
|
|
var result = false;
|
|
|
for (int i = 1; i < str.Length; i++)
|
|
|
{
|
|
|
if (IsChinese(str[i]))
|
|
|
{
|
|
|
result = true;
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
for (int i = 0; i < str.Length; i++)
|
|
|
{
|
|
|
string stemp = str.Substring(i, 1);
|
|
|
int ilen = System.Text.Encoding.Default.GetByteCount(stemp);
|
|
|
if (ilen == 2)
|
|
|
{
|
|
|
result = true;
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#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 + "超出部分”)";
|
|
|
}
|
|
|
}
|
|
|
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 + "超出部分”)";
|
|
|
}
|
|
|
}
|
|
|
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 (str == null)
|
|
|
str = string.Empty;
|
|
|
|
|
|
if (fileType == "txt")
|
|
|
{
|
|
|
return str.Replace("?", "??").Replace(":", "?:").Replace("+", "?+").Replace("'", "?'");
|
|
|
}
|
|
|
else if (fileType == "xml")
|
|
|
{
|
|
|
return str.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'");
|
|
|
}
|
|
|
else if (fileType == "sitc")
|
|
|
{
|
|
|
return str.Replace("?", "??").Replace(":", "?:").Replace("'", "?'");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return str;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
#region 格式化每行
|
|
|
public static List<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
|
|
|
|
|
|
public static string GetmpStr(string str, int len)
|
|
|
{
|
|
|
var strhead = "";
|
|
|
|
|
|
if (str.IndexOf("-") >= 0)
|
|
|
{
|
|
|
strhead = "-";
|
|
|
str.Replace("-", "");
|
|
|
}
|
|
|
|
|
|
string result = str;
|
|
|
|
|
|
for (var i = 0; i <= len - str.Length - 2; i++)
|
|
|
{
|
|
|
result = "0" + result;
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public static string GetSpaceStr(string str, int len, string substr = " ")
|
|
|
{
|
|
|
|
|
|
if (substr == "0")
|
|
|
{
|
|
|
if (str.IndexOf(".") >= 0)
|
|
|
str = str.Substring(0, str.IndexOf("."));
|
|
|
}
|
|
|
string result = str;
|
|
|
if (str.Length >= len)
|
|
|
{
|
|
|
result = str.Substring(0, len);
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
for (var i = 0; i <= len - str.Length - 1; i++)
|
|
|
{
|
|
|
if (substr == "0")
|
|
|
result = "0" + result;
|
|
|
else
|
|
|
result = result + substr;
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
public static string GetPILServiceStr(string str)
|
|
|
{
|
|
|
string result = "Y";
|
|
|
str = str.ToUpper();
|
|
|
char splitstr = '-';
|
|
|
if (str.IndexOf("-") > 0)
|
|
|
{
|
|
|
splitstr = '-';
|
|
|
}
|
|
|
else if (str.IndexOf("/") > 0)
|
|
|
{
|
|
|
splitstr = '/';
|
|
|
}
|
|
|
var strList = str.Split(splitstr);
|
|
|
var i = 1;
|
|
|
var strhead = "";
|
|
|
var strbotton = "";
|
|
|
foreach (var substr in strList)
|
|
|
{
|
|
|
if (i == 1)
|
|
|
{
|
|
|
if (substr == "CY") strhead = "Y";
|
|
|
else if (substr == "CFS") strhead = "F";
|
|
|
else if (substr == "FO") strhead = "O";
|
|
|
else if (substr == "DOOR") strhead = "O";
|
|
|
else if (substr == "HOOK") strhead = "K";
|
|
|
else if (substr == "TACKLE") strhead = "L";
|
|
|
}
|
|
|
if (i == 2)
|
|
|
{
|
|
|
if (substr == "CY") strbotton = "Y";
|
|
|
else if (substr == "CFS") strbotton = "F";
|
|
|
else if (substr == "FO") strbotton = "O";
|
|
|
else if (substr == "DOOR") strbotton = "O";
|
|
|
else if (substr == "HOOK") strbotton = "K";
|
|
|
else if (substr == "TACKLE") strbotton = "L";
|
|
|
|
|
|
}
|
|
|
i = i + 1;
|
|
|
}
|
|
|
if (strhead == "") strhead = "Y";
|
|
|
if (strbotton == "") strbotton = "Y";
|
|
|
result = strhead + strbotton;
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 检查
|
|
|
public static string IsCreatePILEDI(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 />接收方代码不能为空"; }
|
|
|
|
|
|
//2023-03-03 确认需要增加货代名称不能为空,这里对比东胜是填的订舱代理名称,这里需要人工填写
|
|
|
if (string.IsNullOrEmpty(InttrEdi.ForWarderName))
|
|
|
{ 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 bill in InttrEdi.BSLIST)
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.ORDERNO))
|
|
|
{ error = error + "|订舱单号不能为空"; }
|
|
|
|
|
|
//2023-03-21 跟韩工确认PIL不需要判断场站EDI去掉验证
|
|
|
//if (bill.PORTLOADID == "CNTAO")
|
|
|
//{
|
|
|
// if (string.IsNullOrEmpty(bill.YARD) || string.IsNullOrEmpty(bill.YARDEDICODE))
|
|
|
// { error = error + "|场站和场站EDI代码不能为空"; }
|
|
|
//}
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.MBLNO))
|
|
|
{ error = error + "|主提单号不能为空"; }
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.BLFRT))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "付费方式不能为空"; }
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.PORTLOADID))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "装货港代码不能为空"; }
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.PORTLOAD))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "装货港不能为空"; }
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.ETD))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + "开船日期不能为空";
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.ETA))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + "预抵日期不能为空";
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
//2023-04-14 经韩工查看东胜的PIL逻辑,订舱时货物品名非必填,这里判断改为只截单时提醒
|
|
|
if (InttrEdi.filetype.Equals("E", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(bill.GOODSNAME))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + "货物品名不能为空";
|
|
|
return error;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.PORTDISCHARGEID))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "卸货港代码不能为空"; }
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.PLACEDELIVERYID))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "交货代码不能为空"; }
|
|
|
|
|
|
if (bill.PLACEDELIVERY == null || bill.PLACEDELIVERY == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "交货地不能为空"; }
|
|
|
if (bill.DESTINATION == null || bill.DESTINATION == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "目的地不能为空"; }
|
|
|
|
|
|
if (bill.ISSUEPLACE == null || bill.ISSUEPLACE == "")
|
|
|
{ error = error + "<br />提单号:" + bill.ISSUEPLACE + "签单地点不能为空"; }
|
|
|
|
|
|
if (bill.PKGS == 0)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "货物件数不能为空"; }
|
|
|
|
|
|
if (bill.KGS == 0)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "货物毛重不能为空"; }
|
|
|
|
|
|
if (bill.CBM == 0)
|
|
|
{ error = error + "<br />提单号:" + bill.CBM + "货物尺码不能为空"; }
|
|
|
|
|
|
|
|
|
if (bill.CARGOID == null || bill.CARGOID == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "货物标示不能为空"; }
|
|
|
|
|
|
//2023-05-19 增加运费协议号必填
|
|
|
if (string.IsNullOrWhiteSpace(bill.CONTRACTNO))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "运费协议号不能为空"; }
|
|
|
|
|
|
if (bill.CARGOID == "D")
|
|
|
{
|
|
|
if (bill.DCLASS == null || bill.DCLASS == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "危险品分类不能为空"; }
|
|
|
|
|
|
if (bill.DUNNO == null || bill.DUNNO == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "危险品编号不能为空"; }
|
|
|
|
|
|
if (bill.DUNNO.Length != 4)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "危险品编号必须是4位数字"; }
|
|
|
}
|
|
|
|
|
|
if (bill.CARGOID == "R")
|
|
|
{
|
|
|
|
|
|
if (bill.TEMPSET == null || bill.TEMPSET == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "设置温度不能为空"; }
|
|
|
else
|
|
|
{
|
|
|
if (bill.TEMPSET.IndexOf("+") < 0 && bill.TEMPSET.IndexOf("-") < 0 && bill.TEMPSET.IndexOf(".") < 0)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "温度格式输入不正确,请输入如此格式: -0.10 或 +0.10"; }
|
|
|
|
|
|
}
|
|
|
if (bill.TEMPMAX == null || bill.TEMPMAX == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "最高温度不能为空"; }
|
|
|
else
|
|
|
{
|
|
|
if (bill.TEMPMAX.IndexOf("+") < 0 && bill.TEMPMAX.IndexOf("-") < 0 && bill.TEMPMAX.IndexOf(".") < 0)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "温度格式输入不正确,请输入如此格式: -0.10 或 +0.10"; }
|
|
|
|
|
|
}
|
|
|
|
|
|
if (bill.TEMPMIN == null || bill.TEMPMIN == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "最低温度不能为空"; }
|
|
|
else
|
|
|
{
|
|
|
if (bill.TEMPMIN.IndexOf("+") < 0 && bill.TEMPMIN.IndexOf("-") < 0 && bill.TEMPMIN.IndexOf(".") < 0)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "温度格式输入不正确,请输入如此格式: -0.10 或 +0.10"; }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.MARKS))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 唛头不能为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (StringIsChinese(bill.MARKS))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 唛头含有中文或双字节字符";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
error += formatlengthError("txt", bill.MARKS, 35, bill.MBLNO, "唛头", 0, "", false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.DESCRIPTION))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 货物描述不能为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (StringIsChinese(bill.DESCRIPTION))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 货物描述含有中文或双字节字符";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//error += formatlengthError("txt", bill.DESCRIPTION, 35, bill.MBLNO, "货物描述", 0, "");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.SHIPPER))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 发货人不能为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (StringIsChinese(bill.SHIPPER))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 发货人含有中文或双字节字符";
|
|
|
}
|
|
|
else error += formatlengthError("txt", bill.SHIPPER, 35, bill.MBLNO, "发货人", 5, "*", false);
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
}
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.CONSIGNEE))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 收货人不能为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (StringIsChinese(bill.CONSIGNEE))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 收货人含有中文或双字节字符";
|
|
|
}
|
|
|
else error += formatlengthError("txt", bill.CONSIGNEE, 35, bill.MBLNO, "收货人", 5, "*", false);
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(bill.NOTIFYPARTY))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 通知人不能为空";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (StringIsChinese(bill.NOTIFYPARTY))
|
|
|
{
|
|
|
error = error + "<br />提单号:" + bill.MBLNO + " 通知人含有中文或双字节字符";
|
|
|
}
|
|
|
else error += formatlengthError("txt", bill.NOTIFYPARTY, 35, bill.MBLNO, "通知人", 5, "*", false);
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
|
|
|
var ctnlist = bill.CTNLIST;
|
|
|
if (ctnlist.Count == 0) { error = error + "<br />提单号:" + bill.MBLNO + " 集装箱信息不能为空"; };
|
|
|
|
|
|
|
|
|
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 />提单号:" + bill.MBLNO + " 集装箱箱型EDI代码不能为空"; }
|
|
|
if (string.IsNullOrEmpty(ctn.KINDPKGS_EDI_CODE))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 集装箱包装EDI代码不能为空"; }
|
|
|
|
|
|
|
|
|
if ((ctn.CTNALLCODE.IndexOf("RH") > 0 || ctn.CTNALLCODE.IndexOf("RF") > 0) && (bill.CARGOID != "R"))
|
|
|
{
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 集装箱箱型为冻柜,货类代码请选择冻柜"; }
|
|
|
}
|
|
|
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
|
|
|
//if (string.IsNullOrEmpty(ctn.CNTRNO))
|
|
|
//{ error = error + "<br />提单号:" + bill.MBLNO + " 箱号不能为空"; }
|
|
|
//if (string.IsNullOrEmpty(ctn.SEALNO))
|
|
|
//{ error = error + "<br />提单号:" + bill.MBLNO + " 封号不能为空"; }
|
|
|
|
|
|
if (ctn.KINDPKGS != bill.KINDPKGS)
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 中的包装类型与集装箱的包装类型不同"; }
|
|
|
dlPKGS += Convert.ToDecimal(ctn.PKGS);
|
|
|
dlKGS += Convert.ToDecimal(ctn.KGS);
|
|
|
dlCBM += Convert.ToDecimal(ctn.CBM);
|
|
|
}
|
|
|
}
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
if (dlPKGS != Convert.ToDecimal(bill.PKGS))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 集装箱件数合计数必须等于委托单总件数"; }
|
|
|
if (dlKGS != Convert.ToDecimal(bill.KGS))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 集装箱重量合计数必须等于委托单总重量数"; }
|
|
|
if (dlCBM != Convert.ToDecimal(bill.CBM))
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + " 集装箱尺码合计数必须等于委托单总尺码数"; }
|
|
|
}
|
|
|
}
|
|
|
//太平新Edi接口判断
|
|
|
if (bill.HSCODE == null || bill.HSCODE == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "HS编码 不能为空"; }
|
|
|
|
|
|
if (bill.MasterBOLIndicator == null || bill.MasterBOLIndicator == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "Master BOL Indicator 不能为空"; }
|
|
|
|
|
|
if (bill.BLFRT.IndexOf("FREIGHT COLLECT") > -1)//运费到付
|
|
|
{
|
|
|
if (bill.ConsigneeEdiCode == null || bill.ConsigneeEdiCode == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "收货人Edi代码 不能为空"; }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (bill.ShipperEdiCode == null || bill.ShipperEdiCode == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "发货人Edi代码 不能为空"; }
|
|
|
}
|
|
|
|
|
|
if (bill.SalesRepCode == null || bill.SalesRepCode == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "太平销售的Edi代码 不能为空"; }
|
|
|
|
|
|
if (bill.BYCOUNTRY == "CANADA")
|
|
|
{
|
|
|
if (bill.ACIHBL == null || bill.ACIHBL == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "ACI HBL 不能为空"; }
|
|
|
|
|
|
if (bill.S0CC0C == null || bill.S0CC0C == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "S0C C0C 不能为空"; }
|
|
|
}
|
|
|
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
if (bill.BYCOUNTRY == "USA")
|
|
|
{
|
|
|
if (bill.CONTRACTNO == null || bill.CONTRACTNO.ToString().Trim() == "")
|
|
|
{ error = error + "<br />提单号:" + bill.MBLNO + "运费协议号 不能为空"; }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
return error;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 生成报文(订舱(filetype=="B"),截单(filetype=="E"))
|
|
|
public static CommonWebApiResult CreateEdiPIL(EDIBaseModel InttrEdi)
|
|
|
{
|
|
|
CommonWebApiResult result = new CommonWebApiResult { succ = false };
|
|
|
|
|
|
var estr = "";
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
//2023-03-28 确认需要把截单报文的文件名去掉ESI英文
|
|
|
//estr = "ESI";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
estr = "EDI";
|
|
|
}
|
|
|
var SENDCODE = "";
|
|
|
SENDCODE = InttrEdi.SENDCODE;
|
|
|
//
|
|
|
|
|
|
string dir = InttrEdi.filerpath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\\";
|
|
|
//string filename = + InttrEdi.BSLIST[0].MBLNO + estr + ".pms";
|
|
|
|
|
|
//如果是部署linux需要修改路径
|
|
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
|
|
dir = dir.Replace("\\", "/");
|
|
|
|
|
|
if (!Directory.Exists(dir))
|
|
|
{
|
|
|
Directory.CreateDirectory(dir);
|
|
|
}
|
|
|
|
|
|
string filename = dir + InttrEdi.BSLIST[0].MBLNO + estr + ".pms";
|
|
|
|
|
|
//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 tempstr = "";
|
|
|
|
|
|
#region 00
|
|
|
//tempstr = "00DOC" + GetSpaceStr("", 22) + GetSpaceStr(SENDCODE, 8) + GetSpaceStr("", 6) + DateTime.Now.ToString("yyyyMMddHHmm") + GetSpaceStr("", 1)
|
|
|
// + portload + portload;
|
|
|
//if (filetype == "E")
|
|
|
// tempstr = tempstr + "4.01";
|
|
|
//else
|
|
|
// tempstr = tempstr + "PBK";
|
|
|
//r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
|
|
|
tempstr = "00";//1//RECORD-ID//M//9(2)//1//2//00
|
|
|
tempstr += "DOC";//2//Data-type ID//M//X(3)//3//5//DOC=BL, BKG=Booking
|
|
|
tempstr += GetSpaceStr("", 20);//3//File Description//O//X(20)//6//25//
|
|
|
tempstr += GetSpaceStr("", 2);//4//Filler//M//X(2)//26//27//Spaces
|
|
|
tempstr += GetSpaceStr(SENDCODE, 8);//5//Sender-Code//M//X(8)//28//35//Sender/Receiver Code List
|
|
|
tempstr += GetSpaceStr("", 6);//6//Filler//M//X(6)//36//41//
|
|
|
tempstr += DateTime.Now.ToString("yyyyMMddHHmm");//7//File Send time//M//9(12)//42//53//YYYYMMDDHHMM
|
|
|
tempstr += GetSpaceStr("", 1);//8//Filler//M//X(1)//54//54//Spaces
|
|
|
tempstr += InttrEdi.BSLIST[0].PORTLOADID;//9//Sender Port Code//M//X(5)//55//59//
|
|
|
tempstr += InttrEdi.BSLIST[0].PORTLOADID;//10//Receiver Port Code//M//X(5)//60//64//
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
tempstr += "4.02";//11//EDI Version//M//X(4) //65//68//Default to "PBK" / esi:4.01
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += "PBK";//11//EDI Version//M//X(4) //65//68//Default to "PBK" / esi:4.01
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 15);//12//Sender Ver Control ID//C//X(15)//69//83//Sender's ASFS/AFMS software version; blank if not applicable
|
|
|
tempstr += GetSpaceStr("", 167);//13//Filler//M//X(167)//84//250//Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
foreach (var bill in InttrEdi.BSLIST)
|
|
|
{
|
|
|
icount = icount + 1;
|
|
|
|
|
|
|
|
|
|
|
|
#region 11
|
|
|
var eta = "";
|
|
|
if (bill.ETA == "" || bill.ETA == null)
|
|
|
{
|
|
|
eta = DateTime.Now.ToString("yyyyMMdd");
|
|
|
}
|
|
|
else { eta = bill.ETA.Replace("-", ""); }
|
|
|
var etd = "";
|
|
|
if (bill.ETD == "" || bill.ETD == null)
|
|
|
{
|
|
|
etd = GetSpaceStr("", 8);
|
|
|
}
|
|
|
else { etd = bill.ETD.Replace("-", ""); }
|
|
|
|
|
|
//tempstr = "11" + GetSpaceStr("", 1) + GetSpaceStr(bill.VESSELID, 10) + GetSpaceStr(bill.VESSEL, 20) + GetSpaceStr(bill.VOYNO, 8) + eta + etd
|
|
|
// + GetSpaceStr(bill.VESSELID + bill.VOYNO, 12) + eta;
|
|
|
//r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
|
|
|
tempstr = "11";//1//RECORD-ID//M//9(2)//1//2//11//
|
|
|
tempstr += GetSpaceStr("", 1);//2//Filler//M//X(1)//3//3//Spaces//
|
|
|
if (bill.VOYNO.ToString().Trim().Length < 4)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.VOYNO.ToString().Trim(), 10);//3//Vessel Code//M//X(10)//4//13//和vessel有关的,即field 4和 field 3 都必填
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.VOYNO.ToString().Trim().Substring(0, 4), 10);//3//Vessel Code//M//X(10)//4//13//和vessel有关的,即field 4和 field 3 都必填
|
|
|
}
|
|
|
tempstr += GetSpaceStr(bill.VESSEL, 20);//4//Vessel Name//M//X(20)//14//33//和vessel有关的,即field 4和 field 3 都必填
|
|
|
tempstr += GetSpaceStr("", 8);//5//Voyage No.//M//X(8)//34//41//Alternate Voyage Reference (Commercial voyage)//但是和voyage有关的,即field 5和field 8不用填//不用填
|
|
|
//tempstr += GetSpaceStr("", 8);//5//Voyage No.//M//X(8)//34//41//Alternate Voyage Reference (Commercial voyage)//不用填
|
|
|
tempstr += eta;//6//Arrival Date//M//9(8)//42//49//YYYYMMDD (ATA or ETA if ATA not available)//
|
|
|
tempstr += etd;//7//Sailing Date//M//9(8)//50//57//YYYYMMDD (ATD or ETD if ATD not available)//
|
|
|
tempstr += GetSpaceStr("", 12);//8//webCSM Voyage No.//O//X(12)//58//69//webCSM System Voyage Reference//但是和voyage有关的,即field 5和field 8不用填//不要填
|
|
|
tempstr += eta;//9//Berthing Date//O//9(8)//70//77//YYYYMMDD (ATB or ETB if ATB not available)//
|
|
|
if (bill.VOYNO.ToString().Trim().Length < 5)
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 12);//10//Export Local Voyage Reference//O//X(12)//78//89//Export Local Voyage in relation to Sender Port(customs/port reporting)//ENHANCEMENT,填写原field 8的内容,报关用
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.VOYNO.ToString().Trim().Substring(4), 12);//10//Export Local Voyage Reference//O//X(12)//78//89//Export Local Voyage in relation to Sender Port(customs/port reporting)//ENHANCEMENT,填写原field 8的内容,报关用
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 12);//11//Import Local Voyage Reference//O//X(12)//90//101//Import Local Voyage in relation to Sender Port(customs/port reporting)//内部航次
|
|
|
tempstr += GetSpaceStr("", 149);//12//Filler//M//X(149)//102//250//Spaces//
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
//2023-02-23 测试订舱这里开头加“+”经韩工确认使用此规则
|
|
|
#region 12
|
|
|
tempstr = "12";//1 //RECORD-ID//M//9(2)//1 //2 //12
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.MBLNO, 20);//2 //webCSM Booking Reference//M//X(20)//3 //22 //webCSM System Job Reference如果需要,填写原field 3的custom ref//bill.ORDERNO
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("+", 20);//2 //webCSM Booking Reference//M//X(20)//3 //22 //webCSM System Job Reference如果需要,填写原field 3的custom ref
|
|
|
}
|
|
|
tempstr += GetSpaceStr(bill.MBLNO, 20);//3 //webCSM BL Number//C//X(20)//23 //42 //Pre-assigned BKG Refmandtory (PIL's bkg ref nbr),预放提单号
|
|
|
if (bill.PORTLOADID == "CNTAO")
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.MBLNO, 20);//4 //Original Bill of Lading//C//X(20)//43 //62 //webCSM External B/L Reference, only if external BL is used
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 20);//4 //Original Bill of Lading//C//X(20)//43 //62 //webCSM External B/L Reference, only if external BL is used
|
|
|
}
|
|
|
|
|
|
tempstr += GetSpaceStr("", 5);//5 //Filler//M//X(5)//63 //67 //Spaces
|
|
|
tempstr += GetSpaceStr(bill.PORTDISCHARGEID, 5);//6 //Port of Discharge//M//X(5)//68 //72 //Next Discharge Port for the voyage generated
|
|
|
tempstr += GetSpaceStr(bill.PORTLOADID, 5);//7 //Port of Loading//M//X(5)//73 //77 //Load Port for the voyage generated
|
|
|
tempstr += "FF";//8 //BL Movement Type//M//X(2)//78 //79 //F:FCL, L:LCL, M:MTY, T:TFCL, Y:TMTY, eg. FF=FCL/FCL
|
|
|
tempstr += "PP";//9 //Movement Terms//O//X(2)//80 //81 //D:Door, P:Port, R:Ramp, eg. DD=Door/Door
|
|
|
tempstr += GetSpaceStr(GetPILServiceStr(bill.SERVICE), 2);//10 //Freight Terms//M//X(2)//82 //83 //Y:CY, F:CFS, I:FI, O:FO, D:Door, K:Hook, L:Tackle eg. YY=CY/CY
|
|
|
tempstr += GetSpaceStr("", 3);//11 //Filler//M//X(3)//84 //86 //Spaces
|
|
|
if (bill.BLFRT.IndexOf("FREIGHT COLLECT") > -1)
|
|
|
{
|
|
|
tempstr += "C";//12 //BL Prepaid/Collect//C//X(1)//87 //87 //P-Prepaid, C-Collect for BOF charge, mandatory if Rec 61 exists//mandtory,到付预付必填,第三地填C
|
|
|
}
|
|
|
else if (bill.BLFRT.IndexOf("PREPAID") > -1)//预付
|
|
|
{
|
|
|
tempstr += "P";//12 //BL Prepaid/Collect//C//X(1)//87 //87 //P-Prepaid, C-Collect for BOF charge, mandatory if Rec 61 exists//mandtory,到付预付必填,第三地填C
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += "C";//12 //BL Prepaid/Collect//C//X(1)//87 //87 //P-Prepaid, C-Collect for BOF charge, mandatory if Rec 61 exists//mandtory,到付预付必填,第三地填C
|
|
|
}
|
|
|
tempstr += "N";//13 //BL Tranship Flag//M//X(1)//88 //88 //Y or N
|
|
|
tempstr += "N";//14 //BL All Empty CTN Flag//M//X(1)//89 //89 //Y or N
|
|
|
if (bill.CLOSINGDATE == "")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 8);//15 //Loading Date//C//X(8)//90 //97 //YYYYMMDD, mandatory if record submitted is BL
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += Convert.ToDateTime(bill.CLOSINGDATE).ToString("yyyyMMdd");//15 //Loading Date//C//X(8)//90 //97 //YYYYMMDD, mandatory if record submitted is BL
|
|
|
}
|
|
|
if (bill.PORTLOADID == "CNSHA" && InttrEdi.filetype != "E")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 20);//16 //Original_reference//C//X(20)//98 //117 //webCSM Alternate Booking Reference, only if alt booking ref is used
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.MBLNO, 20);//16 //Original_reference//C//X(20)//98 //117 //webCSM Alternate Booking Reference, only if alt booking ref is used
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 20);//17 //Bkg Pty Reference//O//X(20)//118 //137 //webCSM Bkg Party Reference
|
|
|
tempstr += "F";//18 //Booking_Party_indicator//M//X(1)//138 //138 //D-Deciding Pty, N-Notify Pty, C-Consignee, S-Shipper, F-Forwarder
|
|
|
tempstr += GetSpaceStr("", 20);//19 //Part MBL//C//X(20)//139 //158 //Not for part BL purpose
|
|
|
tempstr += GetSpaceStr("", 20);//20 //BL Paid By//C//X(20)//159 //178 //Freight Absorbed by BL Reference, only if BL's frt is paid by other BL
|
|
|
tempstr += GetSpaceStr("", 12);//21 //Customs Bill of Lading//C//X(12)//179 //190 //Customs BL Reference (12 char) - only for US/CA Customs requirement
|
|
|
if (bill.ETD == "")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 8);//22 //Booking Date//M//X(8)//191 //198 //YYYYMMDD
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += Convert.ToDateTime(bill.ETD).ToString("yyyyMMdd");//22 //Booking Date//M//X(8)//191 //198 //YYYYMMDD
|
|
|
}
|
|
|
//tempstr += eta;//23 //Slot Owner//M//X(3)//199 //201 //
|
|
|
tempstr += GetSpaceStr("PI", 3);//24 //Cntr Operator//M//X(3)//202 //204 //
|
|
|
tempstr += GetSpaceStr("PI", 3);//25 //Filler//M//X(46)//205 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 13
|
|
|
tempstr = "13";//1 //RECORD-ID//M//9(2)//1 //2 //13
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(bill.PORTLOADID, 5);//3 //Port of Origin//M//X(5)//6 //10 //refer Port Code (Place of receipt)
|
|
|
tempstr += GetSpaceStr(bill.PORTDISCHARGEID, 5);//4 //Port of Discharge//M//X(5)//11 //15 //refer Port code (Port of Discharge - final)
|
|
|
tempstr += GetSpaceStr("", 5);//5 //Port of Trans//C//X(5)//16 //20 //refer Port code (1st T/S port), only if Transshipment involved
|
|
|
tempstr += GetSpaceStr(bill.PLACEDELIVERYID, 5);//6 //Final Destination//M//X(5)//21 //25 //refer Port Code (Place of delivery)
|
|
|
tempstr += GetSpaceStr("", 20);//7 //Final Destination (Name)//M//X(20)//26 //45 //
|
|
|
tempstr += GetSpaceStr("", 10);//8 //Route Code//O//X(10)//46 //55 //webCSM Route Code (out from webCSM only)
|
|
|
tempstr += GetSpaceStr("", 45);//9 //Filler//M//X(45)//56 //100 //Spaces
|
|
|
tempstr += GetSpaceStr("", 5);//10 //Transhipment Port 1//C//X(5)//101 //105 //1st Transhipment Port, only if Transshipment involved
|
|
|
tempstr += GetSpaceStr("", 5);//11 //Transhipment Port 2//C//X(5)//106 //110 //2nd Transhipment Port, only if 2nd Transshipment involved
|
|
|
tempstr += GetSpaceStr("", 5);//12 //Transhipment Port 3//C//X(5)//111 //115 //3rd Transhipment Port, only if 3rd Transshipment involved
|
|
|
//eta = GetPortEDICode(bill.PORTDISCHARGEID, "PIL").Substring(2, 3);
|
|
|
//if (eta == "SSZ" || eta == "BUE" || eta == "MVD" || eta == "PNG" || eta == "NVT" || eta == "RIO")
|
|
|
//{
|
|
|
// tempstr += "U";//13 //Master BOL Indicator//M//X(1)//116 //116 //1=Carrier filing HBL, 2=Self filing HBL, 3=Not Applicable/Straight bl//mandtory,1/船公司发HBL,2/自己发,3/无HBL。美国线必填,加拿大线填在record 73
|
|
|
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// tempstr += "N";//13 //Master BOL Indicator//M//X(1)//116 //116 //1=Carrier filing HBL, 2=Self filing HBL, 3=Not Applicable/Straight bl//mandtory,1/船公司发HBL,2/自己发,3/无HBL。美国线必填,加拿大线填在record 73
|
|
|
|
|
|
//}
|
|
|
tempstr += bill.MasterBOLIndicator;//13 //Master BOL Indicator//M//X(1)//116 //116 //1=Carrier filing HBL, 2=Self filing HBL, 3=Not Applicable/Straight bl//mandtory,1/船公司发HBL,2/自己发,3/无HBL。美国线必填,加拿大线填在record 73
|
|
|
|
|
|
tempstr += GetSpaceStr("", 3);//14 //Job Status //O//X(3)//117 //119 //webCSM Job Status (out from webCSM only)
|
|
|
tempstr += GetSpaceStr("", 3);//15 //B/L Status//O//X(3)//120 //122 //webCSM B/L Status (out from webCSM only)
|
|
|
tempstr += GetSpaceStr("", 1);//16 //Export Haulage//O//X(1)//123 //123 //M:Merchant Haulage, C:Carrier Haulage
|
|
|
tempstr += GetSpaceStr("", 1);//17 //Import Haulage//O//X(1)//124 //124 //M:Merchant Haulage, C:Carrier Haulage
|
|
|
tempstr += GetSpaceStr("", 35);//18 //EDI301 Reference//C//X(35)//125 //159 //Shipping Portal's booking reference (eg. GT Nexus, INTTRA)
|
|
|
tempstr += GetSpaceStr("", 91);//19 //Filler//M//X(91)//160 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
#region 15
|
|
|
tempstr = "15";//1//RECORD-ID//M//9(2)//1//2//15
|
|
|
tempstr += GetSpaceStr(bill.PLACERECEIPT, 50);//2//Origin Freeform//O//X(50)//3//52//BL location text for Port of Origin//收货地
|
|
|
tempstr += GetSpaceStr(bill.PORTLOAD, 50);//3//Load Port Freeform//O//X(50)//53//102//BL location text for Port of Load//装货港
|
|
|
tempstr += GetSpaceStr(bill.PORTDISCHARGE, 50);//4//Discharge Port Freeform//O//X(50)//103//152//BL location text for Port of Discharge//卸货港
|
|
|
/*
|
|
|
* 2023-04-04 参考韩工最新代码调整取值
|
|
|
tempstr += GetSpaceStr(bill.PLACEDELIVERY, 50);//5//Destination Freeform//O//X(50)//153//202//BL location text for Port of Delivery//交货地点
|
|
|
*/
|
|
|
tempstr += GetSpaceStr(bill.DESTINATION, 50);
|
|
|
tempstr += GetSpaceStr(bill.VOYNO, 30);//6//Freeform Voyage//O//X(30)//203//232//BL voyage freeform/
|
|
|
/*
|
|
|
* 2023-04-04 参考韩工最新代码调整去掉赋值航次号
|
|
|
tempstr += GetSpaceStr(bill.VOYNO, 30);//6//Freeform Voyage//O//X(30)//203//232//BL voyage freeform//航次
|
|
|
*/
|
|
|
tempstr += GetSpaceStr("", 30);//6//Freeform Voyage//O//X(30)//203//232//BL voyage freeform//航次
|
|
|
tempstr += GetSpaceStr("", 18);//7//Filler//M//X(18)//233//250//Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
|
|
|
#region 16
|
|
|
tempstr = "16";//1//RECORD-ID//M//9(2)//1//2//16
|
|
|
tempstr += GetSpaceStr("", 3);//2//Filler//M//X(3)//3//5//Spaces
|
|
|
//if (bill.BLFRT.IndexOf("FREIGHT COLLECT") > -1)//运费到付
|
|
|
//{
|
|
|
// tempstr += GetSpaceStr("", 10);//3//Shipper Code//O//X(10)//6//15//webcsm Partner Code//mandtory for CIF shpts,预付必填
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
tempstr += GetSpaceStr(bill.ShipperEdiCode, 10);//3//Shipper Code//O//X(10)//6//15//webcsm Partner Code//mandtory for CIF shpts,预付必填
|
|
|
//}
|
|
|
tempstr += GetSpaceStr("", 3);//4//Shipper Code//O//X(3)//16//18//webcsm Partner Subcode
|
|
|
tempstr += GetSpaceStr("", 4);//5//Filler//M//X(4)//19//22//Spaces
|
|
|
var Shipping = "";
|
|
|
Shipping = bill.SHIPPER;
|
|
|
List<System.String> ShippingList = formatlengthStr(Shipping, 35);
|
|
|
for (var i = 0; i < ShippingList.Count; i++)
|
|
|
{
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
if (i <= 5)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i], 35);//6//Shipper-Item (1)//M//X(35)//23//57//Shipper Name, Address line 1
|
|
|
}
|
|
|
}
|
|
|
//6//Shipper-Item (1)//M//X(35)//23//57//Shipper Name, Address line 1
|
|
|
//7//Shipper-item (2)//M//X(35)//58//92//Shipper Name, Address line 2
|
|
|
//8//Shipper-item (3)//M//X(35)//93//127//Shipper Name, Address line 3
|
|
|
//9//Shipper-item (4)//M//X(35)//128//162//Shipper Name, Address line 4
|
|
|
//10//Shipper-item (5)//M//X(35)//163//197//Shipper Name, Address line 5
|
|
|
//11//Shipper-item (6)//M//X(35)//198//232//Shipper Name, Address line 6
|
|
|
//12//SCAC Code//O//X(4)//233//236//
|
|
|
//13//Filler//M//X(14)//237//250//Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 17
|
|
|
tempstr = "17";//1 //RECORD-ID//M//9(2)//1 //2 //17
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
//if (bill.BLFRT == "FREIGHT PREPAID")
|
|
|
//{
|
|
|
// tempstr += GetSpaceStr(agent, 10);//3 //Booking Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// tempstr += GetSpaceStr(cagent, 10);//3 //Booking Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
//}
|
|
|
if (bill.BLFRT.IndexOf("FREIGHT PREPAID") > -1)//运费预付
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.ShipperEdiCode, 10);//3 //Booking Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.ConsigneeEdiCode, 10);//3//Shipper Code//O//X(10)//6//15//webcsm Partner Code//mandtory for CIF shpts,预付必填
|
|
|
}
|
|
|
if (bill.PORTLOADID == "CNTAO" && InttrEdi.filetype != "E")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 3);//4 //Booking Party Code//O//X(3)//16 //18 //webcsm Partner Subcode//mandtory,订舱单位代码(customer code)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("001", 3);//4 //Booking Party Code//O//X(3)//16 //18 //webcsm Partner Subcode//mandtory,订舱单位代码(customer code)
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 4);//5 //Filler//M//X(4)//19 //22 //Spaces
|
|
|
int iLs = (!string.IsNullOrWhiteSpace(InttrEdi.ForWarderName)?InttrEdi.ForWarderName.Length:0) / 35;
|
|
|
int iLs2 = (!string.IsNullOrWhiteSpace(InttrEdi.ForWarderName)?InttrEdi.ForWarderName.Length:0) % 35;
|
|
|
int n = 0;
|
|
|
for (int i = 0; i < iLs; i++)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(InttrEdi.ForWarderName.Substring(i * 35, 35), 35);//6 //Booking Party-Item (1)//M//X(35)//23 //57 //Booking Party Name, Address line 1;
|
|
|
n = i + 1;
|
|
|
}
|
|
|
if (iLs < 6)
|
|
|
{
|
|
|
if (iLs2 > 0)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(InttrEdi.ForWarderName.Substring(n * 35), 35);//6 //Booking Party-Item (1)//M//X(35)//23 //57 //Booking Party Name, Address line 1-6;
|
|
|
}
|
|
|
if ((iLs + 1) < 6)
|
|
|
{
|
|
|
for (int i = 0; i < (6 - iLs - 1); i++)
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 35);//6 //Booking Party-Item (1)//M//X(35)//23 //57 //Booking Party Name, Address line 6;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 4);//12 //SCAC Code//O//X(4)//233 //236 //
|
|
|
tempstr += GetSpaceStr("", 14);//13 //Filler//M//X(14)//237 //250 //Spaces
|
|
|
tempstr = GetSpaceStr(tempstr, 236);
|
|
|
if (bill.BLFRT.IndexOf("FREIGHT PREPAID") > -1)//运费预付
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.ShipperEdiCode, 10);//3 //Booking Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.ConsigneeEdiCode, 10);//3//Shipper Code//O//X(10)//6//15//webcsm Partner Code//mandtory for CIF shpts,预付必填
|
|
|
}
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 18
|
|
|
|
|
|
var contractno = bill.CONTRACTNO;
|
|
|
|
|
|
tempstr = "18";//1 //RECORD-ID//M//9(2)//1 //2 //18
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
//if (bill.CONTRACTNO == "")
|
|
|
//{
|
|
|
// if (bill.BLFRT == "FREIGHT PREPAID")
|
|
|
// {
|
|
|
// tempstr += GetSpaceStr(agent, 10);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory (DUM000001),填RFA;美国线的S/C或者TAA填写在record 74,美国线留空
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// tempstr += GetSpaceStr(cagent, 10);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory (DUM000001),填RFA;美国线的S/C或者TAA填写在record 74,美国线留空
|
|
|
// }
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// tempstr += GetSpaceStr(bill.CONTRACTNO, 10);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
//}
|
|
|
if (bill.BYCOUNTRY == "USA")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 11);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory (DUM000001),填RFA;美国线的S/C或者TAA填写在record 74,美国线留空
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (string.IsNullOrWhiteSpace(contractno))
|
|
|
{
|
|
|
tempstr += GetSpaceStr("DUM000001", 11);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory (DUM000001),填RFA;美国线的S/C或者TAA填写在record 74,美国线留空
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(contractno, 11);//3 //Deciding Party Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
}
|
|
|
}
|
|
|
if (bill.PORTLOADID == "CNTAO" && InttrEdi.filetype != "E")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 2);//4 //Deciding Party Code//O//X(3)//16 //18 //webcsm Partner Subcode
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("01", 2);//4 //Deciding Party Code//O//X(3)//16 //18 //webcsm Partner Subcode
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 1);//5 //Special Rate Indicator//C//X(1)//19 //19 //Denote special account with fixed exchange rates (out from webCSM only)
|
|
|
tempstr += GetSpaceStr("", 3);//6 //Filler//M//X(3)//20 //22 //Spaces
|
|
|
Shipping = "";
|
|
|
if (bill.BLFRT == "FREIGHT PREPAID")
|
|
|
{
|
|
|
Shipping = bill.SHIPPER;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Shipping = bill.CONSIGNEE;
|
|
|
}
|
|
|
ShippingList = formatlengthStr(Shipping, 35);
|
|
|
for (var i = 0; i < ShippingList.Count; i++)
|
|
|
{
|
|
|
if (i <= 6)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i], 35);//7 //Deciding-Item (1)//M//X(35)//23 //57 //Deciding Party Name, Address line 1
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
//var iLS = ShippingList.Count - 6;
|
|
|
//if (iLS > 0)
|
|
|
//{
|
|
|
// for (var i = 0; i < iLS; i++)
|
|
|
// {
|
|
|
// tempstr += GetSpaceStr("", 35);//7 //Deciding-Item (1)//M//X(35)//23 //57 //Deciding Party Name, Address line 1
|
|
|
// }
|
|
|
//}
|
|
|
//7 //Deciding-Item (1)//M//X(35)//23 //57 //Deciding Party Name, Address line 1
|
|
|
//8 //Deciding-item (2)//M//X(35)//58 //92 //Deciding Party Name, Address line 2
|
|
|
//9 //Deciding-item (3)//M//X(35)//93 //127 //Deciding Party Name, Address line 3
|
|
|
//10 //Deciding-Item (4)//M//X(35)//128 //162 //Deciding Party Name, Address line 4
|
|
|
//11 //Deciding-item (5)//M//X(35)//163 //197 //Deciding Party Name, Address line 5
|
|
|
//12 //Deciding-item (6)//M//X(35)//198 //232 //Deciding Party Name, Address line 6
|
|
|
tempstr = GetSpaceStr(tempstr, 232);
|
|
|
tempstr += GetSpaceStr("", 4);//12 //SCAC Code//O//X(4)//233 //236 //
|
|
|
tempstr += GetSpaceStr(bill.SalesRepCode, 14);//13 //Filler//M//X(14)//237 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 21
|
|
|
tempstr = "21";//1 //RECORD-ID//M//9(2)//1 //2 //21
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
if (bill.BLFRT.IndexOf("FREIGHT COLLECT") > -1)//运费到付
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.ConsigneeEdiCode, 10);//3 //Consignee Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory for FOB shpts,收货人代码,到付必填。跟客服要
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 10);//3 //Consignee Code//O//X(10)//6 //15 //webcsm Partner Code//mandtory for FOB shpts,收货人代码,到付必填
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 3);//4 //Consignee Code//O//X(3)//16 //18 //webcsm Partner Subcode
|
|
|
tempstr += GetSpaceStr("", 4);//5 //Filler//M//X(4)//19 //22 //Spaces
|
|
|
Shipping = "";
|
|
|
Shipping = bill.CONSIGNEE;
|
|
|
ShippingList = formatlengthStr(Shipping, 35);
|
|
|
for (var i = 0; i < ShippingList.Count; i++)
|
|
|
{
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
if (i <= 5)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i], 35);//6 //Consignee item - (1)//M//X(35)//23 //57 //Consignee Name, Address line 1
|
|
|
}
|
|
|
}
|
|
|
//6 //Consignee item - (1)//M//X(35)//23 //57 //Consignee Name, Address line 1
|
|
|
//7 //Consignee item - (2)//M//X(35)//58 //92 //Consignee Name, Address line 2
|
|
|
//8 //Consignee item - (3)//M//X(35)//93 //127 //Consignee Name, Address line 3
|
|
|
//9 //Consignee item - (4)//M//X(35)//128 //162 //Consignee Name, Address line 4
|
|
|
//10 //Consignee item - (5)//M//X(35)//163 //197 //Consignee Name, Address line 5
|
|
|
//11 //Consignee item - (6)//M//X(35)//198 //232 //Consignee Name, Address line 6
|
|
|
//12 //SCAC Code//O//X(4)//233 //236 //
|
|
|
//13 //Filler//M//X(14)//237 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 26
|
|
|
tempstr = "26";//1 //RECORD-ID//M//9(2)//1 //2 //26
|
|
|
tempstr += GetSpaceStr("", 2);//2 //Filler//M//X(2)//3 //4 //Spaces
|
|
|
tempstr += "1";//3 //Notify Party Count//M//9(1)//5 //5 //I = 1 to 3 notify party
|
|
|
tempstr += GetSpaceStr("", 10);//4 //Notify Code//O//X(10)//6 //15 //webcsm Partner Code
|
|
|
tempstr += GetSpaceStr("", 3);//5 //Notify Code//O//X(3)//16 //18 //webcsm Partner Subcode
|
|
|
tempstr += GetSpaceStr("", 4);//6 //Filler//M//X(4)//19 //22 //Spaces
|
|
|
Shipping = "";
|
|
|
Shipping = bill.NOTIFYPARTY;
|
|
|
ShippingList = formatlengthStr(Shipping, 35);
|
|
|
for (var i = 0; i < ShippingList.Count; i++)
|
|
|
{
|
|
|
/*
|
|
|
EDI校验,通过和川操作确认应调整最大行数为5行,将最大6行改为5行
|
|
|
*/
|
|
|
if (i <= 5)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i], 35);//7 //Notify Field-(1)//M//X(35)//23 //57 //Notify Party Name, Address line 1
|
|
|
}
|
|
|
}
|
|
|
//7 //Notify Field-(1)//M//X(35)//23 //57 //Notify Party Name, Address line 1
|
|
|
//8 //Notify Field-(2)//M//X(35)//58 //92 //Notify Party Name, Address line 2
|
|
|
//9 //Notify Field-(3)//M//X(35)//93 //127 //Notify Party Name, Address line 3
|
|
|
//10 //Notify Field-(4)//M//X(35)//128 //162 //Notify Party Name, Address line 4
|
|
|
//11 //Notify Field-(5)//M//X(35)//163 //197 //Notify Party Name, Address line 5
|
|
|
//12 //Notify Field-(6)//M//X(35)//198 //232 //Notify Party Name, Address line 6
|
|
|
//12 //SCAC Code//O//X(4)//233 //236 //
|
|
|
//13 //Filler//M//X(14)//237 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
var soc = "N";
|
|
|
if (bill.ISCONTAINERSOC)
|
|
|
{
|
|
|
soc = "S";
|
|
|
}
|
|
|
List<MsOpSeaeCtnEDIBaseModel> 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;
|
|
|
i.KGS = i.KGS + ctn.KGS;
|
|
|
if (ctn.CTNALLCODE.IndexOf("40") > 0)
|
|
|
i.TEU = i.TEU + ctn.CTNNUM * 2;
|
|
|
else
|
|
|
i.TEU = i.TEU + ctn.CTNNUM * 1;
|
|
|
i.PKGS = i.PKGS + ctn.PKGS;
|
|
|
i.CBM = i.CBM + ctn.CBM;
|
|
|
i.CTNNUM = i.CTNNUM + ctn.CTNNUM;
|
|
|
isfind = true;
|
|
|
}
|
|
|
});
|
|
|
if (!isfind)
|
|
|
{
|
|
|
var ctnnum = new MsOpSeaeCtnEDIBaseModel();
|
|
|
ctnnum.CTNALLCODE = ctn.CTNALLCODE;
|
|
|
ctnnum.KGS = ctn.KGS;
|
|
|
if (ctn.CTNALLCODE.IndexOf("40") > 0)
|
|
|
ctnnum.TEU = ctn.CTNNUM * 2;
|
|
|
else
|
|
|
ctnnum.TEU = ctn.CTNNUM * 1;
|
|
|
ctnnum.PKGS = ctn.PKGS;
|
|
|
ctnnum.CBM = ctn.CBM;
|
|
|
ctnnum.CTNNUM = ctn.CTNNUM;
|
|
|
ctnsumlist.Add(ctnnum);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ctnline = 1;
|
|
|
foreach (var ctn in ctnsumlist)
|
|
|
{
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
#region ESI
|
|
|
#region 41
|
|
|
tempstr = "41";//1 //RECORD-ID//M//9(2)//1 //2 //41
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
if (bill.HSCODE.ToString().Length > 6)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.HSCODE.ToString().Substring(0, 6), 9);//4 //Commodity Code//M//X(9)//9 //17 //6 Digits HS CODE//mandtory,Hscode,必填,商品编码前6位
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.HSCODE.ToString(), 9);//4 //Commodity Code//M//X(9)//9 //17 //6 Digits HS CODE//mandtory,Hscode,必填,商品编码前6位
|
|
|
}
|
|
|
tempstr += "Y";//5 //BL Override//M//X(1)//18 //18 //Y or N, Y=lumpsum weights used, (out from webCSM only)
|
|
|
tempstr += GetSpaceStr(ctn.CTNNUM.ToString(), 6, "0");//6 //No of packages/Containers//M//9(6)//19 //24 //Number of Containers for the cargo line
|
|
|
tempstr += GetSpaceStr(ctn.TEU.ToString(), 4, "0");//7 //TEU Utilisation//C//9(4)//25 //28 //Actual TEU utilised, eg. OOG's slot kill or Flatrack bundled units
|
|
|
tempstr += GetSpaceStr((ctn.KGS * 1000).ToString("0.###"), 11, "0");//8 //Cargo Gross Weight//C//9(8)v999//29 //39 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr("", 11, "0");//9 //Cargo Nett Weight//C//9(8)v999//40 //50 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr((ctn.CBM * 1000).ToString("0.###"), 10, "0");//10 //Cargo Gross Measurement//C//9(7)v999//51 //60 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr((ctn.CBM * 1000).ToString("0.###"), 10, "0");//11 //Cargo Nett Measurement//C//9(7)v999//61 //70 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr(bill.GOODSNAME, 48);//12 //Commodity Name//O//X(48)//71 //118 //
|
|
|
//tempstr += GetSpaceStr(GetGOODEDICode(bill.GOODSNAME), 4);//13 //webcsm Commodity Code//O//X(4)//119 //122 //webCSM Standard Commodity Code
|
|
|
tempstr += GetSpaceStr("", 4);//13 //webcsm Commodity Code//O//X(4)//119 //122 //webCSM Standard Commodity Code
|
|
|
tempstr += GetSpaceStr(ctn.CTNALLCODE, 4);//14 //webcsm Package Code//M//X(4)//123 //126 //eg 20GP, 40GP etc.
|
|
|
tempstr += "KGM";//15 //UOM Weight//M//X(3)//127 //129 //Default to METRIC = KGM
|
|
|
tempstr += "MTQ";//16 //UOM Measurement//M//X(3)//130 //132 //Default to METRIC = MTQ
|
|
|
tempstr += GetSpaceStr(soc, 1);//17 //Equipment Flag //M//X(1)//133 //133 //Y:COC cntr required, N:cntr not required, S:SOC//mandtory,只要有SOC箱子就要填S
|
|
|
tempstr += GetSpaceStr("", 117);//18 //Filler//M//X(117)//134 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 44
|
|
|
if (ctnline == 1)
|
|
|
{
|
|
|
Shipping = bill.MARKS;
|
|
|
ShippingList = formatlengthStr(Shipping, 20);
|
|
|
for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(12))); i++)
|
|
|
{
|
|
|
tempstr = "44";//1 //RECORD-ID//M//9(2)//1 //2 //44
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
for (var z = 0; z < 12; z++)
|
|
|
{
|
|
|
if ((i * 12 + z) < ShippingList.Count)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i * 12 + z], 20);//4 //Mark-no-(1)//O//X(20)//9 //28
|
|
|
}
|
|
|
}
|
|
|
//4 //Mark-no-(1)//O//X(20)//9 //28 //
|
|
|
//5 //Mark-no-(2)//O//X(20)//29 //48 //
|
|
|
//6 //Mark-no-(3)//O//X(20)//49 //68 //
|
|
|
//7 //Mark-no-(4)//O//X(20)//69 //88 //
|
|
|
//8 //Mark-no-(5)//O//X(20)//89 //108 //
|
|
|
//9 //Mark-no-(6)//O//X(20)//109 //128 //
|
|
|
//10 //Mark-no-(7)//O//X(20)//129 //148 //
|
|
|
//11 //Mark-no-(8)//O//X(20)//149 //168 //
|
|
|
//12 //Mark-no-(9)//O//X(20)//169 //188 //
|
|
|
//13 //Mark-no-(10)//O//X(20)//189 //208 //
|
|
|
//14 //Mark-no-(11)//O//X(20)//209 //228 //
|
|
|
//15 //Mark-no-(12)//O//X(20)//229 //248 //
|
|
|
//16 //Filler//M//X(2)//249 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 47
|
|
|
if (ctnline == 1)
|
|
|
{
|
|
|
Shipping = bill.DESCRIPTION;
|
|
|
ShippingList = formatlengthStr(Shipping, 30);
|
|
|
for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(8))); i++)
|
|
|
{
|
|
|
tempstr = "47";//1 //RECORD-ID//M//9(2)//1 //2 //47
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
for (var z = 0; z < 8; z++)
|
|
|
{
|
|
|
if ((i * 8 + z) < ShippingList.Count)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i * 8 + z], 30);//4 //Cargo Description- (1)//O//X(30)//9 //38 //
|
|
|
}
|
|
|
}
|
|
|
//4 //Cargo Description- (1)//O//X(30)//9 //38 //
|
|
|
//5 //Cargo Description- (2)//O//X(30)//39 //68 //
|
|
|
//6 //Cargo Description- (3)//O//X(30)//69 //98 //
|
|
|
//7 //Cargo Description- (4)//O//X(30)//99 //128 //
|
|
|
//8 //Cargo Description- (5)//O//X(30)//129 //158 //
|
|
|
//9 //Cargo Description- (6)//O//X(30)//159 //188 //
|
|
|
//10 //Cargo Description- (7)//O//X(30)//189 //218 //
|
|
|
//11 //Cargo Description- (8)//O//X(30)//219 //248 //
|
|
|
//12 //Filler//M//X(2)//249 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
var m = 1;
|
|
|
foreach (var ctndetail in bill.CTNLIST)
|
|
|
{
|
|
|
if (ctndetail.CTNALLCODE == ctn.CTNALLCODE)
|
|
|
{
|
|
|
if (string.IsNullOrWhiteSpace(ctndetail.CTNSTATUS)) ctndetail.CTNSTATUS = "F";
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(ctndetail.CNTRNO))
|
|
|
{
|
|
|
#region 51
|
|
|
tempstr = "51";//1//RECORD-ID//M//9(2)//1//2//51
|
|
|
tempstr += GetSpaceStr("", 3);//2//Filler//M//X(3)//3//5//Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3//Cargo Sequence No#//M//9(3)//6//8//001 to 999 (line-items)
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//4//Equipment Sequence No//M//9(3)//9//11//001 to 999
|
|
|
tempstr += GetSpaceStr(ctndetail.CNTRNO, 11);//5//Container No//M//X(11)//12//22//Container Number
|
|
|
if (bill.ISCONTAINERSOC)
|
|
|
{
|
|
|
tempstr += "Y";//6//Container SOC//M//X(1)//23//23//Y or N
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += "N";//6//Container SOC//M//X(1)//23//23//Y or N
|
|
|
}
|
|
|
tempstr += ctn.CTNALLCODE;//7//Cntr Size/type code//M//X(4)//24//27//ISO Size/type eg 2200
|
|
|
tempstr += ctndetail.CTNSTATUS;//8//Cntr Loading Status//M//X(1)//28//28//F-Full, P-Part, E-Empty
|
|
|
tempstr += GetSpaceStr("", 3);//9//Cntr Operator//O//X(3)//29//31//
|
|
|
tempstr += GetSpaceStr("", 3);//10//UOM Weight//M//X(3)//32//34//Default to METRIC = KGM
|
|
|
tempstr += GetSpaceStr("", 3);//11//UOM Measurement//M//X(3)//35//37//Default to METRIC = MTQ
|
|
|
tempstr += GetSpaceStr("", 9);//12//Filler//M//X(9)//38//46//Spaces
|
|
|
tempstr += GetSpaceStr(ctndetail.PKGS.ToString(), 6, "0");//13//Cntr No of Packages//O//9(6)//47//52//Number of Packages in the Container
|
|
|
//tempstr += GetSpaceStr(ctndetail.KINDPKGS, 8);//14//Cntr Kind of Packages//O//X(8)//53//60//Package Description (limited to 8 characters)
|
|
|
tempstr += GetSpaceStr(ctndetail.KINDPKGS_EDI_CODE, 8);//14//Cntr Kind of Packages//O//X(8)//53//60//Package Description (limited to 8 characters)
|
|
|
tempstr += GetSpaceStr((ctndetail.KGS * 1000).ToString("0.###"), 9, "0");//15//Cntr Cargo Gross Weight//O//9(6)v999//61//69//Cargo Gross Weight per the container unit
|
|
|
tempstr += GetSpaceStr("", 9, "0");//16//Cntr Tare Weight//O//9(6)v999//70//78//Container Tare Weight
|
|
|
tempstr += GetSpaceStr((ctndetail.CBM * 1000).ToString("0.###"), 9, "0");//17//Cntr Cargo Measurement//O//9(6)v999//79//87//Measurement per the container unit
|
|
|
tempstr += GetSpaceStr("", 9, "0");//18//Cntr Cargo Net Weight//O//9(6)v999//88//96//Cargo Net Weight per the container unit
|
|
|
tempstr += GetSpaceStr(ctndetail.KINDPKGS_EDI_CODE, 5);//19//webCSM Package Code//O//X(5)//97//101//Package code within the container eg BX (boxes)
|
|
|
tempstr += GetSpaceStr("", 20);//20//Seal No (Shipper)//O//X(20)//102//121//Shipper's Seal Number
|
|
|
tempstr += GetSpaceStr(ctndetail.SEALNO, 20);//21//Seal No (Carrier)//O//X(20)//122//141//Carrier's Seal Number
|
|
|
tempstr += GetSpaceStr("", 20);//22//Seal No (Customs)//O//X(20)//142//161//Customs' Seal Number
|
|
|
tempstr += GetSpaceStr("", 20);//23//Seal No (Others)//O//X(20)//162//181//4th Seal Number
|
|
|
tempstr += GetSpaceStr("", 1);//24//Shortship Flag//C//X(1)//182//182//Y:Shortship, S:Shortland, O:Overland, else leave blank
|
|
|
tempstr += GetSpaceStr("", 20);//25//Part BL Cross-reference (Their Ref)//C//X(20)//183//202//Cross-ref to Main/Sub OBL of Part containers, only applicable to Part BLs
|
|
|
tempstr += GetSpaceStr("", 48);//26//Filler//M//X(48)//203//250//Spaces
|
|
|
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
|
|
|
if (bill.CARGOID == "R")
|
|
|
{
|
|
|
#region 54 冻柜
|
|
|
var tmpset = "";
|
|
|
if (bill.TEMPSET.IndexOf("-") >= 0)
|
|
|
{
|
|
|
tmpset = "-";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tmpset = "0";
|
|
|
}
|
|
|
bill.TEMPSET = bill.TEMPSET.Replace("+", "").Replace("-", "");
|
|
|
|
|
|
tempstr = "54";//1 //RECORD-ID//M//9(2)//1 //2 //54
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//货物的序列号//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//4 //Equipment Sequence No设备序列号//M//9(3)//9 //11 //001 to 999
|
|
|
tempstr += "C";//5 //Reefer Temperature UOM冷藏温度计量单位//M//X(1)//12 //12 //C or F (C=Celsius, F=Fahrenheit)
|
|
|
tempstr += GetSpaceStr("", 5);//6 //Reefer Min Temperature//C//9(3)v99//13 //17 //If MAX exists, MIN should exists
|
|
|
tempstr += GetSpaceStr("", 5);//7 //Reefer Max Temperature//C//9(3)v99//18 //22 //If MIN exists, MAX should exists
|
|
|
tempstr += tmpset + GetSpaceStr((Convert.ToDecimal(bill.TEMPSET) * 100).ToString(), 4, "0");//8 //Reefer Preset Temperature冷藏温度设定//C//9(3)v99//23 //27 //Blank if no Preset required
|
|
|
tempstr += "N";//9 //Reefer Gensets Required冷藏机组的要求//M//X(1)//28 //28 //Y or N
|
|
|
if (bill.REEFERF != "")
|
|
|
{
|
|
|
tempstr += GetSpaceStr((Convert.ToDecimal(bill.REEFERF) * 100).ToString(), 5, "0");//10 //Reefer Vent Open Value冷藏等开放价值//C//9(3)v99//29 //33 //Blank if Vent Status = 'Closed', else value in relation to Vent UOM如果等待空白状态=“闭合”,其他的值等计量单位
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 5);//10 //Reefer Vent Open Value冷藏等开放价值//C//9(3)v99//29 //33 //Blank if Vent Status = 'Closed', else value in relation to Vent UOM如果等待空白状态=“闭合”,其他的值等计量单位
|
|
|
}
|
|
|
tempstr += "Y";//11 //Pretrip Flag//M//X(1)//34 //34 //Y or N
|
|
|
tempstr += tmpset + GetSpaceStr((Convert.ToDecimal(bill.TEMPSET) * 100).ToString(), 4, "0");//12 //Carriage Temperature运输温度//C//9(3)v99//35 //39 //For operating reefers, at least one temperature field must not be blank
|
|
|
if (bill.REEFERF != "")
|
|
|
{
|
|
|
tempstr += "H";//13 //Reefer Vent Status冷藏通风状况/UOM//C//X(1)//40 //40 //C:Closed, F:CFM, H:M3/H, P:Percentage, O:Open
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += "C";//13 //Reefer Vent Status冷藏通风状况/UOM//C//X(1)//40 //40 //C:Closed, F:CFM, H:M3/H, P:Percentage, O:Open
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 210);//14 //Filler//M//X(210)//41 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
else if (bill.CARGOID == "D")
|
|
|
{
|
|
|
#region 55 危险品紧急联系信息
|
|
|
tempstr = "55";//1//RECORD-ID//M//9(2)//1//2//55//record-id
|
|
|
tempstr += GetSpaceStr("", 1);//2//Filler//M//X(1)//3//3//Spaces//填料
|
|
|
tempstr += "01";//3//DG Sequence No//M//9(2)//4//5//Default to "01", Rec 55 is needed only once for each equipment seq//DG的序列号
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//4//Cargo Sequence No#//M//9(3)//6//8//001 to 999 (line-items)//货物没有#序列
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//5//Equipment Sequence No//M//9(3)//9//11//001 to 999//设备序列号
|
|
|
tempstr += GetSpaceStr(bill.EDIATTN, 35);//6//Emergency Contact//O//X(35)//12//46////急救联系
|
|
|
tempstr += GetSpaceStr("", 35);//7//Emergency Tel//O//X(35)//47//81////急救电话
|
|
|
tempstr += GetSpaceStr("", 100);//8//Emergency Email//O//X(100)//82//181////急救的电子邮件
|
|
|
tempstr += GetSpaceStr("", 20);//9//Emergency Reference//O//X(20)//182//201////急救参考
|
|
|
tempstr += GetSpaceStr("", 49);//10//Filler//M//X(49)//202//250//Spaces//填料
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 56 危险品//56 01001001//2556//a//4.1 //2 //KGM//008220000//009516000//N
|
|
|
tempstr = "56";//1//RECORD-ID M 9(2) 1//2//56
|
|
|
tempstr += GetSpaceStr("", 1);//2//Filler M X(1) 3//3//Spaces 填料
|
|
|
tempstr += GetSpaceStr("01", 2);//3//DG Sequence No M 9(2) 4//5//01 to 99, to denote multiple DG items in each equipment seq (cntr) DG的序列号
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//4//Cargo Sequence No# M 9(3) 6//8//001 to 999 (line-items)//货物没有#序列
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//5//Equipment Sequence No M 9(3) 9//11//001 to 999 设备序列号
|
|
|
tempstr += GetSpaceStr(bill.DUNNO, 4);//6//UN Number M X(4) 12//15// 联合国编号
|
|
|
tempstr += GetSpaceStr("", 1);//7//UN Variant M X(1) 16//16// 联合国的变体
|
|
|
tempstr += GetSpaceStr(bill.DCLASS, 4);//8//IMO Class M X(4) 17//20// 国际海事组织类
|
|
|
tempstr += GetSpaceStr("", 3);//9//PSA Class O X(3) 21//23// PSA类
|
|
|
tempstr += "KGM";//10//UOM M X(3) 24//26//Default to METRIC, eg. KGM 计量单位
|
|
|
tempstr += GetSpaceStr(((ctn.KGS - ctn.TAREWEIGHT) * 1000).ToString("0.###"), 9, "0");//11//Net Weight C 9(6)v999 27//35//Weight of DG item 净重量
|
|
|
tempstr += GetSpaceStr((ctn.KGS * 1000).ToString("0.###"), 9, "0");//12//Gross Weight C 9(6)v999 36//44//Weight of DG item 总重量
|
|
|
tempstr += "N";//13//Marine Pollutant M X(1) 45//45//Y or N 海洋污染物
|
|
|
tempstr += GetSpaceStr(bill.DPAGE, 10);//14//IMDG Page O X(10) 46//55// 危规页码
|
|
|
tempstr += GetSpaceStr("", 4);//15//DOT Packaging Group O X(4) 56//59// 点包装集团
|
|
|
tempstr += GetSpaceStr("", 10);//16//Filler M X(10) 60//69//Spaces 填料
|
|
|
tempstr += GetSpaceStr("", 25);//17//Flashpoint O X(25) 70//94// 闪点
|
|
|
tempstr += GetSpaceStr("", 3);//18//Packing Group O X(3) 95//97// 包装组
|
|
|
tempstr += GetSpaceStr(ctndetail.KINDPKGS_EDI_CODE, 5);//19//Outer Package Code O X(5) 98//102//webCSM Package Code 外包装编码
|
|
|
tempstr += GetSpaceStr(ctndetail.PKGS.ToString("0.###"), 9, "0");//20//Outer Quantity O 9(9) 103//111// 外量
|
|
|
tempstr += GetSpaceStr("", 5);//21//Inner Package Code O X(5) 112//116//webCSM Package Code 内包装代码
|
|
|
tempstr += GetSpaceStr("", 9);//22//Inner Quantity O 9(9) 117//125// 内部变量
|
|
|
tempstr += GetSpaceStr("", 5);//23//Next Inner Package Code O X(5) 126//130//webCSM Package Code 下一个内部包代码
|
|
|
tempstr += GetSpaceStr("", 9);//24//Next Inner Quantity O 9(9) 131//139// 下一个内部变量
|
|
|
tempstr += GetSpaceStr("", 50);//25//Chemical Name O X(50) 140//189// 化学名称
|
|
|
tempstr += GetSpaceStr("", 20);//26//Our Reference O X(20) 190//209// 我们的参考
|
|
|
tempstr += GetSpaceStr("", 21);//28//Filler M X(21) 230//250//Spaces 填料
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
m = m + 1;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
#region EDI
|
|
|
#region 41
|
|
|
tempstr = "41";//1 //RECORD-ID//M//9(2)//1 //2 //41
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
//tempstr += GetSpaceStr(GetGOODEDICode(bill.GOODSNAME), 9);//4 //Commodity Code//M//X(9)//9 //17 //6 Digits HS CODE
|
|
|
if (bill.HSCODE.ToString().Length > 6)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.HSCODE.ToString().Substring(0, 6), 9);//4 //Commodity Code//M//X(9)//9 //17 //6 Digits HS CODE
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.HSCODE.ToString(), 9);//4 //Commodity Code//M//X(9)//9 //17 //6 Digits HS CODE
|
|
|
}
|
|
|
tempstr += "Y";//5 //BL Override//M//X(1)//18 //18 //Y or N, Y=lumpsum weights used, (out from webCSM only)
|
|
|
tempstr += GetSpaceStr(ctn.CTNNUM.ToString(), 6, "0");//6 //No of packages/Containers//M//9(6)//19 //24 //Number of Containers for the cargo line
|
|
|
tempstr += GetSpaceStr(ctn.TEU.ToString(), 4, "0");//7 //TEU Utilisation//C//9(4)//25 //28 //Actual TEU utilised, eg. OOG's slot kill or Flatrack bundled units
|
|
|
tempstr += GetSpaceStr((ctn.KGS * 1000).ToString("0.###"), 11, "0");//8 //Cargo Gross Weight//C//9(8)v999//29 //39 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr("", 11, "0");//9 //Cargo Nett Weight//C//9(8)v999//40 //50 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr((ctn.CBM * 1000).ToString("0.###"), 10, "0");//10 //Cargo Gross Measurement//C//9(7)v999//51 //60 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr((ctn.CBM * 1000).ToString("0.###"), 10, "0");//11 //Cargo Nett Measurement//C//9(7)v999//61 //70 //Mandatory, except for Empties
|
|
|
tempstr += GetSpaceStr(bill.GOODSNAME, 48);//12 //Commodity Name//O//X(48)//71 //118 //
|
|
|
//tempstr += GetSpaceStr(GetGOODEDICode(bill.GOODSNAME), 4);//13 //webcsm Commodity Code//O//X(4)//119 //122 //webCSM Standard Commodity Code
|
|
|
//2023-03-27 跟韩工确认这里加入商品代码
|
|
|
//tempstr += GetSpaceStr("", 4);//13 //webcsm Commodity Code//O//X(4)//119 //122 //webCSM Standard Commodity Code
|
|
|
tempstr += GetSpaceStr(bill.GOODSCODE, 4);//13 //webcsm Commodity Code//O//X(4)//119 //122 //webCSM Standard Commodity Code
|
|
|
tempstr += GetSpaceStr(ctn.CTNALLCODE, 4);//14 //webcsm Package Code//M//X(4)//123 //126 //eg 20GP, 40GP etc.
|
|
|
tempstr += "KGM";//15 //UOM Weight//M//X(3)//127 //129 //Default to METRIC = KGM
|
|
|
tempstr += "MTQ";//16 //UOM Measurement//M//X(3)//130 //132 //Default to METRIC = MTQ
|
|
|
tempstr += GetSpaceStr(soc, 1); ;//17 //Equipment Flag //M//X(1)//133 //133 //Y:COC cntr required, N:cntr not required, S:SOC
|
|
|
tempstr += GetSpaceStr("", 117);//18 //Filler//M//X(117)//134 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 44
|
|
|
Shipping = bill.MARKS;
|
|
|
ShippingList = formatlengthStr(Shipping, 20);
|
|
|
for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(12))); i++)
|
|
|
{
|
|
|
tempstr = "44";//1 //RECORD-ID//M//9(2)//1 //2 //44
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
for (var z = 0; z < 12; z++)
|
|
|
{
|
|
|
if ((i * 12 + z) < ShippingList.Count)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i * 12 + z], 20);//4 //Mark-no-(1)//O//X(20)//9 //28
|
|
|
}
|
|
|
}
|
|
|
//4 //Mark-no-(1)//O//X(20)//9 //28 //
|
|
|
//5 //Mark-no-(2)//O//X(20)//29 //48 //
|
|
|
//6 //Mark-no-(3)//O//X(20)//49 //68 //
|
|
|
//7 //Mark-no-(4)//O//X(20)//69 //88 //
|
|
|
//8 //Mark-no-(5)//O//X(20)//89 //108 //
|
|
|
//9 //Mark-no-(6)//O//X(20)//109 //128 //
|
|
|
//10 //Mark-no-(7)//O//X(20)//129 //148 //
|
|
|
//11 //Mark-no-(8)//O//X(20)//149 //168 //
|
|
|
//12 //Mark-no-(9)//O//X(20)//169 //188 //
|
|
|
//13 //Mark-no-(10)//O//X(20)//189 //208 //
|
|
|
//14 //Mark-no-(11)//O//X(20)//209 //228 //
|
|
|
//15 //Mark-no-(12)//O//X(20)//229 //248 //
|
|
|
//16 //Filler//M//X(2)//249 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
if (ctnline == 1)
|
|
|
{
|
|
|
#region 47
|
|
|
tempstr = "47";//1 //RECORD-ID//M//9(2)//1 //2 //47
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
tempstr += bill.PKGS.ToString() + bill.KINDPKGS;//4 //Cargo Description- (1)//O//X(30)//9 //38 //
|
|
|
//5 //Cargo Description- (2)//O//X(30)//39 //68 //
|
|
|
//6 //Cargo Description- (3)//O//X(30)//69 //98 //
|
|
|
//7 //Cargo Description- (4)//O//X(30)//99 //128 //
|
|
|
//8 //Cargo Description- (5)//O//X(30)//129 //158 //
|
|
|
//9 //Cargo Description- (6)//O//X(30)//159 //188 //
|
|
|
//10 //Cargo Description- (7)//O//X(30)//189 //218 //
|
|
|
//11 //Cargo Description- (8)//O//X(30)//219 //248 //
|
|
|
//12 //Filler//M//X(2)//249 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
|
|
|
#region 47 description
|
|
|
Shipping = bill.DESCRIPTION;
|
|
|
ShippingList = formatlengthStr(Shipping, 30);
|
|
|
for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(8))); i++)
|
|
|
{
|
|
|
tempstr = "47";//1 //RECORD-ID//M//9(2)//1 //2 //47
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
for (var z = 0; z < 8; z++)
|
|
|
{
|
|
|
if ((i * 8 + z) < ShippingList.Count)
|
|
|
{
|
|
|
tempstr += GetSpaceStr(ShippingList[i * 8 + z], 30);//4 //Cargo Description- (1)//O//X(30)//9 //38 //
|
|
|
}
|
|
|
}
|
|
|
//4 //Cargo Description- (1)//O//X(30)//9 //38 //
|
|
|
//5 //Cargo Description- (2)//O//X(30)//39 //68 //
|
|
|
//6 //Cargo Description- (3)//O//X(30)//69 //98 //
|
|
|
//7 //Cargo Description- (4)//O//X(30)//99 //128 //
|
|
|
//8 //Cargo Description- (5)//O//X(30)//129 //158 //
|
|
|
//9 //Cargo Description- (6)//O//X(30)//159 //188 //
|
|
|
//10 //Cargo Description- (7)//O//X(30)//189 //218 //
|
|
|
//11 //Cargo Description- (8)//O//X(30)//219 //248 //
|
|
|
//12 //Filler//M//X(2)//249 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
for (var m = 1; m <= ctn.CTNNUM; ++m)
|
|
|
{
|
|
|
if (bill.CARGOID == "R")
|
|
|
{
|
|
|
#region 54 冻柜
|
|
|
var tmpset = "";
|
|
|
if (bill.TEMPSET.IndexOf("-") >= 0)
|
|
|
tmpset = "-";
|
|
|
else
|
|
|
tmpset = "0";
|
|
|
bill.TEMPSET = bill.TEMPSET.Replace("+", "").Replace("-", "");
|
|
|
|
|
|
tempstr = "54";//1 //RECORD-ID//M//9(2)//1 //2 //54
|
|
|
tempstr += GetSpaceStr("", 3);//2 //Filler//M//X(3)//3 //5 //Spaces
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//3 //Cargo Sequence No#//货物的序列号//M//9(3)//6 //8 //001 to 999 (line-items)
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//4 //Equipment Sequence No设备序列号//M//9(3)//9 //11 //001 to 999
|
|
|
tempstr += "C";//5 //Reefer Temperature UOM冷藏温度计量单位//M//X(1)//12 //12 //C or F (C=Celsius, F=Fahrenheit)
|
|
|
tempstr += GetSpaceStr("", 5);//6 //Reefer Min Temperature//C//9(3)v99//13 //17 //If MAX exists, MIN should exists
|
|
|
tempstr += GetSpaceStr("", 5);//7 //Reefer Max Temperature//C//9(3)v99//18 //22 //If MIN exists, MAX should exists
|
|
|
tempstr += tmpset + GetSpaceStr((Convert.ToDecimal(bill.TEMPSET) * 100).ToString(), 4, "0");//8 //Reefer Preset Temperature冷藏温度设定//C//9(3)v99//23 //27 //Blank if no Preset required
|
|
|
tempstr += "N";//9 //Reefer Gensets Required冷藏机组的要求//M//X(1)//28 //28 //Y or N
|
|
|
if (bill.REEFERF != "")
|
|
|
{
|
|
|
tempstr += GetSpaceStr((Convert.ToDecimal(bill.REEFERF) * 100).ToString(), 5, "0");//10 //Reefer Vent Open Value冷藏等开放价值//C//9(3)v99//29 //33 //Blank if Vent Status = 'Closed', else value in relation to Vent UOM如果等待空白状态=“闭合”,其他的值等计量单位
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 5);//10 //Reefer Vent Open Value冷藏等开放价值//C//9(3)v99//29 //33 //Blank if Vent Status = 'Closed', else value in relation to Vent UOM如果等待空白状态=“闭合”,其他的值等计量单位
|
|
|
}
|
|
|
tempstr += "Y";//11 //Pretrip Flag//M//X(1)//34 //34 //Y or N
|
|
|
tempstr += tmpset + GetSpaceStr((Convert.ToDecimal(bill.TEMPSET) * 100).ToString(), 4, "0");//12 //Carriage Temperature运输温度//C//9(3)v99//35 //39 //For operating reefers, at least one temperature field must not be blank
|
|
|
if (bill.REEFERF != "")
|
|
|
{
|
|
|
tempstr += "H";//13 //Reefer Vent Status冷藏通风状况/UOM//C//X(1)//40 //40 //C:Closed, F:CFM, H:M3/H, P:Percentage, O:Open
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += "C";//13 //Reefer Vent Status冷藏通风状况/UOM//C//X(1)//40 //40 //C:Closed, F:CFM, H:M3/H, P:Percentage, O:Open
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 210);//14 //Filler//M//X(210)//41 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
else if (bill.CARGOID == "D")
|
|
|
{
|
|
|
#region 55 危险品紧急联系信息
|
|
|
tempstr = "55";//1//RECORD-ID//M//9(2)//1//2//55//record-id
|
|
|
tempstr += GetSpaceStr("", 1);//2//Filler//M//X(1)//3//3//Spaces//填料
|
|
|
tempstr += "01";//3//DG Sequence No//M//9(2)//4//5//Default to "01", Rec 55 is needed only once for each equipment seq//DG的序列号
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//4//Cargo Sequence No#//M//9(3)//6//8//001 to 999 (line-items)//货物没有#序列
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//5//Equipment Sequence No//M//9(3)//9//11//001 to 999//设备序列号
|
|
|
tempstr += GetSpaceStr(bill.EDIATTN, 35);//6//Emergency Contact//O//X(35)//12//46////急救联系
|
|
|
tempstr += GetSpaceStr("", 35);//7//Emergency Tel//O//X(35)//47//81////急救电话
|
|
|
tempstr += GetSpaceStr("", 100);//8//Emergency Email//O//X(100)//82//181////急救的电子邮件
|
|
|
tempstr += GetSpaceStr("", 20);//9//Emergency Reference//O//X(20)//182//201////急救参考
|
|
|
tempstr += GetSpaceStr("", 49);//10//Filler//M//X(49)//202//250//Spaces//填料
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
#region 56 危险品//56 01001001//2556//a//4.1 //2 //KGM//008220000//009516000//N
|
|
|
tempstr = "56";//1//RECORD-ID M 9(2) 1//2//56
|
|
|
tempstr += GetSpaceStr("", 1);//2//Filler M X(1) 3//3//Spaces 填料
|
|
|
tempstr += GetSpaceStr("01", 2);//3//DG Sequence No M 9(2) 4//5//01 to 99, to denote multiple DG items in each equipment seq (cntr) DG的序列号
|
|
|
tempstr += GetSpaceStr(ctnline.ToString(), 3, "0");//4//Cargo Sequence No# M 9(3) 6//8//001 to 999 (line-items)//货物没有#序列
|
|
|
tempstr += GetSpaceStr(m.ToString(), 3, "0");//5//Equipment Sequence No M 9(3) 9//11//001 to 999 设备序列号
|
|
|
tempstr += GetSpaceStr(bill.DUNNO, 4);//6//UN Number M X(4) 12//15// 联合国编号
|
|
|
tempstr += GetSpaceStr("", 1);//7//UN Variant M X(1) 16//16// 联合国的变体
|
|
|
tempstr += GetSpaceStr(bill.DCLASS, 4);//8//IMO Class M X(4) 17//20// 国际海事组织类
|
|
|
tempstr += GetSpaceStr("", 3);//9//PSA Class O X(3) 21//23// PSA类
|
|
|
tempstr += "KGM";//10//UOM M X(3) 24//26//Default to METRIC, eg. KGM 计量单位
|
|
|
tempstr += GetSpaceStr(((ctn.KGS - ctn.TAREWEIGHT) * 1000).ToString("0.###"), 9, "0");//11//Net Weight C 9(6)v999 27//35//Weight of DG item 净重量
|
|
|
tempstr += GetSpaceStr((ctn.KGS * 1000).ToString("0.###"), 9, "0");//12//Gross Weight C 9(6)v999 36//44//Weight of DG item 总重量
|
|
|
tempstr += "N";//13//Marine Pollutant M X(1) 45//45//Y or N 海洋污染物
|
|
|
tempstr += GetSpaceStr(bill.DPAGE, 10);//14//IMDG Page O X(10) 46//55// 危规页码
|
|
|
tempstr += GetSpaceStr("", 4);//15//DOT Packaging Group O X(4) 56//59// 点包装集团
|
|
|
tempstr += GetSpaceStr("", 10);//16//Filler M X(10) 60//69//Spaces 填料
|
|
|
tempstr += GetSpaceStr("", 25);//17//Flashpoint O X(25) 70//94// 闪点
|
|
|
tempstr += GetSpaceStr("", 3);//18//Packing Group O X(3) 95//97// 包装组
|
|
|
tempstr += GetSpaceStr(ctn.KINDPKGS_EDI_CODE, 5);//19//Outer Package Code O X(5) 98//102//webCSM Package Code 外包装编码
|
|
|
tempstr += GetSpaceStr(ctn.PKGS.ToString(), 9, "0");//20//Outer Quantity O 9(9) 103//111// 外量
|
|
|
tempstr += GetSpaceStr("", 5);//21//Inner Package Code O X(5) 112//116//webCSM Package Code 内包装代码
|
|
|
tempstr += GetSpaceStr("", 9);//22//Inner Quantity O 9(9) 117//125// 内部变量
|
|
|
tempstr += GetSpaceStr("", 5);//23//Next Inner Package Code O X(5) 126//130//webCSM Package Code 下一个内部包代码
|
|
|
tempstr += GetSpaceStr("", 9);//24//Next Inner Quantity O 9(9) 131//139// 下一个内部变量
|
|
|
tempstr += GetSpaceStr("", 50);//25//Chemical Name O X(50) 140//189// 化学名称
|
|
|
tempstr += GetSpaceStr("", 20);//26//Our Reference O X(20) 190//209// 我们的参考
|
|
|
tempstr += GetSpaceStr("", 21);//28//Filler M X(21) 230//250//Spaces 填料
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
}
|
|
|
ctnline = ctnline + 1;
|
|
|
}
|
|
|
|
|
|
#region 73
|
|
|
/*
|
|
|
2023-04-04 73B行韩工给提供了新的代码,替换原有逻辑
|
|
|
*/
|
|
|
if (InttrEdi.filetype != "E")
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "B";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(bill.ACIHBL))
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "B";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(bill.ACIHBL, 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(bill.S0CC0C))
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "B";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(bill.S0CC0C, 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (InttrEdi.filetype == "E")
|
|
|
{
|
|
|
//2023-02-23 韩工提供新的截单写入集装箱的信息
|
|
|
if(bill.CTNLIST != null && bill.CTNLIST.Count > 0)
|
|
|
{
|
|
|
foreach (var ctndetail in bill.CTNLIST)
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "B";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(ctndetail.CNTRNO, 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//欧盟港口、伊朗港口、KHI
|
|
|
if (!string.IsNullOrWhiteSpace(bill.cKHI))
|
|
|
{
|
|
|
Shipping = bill.cKHI;
|
|
|
List<System.String> ShippingListLs = formatlengthStr(Shipping, 120);
|
|
|
for (var i = 0; i < ShippingListLs.Count; i++)
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "C";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(ShippingListLs[i], 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//南美东
|
|
|
if (!string.IsNullOrWhiteSpace(bill.cNCM))
|
|
|
{
|
|
|
Shipping = bill.cNCM;
|
|
|
List<System.String> ShippingListLs = formatlengthStr(Shipping, 120);
|
|
|
for (var i = 0; i < ShippingListLs.Count; i++)
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "C";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(ShippingListLs[i], 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//巴西线的木质包装情况
|
|
|
if (!string.IsNullOrWhiteSpace(bill.wNCM))
|
|
|
{
|
|
|
Shipping = bill.wNCM;
|
|
|
List<System.String> ShippingListLs = formatlengthStr(Shipping, 120);
|
|
|
for (var i = 0; i < ShippingListLs.Count; i++)
|
|
|
{
|
|
|
tempstr = "73";//1 //RECORD_ID//M//9(2)//1 //2 //73
|
|
|
tempstr += "W";//2 //Remarks_indicator//M//X(1)//3 //3 //O-Onhold, B-Booking, C-Customs, M-Manifest, X-Special, A-Additional, G-General, T-Transhipment, E-EDI //"73B,必填内容:1)SALES REP CODE;2)ACI HBL (1,2,3);加拿大线的HBL3) 货物混装描述 (S0C+C0C)"//分三行
|
|
|
tempstr += GetSpaceStr(ShippingListLs[i], 120);//3 //Remarks Text//O//X(120)//4 //123 //RemarksGetCustEdi(bill.YARD,120)
|
|
|
//4 //Filler//M//X(127)//124 //250 //Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region 74
|
|
|
tempstr = "74";//1//RECORD-ID//M//9(2)//1//2//74//
|
|
|
tempstr += GetSpaceStr("", 3);//2//Filler//O//X(3)//3//5//Spaces//
|
|
|
tempstr += GetSpaceStr(bill.ISSUEPLACEID, 5);//3//Place of BL issue//M//X(5)//6//10//webCSM Port code (Port of BL Issuance)//提单签发地//webcsm港口代码(BL发行端口)
|
|
|
if (string.IsNullOrWhiteSpace(bill.ISSUEDATE))
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 8);//4//Date of BL issue//M//X(8)//11//18//YYYYMMDD//提单签发日期//年月日
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetDateStr(bill.ISSUEDATE, "yyyyMMdd");//4//Date of BL issue//M//X(8)//11//18//YYYYMMDD//提单签发日期//年月日
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 4);//5//Department Code//M//X(4)//19//22//webCSM Department Code (eg SG00) (out from webCSM only)//部门代码//webcsm部门代码(如sg00)(从webcsm只)
|
|
|
tempstr += GetSpaceStr("", 3);//6//Booking Agent Code//M//X(3)//23//25//webCSM Booking Agent Code (eg SIN)//订舱代理代码//webcsm订舱代理代码(如犯罪)
|
|
|
if (bill.ISSUETYPE.ToString().Trim().ToUpper() == "WAYBILL" || bill.ISSUETYPE.ToString().Trim().ToUpper() == "SEAWAY BILL")
|
|
|
{
|
|
|
tempstr += GetSpaceStr("W", 1);//7//BOL Type//M//X(1)//26//26//N-Nominal, G-Negotiable, S-Switch, W-Waybill, M-Memo//公司类型//n-nominal,g-negotiable,S-开关,w-waybill,m-memo
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("N", 1);//7//BOL Type//M//X(1)//26//26//N-Nominal, G-Negotiable, S-Switch, W-Waybill, M-Memo//公司类型//n-nominal,g-negotiable,S-开关,w-waybill,m-memo
|
|
|
}
|
|
|
//tempstr += GetSpaceStr(GetBillNum(bill.NOBILL.ToString().Trim()), 2, "0");//8//No. of Original BLs//O//9(2)//27//28//号原BLS//
|
|
|
//tempstr += GetSpaceStr(GetBillNum(bill.COPYNOBILL.ToString().Trim()), 2, "0");//9//No. of Copy BLs//O//9(2)//29//30//不复制BLS//
|
|
|
tempstr += GetSpaceStr("", 2);//8//No. of Original BLs//O//9(2)//27//28//号原BLS//太平要求去掉
|
|
|
tempstr += GetSpaceStr("", 2);//9//No. of Copy BLs//O//9(2)//29//30//不复制BLS//太平要求去掉
|
|
|
if (bill.BYCOUNTRY == "USA")
|
|
|
{
|
|
|
tempstr += GetSpaceStr(bill.CONTRACTNO, 10);//10//Service Contract #//C//X(10)//31//40//Applicable to US shipments only//"mandtory for US shpts---Service Contract Nbr/TAA Nbr"//美国线的S/C,TAA//服务合同#//只适用于美国装运
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
tempstr += GetSpaceStr("", 10);//10//Service Contract #//C//X(10)//31//40//Applicable to US shipments only//"mandtory for US shpts---Service Contract Nbr/TAA Nbr"//美国线的S/C,TAA//服务合同#//只适用于美国装运
|
|
|
}
|
|
|
tempstr += GetSpaceStr("", 5);//11//Prepaid at (Port code)//M//X(5)//41//45//Ocean Freight Payment Location//预付(港码)//海运付款地点
|
|
|
tempstr += GetSpaceStr("", 5);//12//Payable at (Port Code)//M//X(5)//46//50//1st Collect Charge Payment Location//按(港口代码)支付//第一收取缴费地点
|
|
|
tempstr += GetSpaceStr(bill.PKGS.ToString().Trim(), 8, "0");//13//BL's total No of Packages//O//9(8)//51//58//提单总包数//
|
|
|
tempstr += GetSpaceStr(bill.KINDPKGS_EDI_CODE, 8);//14//BL's Packages_type in total//O//X(8)//59//66//Default as 'PACKAGE'//BL的packages_type总//默认为“包”
|
|
|
|
|
|
|
|
|
tempstr += GetSpaceStr("", 12);//15//Filler//M//X(12)//67//78//Spaces//填料//空间
|
|
|
tempstr += GetSpaceStr("", 1);//16//Roundtrip Indicator//O//X(1)//79//79//Y:Round trip, else leave Blank//往返指示器//往返,否则留下空白
|
|
|
tempstr += GetSpaceStr("", 1);//17//Received for Shipment//O//X(1)//80//80//Y:Received for Shipment, else leave Blank//收到的货物//收到装运,否则留空
|
|
|
tempstr += GetSpaceStr("", 8);//18//Shipped on Board Date//O//X(8)//81//88//YYYYMMDD (SOB Date)//装船日期//YYYYMMDD(SOB日期)
|
|
|
tempstr += GetSpaceStr("", 8);//19//Date of Surrender//O//X(8)//89//96//YYYYMMDD (Surrender Date)//日投降//YYYYMMDD(投降日)
|
|
|
tempstr += GetSpaceStr("", 5);//20//Point of BL Surrender//O//X(5)//97//101//webCSM Port code (Point of BL Surrender)//提单退保点//webcsm港口代码(BL屈服点)
|
|
|
tempstr += GetSpaceStr("", 5);//21//Point of BL Switch//O//X(5)//102//106//webCSM Port code (Point of BL Switch)//BL开关点//webcsm港口代码(BL开关点)
|
|
|
tempstr += GetSpaceStr("", 8);//22//Date of Switch Issuance//O//X(8)//107//114//YYYYMMDD (Switch Issuance Date)//开关签发日期//YYYYMMDD(开关发行日期)
|
|
|
tempstr += GetSpaceStr("", 5);//23//Point of BL Switch Issuance//O//X(5)//115//119//webCSM Port code (Point of BL Switch Issuance)//提单开关点//webcsm港口代码(BL开关发行点)
|
|
|
tempstr += GetSpaceStr("", 5);//24//Final Delivered Point//O//X(5)//120//124//webCSM Port code (Final Released Point of cargo)//最后交付点//webcsm港口代码(最终发布点的货物)
|
|
|
tempstr += GetSpaceStr("", 126);//25//Filler//M//X(126)//125//250//Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
}
|
|
|
|
|
|
#region 99
|
|
|
tempstr = "99";//1 RECORD-ID M 9(2) 1 2 99
|
|
|
tempstr += GetSpaceStr("", 3);//2 Filler M X(3) 3 5 Spaces
|
|
|
tempstr += GetSpaceStr(icount.ToString(), 6, "0");//3 Total No of B/Ls M 9(6) 6 11 Total number of b/ls generated in EDI file
|
|
|
//4 Filler M X(239) 12 250 Spaces
|
|
|
r.WriteLine(GetSpaceStr(tempstr, 250));
|
|
|
#endregion
|
|
|
|
|
|
r.Close();
|
|
|
f.Close();
|
|
|
|
|
|
result.succ = true;
|
|
|
result.extra = filename;
|
|
|
result.extra2 = GetEmailTopic(InttrEdi);
|
|
|
return result;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取邮件主题
|
|
|
/// </summary>
|
|
|
/// <param name="inttrEdi"></param>
|
|
|
/// <returns></returns>
|
|
|
public static string GetEmailTopic(EDIBaseModel inttrEdi)
|
|
|
{
|
|
|
if (inttrEdi.filetype.Equals("B", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
return inttrEdi.BSLIST.FirstOrDefault().VOYNO?.Trim() + " " + inttrEdi.BSLIST.FirstOrDefault().MBLNO?.Trim() + " IBOOKING";
|
|
|
}
|
|
|
else if (inttrEdi.filetype.Equals("E", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
return inttrEdi.BSLIST.FirstOrDefault().MBLNO?.Trim() + " " + "ESI";
|
|
|
}
|
|
|
|
|
|
return string.Empty;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|