.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 }}