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.

1876 lines
82 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using MySqlX.XDevAPI.Common;
using System.Text.RegularExpressions;
namespace Myshipping.Application.EDI.YML
{
public class YMLEdiHelper
{
public YMLEdiHelper()
{
}
#region 基本函数
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 "";
}
public static string GetDateStr(string datestr, string dateformat)
{
var result = "";
if (datestr == null || datestr == "")
{
result = "";
}
else
{
result = Convert.ToDateTime(datestr).ToString(dateformat);
}
return result;
}
#region 判断中文字符
public static bool IsChinese(char c)
{
return (int)c > 0x80;
}
public static bool StringIsChinese(string str)
{
var result = false;
for (int i = 1; i < str.Length; i++)
{
if (IsChinese(str[i]))
{
result = true;
return result;
}
}
for (int i = 0; i < str.Length; i++)
{
string stemp = str.Substring(i, 1);
int ilen = System.Text.Encoding.Default.GetByteCount(stemp);
if (ilen == 2)
{
result = true;
return result;
}
}
return result;
}
#endregion
public static string formatListStr(List<System.String> DestList, int lineCount, bool isformat = false)
{
var result = "";
for (var i = 0; i < lineCount; i++)
{
if (DestList.Count > i)
{
if (isformat)
result = result + formatEdiStr("txt", DestList[i]);
else
result = result + DestList[i];
}
if (i != (lineCount - 1))
result = result + ":";
}
return result;
}
#region 文本字段判断每行是否符合
/// <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 (str == null)
str = string.Empty;
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 IsCreateYMLEDI(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 (string.IsNullOrEmpty(headData.MBLNO))
{ error = error + "<br />主提单号不能为空"; }
if (string.IsNullOrEmpty(headData.BLFRT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 付费方式不能为空"; }
if (string.IsNullOrEmpty(headData.EDIATTN))
{ error = error + "<br />提单号:" + headData.MBLNO + " EDI联系人不能为空"; }
if (string.IsNullOrEmpty(headData.EDIATTNTEL))
{ error = error + "<br />提单号:" + headData.MBLNO + " EDI联系人电话不能为空"; }
if (string.IsNullOrEmpty(headData.EDIATTNEMAIL))
{ error = error + "<br />提单号:" + headData.MBLNO + " EDI联系人邮编不能为空"; }
if (InttrEdi.filetype == "E")
{
if (string.IsNullOrEmpty(headData.VESSELID))
{ error = error + "<br />提单号:" + headData.MBLNO + " 船舶呼号不能为空"; }
if (InttrEdi.filetype != "B" || headData.CARRIEREDICODE == "YML")
{
if (string.IsNullOrEmpty(headData.ETD))
{
error = error + "<br />提单号:" + headData.MBLNO + " 开船日期不能为空";
return error;
}
}
}
if (string.IsNullOrEmpty(headData.PLACERECEIPTID) || headData.PLACERECEIPTID.Length != 5)
{ error = error + "<br />提单号:" + headData.MBLNO + " 收货地代码不能为空或录入不正确(必须是5位代码)"; }
if (string.IsNullOrEmpty(headData.PLACERECEIPT))
{ error = error + "<br />提单号:" + headData.MBLNO + " 收货地不能为空"; }
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.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.PLACEDELIVERY) || headData.PLACEDELIVERYID.Length != 5)
{ error = error + "<br />提单号:" + headData.MBLNO + " 交货地代码不能为空或录入不正确(必须是5位代码)"; }
if (string.IsNullOrEmpty(headData.PLACEDELIVERY))
{ 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 (string.IsNullOrEmpty(headData.CARGOID))
{ error = error + "<br />提单号:" + headData.MBLNO + " 货物标识不能为空"; }
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.ISSUEPLACE == null || headData.ISSUEPLACE == "")
{ error = error + "<br />提单号:" + headData.MBLNO + "签单地点不能为空"; }
if (headData.CARRIEREDICODE == "APL")
if (headData.ISSUETYPE == null || headData.ISSUETYPE == "")
{ error = error + "<br />提单号:" + headData.MBLNO + "签单方式不能为空"; }
if (headData.SERVICE == "" || headData.SERVICE == null)
{ error = error + "<br />提单号:" + headData.MBLNO + "运输条款不能为空"; }
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.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 (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);
}
var ctnlist = headData.CTNLIST;
if (ctnlist.Count == 0) { error = error + "<br />提单号:" + headData.MBLNO + " 集装箱信息不能为空"; };
#region 集装箱判断检查
if (ctnlist.Count != 0)
{
Decimal dlPKGS = 0;
Decimal dlKGS = 0;
Decimal dlCBM = 0;
foreach (var ctn in ctnlist)
{
if (string.IsNullOrEmpty(ctn.CTNALLCODE))
{ error = error + "<br />提单号:" + headData.MBLNO + " 集装箱箱型EDI代码不能为空"; }
if ((ctn.CTNALLCODE.IndexOf("RH") > 0 || ctn.CTNALLCODE.IndexOf("RF") > 0) && (headData.CARGOID != "R"))
{
{ error = error + "<br />提单号:" + headData.MBLNO + " 集装箱箱型为冻柜,货类代码请选择冻柜"; }
}
if (InttrEdi.filetype == "E")
{
if (string.IsNullOrEmpty(ctn.CNTRNO))
{ error = error + "<br />提单号:" + headData.MBLNO + " 箱号不能为空"; }
if (string.IsNullOrEmpty(ctn.SEALNO))
{ 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 (InttrEdi.filetype == "E")
{
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 (InttrEdi.filetype == "E")
{
if (headData.CTNGOODSLIST != null && headData.CTNGOODSLIST.Count > 0)
{
foreach (var ctn in ctnlist)
{
var isfind = false;
Int32 ctngoodssumpkgs = 0;
decimal ctngoodssumkgs = 0;
decimal ctngoodssumcbm = 0;
headData.CTNGOODSLIST.ForEach(i =>
{
if (i.CNTRNO == ctn.CNTRNO)
{
isfind = true;
ctngoodssumpkgs = ctngoodssumpkgs + i.PKGS;
ctngoodssumkgs = ctngoodssumkgs + i.KGS;
ctngoodssumcbm = ctngoodssumcbm + i.CBM;
}
});
if (!isfind)
{
error = error + "<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
}
//2023-03-03 经过测试东胜的EDI根据付费方式区分 到付-需要填到付地点不能填预付地点,预付只能填预付地点不能填到付地点
//跟韩工确认增加判断
if (!string.IsNullOrWhiteSpace(headData.BLFRT) && headData.BLFRT.IndexOf("PREPAID") >= 0)
{
if(string.IsNullOrWhiteSpace(headData.PREPARDAT))
{
error = error + "<br />提单号:" + headData.MBLNO + " 付费方式是预付,预付地点不能为空";
}
if (!string.IsNullOrWhiteSpace(headData.PAYABLEAT))
{
error = error + "<br />提单号:" + headData.MBLNO + " 付费方式是预付,到付地点不能填写";
}
}
else if (!string.IsNullOrWhiteSpace(headData.BLFRT) && headData.BLFRT.IndexOf("COLLECT") >= 0)
{
if (string.IsNullOrWhiteSpace(headData.PAYABLEAT))
{
error = error + "<br />提单号:" + headData.MBLNO + " 付费方式是到付,到付地点不能为空";
}
if (!string.IsNullOrWhiteSpace(headData.PREPARDAT))
{
error = error + "<br />提单号:" + headData.MBLNO + " 付费方式是到付,预付地点不能填写";
}
}
}
return error;
}
#endregion
#region 生成报文(订舱)
public static CommonWebApiResult CreateEdiYML(EDIBaseModel InttrEdi)
{
CommonWebApiResult result = new CommonWebApiResult { succ = false };
var filetype = "IFTMBF";
string filename = InttrEdi.filerpath + "\\" + filetype + "_" + InttrEdi.BSLIST[0].MBLNO + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt";
//如果是部署linux需要修改路径
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
filename = filename.Replace("\\", "/");
//if (System.IO.File.Exists(filename))
//{
// System.IO.File.Delete(filename);
//}
FileStream f = new FileStream(filename, FileMode.Create);
StreamWriter r = new StreamWriter(f, Encoding.Default);
var icount = 0;
var bsno = "";
var isfirst = true;
foreach (var bill in InttrEdi.BSLIST)
{
if (isfirst)
{
r.WriteLine("00:IFTMBF:BOOKING:" + InttrEdi.filerole + ":" + InttrEdi.SENDCODE + ":" + InttrEdi.RECEIVECODE + ":" + DateTime.Now.ToString("yyyyMMddHHmm") + "'");
isfirst = false;
icount++;
}
//2023-03-03 修改运输条款SERVICE改为EDI的映射值经过韩工确认
r.WriteLine("02"
+ ":" + bill.ORDERNO//2 REFERENCE NO. 运编号 X(35) 一般为流水号 M
+ ":" + bill.MBLNO//3 B\L NO. 提单号 X(20) 船公司的提单号 C
+ ":" + bill.SERVICEEDICODE//4 DELIVERY TERM 交货条款 X(9) CY-CY(pier-pier/port):30CY-CFS(pier/port-door):29CFS-CY(door-pier/port):28CFS-CFS(door-door):27 M
+ ":" + InttrEdi.SENDNAME//5 BOOKING PARTY 订舱人说明 X(70) 货代方企业名称或代码 C
+ ":" + InttrEdi.RECEIVECODE//6 ISSUE PARTY CODE 签单人代码 X(13) 即接受订舱的人的代码 M
+ ":"//7 ISSUE PARTY 签单人说明 X(35)   C
+ ":"//8 APPLICANT 询价单位 X(13) 向船公司询价的单位代码 C
+ ":"//9 FOB BK PARTY 国外订舱单位 X(13) 国外FOB货订舱单位的代码 C
+ ":"//10 B/L TRANSHIP ID 转船标识 X(1) Y/N C
+ ":"//11 BATCH ID 分批 X(1) Y/N C
+ ":"//12 SHIPMENT DATE 装期 9(8) CCYYMMDD C
+ ":"//13 EXPIRY DATE 效期 9(8) CCYYMMDD C
+ ":" + bill.CONTRACTNO//14 QUOTATION NO. 运费协议号 X(30) MAERSK为必选 C
+ ":"//15 CHARGE TYPE 费率本代码 X(1)   C
+ "'");
icount++;
var ISSUETYPE = "";
//2023-03-02 测试这里有问题,签单方式用的中文,要改成英文正本-ORIGINAL 电放-TELEX
/*
if (bill.ISSUETYPE == "正本")
{
ISSUETYPE = "ORI";
}
else if (bill.ISSUETYPE == "电放")
{
ISSUETYPE = "TER";
}
else ISSUETYPE = "EXP";
*/
if (bill.ISSUETYPE == "ORIGINAL")
{
ISSUETYPE = "ORI";
}
else if (bill.ISSUETYPE == "TELEX")
{
ISSUETYPE = "TER";
}
else ISSUETYPE = "EXP";
//2023-03-03 测试东胜到付会自动填,新的订舱确认只读取页面写入值,经韩工确认
r.WriteLine("03:" + ISSUETYPE + ":" + bill.ISSUEPLACEID.Trim() + ":" + bill.ISSUEPLACE.Trim() + ":" + GetDateStr(bill.ISSUEDATE, "yyyyMMdd") + ":" + GetBillNum2(bill.NOBILL) + ":" + bill.PREPARDAT + ":" + bill.PAYABLEAT + "'");
icount++;
//2023-03-03 测试东胜这行缺了FTP配置接收人代码经韩工确认加上
//r.WriteLine("11:" + bill.VESSELID + ":" + bill.VESSEL + ":" + bill.VOYNO + ":::::" + GetDateStr(bill.ETD, "yyyyMMdd") + ":::::'");
r.WriteLine("11:" + bill.VESSELID + ":" + bill.VESSEL + ":" + bill.VOYNO + ":::" + InttrEdi.RECEIVECODE + "::" + GetDateStr(bill.ETD, "yyyyMMdd") + ":::::'");
icount++;
var DESTINATIONID = bill.DESTINATIONID;
var DESTINATION = bill.DESTINATION;
r.WriteLine("12"
+ ":" + bill.PLACERECEIPTID//2 PLACE CODE OF RECEIPT 收货地代码 X(5) OOCL、HLC的订舱要求必选 O
+ ":" + bill.PLACERECEIPT//3 PLACE OF RECEIPT 收货地 X(35)   C
+ ":" + bill.PORTLOADID//4 LOAD PORT CODE 装货港代码 X(5) OOCL的订舱要求必选 O
+ ":" + bill.PORTLOAD//5 LOAD PORT 装货港 X(35)   C
+ ":" + bill.PORTDISCHARGEID//6 DISCHARGE PORT CODE 卸货港代码 X(5) OOCL的订舱要求必选 M
+ ":" + bill.PORTDISCHARGE//7 DISCHARGE PORT 卸货港 X(35)   C
+ ":" + bill.TRANSPORTID //8 TRANSFER PORT CODE 中转港代码 X(5)   C
+ ":" + bill.TRANSPORT//9 TRANSFER PORT 中转港 X(35)   C
+ ":" + bill.PLACEDELIVERYID//10 PLACE OF DELIVERY CODE 交货地代码 X(5) OOCL的订舱要求必选 O
+ ":" + bill.PLACEDELIVERY//11 PLACE OF DELIVERY 交货地 X(35)   C
+ ":" + DESTINATIONID//12 FINAL DESTINATION CODE 目的地代码 X(5)   C
+ ":" + DESTINATION//13 FINAL DESTINATION CODE 目的地 X(35)   C
+ "'");
icount = icount + 1;
r.WriteLine("14:" + bill.BLFRTEDICODE + ":" + bill.BLFRT + "'");
if (InttrEdi.filetype == "E")
r.WriteLine("15:::" + bill.BLFRTEDICODE + ":" + bill.PAYABLEATID + ":::::'");
else
r.WriteLine("15:::" + bill.BLFRTEDICODE + "::::::'");
icount = icount + 2;
var Shipping = "";
Shipping = formatEdiStr("txt", bill.EDIREMARK);
List<System.String> ShippingList = formatlengthStr(Shipping, 70);
if (Shipping != "")
{
r.WriteLine("17:" + formatListStr(ShippingList, 5) + "'");
icount++;
}
Shipping = formatEdiStr("txt", bill.SHIPPER);
ShippingList = formatlengthStr(Shipping, 35);
if (ShippingList.Count != 0 && Shipping.Length > 0)
{
if (!string.IsNullOrEmpty(bill.ERNCODE) || !string.IsNullOrEmpty(bill.VAECODE) || !string.IsNullOrEmpty(bill.FECCODE))
{
r.WriteLine("20::" + formatListStr(ShippingList, 9) + ":" + bill.ERNCODE + ":" + bill.VAECODE + ":" + bill.FECCODE + "'");
}
else
r.WriteLine("20::" + formatListStr(ShippingList, 9) + "'");
icount = icount + 1;
}
Shipping = formatEdiStr("txt", bill.CONSIGNEE);
ShippingList = formatlengthStr(Shipping, 35);
if (ShippingList.Count != 0 && Shipping.Length > 0)
{
if (!string.IsNullOrEmpty(bill.TACCODE))
{
r.WriteLine("21::" + formatListStr(ShippingList, 9) + ":" + bill.TACCODE + "'");
}
else
r.WriteLine("21::" + formatListStr(ShippingList, 9) + "'");
icount = icount + 1;
}
Shipping = formatEdiStr("txt", bill.NOTIFYPARTY);
ShippingList = formatlengthStr(Shipping, 35);
if (ShippingList.Count != 0 && Shipping.Length > 0)
{
r.WriteLine("22::" + formatListStr(ShippingList, 6) + "'");
icount = icount + 1;
}
Shipping = formatEdiStr("txt", bill.NOTIFYPARTY2);
ShippingList = formatlengthStr(Shipping, 35);
if (Shipping != "")
{
r.WriteLine("23::" + formatListStr(ShippingList, 6) + "'");
icount = icount + 1;
}
//2023-03-01 跟韩工确认默认有这行 24:
r.WriteLine("24"
+ ":" + bill.EDIATTN// 2 BOOKING ISSUER 訂艙聯絡人 X(60) C
+ ":" + bill.EDIATTNEMAIL//3 EMAIL ADDRESS 訂艙聯絡人e-mail X(80) 若有給e-mail address, 在收到客戶 EDI 後, 系統會發回擲信給該 e-mail 做為確認. C
+ ":" + bill.EDIATTNTEL//4 TEL NO 訂艙聯絡人電話 X(80) C
+ "'");
icount++;
var cargoid = bill.CARGOID;
if (cargoid == "" || cargoid == " ") cargoid = "S";
var kingweight = bill.KINGTAREWEIGHT;
if (kingweight == 0)
kingweight = 100;
r.WriteLine("41:1:" + bill.HSCODE + ":" + cargoid + ":" + bill.PKGS.ToString() + ":" + bill.KINDPKGS_EDI_CODE + ":" + bill.KINDPKGS + ":" + kingweight.ToString("0.###") + ":"
+ bill.CBM.ToString("0.###") + "::::::" + bill.KGS.ToString("0.###") + ":::'");
icount = icount + 1;
if (cargoid == "R")
r.WriteLine("43::::::::::" + bill.REEFERF + ":C:" + bill.TEMPSET + ":" + bill.TEMPMIN + ":" + bill.TEMPMAX + ":::::'");
else if (cargoid == "D")
r.WriteLine("43:" + bill.DCLASS + ":" + bill.DPAGE + ":" + bill.DUNNO + ":" + bill.DLABEL + "::::::::::::'");
icount = icount + 1;
Shipping = formatEdiStr("txt", bill.MARKS);
ShippingList = formatlengthStr(Shipping, 35);
for (var i = 0; i < Math.Ceiling(Convert.ToDecimal(Convert.ToDecimal(ShippingList.Count) / Convert.ToDecimal(10))); i++)
{
var tempstr = "44:";
for (var z = 0; z < 10; z++)
{
if ((i * 10 + z) < ShippingList.Count)
tempstr = tempstr + ShippingList[i * 10 + z];
if (z < 9) tempstr = tempstr + ":";
}
if (tempstr != "44:")
{
r.WriteLine(tempstr + "'");
icount++;
}
}
Shipping = formatEdiStr("txt", bill.DESCRIPTION);
ShippingList = formatlengthStr(Shipping, 70);
var m = 1;
var strtemp = "";
if (ShippingList.Count != 0 && Shipping.Length > 0)
{
for (var i = 0; i < ShippingList.Count; i++)
{
if (ShippingList[i] != "")
{
if (m <= 5)
{
if (m == 1) strtemp = "47:" + ShippingList[i] + ":";
else
{
if (m == 5)
strtemp = strtemp + ShippingList[i];
else
strtemp = strtemp + ShippingList[i] + ":";
}
}
else
{
m = 1;
r.WriteLine(strtemp + "'");
strtemp = "47:" + ShippingList[i] + ":";
icount = icount + 1;
}
m = m + 1;
}
}
}
if (strtemp != "")
{
r.WriteLine(strtemp + "'");
icount = icount + 1;
}
var ISSOC = "N";
if (bill.ISCONTAINERSOC) ISSOC = "Y";
var ctnsumlist = new List<MsOpSeaeCtnEDIBaseModel>();
foreach (var ctn in bill.CTNLIST)
{
var newctnsum = ctnsumlist.Find(x => x.CTNALLCODE == ctn.CTNALLCODE);
if (newctnsum == null)
{
var ctnsum = new MsOpSeaeCtnEDIBaseModel();
ctnsum.CTNALLCODE = ctn.CTNALLCODE;
ctnsum.CTNNUM = ctn.CTNNUM;
if (bill.ISCONTAINERSOC && !string.IsNullOrEmpty(ctn.CNTRNO))
{
if (!string.IsNullOrEmpty(ctnsum.CNTRNO))
{
ctnsum.CNTRNO = ctn.CNTRNO;
}
else
{
ctnsum.CNTRNO = ctnsum.CNTRNO + "," + ctn.CNTRNO;
}
}
ctnsumlist.Add(ctnsum);
}
else
{
newctnsum.CTNNUM = newctnsum.CTNNUM + ctn.CTNNUM;
if (bill.ISCONTAINERSOC && !string.IsNullOrEmpty(ctn.CNTRNO))
{
if (!string.IsNullOrEmpty(newctnsum.CNTRNO))
{
newctnsum.CNTRNO = ctn.CNTRNO;
}
else
{
newctnsum.CNTRNO = newctnsum.CNTRNO + "," + ctn.CNTRNO;
}
}
}
}
foreach (var ctnsum in ctnsumlist)
{
if (InttrEdi.filetype == "E")
{
r.WriteLine("48:" + ctnsum.CTNALLCODE + ":" + ctnsum.CTNNUM + ":F:::::" + ISSOC + "'");
icount = icount + 1;
}
else
{
var cntrnostr = "";
var isrstr = "N";
if (cargoid == "R") isrstr = "Y";
r.WriteLine("48:" + ctnsum.CTNALLCODE + ":" + ctnsum.CTNNUM + ":F:::::" + ISSOC + ":" + cntrnostr + ":::" + isrstr + "'");
icount = icount + 1;
}
}
}
icount = icount + 1;
r.WriteLine("99:" + icount.ToString() + "'");
r.Close();
f.Close();
result.succ = true;
result.extra = filename;
return result;
}
#endregion
#region 生成报文(确认)
public static CommonWebApiResult CreateEdiYMLSI(EDIBaseModel InttrEdi)
{
CommonWebApiResult result = new CommonWebApiResult { succ = false };
string filename = InttrEdi.filerpath + "\\" + InttrEdi.BSLIST[0].MBLNO + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt";
//如果是部署linux需要修改路径
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
filename = filename.Replace("\\", "/");
//if (System.IO.File.Exists(filename))
//{
// System.IO.File.Delete(filename);
//}
FileStream f = new FileStream(filename, FileMode.Create);
StreamWriter r = new StreamWriter(f, Encoding.Default);
var icount = 0;
var bsno = "";
foreach (var bill in InttrEdi.BSLIST)
{
bsno = bill.ORDERNO;
r.WriteLine("UNB+UNOA:1+" + InttrEdi.SENDCODE + ":ZZZ+" + InttrEdi.RECEIVECODE + ":ZZZ+" + DateTime.Now.ToString("yyMMdd:HHmm") + "+" + bill.ORDERNO + "'");
r.WriteLine("UNH+" + bill.ORDERNO + "+IFTMIN:D:99B:UN'");
var BGMSTR = "";
//2023 - 03 - 02 测试这里有问题,签单方式用的中文,要改成英文正本 - ORIGINAL 电放 - TELEX
/*
if (bill.ISSUETYPE == "正本")
{
BGMSTR = "705";
}
else
{
BGMSTR = "712";
}
*/
if (bill.ISSUETYPE == "ORIGINAL")
{
BGMSTR = "705";
}
else
{
BGMSTR = "712";
}
if (InttrEdi.filerole == "9")
r.WriteLine("BGM+" + BGMSTR + "+" + bill.MBLNO + "+9'");
else
r.WriteLine("BGM+" + BGMSTR + "+" + bill.MBLNO + "+5'");
if (bill.SERVICE.ToUpper() == "DOOR-DOOR")
{
r.WriteLine("TSR+27+2'");
}
else if (bill.SERVICE.ToUpper() == "DOOR-CY")
{
r.WriteLine("TSR+28+2'");
}
else if (bill.SERVICE.ToUpper() == "CY-DOOR")
{
r.WriteLine("TSR+29+2'");
}
else
{
r.WriteLine("TSR+30+2'");
}
var str_pay = "";
if (bill.BLFRT.IndexOf("PREPAID") >= 0)
str_pay = bill.PREPARDAT;
if (bill.BLFRT.IndexOf("COLLECT") >= 0)
str_pay = bill.PAYABLEAT;
//r.WriteLine("FTX+AAI+++" + bill.BLFRT + " Payable at " + str_pay + " " + bill.SERVICE + " "
// + bill.PKGS.ToString() + bill.KINDPKGS + "'");
icount = icount + 4;
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;
}
}
if (bill.BYCOUNTRY == "USA")
{
if (bill.SCACCODE != "")
r.WriteLine("FTX+CCI++MFS+1:US:" + bill.SCACCODE + "'");
else
r.WriteLine("FTX+CCI++MFS+5:US'");
icount = icount + 1;
}
else if (bill.BYCOUNTRY == "CANADA")
{
if (bill.SCACCODE != "")
r.WriteLine("FTX+CCI++MFS+1:CA:" + bill.SCACCODE + "'");
else
r.WriteLine("FTX+CCI++MFS+5:CA'");
icount = icount + 1;
}
r.WriteLine("CNT+7:" + Math.Round(Convert.ToDecimal(bill.KGS), 3) + ":KGM'");
r.WriteLine("CNT+11:" + bill.PKGS.ToString() + "'");
r.WriteLine("CNT+15:" + Math.Round(Convert.ToDecimal(bill.CBM), 3) + ":MTQ'");
icount = icount + 3;
if (bill.CARRIEREDICODE == "UASC")
{
if (bill.CTNLIST.Count > 0)
{
var ctnnum = 0;
foreach (var ctn in bill.CTNLIST)
{
ctnnum = ctnnum + ctn.CTNNUM;
}
r.WriteLine("CNT+16:" + ctnnum.ToString() + "'");
icount = icount + 1;
}
}
if (bill.BLFRT == "FREIGHT COLLECT")
{
if (bill.PAYABLEAT != "")
{
r.WriteLine("LOC+57+" + bill.PREPARDATID + "::6:" + bill.PAYABLEAT + "'");
icount = icount + 1;
}
}
else
{
r.WriteLine("LOC+57+" + bill.PREPARDATID + "::6:" + bill.PREPARDAT + "'");
icount = icount + 1;
}
r.WriteLine("LOC+73+" + bill.ISSUEPLACEID + "::6:" + bill.ISSUEPLACE + "'");
icount = icount + 1;
r.WriteLine("RFF+BN:" + bill.MBLNO + "'");
icount = icount + 1;
r.WriteLine("RFF+BM:" + bill.MBLNO + "'");
r.WriteLine("RFF+CT:" + bill.CONTRACTNO + "'");
icount = icount + 2;
if (bill.CARRIEREDICODE == "UASC")
{
r.WriteLine("RFF+SI:" + bill.ORDERNO + "'");
icount = icount + 1;
}
if (bill.BYCOUNTRY == "USA")
{
r.WriteLine("REF+TN:" + bill.ITNCODE + "'");
icount = icount + 1;
}
if (bill.BLFRT.IndexOf("PREPAID") >= 0)
r.WriteLine("CPI+4++P'");
else if (bill.BLFRT.IndexOf("COLLECT") >= 0)
r.WriteLine("CPI+4++C'");
else
r.WriteLine("CPI+4++B'");
icount = icount + 1;
var voyno = "";
if (bill.VOYNO.IndexOf(".") >= 0)
{
voyno = bill.VOYNO.Substring(bill.VOYNO.IndexOf(".") + 1, bill.VOYNO.Length - bill.VOYNO.IndexOf(".") - 1);
}
else
{
voyno = bill.VOYNO;
}
r.WriteLine("TDT+20+" + voyno + "+1++" + bill.CARRIEREDICODE + "+++:::" + bill.VESSEL + "'");
r.WriteLine("LOC+9+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'");
r.WriteLine("LOC+88+" + bill.PORTLOADID + ":139:6:" + bill.PORTLOAD + "'");
r.WriteLine("LOC+11+" + bill.PORTDISCHARGEID + ":139:6:" + bill.PORTDISCHARGE + "'");
icount = icount + 4;
if (bill.DESTINATION != "")
{
r.WriteLine("LOC+7+" + bill.DESTINATIONID + ":139:6:" + bill.DESTINATION + "'");
icount = icount + 1;
}
var DescriptionShipper = "";
Shipping = formatEdiStr("txt", bill.SHIPPER);
List<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;
if (bill.WEITUO != "")
{
if (bill.WEITUO.Length > 35)
r.WriteLine("NAD+FW+++" + formatEdiStr("txt", bill.WEITUO.Substring(0, 35)) + "+" + formatEdiStr("txt", bill.WEITUO.Substring(35)) + "'");
else
r.WriteLine("NAD+FW+++" + formatEdiStr("txt", bill.WEITUO) + "'");
}
else
{
if (InttrEdi.UseForWarderCode)
{
r.WriteLine("NAD+FW+" + InttrEdi.ForWarderCode + ":160:86++" + InttrEdi.ForWarderName + "'");
icount++;
}
else
{
if (InttrEdi.SENDNAME.Length > 35)
r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME.Substring(0, 35) + "+" + InttrEdi.SENDNAME.Substring(35) + "'");
else
r.WriteLine("NAD+FW+" + InttrEdi.SENDCODE + ":160:86++" + InttrEdi.SENDNAME + "'");
}
}
icount++;
Shipping = formatEdiStr("txt", bill.NOTIFYPARTY);
ShippingList = formatlengthStr(Shipping, 35);
var DescriptionNotifyparty = "";
if (ShippingList.Count != 0 && Shipping.Length > 0)
{
for (var i = 0; i < ShippingList.Count; i++)
{
if (i == 0) Shipping = "NAD+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;
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 + "'");
}
r.WriteLine("NAD+CA+YMLU:160:86++YML'");
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+:" + bill.EDIATTN + "'");
r.WriteLine("COM+" + bill.EDIATTNTEL + ":TE'");
r.WriteLine("COM+" + bill.EDIATTNEMAIL + ":EM'");
icount = icount + 5;
var copynum = GetBillNum(bill.COPYNOBILL);
//2023-03-02 测试这里有问题,签单方式用的中文,要改成英文正本-ORIGINAL 电放-TELEX
if (bill.ISSUETYPE == "ORIGINAL")
{
r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'");
icount = icount + 1;
if (copynum != "")
{
r.WriteLine("DOC+707+++" + copynum + "'");
icount = icount + 1;
}
}
else if (bill.ISSUETYPE == "海运单" || bill.ISSUETYPE.ToUpper() == "SEAWAY" || bill.ISSUETYPE.ToUpper() == "SEAWAY BILL" || bill.ISSUETYPE.ToUpper() == "WAYBILL" || bill.ISSUETYPE.ToUpper() == "SWB正本" || bill.ISSUETYPE.ToUpper() == "SWB无正本")
{
r.WriteLine("DOC+710+++" + GetBillNum(bill.NOBILL) + "'");
icount = icount + 1;
}
else if (bill.ISSUETYPE.ToUpper() == "BILL COPY" || bill.ISSUETYPE == "TELEX")
{
r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'");
icount = icount + 1;
if (copynum != "")
{
r.WriteLine("DOC+707+++" + copynum + "'");
icount = icount + 1;
}
}
else if (bill.ISSUETYPE == "正副本")
{
r.WriteLine("DOC+706+++" + GetBillNum(bill.NOBILL) + "'");
icount = icount + 1;
if (copynum != "")
{
r.WriteLine("DOC+707+++" + copynum + "'");
icount = icount + 1;
}
}
else if (bill.ISSUETYPE.ToUpper() == "HOUSE BILL")
{
r.WriteLine("DOC+714+++" + GetBillNum(bill.NOBILL) + "'");
icount = icount + 1;
}
//判断集装箱是否包含分箱明细
if (bill.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();
result.succ = true;
result.extra = filename;
return result;
}
#endregion
}
}