using System; using System.Collections.Generic; using System.Linq; using System.Web; using DSWeb.Areas.MvcShipping.Models.Message.VGM; using DSWeb.MvcShipping.Models.MsOpSeae; using DSWeb.MvcShipping.DAL.MsOpSeaeDAL; using System.Text; using System.IO; using System.Xml; using System.Xml.Linq; using Microsoft.Practices.EnterpriseLibrary.Data; using System.Data; using System.Net; using System.Security.Cryptography; using Newtonsoft.Json; using DSWeb.MvcShipping.Models.FtpSet; using System.Net.Mail; using System.Net.Mime; using DSWeb.MvcShipping.DAL.MsSysParamSet; using HcUtility.Comm; using DSWeb.MvcShipping.DAL.DsSendmail; using DSWeb.EntityDA; using DSWeb.Common.DB; using DSWeb.MvcShipping.DAL.MsOpSeaeEdiDAL; namespace DSWeb.Areas.MvcShipping.DAL.Message.vgm { public class vgmDAL { /// /// 公司EDICODE /// private static string _COMEDICODE; /// /// 船公司EDICODE /// private static string _CGSEDICODE; /// /// 报文本地验证信息 /// private static string _VALIDMESSAGE=""; //vgm联系人(系统用户代码) private static string _VGMLIANXIREN = ""; //vgm联系人电话 private static string _VGMLIANXIRENTEL = ""; //vgm联系单位 private static string _VGMLIANXIDANWEI = ""; public static string writeAndSendVgmXml ( string bsno, string uid, string type, string path,string carrierid, out string filepath,string mblno ) { try { GetUserCodeNameAndTELAndCom(uid); string xmlstr = getEdiXML(bsno, uid, type); xmlstr = xmlstr.Replace("&", "&"); if (xmlstr == "Failed") { filepath = ""; return _VALIDMESSAGE; } string rst = SendFile(xmlstr, path, out filepath); //string mailTitle = "申请发送VGM-主提单号:"+mblno+" "+ carrierid; string mailTitle = "VGM发送-主提单号:" + mblno + " " + carrierid; string mailBody = GetMailBodyWithUidAndMBLNO(uid,mblno); SendMailWithXMLFile(mailTitle,mailBody,filepath); return rst; } catch (Exception ex) { filepath = ""; return ex.Message; throw; } } public static bool WriteFile ( string mblno, string uid, string type, string path, out string filepath ,out string message) { try { GetUserCodeNameAndTELAndCom(uid); string xmlstr = getEdiXML(mblno, uid, type); if (xmlstr=="Failed") { filepath = ""; message = _VALIDMESSAGE; return false; } xmlstr = xmlstr.Replace("&", "&"); System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数 Write(path + timeStamp.ToString()+".xml", xmlstr); filepath = timeStamp.ToString() + ".xml"; message = "OK"; return true; } catch (Exception) { filepath = ""; message = "数据操作异常"; return false; throw; } } public static void Write (string filename,string stream) { FileStream fs = new FileStream(filename, FileMode.Create); //获得字节数组 byte[] data = System.Text.Encoding.Default.GetBytes(stream); //开始写入 fs.Write(data, 0, data.Length); //清空缓冲区、关闭流 fs.Flush(); fs.Close(); } public static string getEdiXML ( string bsno,string uid ,string type) { edi e = getEdi(bsno,uid,type); string checkRst = CheckXMLModelValid(e); if (checkRst != "") { _VALIDMESSAGE = "报文生成失败!
原因:
" + checkRst ; return "Failed"; } StringBuilder sb = new StringBuilder(); sb.Append(""); sb.Append(""); #region head sb.Append(""); sb.Append(""+e.head.sndcom+""); sb.Append(""+e.head.sender+""); sb.Append("" + e.head.fromop + ""); sb.Append("" + e.head.fromtele + ""); sb.Append("" + e.head.fromfax + ""); sb.Append("" + e.head.frommail + ""); sb.Append("" + e.head.fromopc + ""); sb.Append("" + e.head.fromope + ""); sb.Append("" + e.head.accom + ""); sb.Append(""); sb.Append(""); sb.Append("" + e.head.sendtime + ""); sb.Append("" + e.head.editype + ""); sb.Append("" + e.head.EdiID + ""); sb.Append("" + e.head.EdiName + ""); sb.Append("" + e.head.EdiMode + ""); sb.Append("" + e.head.EdiReceiver + ""); sb.Append(""+e.head.EdiSender+""); sb.Append(""); #endregion #region Forward sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); if (type == "5") { sb.Append("5"); } else { sb.Append(""); } sb.Append(""); #endregion #region reference sb.Append(""); sb.Append("" + e.reference.blfreight + "");//! sb.Append("" + e.reference.refid + ""); sb.Append("" + e.reference.freid + ""); sb.Append("" + e.reference.referenceno + ""); sb.Append(""); sb.Append("" + e.reference.workno + ""); sb.Append("gu"); sb.Append("" +e.reference.billofladingno + ""); sb.Append(""); #endregion #region detail sb.Append(""); //baseinfo sb.Append(""); sb.Append(""+e.detail.baseinfo.orderman+""); sb.Append("" + e.detail.baseinfo.source + ""); sb.Append("" + e.detail.baseinfo.usdaccountshipper + ""); sb.Append(""); sb.Append("" + e.detail.baseinfo.rmbaccountshipper + ""); sb.Append("" + e.detail.baseinfo.paymenttermcode + ""); sb.Append("" + e.detail.baseinfo.paymentterm + ""); sb.Append(""); sb.Append("" + e.detail.baseinfo.shippingitem + ""); sb.Append("" + e.detail.baseinfo.billofladingtype + ""); sb.Append(""); sb.Append(textRef(e.detail.baseinfo.shipper)); sb.Append(""); sb.Append(""); sb.Append(textRef(e.detail.baseinfo.consignee)); sb.Append(""); sb.Append(""); sb.Append(textRef(e.detail.baseinfo.notifyparty)); sb.Append(""); sb.Append(""); sb.Append(textRef(e.detail.baseinfo.notifyparty2)); sb.Append(""); sb.Append(""); sb.Append("" + e.detail.baseinfo.numberoforiginals + ""); sb.Append("" + e.detail.baseinfo.numberofcopys + ""); sb.Append("" + e.detail.baseinfo.placeofissuecode + ""); sb.Append("" + e.detail.baseinfo.placeofissue + ""); sb.Append(""); sb.Append(""); //cargo sb.Append(""); sb.Append(""); sb.Append("" + e.detail.cargo.BOKKINGPARTY + ""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append("" + e.detail.cargo.QUOTATIONNO + ""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //booking sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //freight sb.Append(""); sb.Append("" + e.detail.freight.fl + ""); sb.Append(""); sb.Append("" + e.detail.freight.requestdate + ""); sb.Append(""); sb.Append(""); //port sb.Append(""); sb.Append(""); sb.Append("" + e.detail.freight.port.portofloading + ""); sb.Append("" + e.detail.freight.port.portoftranship + ""); sb.Append("" + e.detail.freight.port.portofdischarge + ""); sb.Append("" + e.detail.freight.port.placeofdelivery + ""); sb.Append(""); sb.Append(""); sb.Append("" + e.detail.freight.port.co_portofloading + ""); sb.Append(""); sb.Append("" + e.detail.freight.port.co_portofdischarge + ""); sb.Append("" + e.detail.freight.port.co_placeofdelivery + ""); sb.Append(""); sb.Append(""); //vessel sb.Append(""); sb.Append("" + e.detail.freight.vessel.carrier + ""); sb.Append("" + e.detail.freight.vessel.oceanvessel.Trim() + ""); sb.Append("" + e.detail.freight.vessel.voyno + ""); sb.Append("" + e.detail.freight.vessel.etd + ""); sb.Append("" + e.detail.freight.vessel.deliverymode + ""); sb.Append(""); //info2nd sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //container sb.Append(""); foreach (var c in e.detail.freight.container.containers) { sb.Append(""); sb.Append(""+c.containertype+""); sb.Append("" + c.containerno + ""); sb.Append("" + c.sealno + ""); sb.Append("" + c.containernoofpkgs + ""); sb.Append("" + c.containergrossweight + ""); sb.Append("" + c.containercbm + ""); sb.Append("" + c.containerpackagingcode + ""); sb.Append("" + c.containerpackaging + ""); sb.Append(""); sb.Append(textRef(c.containerdescription)); sb.Append(""); sb.Append(""); sb.Append("" + c.vgmgrossmassweight + ""); sb.Append("" + (c.vgmweighingmethod=="总重"?"SM1":"SM2") + ""); sb.Append("" + c.vgmweighingtime + ""); sb.Append("" + c.vgmresponsibleparty + ""); sb.Append("" + c.vgmauthorizedperson + ""); sb.Append(""+c.vgmauthorizedpersontele+""); sb.Append("" + c.vgmauthorizedpersonmail + ""); sb.Append(""+c.vgmremark+""); sb.Append(""); } sb.Append(""); sb.Append(""); //goods sb.Append(""); sb.Append(""); sb.Append(textRef(e.detail.goods.marksandnumbers)); sb.Append(""); sb.Append("" + e.detail.goods.noofpkgs + ""); sb.Append("" + e.detail.goods.packagingcode + ""); sb.Append("" + e.detail.goods.packaging + ""); sb.Append("" + e.detail.goods.cargoid + ""); sb.Append(""); sb.Append(""); sb.Append(textRef(e.detail.goods.description)); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append("" + e.detail.goods.grossweight + ""); sb.Append("" + e.detail.goods.cbm + ""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //dr sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //loadplan sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); sb.Append(""); //announce sb.Append(""); sb.Append(""); sb.Append(""); //remarks sb.Append(""); sb.Append(""); #endregion sb.Append(""); return sb.ToString(); } public static edi getEdi (string bsno,string uid,string type) { //公司代码 string comCodeName = ""; MsOpSeae s = MsOpSeaeDAL.GetData("B.BSNO = '" + bsno + "'"); List sd = MsOpSeaeDAL.GetBodyList("bsno ='"+s.BSNO+"'"); head hdata = getHeadData(uid); _CGSEDICODE = getCtnEdiCodeWithCARRIER(s.CARRIER); hdata.accom = _CGSEDICODE; hdata.EdiReceiver = _CGSEDICODE; edi e = new edi(); e.head = hdata; Forward eforward = new Forward(); e.Forward = eforward; reference r = new reference(); r.blfreight = type;//参数传9新增5修改1取消 r.refid = "";//客户端托单id * r.freid = "";//操作系统托单id * r.referenceno = "";//托运编号 * r.bookingno = "";//订舱编号 * r.workno = s.CUSTNO;//委托编号 r.sale = "";//销售员* r.billofladingno = s.MBLNO;//提单号 e.reference = r; detail d = new detail(); baseinfo bi = new baseinfo(); bi.orderman = s.FORWARDER==""?comCodeName:s.FORWARDER;//订舱代理 bi.source = s.BSSOURCE; bi.usdaccountshipper = "";//结算货主usd* bi.customshipper = "";//报关货主* bi.rmbaccountshipper = "";//结算货主rmb* bi.paymenttermcode = "";//付费方式PCE bi.paymentterm = "";//付费方式 bi.payableat = "";//第三地付款地点 bi.shippingitem = s.SERVICE;//运费条款 bi.billofladingtype = "";//提单类型? //提单货主 bi.shipper = s.SHIPPER; //收货人 bi.consignee = s.CONSIGNEE; //通知人 bi.notifyparty = s.NOTIFYPARTY; //第二通知人 bi.notifyparty2 = ""; //订舱说明 bi.ordermemo = "";//订舱说明* bi.numberoforiginals = "";//提单正本数 bi.numberofcopys = "";//提单副本数 bi.placeofissuecode = "";//签单地代码 bi.placeofissue = "";//签单地 bi.timeofissue = "";//签单时间 d.baseinfo = bi; cargo cargo = new cargo(); d.cargo = cargo; booking booking = new booking(); d.booking = booking; freight f = new freight(); f.fl = ""; f.masterlclno = s.MBLNO; f.requestdate = ""; f.lastdate = ""; f.arrivedate = ""; port port = new port(); port.placeofreceipt = s.PLACERECEIPT; port.portofloading = s.PORTLOAD; port.portoftranship = "";//中转港 port.portofdischarge = s.PORTDISCHARGE; port.placeofdelivery = s.PLACEDELIVERY; port.finaldestination = s.DESTINATION;//最终目的地 port.co_placeofreceipt = s.PLACERECEIPTID; port.co_portofloading = s.PORTLOADID; port.co_portoftranship = "";//中转港 port.co_portofdischarge = s.PORTDISCHARGEID; port.co_placeofdelivery = s.PLACEDELIVERYID; port.co_finaldestination = s.DESTINATIONID;//最终目的地 f.port = port; vessel vessel = new vessel(); vessel.carrier = _CGSEDICODE; vessel.oceanvessel = s.VESSEL; vessel.voyno = s.VOYNO; vessel.etd = s.ETD; vessel.deliverymode = "";//运输方式 f.vessel = vessel; info2nd i2 = new info2nd(); i2.carrier = ""; i2.oceanvessel = ""; i2.voyno = ""; i2.etd = ""; i2.deliverymode = ""; i2.remarks = ""; f.info2nd = i2; container container = new container(); List listc = new List(); foreach (var item in sd) { containers cont = new containers(); cont.containertype = getCtnEdiCodeWithCtn(item.CTNALL); cont.containerno = item.CNTRNO; cont.sealno = item.SEALNO; cont.containernoofpkgs = item.PKGS.ToString(); cont.containergrossweight = item.KGS.ToString(); cont.containercbm = item.CBM.ToString(); cont.containerpackagingcode = getPackingCodeWithKINDPKGS(item.KINDPKGS); cont.containerpackaging = item.KINDPKGS; cont.containerdescription = ""; cont.containermarksandnumbers = ""; cont.vgmgrossmassweight = item.WEIGHKGS.ToString(); //称重方式 cont.vgmweighingmethod = item.WEIGHTYPE==""?"累加":item.WEIGHTYPE; if (item.WEIGHDATE == "") { //称重时间 etd前三天 string datetemp = ""; try { DateTime dtemp = DateTime.Parse(s.ETD); datetemp = dtemp.AddDays(-3).ToString("yyyy-MM-dd HH:mm:ss"); } catch (Exception) { } cont.vgmweighingtime = datetemp; } else { cont.vgmweighingtime =Convert.ToDateTime(item.WEIGHDATE).ToString("yyyy-MM-dd HH:mm:ss"); } cont.vgmresponsibleparty = _VGMLIANXIDANWEI; cont.vgmauthorizedperson = _VGMLIANXIREN; cont.vgmauthorizedpersontele = _VGMLIANXIRENTEL; cont.vgmauthorizedpersonmail = ""; cont.vgmremark = item.REMARK; listc.Add(cont); } container.containers = listc; f.container = container; d.freight = f; goods g = new goods(); g.marksandnumbers = s.MARKS; g.noofpkgs = s.NOPKGS; g.packagingcode = s.KINDPKGS; g.packaging = s.KINDPKGS; g.cargoid = s.CARGOID; g.hscode = s.HSCODE; g.description = s.DESCRIPTION; g.cdescription = ""; g.grossweight = s.GROSSWEIGHT; g.cbm = s.CBM.ToString(); g.specialgoods = ""; d.goods = g; dr dr = new dr(); dr.CLASS = s.DCLASS; dr.PAGE = s.DPAGE; dr.UNDGNO = s.DUNNO; dr.TECNAME = ""; dr.PACKGROUP = ""; dr.LABEL = s.DLABEL; dr.FLASHPOINT = ""; dr.FLASHUNIT = ""; dr.EMSNO = ""; dr.MFAGNO = ""; dr.MPT = ""; dr.Elinkman = ""; dr.DANGEROUS = ""; dr.TEMPERATURE = ""; dr.MINTEMPERATURE = ""; dr.MAXTEMPERATURE = ""; dr.ALLCOLDTORAGE = ""; dr.VENTI = ""; dr.REEFER = ""; d.dr = dr; //loadplan loadplan l = new loadplan(); l.entryno = ""; l.warehouse = ""; l.landcarrier = ""; l.stuffdate = ""; l.stuffmode = ""; l.stuffaddress = ""; l.stuffmemo = ""; d.loadplan = l; //announce d.announce = ""; d.remarks = ""; e.detail = d; return e; } private static string textRef (string str) { StringBuilder sb = new StringBuilder(); if (str=="") { return ""; } string[] strArr = str.Split('\n'); foreach (var item in strArr) { if (item=="") { continue; } sb.Append(""+item+""); } return sb.ToString(); } private static string getPackingCodeWithKINDPKGS ( string kindpkgs ) { string sql = "select top 1 edicode from code_pkgs_edi where pkgs = '" + kindpkgs + "' and ediname = 'VGM'"; Database db = DatabaseFactory.CreateDatabase(); var rst = db.ExecuteScalar(CommandType.Text, sql); string edicode = rst == null ? kindpkgs : rst.ToString(); return edicode; } private static string getCtnEdiCodeWithCtn ( string ctn ) { string sql = "select top 1 edicode from code_ctn_edi where ctn = '"+ctn+"' and ediname = 'VGM'"; Database db = DatabaseFactory.CreateDatabase(); var rst = db.ExecuteScalar(CommandType.Text, sql); string edicode = rst == null ? ctn : rst.ToString(); return edicode; } private static string getCtnEdiCodeWithCARRIER ( string carrier ) { string sql = "select top 1 edicode from code_cust_edi where cust = '" + carrier + "' and ediname = 'VGM'"; Database db = DatabaseFactory.CreateDatabase(); var rst = db.ExecuteScalar(CommandType.Text, sql); string edicode = rst == null ? "" : rst.ToString(); return edicode; } private static string getVGMCodeWithComcode ( string comid ) { string sql = "select top 1 sendcode from code_FtpSet where ediname = 'VGM' and corpid = '" + comid + "'"; Database db = DatabaseFactory.CreateDatabase(); var rst = db.ExecuteScalar(CommandType.Text, sql); string edicode = rst == null ? "" : rst.ToString(); return edicode; } private static string getComCodeNameWithComShortName (string shortname) { string sql = "select top 1 CODENAME from info_client WHERE SHORTNAME = '"+shortname+"'"; Database db = DatabaseFactory.CreateDatabase(); var rst = db.ExecuteScalar(CommandType.Text, sql); string codename = rst == null ? "" : rst.ToString(); return codename; } private static head getHeadData (string uid) { head h = new head(); string sql = @"select c.CODENAME comcode, u.CODENAME, u.SHOWNAME, ub.OFFICEPHONE, ub.FAX, ub.MOBILE, ub.EMAIL1, c.GID comid from [user] u JOIN user_company uc on u.GID = uc.USERID JOIN company c on uc.COMPANYID = c.GID JOIN user_baseinfo ub on u.GID = ub.USERID where u.GID = '" + uid+"'"; Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql)) { while (reader.Read()) { _COMEDICODE = getVGMCodeWithComcode(reader["comid"].ToString()); h.sndcom = _COMEDICODE; h.sender = reader["comcode"].ToString() ; h.fromop = reader["CODENAME"].ToString(); h.fromtele = reader["OFFICEPHONE"].ToString(); h.fromfax = reader["FAX"].ToString(); //h.frommail = reader["EMAIL1"].ToString(); h.frommail = "dongshengsoft@dongshengsoft.com"; h.fromopc = reader["SHOWNAME"].ToString(); h.fromope = reader["CODENAME"].ToString(); h.accom = ""; h.accepter = ""; h.toop = ""; h.sendtime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); h.editype = "VERMAS"; h.EdiID = ""; h.EdiName = ""; h.EdiMode = "HYXML"; h.EdiSender = _COMEDICODE; h.EdiReceiver = ""; } } return h; } public static string EncodeBase64 ( string source ) { byte[] bytes = Encoding.Default.GetBytes(source); //gb编码base64 return Convert.ToBase64String(bytes); } public static string SendFile (string xml,string path,out string filepath) { try { string innerXml = xml; string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string signOrg = "dssoft" + "ced93003-1577-4ff4-9fcf-73a52408eb36" + timestamp; string sign = MD5Encrypt32(signOrg).Replace("-","") ; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数 if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string filename = timeStamp.ToString() + ".xml"; filepath = path+filename; Write(path + filename, innerXml); string xmlContent = System.Web.HttpUtility.UrlEncode(EncodeBase64(innerXml)); string url = "user_id=dssoft&format=json×tamp=" +System.Web.HttpUtility.UrlEncode(timestamp) + ""; url = url + "&sign=" + sign + "&method=cargoedi.demessage.msgrec.post&deaId=" + _COMEDICODE + ""; url = url + "&userId=dssoft&docName=" + filename + "&docType=VERMAS&docLength="+xmlContent.Length+"&"; url = url + "docContent=" + xmlContent; url = url + "&channel=WSTOM&destDeaId="+_CGSEDICODE+"&port=Qingdao"; string formUrl = "http://api.nbeport.com/router/rest"; string formData = url; //提交的参数 byte[] postData = Encoding.UTF8.GetBytes(formData); HttpWebRequest request = WebRequest.Create(formUrl) as HttpWebRequest; Encoding myEncoding = Encoding.UTF8; request.Method = "POST"; request.AllowAutoRedirect = true; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; System.IO.Stream outputStream = request.GetRequestStream(); outputStream.Write(postData, 0, postData.Length); outputStream.Close(); HttpWebResponse response; Stream responseStream; StreamReader reader; string srcString; response = request.GetResponse() as HttpWebResponse; responseStream = response.GetResponseStream(); reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8")); string rstmsg = ""; srcString = reader.ReadToEnd(); Result result = JsonConvert.DeserializeObject(srcString); if (result.code == "T") { if (result.data.result=="true") { rstmsg = "发送成功!"; } else { rstmsg = result.data.errorInfo; } } else { rstmsg = "接受失败," + result.msg; } reader.Close(); return rstmsg; } catch { filepath = ""; return "error"; } } /// /// /// /// /// 0:订舱 1:货代间订舱 /// public static string SendFileWithFilePath(string path, CodeFtpSet ftpSet, string filetype, string carrierid = "") { try { string docType = ""; if (filetype == "B")//订舱 { docType = "SHPMBF"; } else if (filetype == "SHPORD")//货代间订舱 { docType = "SHPORD"; } else if (filetype == "E")//确认 { docType = "SHPMIN"; } else if (filetype == "SHPMIN")//确认(多品名) { docType = "SHPMIN"; } _COMEDICODE = ftpSet.SENDCOMPANYCODE; if (carrierid=="") _CGSEDICODE = ftpSet.RECEIVECODE; else _CGSEDICODE = carrierid; string innerXml = GetStringWithFilePath(path); string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string signOrg = "dssoft" + "ced93003-1577-4ff4-9fcf-73a52408eb36" + timestamp; string sign = MD5Encrypt32(signOrg).Replace("-", ""); System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(DateTime.Now - startTime).TotalMilliseconds; // 相差毫秒数 string filename = System.IO.Path.GetFileName(path); Write(path + filename, innerXml); string xmlContent = System.Web.HttpUtility.UrlEncode(EncodeBase64(innerXml)); string url = "user_id=dssoft&format=json×tamp=" + System.Web.HttpUtility.UrlEncode(timestamp) + ""; url = url + "&sign=" + sign + "&method=cargoedi.demessage.msgrec.post&deaId=" + _COMEDICODE + ""; url = url + "&userId=dssoft&docName=" + filename + "&docType="+docType+"&docLength=" + xmlContent.Length + "&"; url = url + "docContent=" + xmlContent; url = url + "&channel=WSTOM&destDeaId=" + _CGSEDICODE + "&port=Qingdao"; string formUrl = "http://api.nbeport.com/router/rest"; string formData = url; //提交的参数 byte[] postData = Encoding.UTF8.GetBytes(formData); HttpWebRequest request = WebRequest.Create(formUrl) as HttpWebRequest; Encoding myEncoding = Encoding.UTF8; request.Method = "POST"; request.AllowAutoRedirect = true; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.Length; System.IO.Stream outputStream = request.GetRequestStream(); outputStream.Write(postData, 0, postData.Length); outputStream.Close(); HttpWebResponse response; Stream responseStream; StreamReader reader; string srcString; response = request.GetResponse() as HttpWebResponse; responseStream = response.GetResponseStream(); reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8")); string rstmsg = ""; srcString = reader.ReadToEnd(); Result result = JsonConvert.DeserializeObject(srcString); if (result.code == "T") { if (result.data.result == "true") { rstmsg = "发送成功!"; } else { rstmsg = result.data.errorInfo; } } else { rstmsg = "接受失败," + result.msg; } reader.Close(); return rstmsg; } catch { return "error"; } } public static string GetStringWithFilePath ( string path ) { StreamReader sr = new StreamReader(path, Encoding.Default); String line; StringBuilder sb = new StringBuilder(); while ((line = sr.ReadLine()) != null) { sb.Append(line.ToString()); } return sb.ToString(); } public static string MD5Encrypt32 ( string password ) { string cl = password; string pwd = ""; MD5 md5 = MD5.Create(); //实例化一个md5对像 // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("X2"); } return pwd; } public static string CheckXMLModelValid (edi e) { string temp = ""; //非空 if (e.reference.billofladingno=="") { temp += "提单号,"; } //if (e.detail.baseinfo.shipper=="") //{ // temp += "发货人,"; //} //if (e.detail.baseinfo.consignee == "") //{ // temp += "收货人,"; //} //if (e.detail.baseinfo.notifyparty == "") //{ // temp += "通知人,"; //} if (e.detail.freight.port.portofloading == "") { temp += "装货港,"; } //if (e.detail.freight.port.portofdischarge == "") //{ // temp += "卸货港,"; //} if (e.detail.freight.port.placeofdelivery == "") { temp += "目的港,"; } if (e.detail.freight.port.co_portofloading == "") { temp += "装货港代码,"; } //if (e.detail.freight.port.co_portofdischarge == "") //{ // temp += "卸货港代码,"; //} //if (e.detail.freight.port.co_placeofdelivery == "") //{ // temp += "目的港代码,"; // } if (e.detail.freight.vessel.carrier == "") { temp += "船公司,"; } if (e.detail.freight.vessel.oceanvessel == "") { temp += "船名,"; } if (e.detail.freight.vessel.voyno == "") { temp += "航次,"; } if (e.detail.freight.vessel.etd == "") { temp += "开航日期,"; } foreach (var item in e.detail.freight.container.containers) { if (item.containertype=="") { temp += "箱型,"; } if (item.containerno == "") { temp += "箱号,"; } if (item.sealno == "") { temp += "封号,"; } if (item.containernoofpkgs == "") { temp += "件数,"; } if (item.containergrossweight == "") { temp += "毛重,"; } if (item.containercbm == "") { temp += "体积,"; } if (item.containerpackagingcode == "") { temp += "箱货物包装类型代码,"; } if (item.containerpackaging == "") { temp += "箱货物包装类型,"; } if (item.vgmgrossmassweight == "") { temp += "VGM总重量,"; } else { if (double.Parse(item.vgmgrossmassweight) == 0) { temp += "VGM总重量,"; } } if (item.vgmweighingmethod == "") { temp += "VGM称重方式,"; } if (item.vgmweighingtime == "") { temp += "VGM称重时间,"; } if (item.vgmresponsibleparty == "") { temp += "VGM联系单位,"; } if (item.vgmauthorizedperson == "") { temp += "VGM授权联系人,"; } if (item.vgmauthorizedpersontele == "") { temp += "VGM授权联系人电话,"; } } if (temp!="") { temp = temp.Substring(0, temp.Length - 1); temp = "
以下字段为空:
[" + temp + "]
"; } //字段超长 var overlength = ""; //if (!checkValid35(e.detail.baseinfo.shipper)) //{ // overlength = "发货人,"; //} //if (!checkValid35(e.detail.baseinfo.consignee)) //{ // overlength = "收货人,"; //} //if (!checkValid35(e.detail.baseinfo.notifyparty)) //{ // overlength = "通知人,"; //} //if (overlength!="") //{ // overlength = overlength.Substring(0, overlength.Length - 1); // overlength = "
以下字段[每行限数35个字符,超过部分请另起一行]:
[" + overlength + "]
"; // temp = temp + overlength; //} //仅限英文 string KanJiValid = ""; foreach (var item in e.detail.freight.container.containers) { if (!checkValidKanJi(item.vgmresponsibleparty)) { KanJiValid += "[VGM联系单位]"; } if (!checkValidKanJi(item.vgmauthorizedperson)) { KanJiValid += "[VGM授权联系人]"; } if (!checkValidKanJi(item.vgmauthorizedpersontele)) { KanJiValid += "[VGM授权联系人电话]"; } } if (KanJiValid!="") { //KanJiValid = KanJiValid.Substring(0, KanJiValid.Length - 1); KanJiValid = "
以下字段格式错误,请修改后重新提交!:
[" + KanJiValid + "]
"; temp = temp + KanJiValid; } //是否是系统支持的船公司 string SupportCGS=""; if (e.head.EdiReceiver=="") { SupportCGS += "暂不支持此船公司,详情请与客服联系!"; temp = temp + SupportCGS; } return temp; } /// /// 判断字符串是否通过每行不超过35个字符的验证 /// /// /// private static bool checkValid35 (string str) { StringBuilder sb = new StringBuilder(); if (str == "") { return true; } string[] strArr = str.Split('\n'); foreach (var item in strArr) { if (item == "") { continue; } if (item.Length>35) { return false; } } return true; } /// /// 判断字符串中是否存在汉字以及特殊字符 /// /// /// private static bool checkValidKanJi ( string str ) { for (int i = 0; i < str.Length; i++) { if ((int)str[i] > 127) { return false; } } return true; } private static void GetUserCodeNameAndTELAndCom (string uid) { string sql =@"SELECT u.CODENAME,ub.OFFICEPHONE,isnull(c.CODENAME,'') comcodename from [user] u join user_baseinfo ub on u.GID=ub.USERID join user_company uc on uc.USERID = u.GID join company c on c.GID = uc.COMPANYID where u.gid = '"+uid+"'"; Database db = DatabaseFactory.CreateDatabase(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql)) { while (reader.Read()) { _VGMLIANXIREN = reader["CODENAME"].ToString(); _VGMLIANXIRENTEL = reader["OFFICEPHONE"].ToString(); _VGMLIANXIDANWEI = reader["comcodename"].ToString(); } } } /// /// VGM发送邮件 /// /// /// /// private static void SendMailWithXMLFile (string title,string context,string xmlpath) { // SendEmail se = new SendEmail("dongshengsoft@dongshengsoft.com", "admin@dongshengsoft.com", "", "", title, context, false); // se.SetSmtp("admin@dongshengsoft.com", "ds!@#)(*", "smtpcom.263xmail.com", 25, false, //System.Net.Mail.MailPriority.Normal); var MAILTONAME = "admin@dongshengsoft.com"; var PARAMVALUE = MsSysParamSetDAL.GetData("PARAMNAME='MAILTONAME'"); if (PARAMVALUE.PARAMVALUE != "") MAILTONAME = PARAMVALUE.PARAMVALUE; var MAILTOPASSWORD = "ds!@#)(*"; PARAMVALUE = MsSysParamSetDAL.GetData("PARAMNAME='MAILTOPASSWORD'"); if (PARAMVALUE.PARAMVALUE != "") MAILTOPASSWORD = PARAMVALUE.PARAMVALUE; var MAILTOSERVER = "smtpcom.263xmail.com"; PARAMVALUE = MsSysParamSetDAL.GetData("PARAMNAME='MAILTOSERVER'"); if (PARAMVALUE.PARAMVALUE != "") MAILTOSERVER = PARAMVALUE.PARAMVALUE; var MAILTOPORT = "465"; PARAMVALUE = MsSysParamSetDAL.GetData("PARAMNAME='MAILTOPORT'"); if (PARAMVALUE.PARAMVALUE != "") MAILTOPORT = PARAMVALUE.PARAMVALUE; var DONGSHENGMAILADDR = "myshipping@myshipping.net"; PARAMVALUE = MsSysParamSetDAL.GetData("PARAMNAME='DONGSHENGMAILADDR'"); if (PARAMVALUE.PARAMVALUE != "") DONGSHENGMAILADDR = PARAMVALUE.PARAMVALUE; using (var smtp = new SmtpClient()) //TO: using (var mail = new MailMessage(MAILTONAME, DONGSHENGMAILADDR)) { //附件 var attach = new Attachment(xmlpath, MediaTypeNames.Text.Xml); //设置ContentId mail.Attachments.Add(attach); //标题和内容,注意设置编码,因为默认编码是ASCII mail.Subject = title; mail.SubjectEncoding = Encoding.UTF8; //HTML内容 mail.Body = context; mail.BodyEncoding = Encoding.UTF8; //指示改电子邮件内容是HTML格式 mail.IsBodyHtml = true; //20210622 同时将邮件文件发至ftp服务器 SendEmail se = new SendEmail(DONGSHENGMAILADDR, MAILTONAME, "", "", title, context, true); var xmlfonder = xmlpath.Replace(Path.GetFileName(xmlpath), ""); se.Attachments(xmlpath); MsOpSeaeEdiDAL.SendMailToFtp(se, xmlfonder, SendEmail.MailBillType.VGM); //SMTP设置(根据邮箱类型设置,这里是Live Mail的SMTP服务器地址) smtp.Host = MAILTOSERVER; smtp.Port =Convert.ToInt32(MAILTOPORT); smtp.EnableSsl = false; smtp.UseDefaultCredentials = false; smtp.Credentials = new NetworkCredential(MAILTONAME, MAILTOPASSWORD); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(mail); } } private static string GetMailBodyWithUidAndMBLNO ( string uid, string mblno ) { string sql = @"SELECT c.NAME,u.SHOWNAME,ub.EMAIL1,ub.OFFICEPHONE from [user] u join user_baseinfo ub on ub.USERID=u.GID join user_company uc on uc.USERID=u.GID join company c on uc.COMPANYID = c.GID where u.gid = '"+uid+"'"; Database db = DatabaseFactory.CreateDatabase(); MailBodyProp mbp = new MailBodyProp(); using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql)) { while (reader.Read()) { mbp.GongSiMingCheng = reader["NAME"].ToString(); mbp.ShenQingRen = reader["SHOWNAME"].ToString(); mbp.YouXiang = reader["EMAIL1"].ToString(); mbp.DianHua = reader["OFFICEPHONE"].ToString(); mbp.ZhuTiDanHao = mblno; } } string bodyStr = "公司名称:" + mbp.GongSiMingCheng + "
申请人:" + mbp.ShenQingRen + "
邮箱:" + mbp.YouXiang + "
电话:" + mbp.DianHua + "
主提单号:" + mbp.ZhuTiDanHao + "\n"; return bodyStr; } } class MailBodyProp { public string GongSiMingCheng { get; set; } public string ShenQingRen { get; set; } public string YouXiang { get; set; } public string DianHua { get; set; } public string ZhuTiDanHao { get; set; } } }