/// <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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 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);
        }