.net EDI 报文生成

来源:互联网 发布:室内装饰效果图软件 编辑:程序博客网 时间:2024/06/05 16:58
 
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Text.RegularExpressions;namespace EDIService.Import.Helper.EdiCenterFactory{    /// <summary>    ///  EDI报文发送至指定目录    /// </summary>    public class EdiSendExecute : IEdiSendExecute    {        #region SendEdi        /// <summary>        ///  发送EDI报文文件至指定目录        /// </summary>        /// <returns></returns>        public bool SendEdi(DataSet data)        {            try            {                //循环创建EDI报文                for (int i = 0; i < data.Tables[0].Rows.Count; i++)                {                    this.EdiFile(data.Tables[0].Rows[i],i);                }                return true;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region EdiFile        /// <summary>        ///  EDI报文头        /// </summary>        /// <returns></returns>        public bool EdiFile(DataRow row,int i)        {            try            {                //拼文件名                  string time = DateTime.Now.ToString("yyyyMMddHHmmss");  //时间string                 Random dm = new Random(i);                int random = dm.Next(100000, 999999);    //6位随机数                 
              //判断目录是否存在,若不存在,则创建                if (!Directory.Exists(ConfigurationManager.filePath)) {                    Directory.CreateDirectory(ConfigurationManager.filePath);                }
                //要求的文件名命名规则                string filename = ConfigurationManager.filePath + "\\" + ConfigurationManager.senderCode + ConfigurationManager.messageType + time + random + ".txt";                FileInfo fi = new FileInfo(filename);                StreamWriter sw = fi.CreateText();                //报文头                 string edihead = this.EdiHead();               sw.WriteLine(edihead.ToString());  //一行写一次
                //报文体                StringBuilder edibody = new StringBuilder("10");   //记录类型标识                edibody.Append(":").Append(row["vesselcode"].ToString().Trim());                  edibody.Append(":").Append(row["vesselname"].ToString().Trim());                                 if (Regex.IsMatch(row["importvoyage"].ToString().Trim(), @".*\[.*\/.*\].*"))                {                    string voyage = row["importvoyage"].ToString().Trim();                    int index1 = voyage.IndexOf('[');                    int index2 = voyage.IndexOf('/');                    int index3 = voyage.IndexOf(']');                    string inv = "";                    string outv = "";                    if (index1 == (index2 - 1)){                        inv = voyage.Substring(index1 + 1, index2 - index1 - 1);                    }                    if (index2 == (index3 - 1)) {                        outv = voyage.Substring(index2 + 1, index3 - index2 - 1);                    }                    edibody.Append(":").Append(inv);                       edibody.Append(":").Append(outv);                                    }                else {                    edibody.Append(":");                    edibody.Append(":");                 }              edibody.Append(":").Append(row["vesselnettonnage"].ToString().Trim());                  edibody.Append(":").Append(row["cntquantity"].ToString().Trim());                   edibody.Append(":").Append(row["nationalitycode"].ToString().Trim());                  edibody.Append(":").Append(row["linerid"].ToString().Trim());                  edibody.Append(":").Append(row["nationalitycode"].ToString().Trim());                   edibody.Append(":").Append(row["carriercode"].ToString().Trim());                  edibody.Append(":").Append(row["carrier"].ToString().Trim());                 edibody.Append(":").Append(row["vesselagentcode"].ToString().Trim());                edibody.Append(":").Append(row["vesselagentname"].ToString().Trim());                edibody.Append(":").Append(row["precallingportcod"].ToString().Trim());                  edibody.Append(":").Append(row["callingportcode"].ToString().Trim());                  edibody.Append(":").Append(row["callingportname"].ToString().Trim());                  edibody.Append(":").Append(row["nextcallingportcode"].ToString().Trim());                 if (!row["arrivaltime"].ToString().Equals("")) {                    DateTime arrivaltime = Convert.ToDateTime(row["arrivaltime"]);                    edibody.Append(":").Append(arrivaltime.ToString("yyyyMMddHHmm"));                }                if (!row["sailingtime"].ToString().Equals(""))                {                    DateTime sailingtime = Convert.ToDateTime(row["sailingtime"]);                    edibody.Append(":").Append(sailingtime.ToString("yyyyMMddHHmm"));                 }                edibody.Append("'");                sw.WriteLine(edibody.ToString());                //报文尾                string edifoot = this.EdiFoot(3);                sw.WriteLine(edifoot.ToString());                sw.Flush();                sw.Close();                return true;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region EdiHead        /// <summary>        ///  EDI报文头        /// </summary>        /// <returns></returns>        public string EdiHead()        {            try            {                //00:文件类型:文件说明 文件功能 发送方代码 接收方代码 文件建立时间 备注                StringBuilder head = new StringBuilder("00");                head.Append(":").Append(ConfigurationManager.messageType);  //文件类型                head.Append(":");   //文件说明                head.Append(":").Append(9);  //文件功能 9 原始  2增加 3删除                head.Append(":").Append(ConfigurationManager.senderCode);  //发送方代码                head.Append(":").Append(ConfigurationManager.receiverCode);  //接收方代码                head.Append(":").Append(DateTime.Now.ToString("yyyyMMddHHMMSS")); //文件建立时间                head.Append(":");   //备注(暂时放空)                head.Append("'");                return head.ToString();            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region EdiFoot        /// <summary>        ///  EDI报文尾        /// </summary>        /// <returns></returns>        public string EdiFoot(int count)        {            try            {                // 99:[总记录数,包括报文头,报文尾]                 StringBuilder foot = new StringBuilder("99");                foot.Append(":").Append(3).Append("'");                return foot.ToString();            }            catch (Exception ex)            {                throw ex;            }        }        #endregion    }}

原创粉丝点击