/// <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); } }
/// <summary> /// 获取关检关联号(16位) /// </summary> /// <param name="ieFlag">进出口标识,1为进口,0为出口</param> /// <param name="locationCode">现场代码(4位)</param> /// <returns>关检关联号(16位)</returns> public string GetCusCiqNo(string ieFlag, string locationCode) { LogHelper logHelper = LogHelper.GetInstance(); try { var cusCiqNo = new CusCiqNoInfo() { IeFlag = ieFlag, LocationCode = locationCode, CusCiqNo = string.Empty }; if (!new EntityValidator <CusCiqNoInfo>().Validate(cusCiqNo)) { throw new Exception(Context.ErrIeFlagOrLocalCodeInValid); } IPreserveDataHelper dataHelper = DataHelperFactory.GetPreserveDataHelper(); int index = dataHelper.GetCusCiqIndex(cusCiqNo.IeFlag, cusCiqNo.LocationCode); string indexStr = index.ToString(); cusCiqNo.CusCiqNo = string.Format("{0}{1}{2}{3}", ieFlag, DateTime.Now.ToString("yyMMdd"), locationCode, indexStr.PadLeft(5, '0')); //记录操作日志 logHelper.LogOperation(string.Format("GetCusCiqNo 获取关检关联号,IeFlag:{0},LocationCode:{1},CusCiqNo:{2}", ieFlag, locationCode, cusCiqNo.CusCiqNo), Context.GetCusCiqNoEventId, "GetCusCiqNo"); if (ConfigInfo.DeclType == 0 && ieFlag == "1") { throw new Exception("目前只允许出口业务类型"); } if (ConfigInfo.DeclType == 1 && ieFlag == "0") { throw new Exception("目前只允许进口业务类型"); } return(cusCiqNo.CusCiqNo); } catch (Exception ex) { logHelper.LogErrInfo(ex.Message, Context.GetCusCiqNoEventId, "GetCusCiqNo"); return(GetErrInfo(Context.ErrGetCusCiqNo, Context.GetCusCiqNoEventId)); } }
/// <summary> /// 上传报关和报检数据(暂存数据) /// </summary> /// <param name="keyValue">激活码</param> /// <param name="machineCode">机器代码</param> /// <param name="ieFlag">进出口标识,1为进口,0为出口</param> /// <param name="locationCode">现场代码(4位)</param> /// <param name="cusCiqNo">关检关联号</param> /// <param name="status">数据状态(0,暂存;1,报检;2,上载QP;3,申报)</param> /// <param name="cusMsgXml">报关数据报文</param> /// <param name="ciqMsgXml">报检数据报文</param> /// <returns>返回实体消息</returns> public SaveModel UploadAllData(string keyValue, string machineCode, string ieFlag, string locationCode, string cusCiqNo, int status, string cusMsgXml, string ciqMsgXml) { CusCiqNoInfo cusCiqNoInfo = new CusCiqNoInfo { CusCiqNo = cusCiqNo, IeFlag = ieFlag, LocationCode = locationCode }; if (!new EntityValidator <CusCiqNoInfo>().Validate(cusCiqNoInfo)) { throw new Exception(Context.ErrIeFlagOrLocalCodeInValid); } SaveModel saveModel = new SaveModel() { CusCiqNo = cusCiqNo, Password = string.Empty, IsSuccess = false }; LogHelper logHelper = LogHelper.GetInstance(); try { IMessageDataHelper msgDataHelper = DataHelperFactory.GetMessageDataHelper(); //检查激活码是否有效 if (!Utility.CheckKey(msgDataHelper.GetKeyInfo(keyValue, machineCode))) { saveModel.Message = GetErrInfo(Context.ErrKeyValueInvalid, Context.ErrKeyValueInvalidId);; return(saveModel); } PreCusData preData = new PreCusData { CusCiqNoInfo = cusCiqNoInfo, KeyValue = keyValue, MachineCode = machineCode, CusMsgXml = cusMsgXml, CiqMsgXml = ciqMsgXml, UpdateTime = DateTime.Now, Password = Utility.GetRandomNumString(6) }; IPreserveDataHelper preDataHelper = DataHelperFactory.GetPreserveDataHelper(); //如果暂存成功 if (preDataHelper.UploadPreCusData(preData) == 1) { preData.Password = preDataHelper.GetPasswordByCusCiqNo(cusCiqNo); saveModel.IsSuccess = true; saveModel.Message = string.Empty; saveModel.Password = preData.Password; } if (status > 0) { DeclCusData declData = new DeclCusData { CusCiqNoInfo = preData.CusCiqNoInfo, CiqMsgXml = preData.CiqMsgXml, CusMsgXml = preData.CusMsgXml, Status = (DeclCusData.SaveType)status }; preDataHelper.UploadDeclData(declData); } } catch (Exception ex) { saveModel.Message = GetErrInfo(Context.ErrUploadAllData, Context.UploadAllDataEventId); logHelper.LogErrInfo(ex.Message, Context.UploadAllDataEventId, "UploadAllData", keyValue); } return(saveModel); }