/// <summary> /// 上载报文(到QP) /// </summary> /// <param name="keyValue">激活码</param> /// <param name="machineCode">机器代码</param> /// <param name="cusCiqNo">关检关联号(可选),如果没有填空字符</param> /// <param name="msgXml">消息</param> /// <returns></returns> public MesReceipt SendMessage(string keyValue, string machineCode, string cusCiqNo, string msgXml) { var receipt = new MesReceipt(); LogHelper logHelper = LogHelper.GetInstance(); try { CusCiqNoInfo cusCiqNoInfo = new CusCiqNoInfo { CusCiqNo = cusCiqNo }; var cusDataMsg = new CusDataMsg { KeyValue = keyValue, MachineCode = machineCode, MessageXml = msgXml, CusCiqNo = cusCiqNoInfo }; IMessageDataHelper dataHelper = DataHelperFactory.GetMessageDataHelper(); //检查激活码 if (!Utility.CheckKey(dataHelper.GetKeyInfo(keyValue, machineCode))) { receipt.Status = "003"; receipt.Message = GetErrInfo(Context.ErrKeyValueInvalid, Context.ErrKeyValueInvalidId); return(receipt); } cusDataMsg = Utility.FormatCusDataMsg(cusDataMsg, dataHelper.GetMaxTcsCurrentId(), ConfigInfo.TscIdHead, ConfigInfo.DocumentNo); receipt.RDate = DateTime.Now.ToString("yyyyMMddHHmmss"); DeclHelper declHelper = new DeclHelper(); DeclEnvelopHead msgHeader = declHelper.GetEnvelopHeader(msgXml); #region 生成TCS报文 XDocEntity tmpDoc = ConfigInfo.GetTemplateDocEntity(); TcsHelper tcsHelper = new TcsHelper(); //保存报文 XDocument tcsDoc = tcsHelper.GenerateTcsXDoc(tmpDoc, cusDataMsg); tcsDoc.Save(GetFileName(ConfigInfo.Path)); #endregion #region 报文落地数据库 cusDataMsg.TcsMessageXml = tcsDoc.ToString(); cusDataMsg.DeclTime = DateTime.Now; cusDataMsg.MsgGuid = msgHeader.MsgGuid; cusDataMsg.Sendtime = msgHeader.SendTime; dataHelper.SaveMessageInfo(cusDataMsg); #endregion receipt.Status = "000"; receipt.Message = string.Empty; receipt.MessagID = cusDataMsg.TaskId; //记录操作日志 logHelper.LogOperation(string.Format("SendMessage 上载报文(到QP),KeyValue:{0},Machinecode:{1},CusCiqNo:{2}", keyValue, machineCode, cusCiqNo), Context.SendMessageEventId, "SendMessage", keyValue); return(receipt); } catch (Exception ex) { receipt.Status = "001"; receipt.Message = GetErrInfo(Context.ErrSendMessage, Context.SendMessageEventId); logHelper.LogErrInfo(ex.Message, Context.SendMessageEventId, "SendMessage", keyValue, msgXml); return(receipt); } }
internal XDocument GenerateTcsXDoc(XDocEntity entity, CusDataMsg cusMsg) { XDocument tcsDoc = XDocument.Parse(entity.XDoc.ToString()); XDocument msgDoc = XDocument.Parse(cusMsg.MessageXml); XNamespace tcs = entity.NS; XElement tcsHead = tcsDoc.Root.Element("MessageHead"); XElement tcsBody = tcsDoc.Root.Element("MessageBody"); //MessageHead赋值 tcsHead.Element("MessageId").Value = cusMsg.MessageId; tcsHead.Element("MessageTime").Value = string.Format("{0}{1}{2}{3}{4}{5}", DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString().PadLeft(2, '0'), DateTime.Now.Day.ToString().PadLeft(2, '0'), DateTime.Now.Hour.ToString().PadLeft(2, '0'), DateTime.Now.Minute.ToString().PadLeft(2, '0'), DateTime.Now.Second.ToString().PadLeft(2, '0')); //TcsFlow赋值 XElement flowEle = tcsBody.Element(tcs + "TcsFlow201").Element(tcs + "TcsFlow"); flowEle.Element(tcs + "MessageId").Value = cusMsg.MessageId; flowEle.Element(tcs + "TaskId").Value = cusMsg.TaskId; XElement declDocEle = tcsBody.Element(tcs + "TcsFlow201").Element(tcs + "TcsData").Element(tcs + "DeclarationDocument"); //TcsDocumentNo赋值 declDocEle.Element(tcs + "TcsDocumentNo").Value = cusMsg.TcsDocumentNo; //报关相关数据赋值 XElement entryInfoEle = declDocEle.Element(tcs + "EntryInformation"); XElement declHeadEle = msgDoc.Root.Element("EnvelopBody").Element("DECL_HEAD"); XElement declListsEle = msgDoc.Root.Element("EnvelopBody").Element("DECL_LISTS"); XElement declContainersEle = msgDoc.Root.Element("EnvelopBody").Element("DECL_CONTAINERS"); XElement declCertificates = msgDoc.Root.Element("EnvelopBody").Element("DECL_CERTIFICATES"); TransformEntryHeadData(declHeadEle); //EntryIdentityInformationList ParseEntryIdentityInformationList(entryInfoEle.Element(tcs + "EntryIdentityInformationList"), declHeadEle, tcs); //LogisticsLocationInformationList ParseLogisticsLocationInformationList(entryInfoEle.Element(tcs + "LogisticsLocationInformationList"), declHeadEle, tcs); //EportLocationInformationList ParseEportLocationInformationList(entryInfoEle.Element(tcs + "EportLocationInformationList"), declHeadEle, tcs); //BaseInformation ParseBaseInformation(entryInfoEle.Element(tcs + "BaseInformation"), declHeadEle); //GoodsInformationList ParseGoodsInformationList(entryInfoEle.Element(tcs + "GoodsInformationList"), declListsEle, tcs); //EntryContainerInformationList ParseEntryContainerInformationList(entryInfoEle.Element(tcs + "EntryContainerInformationList"), declContainersEle, tcs); //DocumentAttachedInformationList ParseDocumentAttachedInformationList(entryInfoEle.Element(tcs + "DocumentAttachedInformationList"), declCertificates, tcs); ParseTransitInformation(declDocEle, tcs, declHeadEle); return(tcsDoc); }
internal static CusDataMsg FormatCusDataMsg(CusDataMsg msg, long currentId, string idHead, string documentNo) { //生成Tcs报文Id if (currentId == 0) { currentId = Convert.ToInt64(ConfigInfo.CurrentId, 16) + 1; } else { currentId = ++currentId; } msg.MessageId = idHead + DateTime.Now.ToString("yyyyMMdd") + Convert.ToString(currentId, 16); msg.CurrentId = currentId; msg.TaskId = msg.MessageId; msg.TcsDocumentNo = idHead + "001" + DateTime.Now.ToString("yyyyMMdd") + documentNo; return(msg); }
/// <summary> /// 保存报文相关信息 /// </summary> /// <param name="msg">报文信息</param> public void SaveMessageInfo(CusDataMsg msg) { var cmd = Db.GetSqlStringCommand(Context.SqlSaveMsgInfo); Db.AddInParameter(cmd, "GUID", DbType.String, msg.MsgGuid); Db.AddInParameter(cmd, "KEY_VALUE", DbType.String, msg.KeyValue); Db.AddInParameter(cmd, "MACHINE_CODE", DbType.String, msg.MachineCode); Db.AddInParameter(cmd, "MESSAGE", DbType.Xml, msg.MessageXml); Db.AddInParameter(cmd, "DECL_TIME", DbType.DateTime, msg.DeclTime); Db.AddInParameter(cmd, "DECL_DATE", DbType.Date, msg.DeclTime.Date); Db.AddInParameter(cmd, "TCS_MSGID", DbType.String, msg.MessageId); Db.AddInParameter(cmd, "TCS_TASKID", DbType.String, msg.TaskId); Db.AddInParameter(cmd, "TCS_DOCUMENT_NO", DbType.String, msg.TcsDocumentNo); Db.AddInParameter(cmd, "CURRENT_ID", DbType.String, msg.CurrentId); Db.AddInParameter(cmd, "TCS_MESSAGE", DbType.Xml, msg.TcsMessageXml); Db.AddInParameter(cmd, "SEND_TIME", DbType.DateTime, msg.Sendtime); Db.AddInParameter(cmd, "CUS_CIQ_NO", DbType.String, msg.CusCiqNo.CusCiqNo); Db.ExecuteNonQuery(cmd); }