public Result GetOrderRec(string orderNo) { Result result = new Result(); result.Message = "暂未生成相应的回执"; try { FtpUtil ftp = new FtpUtil("", "name", "password"); string ftpResponse = ""; Stream stream = ftp.FileStream("", ref ftpResponse); // 设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string data = reader.ReadToEnd(); // 接收回执 if (data.Contains("OrderRec")) { OrderRec orderRec = Util.Serialization.SerializationUtil.XmlDeserialize <OrderRec>(data); if (orderRec.orderNo == orderNo) { // TODO:更新订单推送状态 result.Status = true; } } } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }
/// <summary> /// 获取订单商检回执 /// </summary> /// <returns></returns> public override Result GetOrderRec() { Result result = new Result(); try { FtpUtil ftp = new FtpUtil(config.GZJCIcpInfoTrade.FtpUrl, config.GZJCIcpInfoTrade.FtpName, config.GZJCIcpInfoTrade.FtpPassword); string[] fileList = GetIcpOutResult(); if (fileList != null) { foreach (string fileTxt in fileList) { string msg = ""; Stream stream = ftp.FileStream(config.GZJCIcpInfoTrade.FtpUrl + fileTxt, ref msg); //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string txt = reader.ReadToEnd(); //接收回执 if (fileTxt.Contains("KJDOCREC_")) { Hyt.Model.Icp.GZBaiYunJiChang.Goods.DOCREC.DocRec DocRec = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Hyt.Model.Icp.GZBaiYunJiChang.Goods.DOCREC.DocRec>(txt); //更新平台回执信息 if (DocRec.Declaration.OrgMessageType == "KJ881111") { IcpBo.Instance.UpdatePlatDocRecByMessageID(DocRec.Declaration.OrgMessageID, txt, DocRec.Declaration.Status); } //更新商检回执信息 if (DocRec.Declaration.OrgMessageType == "881111") { IcpBo.Instance.UpdateCiqDocRecByMessageID(DocRec.Declaration.OrgMessageID, txt, DocRec.Declaration.Status); } } } } result.Status = true; result.Message = "获取成功"; } else { result.Status = true; result.Message = "暂未生成相应的回执"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }
/// <summary> /// 获取商品商检回执 /// </summary> /// <returns></returns> public override Result GetGoodsRec() { Result result = new Result(); try { FtpUtil ftp = new FtpUtil(config.GZJCIcpInfoTrade.FtpUrl, config.GZJCIcpInfoTrade.FtpName, config.GZJCIcpInfoTrade.FtpPassword); string[] fileList = GetIcpOutResult(); if (fileList != null) { foreach (string fileTxt in fileList) { string msg = ""; Stream stream = ftp.FileStream(config.GZJCIcpInfoTrade.FtpUrl + fileTxt, ref msg); //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string txt = reader.ReadToEnd(); //接收回执 if (fileTxt.Contains("KJDOCREC_")) { Hyt.Model.Icp.GZBaiYunJiChang.Goods.DOCREC.DocRec DocRec = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Hyt.Model.Icp.GZBaiYunJiChang.Goods.DOCREC.DocRec>(txt); //更新平台回执信息 if (DocRec.Declaration.OrgMessageType == "KJ881101") { IcpBo.Instance.UpdatePlatDocRecByMessageID(DocRec.Declaration.OrgMessageID, txt, DocRec.Declaration.Status); if (DocRec.Declaration.Status != "S") { IcpBo.Instance.UpdateEntGoodsNoByMessageID(DocRec.Declaration.OrgMessageID, "None"); } } //更新商检回执信息 if (DocRec.Declaration.OrgMessageType == "881101") { IcpBo.Instance.UpdateCiqDocRecByMessageID(DocRec.Declaration.OrgMessageID, txt, DocRec.Declaration.Status); if (DocRec.Declaration.Status != "S") { IcpBo.Instance.UpdateEntGoodsNoByMessageID(DocRec.Declaration.OrgMessageID, "None"); } } } //国检审核回执 if (fileTxt.Contains("KJ881101CIQREC_")) { Hyt.Model.Icp.GZBaiYunJiChang.Goods.CIQREC.InternationalTrade InternationalTrade = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Hyt.Model.Icp.GZBaiYunJiChang.Goods.CIQREC.InternationalTrade>(txt); List <Hyt.Model.Icp.GZBaiYunJiChang.Goods.CIQREC.GoodsRegRecList> GoodsRegRecList = InternationalTrade.Declaration.GoodsRegRecList; foreach (Hyt.Model.Icp.GZBaiYunJiChang.Goods.CIQREC.GoodsRegRecList item in GoodsRegRecList) { IcpBo.Instance.UpdateIcpGoodsItemCIQ((int)Model.CommonEnum.商检.广州白云机场, item.EntGoodsNo, item.CIQGRegStatus, item.CIQNotes); //审核通过,更新检验检疫商品备案编号 if (item.CIQGRegStatus == "C") { IcpBo.Instance.UpdateCIQGoodsNo(item.EntGoodsNo, item.CIQGoodsNo); } } } //海关审核回执 if (fileTxt.Contains("KJ881101CUSREC_")) { Hyt.Model.Icp.GZBaiYunJiChang.Goods.CUSREC.InternationalTrade InternationalTrade = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Hyt.Model.Icp.GZBaiYunJiChang.Goods.CUSREC.InternationalTrade>(txt); List <Hyt.Model.Icp.GZBaiYunJiChang.Goods.CUSREC.GoodsRegRecList> GoodsRegRecList = InternationalTrade.Declaration.GoodsRegRecList; foreach (Hyt.Model.Icp.GZBaiYunJiChang.Goods.CUSREC.GoodsRegRecList item in GoodsRegRecList) { IcpBo.Instance.UpdateIcpGoodsItemCUS((int)Model.CommonEnum.商检.广州白云机场, item.EntGoodsNo, item.OpResult, item.CustomsNotes); //审核通过,更新海关正式备案编号 if (item.OpResult == "C") { IcpBo.Instance.UpdateCusGoodsNo(item.EntGoodsNo, item.CusGoodsNo); } } } } } result.Status = true; result.Message = "获取成功"; } else { result.Status = true; result.Message = "暂未生成相应的回执"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }
/// <summary> /// 查询海关订单 /// </summary> /// <param name="orderId">订单编号</param> /// <returns></returns> /// <remarks>2015-12-29 杨浩 创建</remarks> public override Result SearchCustomsOrder(int orderId) { lock (lockSearch) { var result = new Result() { Status = false }; try { OrderStatus.海关报关状态 status = OrderStatus.海关报关状态.成功; var customsLogInfo = BLL.Order.SoCustomsOrderLogBo.Instance.GetCustomsOrderLogInfo(orderId, (int)Code); if (customsLogInfo == null) { result.Message = "还未提交订单至海关!"; return(result); } //原始文件(海关回执后缀为.txt的文件) string oldFile = customsLogInfo.FileName + ".txt"; //失败回执文件名 string failureFileName = "0_" + oldFile; //成功回执文件名 string successFileName = "1_" + oldFile; string _ftpImageServer = FtpUrl + "DOWNLOAD/"; FtpUtil ftp = new FtpUtil(_ftpImageServer, FtpUserName, FtpPassword); string msg = ""; //首先读取成功的文件 Stream stream = ftp.FileStream(_ftpImageServer + successFileName, ref msg); if (msg == "get file success!") { result.Status = true; status = OrderStatus.海关报关状态.成功; } else { msg = ""; //成功回执文件不存在则读取失败文件名称 stream = ftp.FileStream(_ftpImageServer + failureFileName, ref msg); if (msg != "get file success!") { result.Status = false; result.Message = "暂时海关没有生成回执文件,请稍后再试!"; return(result); } status = OrderStatus.海关报关状态.失败; } //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string xml = Decrypt(reader.ReadToEnd()); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); XmlNode xmlNode = xmlDoc.SelectSingleNode("//ResponseMessage//ResponseBodyList//ResponseBody"); var customsOrderLog = new SoCustomsOrderLog(); customsOrderLog.StatusCode = xmlNode.SelectSingleNode("ReturnCode").InnerText; customsOrderLog.StatusMsg = xmlNode.SelectSingleNode("ReturnInfo").InnerText; //switch (code) //{ // case "A01": customsOrderLog.StatusMsg = "-缺少接入企业备案号"; break; // case "A02": customsOrderLog.StatusMsg = "-电商接入企业未备案或失效"; break; // case "A10": customsOrderLog.StatusMsg = "-缺少电商企业备案号"; break; // case "A11": customsOrderLog.StatusMsg = "-电商企业未备案或失效"; break; // case "A14": customsOrderLog.StatusMsg = "-退回修改"; break; // case "B10": customsOrderLog.StatusMsg = "-报文类型不正确"; break; // case "B11": customsOrderLog.StatusMsg = "-业务字段异常"; break; // case "B12": customsOrderLog.StatusMsg = "-重复报文"; break; // case "B13": customsOrderLog.StatusMsg = "-重复记录"; break; // case "C01": customsOrderLog.StatusMsg = "-入库成功"; break; // default: break; //} if (customsOrderLog.StatusMsg == "订单编号已经存在,不可重复插入。") { status = OrderStatus.海关报关状态.成功; } else if (customsOrderLog.StatusCode != "C01") { status = OrderStatus.海关报关状态.失败; } customsOrderLog.LastUpdateBy = 0; if (BLL.Authentication.AdminAuthenticationBo.Instance.IsLogin) { customsOrderLog.LastUpdateBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; } customsOrderLog.LastUpdateDate = DateTime.Now; customsOrderLog.ReceiptContent = xml; customsOrderLog.SysNo = customsLogInfo.SysNo; customsOrderLog.FileName = customsLogInfo.FileName; customsOrderLog.Packets = customsLogInfo.Packets; BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 2, orderId); BLL.Order.SoCustomsOrderLogBo.Instance.UpdateCustomsOrderLog(customsOrderLog); result.Message = customsOrderLog.StatusMsg; } } catch (Exception ex) { result.Message = "系统异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write(ex, "GZSearchCustomsOrder"); } return(result); } }
/// <summary> /// 查询海关订单 /// </summary> /// <param name="orderId">订单编号</param> /// <returns></returns> /// <remarks>2016-8-18 杨浩 重构</remarks> public override Result SearchCustomsOrder(int orderId) { var result = new Result() { Status = true }; try { var resultDic = new Dictionary <int, string>(); var ftp = new FtpUtil(FTPUri, FTPName, FTPPassword); string ftpResponse = ""; #region /* * <?xml version="1.0" encoding="UTF-8"?> * <DocRec> * <Head> * <MessageID><![CDATA[KJDOCREC_KJGGPT2016110315520669308]]></MessageID> * <MessageType><![CDATA[KJDOCREC]]></MessageType> * <Sender><![CDATA[KJGGPT]]></Sender> * <Receiver><![CDATA[GZXINRAO]]></Receiver> * <SendTime><![CDATA[20161103155206]]></SendTime> * <FunctionCode><![CDATA[]]></FunctionCode> * <SignerInfo><![CDATA[]]></SignerInfo> * <Version><![CDATA[2.0]]></Version> * </Head> * <Declaration> * <OrgMessageID><![CDATA[F9F53112-3A28-4912-92EC-BD3085085FC8]]></OrgMessageID> * <OrgMessageType><![CDATA[CEB311Message]]></OrgMessageType> * <OrgSenderID><![CDATA[GZXINRAO]]></OrgSenderID> * <OrgReceiverID><![CDATA[KJCUSTOM]]></OrgReceiverID> * <OrgRecTime><![CDATA[20161103155206]]></OrgRecTime> * <RespondBy>01</RespondBy> * <RespondStatus><![CDATA[F]]></RespondStatus> * <RespondNotes><![CDATA[1.4.2.业务验证失败: * 1.广州海关单号【501_20161029101958】重复申报... * ]]></RespondNotes> * <Status>F</Status> * <Notes><![CDATA[1.4.2.业务验证失败: * 1.广州海关单号【501_20161029101958】重复申报... * ]]></Notes> * </Declaration> * </DocRec> * */ #endregion // 获取文件列表 //string[] fileList = ftp.GetFileList(FTPUri + "cebout/"); string[] fileList = ftp.GetFileList(FTPUri + FolderOut); if (fileList != null && fileList.Length > 0) { foreach (string fileName in fileList) { //Stream stream = ftp.FileStream(FTPUri + "cebout/" + fileName, ref ftpResponse); var stream = ftp.FileStream(FTPUri + FolderOut + fileName, ref ftpResponse); #region 更新订单海关推送状态 string xmlData = ""; stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { xmlData = reader.ReadToEnd(); } if (!string.IsNullOrEmpty(xmlData)) { int id = 0; var customsOrderLog = new SoCustomsOrderLog(); var xml = new XmlDocumentExtender(); xml.LoadXml(xmlData); var _xml = xml["CEB312Message"]; if (_xml != null) { var orderReturn = _xml["OrderReturn"]; //订单编号 if (!int.TryParse(orderReturn["orderNo"].InnerText.Split('_')[0], out id)) { continue; } var customsLogInfo = BLL.Order.SoCustomsOrderLogBo.Instance.GetCustomsOrderLogInfo(id, (int)Code); int status = -999; switch (orderReturn["returnStatus"].InnerText) { case "": // 电子口岸申报中 result.Message = "电子口岸申报中!"; status = (int)OrderStatus.海关报关状态.处理中; break; case "2": // 发送海关成功 status = (int)OrderStatus.海关报关状态.处理中; result.Message = orderReturn["returnInfo"].InnerText; if (customsLogInfo.StatusCode == "3") { status = (int)OrderStatus.海关报关状态.作废; result.Message = orderReturn["returnInfo"].InnerText; } break; case "4": // 发送海关失败 case "100": // 海关退单 status = (int)OrderStatus.海关报关状态.失败; result.Message = "海关退单!"; break; case "120": // 海关入库 status = (int)OrderStatus.海关报关状态.成功; result.Message = "海关入库成功!"; break; default: status = (int)OrderStatus.海关报关状态.失败; result.Message = "海关推送失败!"; break; } customsOrderLog.StatusCode = ""; //customsOrderLog.StatusCode = orderReturn["returnStatus"].InnerText; customsOrderLog.StatusMsg = orderReturn["returnInfo"].InnerText; if (resultDic.ContainsKey(orderId)) { resultDic[orderId] = customsOrderLog.StatusMsg; } else { resultDic.Add(orderId, customsOrderLog.StatusMsg); } BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 2, id); if (customsLogInfo != null) { customsOrderLog.LastUpdateBy = 0; if (BLL.Authentication.AdminAuthenticationBo.Instance.IsLogin) { customsOrderLog.LastUpdateBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; } customsOrderLog.LastUpdateDate = DateTime.Now; customsOrderLog.ReceiptContent = xmlData; customsOrderLog.SysNo = customsLogInfo.SysNo; customsOrderLog.FileName = customsLogInfo.FileName; customsOrderLog.Packets = customsLogInfo.Packets; BLL.Order.SoCustomsOrderLogBo.Instance.UpdateCustomsOrderLog(customsOrderLog); } } else { _xml = xml["DocRec"]; if (_xml != null) { var status = _xml["Declaration"]["Status"].InnerText; } } } ftp.DeleteFile(FTPUri + FolderOut + fileName);//删除回执文件 #endregion } if (resultDic.ContainsKey(orderId)) { result.Message = resultDic[orderId]; } else { result.Message = "暂无回执"; } } else { var customsLogInfo = BLL.Order.SoCustomsOrderLogBo.Instance.GetCustomsOrderLogInfo(orderId, (int)Code); result.Status = false; result.Message = customsLogInfo != null?customsLogInfo.StatusMsg:"没有找到回执文件,请稍后重试!"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }
/// <summary> /// 获取商品回执 /// </summary> /// <returns></returns> public Result GetRecByType(OrderStatus.商检反馈报文类型 type) { string strType = ""; if (type == Hyt.Model.WorkflowStatus.OrderStatus.商检反馈报文类型.商品检查) { strType = "商品检查"; } if (type == Hyt.Model.WorkflowStatus.OrderStatus.商检反馈报文类型.商品审核报文) { strType = "商品审核"; } Result result = new Result(); try { FtpUtil ftp = new FtpUtil(config.NSIcpInfo.FtpUrl, config.NSIcpInfo.FtpName, config.NSIcpInfo.FtpPassword); string[] fileList = GetCustomsOutResult(type); if (fileList != null) { if (type == Hyt.Model.WorkflowStatus.OrderStatus.商检反馈报文类型.商品检查) { foreach (string fileTxt in fileList) { string msg = ""; Stream stream = ftp.FileStream(config.NSIcpInfo.FtpUrl + "4200.IMPBA.SWBCARGOBACK.REPORT/" + fileTxt, ref msg); //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string txt = reader.ReadToEnd(); //接收回执 if (fileTxt.Contains("DOCREC_")) { Model.Icp.GZNanSha.CustomsResult.Commodity.ROOT root = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Model.Icp.GZNanSha.CustomsResult.Commodity.ROOT>(txt); //更新商检回执信息 if (root.declaration.OrgMessageType == "661105") { CIcp Icp = IcpBo.Instance.GetEntityByMessageIDType(root.declaration.OrgMessageType, root.declaration.OrgMessageID); if (Icp != null) { if (Icp.Status == (int)OrderStatus.商检状态.已推送) { IcpBo.Instance.UpdatePlatDocRecByMessageID(root.declaration.OrgMessageID, txt, root.declaration.Status); if (root.declaration.Status == "10") { IcpBo.Instance.UpdateStatus(root.declaration.OrgMessageID, (int)IcpStatus.商品商检推送状态.已接收); } if (root.declaration.Status == "20") { IcpBo.Instance.UpdateStatus(root.declaration.OrgMessageID, (int)IcpStatus.商品商检推送状态.申报失败); IcpBo.Instance.UpdateEntGoodsNoByMessageID(root.declaration.OrgMessageID, "None"); } } } } } } } } if (type == Hyt.Model.WorkflowStatus.OrderStatus.商检反馈报文类型.商品审核报文) { foreach (string fileTxt in fileList) { string msg = ""; Stream stream = ftp.FileStream(config.NSIcpInfo.FtpUrl + "4200.IMPBA.SWBCARGOBACK.AUDIT/out/" + fileTxt, ref msg); //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string txt = reader.ReadToEnd(); Hyt.Model.Icp.GZNanSha.CustomsResult.CommodityAudit.ROOT root = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Model.Icp.GZNanSha.CustomsResult.CommodityAudit.ROOT>(txt); List <Hyt.Model.Icp.GZNanSha.CustomsResult.CommodityAudit.Record> RecordList = root.declaration.GoodsRegRecList.RecordList; foreach (Hyt.Model.Icp.GZNanSha.CustomsResult.CommodityAudit.Record item in RecordList) { //审核通过,更新检验检疫商品备案编号 if (item.RegStatus == "10") { IcpBo.Instance.UpdateNSCIQGoodsNo(item.Gcode, item.CIQGoodsNO); } } } } } result.Status = true; result.Message = strType + "回执获取成功"; } else { result.Status = true; result.Message = strType + "暂未生成相应的回执"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }
/// <summary> /// 获取订单回执 /// </summary> /// <returns></returns> public override Result GetOrderRec() { Result result = new Result(); try { FtpUtil ftp = new FtpUtil(config.NSIcpInfo.FtpUrl, config.NSIcpInfo.FtpName, config.NSIcpInfo.FtpPassword); string[] fileList = GetCustomsOutResult(OrderStatus.商检反馈报文类型.商品订单); if (fileList != null) { foreach (string fileTxt in fileList) { string msg = ""; Stream stream = ftp.FileStream(config.NSIcpInfo.FtpUrl + "4200.IMPBA.SWBEBTRADE.REPORT/" + fileTxt, ref msg); //设置当前流的位置为流的开始,防止读取位置错误造成无法读取完整流的内容 stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(stream)) { string txt = reader.ReadToEnd(); //接收回执 if (fileTxt.Contains("DOCREC_")) { Model.Icp.GZNanSha.CustomsResult.Commodity.ROOT root = Hyt.Util.Serialization.SerializationUtil.XmlDeserialize <Model.Icp.GZNanSha.CustomsResult.Commodity.ROOT>(txt); //更新商检回执信息 if (root.declaration.OrgMessageType == "661101") { CIcp Icp = IcpBo.Instance.GetEntityByMessageIDType(root.declaration.OrgMessageType, root.declaration.OrgMessageID); if (Icp != null) { if (Icp.Status == (int)OrderStatus.商检状态.已推送) { IcpBo.Instance.UpdatePlatDocRecByMessageID(root.declaration.OrgMessageID, txt, root.declaration.Status); //Status: 10 入库成功,20 出错 if (root.declaration.Status == "10") { //更新订单的商检推送状态为已通过 IcpBo.Instance.UpdateStatus(root.declaration.OrgMessageID, (int)IcpStatus.商品商检推送状态.已接收); SoOrderBo.Instance.UpdateOrderNsStatus(Icp.SourceSysNo, (int)OrderStatus.商检状态.已通过); } if (root.declaration.Status == "20") { //更新订单的商检推送状态为未推送 IcpBo.Instance.UpdateStatus(root.declaration.OrgMessageID, (int)IcpStatus.商品商检推送状态.申报失败); SoOrderBo.Instance.UpdateOrderNsStatus(Icp.SourceSysNo, (int)OrderStatus.商检状态.未推送); } } } } } } } result.Status = true; result.Message = "商品订单回执获取成功"; } else { result.Status = true; result.Message = "暂未生成相应的回执"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }