/// <summary> /// 收银支付 /// </summary> /// <param name="mOrder">订单mOrder</param> /// <param name="mUser">当前操作员model</param> /// <param name="mCompany">当前公司model</param> /// <param name="messge">消息</param> /// <returns></returns> public bool CashRegisterPay(Tb_Ticket_Order mOrder, User_Employees mUser, User_Company mCompany, out string messge) { lock (lockobject) { bool result = false; messge = ""; try { //修改订单 状态 和 添加日志 #region 1.修改订单 StringBuilder updateOrder = new StringBuilder(); updateOrder.Append(" update Tb_Ticket_Order set "); updateOrder.Append(" PayWay=15,"); updateOrder.Append(" PayTime='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "', ");//支付时间 updateOrder.Append(" OrderStatusCode=3 "); updateOrder.Append(" where OrderId='" + mOrder.OrderId + "'"); #endregion #region 2.添加订单日志 //2 OrderId varchar 50 0 订单编号 //3 OperType varchar 10 0 操作类型:预订、支付、出票、修改等。 //4 OperTime datetime 23 3 操作时间 //5 OperLoginName varchar 50 0 操作员登录名 //6 OperUserName varchar 100 0 操作员名称 //7 CpyNo varchar 50 0 公司编号 //8 CpyType int 4 0 公司类型 //9 CpyName varchar 100 0 公司名称 //10 OperContent text 4 0 操作内容描述 //11 WatchType int 4 0 查看权限(1.平台 2.运营 3.供应 4.分销 5.采购) string Content = "线下收银"; Log_Tb_AirOrder OrderLog = new Log_Tb_AirOrder(); OrderLog.id = Guid.NewGuid(); OrderLog.OrderId = mOrder.OrderId; OrderLog.OperType = "支付"; OrderLog.OperTime = DateTime.Now; OrderLog.OperLoginName = mUser.LoginName; OrderLog.OperUserName = mUser.UserName; OrderLog.CpyNo = mCompany.UninCode; OrderLog.CpyType = mCompany.RoleType; OrderLog.CpyName = mCompany.UninAllName; OrderLog.OperContent = Content; OrderLog.WatchType = 5; #endregion #region 添加到数据 List<string> sqlList = new List<string>(); sqlList.Add(updateOrder.ToString()); string LogTbAirOrder = Dal.Mapping.MappingHelper<Log_Tb_AirOrder>.CreateInsertModelSql(OrderLog); sqlList.Add(LogTbAirOrder); //添加到数据 result = new Dal.ControlBase.BaseData<Tb_Order_PayDetail>().ExecuteSqlTran(sqlList); #endregion } catch (Exception) { messge = "支付异常!"; } return result; } }
/* BSP常见错误信息 * MRT:HT0LYJ IGNORED * INCOMPLETE PNR/FN * PLEASE CHECK TKT ELEMENT * CHECK BLINK CODE * ELE NBR */ /// <summary> /// BSP订单处理 /// </summary> /// <param name="Order"></param> private void BspHandle(Tb_Ticket_Order Order, List <ListParam> LPList, BSPShowLog Log) { //订单日志 StringBuilder sbLog = new StringBuilder(); if (Order != null) { //订单出票公司信息 ListParam TicketLP = LPList.Find(delegate(ListParam _tempLP) { return(Order.OwnerCpyNo.Contains(_tempLP.CpyNo)); }); //编码解析类 PnrAnalysis.FormatPNR pnrFormat = new PnrAnalysis.FormatPNR(); //判断标识 List <string> NumTickList = new List <string>(); List <string> PTList = null; List <Tb_Ticket_Passenger> PasList = null; try { Log(0, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "订单号:" + Order.OrderId + "=======================start=====================\r\n"); string GYCpyNo = Order.OwnerCpyNo; if (GYCpyNo.Length >= 12) { GYCpyNo = GYCpyNo.Substring(0, 12); } string CarrayCode = Order.CarryCode.Split('/')[0]; Tb_Ticket_PrintOffice PrintOffice = GetPrintOffice(GYCpyNo, CarrayCode); if (PrintOffice == null || PrintOffice.PrintCode == "") { Log(0, string.Format("{0}未设置打票机号,请手动出票!", CarrayCode)); sbLog.Append(string.Format("{0}未设置打票机号,请手动出票!", CarrayCode)); return; } //出票Office string pOffice = string.IsNullOrEmpty(PrintOffice.OfficeCode) ? Order.PrintOffice : PrintOffice.OfficeCode; string PrintCode = PrintOffice.PrintCode; string Pnr = Order.PNR;//Pnr编码 if (pOffice == "") { Log(0, string.Format("{0}出票Office不能为空!", CarrayCode)); sbLog.Append(string.Format("{0}出票Office不能为空!", CarrayCode)); return; } //获取乘客 string sqlWhere = string.Format(" OrderId='{0}' order by PassengerType", Order.OrderId); Tb_Ticket_Passenger pMode = null; PasList = Manage.CallMethod("Tb_Ticket_Passenger", "GetList", null, new object[] { sqlWhere }) as List <Tb_Ticket_Passenger>; if (PasList == null || PasList.Count == 0) { Log(0, string.Format("订单号:{0}没有找到对应的乘客信息!", Order.OrderId)); sbLog.Append(string.Format("订单号:{0}没有找到对应的乘客信息!", Order.OrderId)); return; } else { pMode = PasList[0]; } List <Bd_Base_Parameters> baseParamList = Manage.CallMethod("Bd_Base_Parameters", "GetList", null, new Object[] { "CpyNo='" + GYCpyNo + "'" }) as List <Bd_Base_Parameters>; ConfigParam config = Bd_Base_ParametersBLL.GetConfigParam(baseParamList); //指令管理类 //SendInsManage SendManage = new SendInsManage(Order.OwnerCpyNo, GYCpyNo, config); if (config == null) { Log(0, string.Format("订单号{0},公司{1}未设置使用配置信息,请设置!", Order.OrderId, CarrayCode)); sbLog.Append(string.Format("订单号{0},公司{1}未设置使用配置信息,请设置!", Order.OrderId, CarrayCode)); return; } if (string.IsNullOrEmpty(Order.PNR)) { Log(0, string.Format("订单号{0}中没有PNR,请检查!", Order.OrderId)); sbLog.Append(string.Format("订单号{0}中没有PNR,请检查!", Order.OrderId)); return; } ParamObject PM = new ParamObject(); PM.ServerIP = config.WhiteScreenIP; PM.ServerPort = int.Parse(config.WhiteScreenPort); PM.Office = pOffice; //发送指令 string SendIns = "RT" + Pnr; //返回数据 string Recvdata = string.Empty; PM.code = SendIns; PM.IsPn = true; // Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); //授权检查 if (Recvdata.ToUpper().Contains("授权")) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},发送指令需要授权!", Order.OrderId, Pnr, pOffice)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},发送指令需要授权!", Order.OrderId, Pnr, pOffice)); return; } else if (Recvdata.ToUpper().Contains("CANCELLED")) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码已取消,出票失败!", Order.OrderId, Pnr, pOffice)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码已取消,出票失败!", Order.OrderId, Pnr, pOffice)); return; } string Msg = ""; string Xe = "", RR = ""; string PnrStatus = pnrFormat.GetPnrStatus(Recvdata, out Msg); if (PnrStatus.Contains("NO")) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},不能自动出票!!", Order.OrderId, Pnr, pOffice, PnrStatus)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},不能自动出票!!", Order.OrderId, Pnr, pOffice, PnrStatus)); return; } //存在的票号 PTList = GetTicketNum(Pnr, Recvdata.ToUpper(), pnrFormat); List <string> RRList = null; List <string> XEList = null; if (PTList.Count == 0) { Start: { //进行出票 HashObject hash = GetNumList(Recvdata); XEList = hash["XEList"] as List <string>; RRList = hash["RRList"] as List <string>; List <string> StartXeList = hash["StartXeList"] as List <string>; //XE项 if (StartXeList.Count > 0) { for (int i = 0; i < StartXeList.Count; i++) { string XeStr = StartXeList[i]; if (XeStr != "") { //发送指令 SendIns = "RT" + Pnr + "|XE" + XeStr + "|@"; PM.code = SendIns; PM.IsPn = false; //Recvdata = SendNewPID.SendCommand(PM);//MRT:JG61M2 IGNORED Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); //判断是否XE成功 if (pnrFormat.INFMarkIsOK(Recvdata, out Msg)) { /* 3U8881 E TU30APR CTUPEK HK1 0730 1005 * JG61M2 - 航空公司使用自动出票时限, 请检查PNR *** 预订酒店指令HC, 详情 HC:HELP *** */ //发送指令 SendIns = "RT" + Pnr; PM.code = SendIns; PM.IsPn = true; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); goto Start; } } } } } string patPrice = "pat:a"; if (!Order.IsChdFlag) { //成人 patPrice = "pat:a"; } else { //儿童 patPrice = "pat:a*ch"; } //发送指令 SendIns = "RT" + Pnr + "|" + patPrice; PM.code = SendIns; PM.IsPn = false; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); if (Recvdata.IndexOf("PAT") == -1) { //发送指令 Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码已取消,未能PAT出票价,出票失败!", Order.OrderId, Pnr, pOffice)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码已取消,未能PAT出票价,出票失败!", Order.OrderId, Pnr, pOffice)); return; } //比较 string xuhao = "", Seat = "", Err = ""; decimal _xsFare = 0m; bool IsExistParice = false; PnrAnalysis.PatModel PAT = pnrFormat.GetPATInfo(Recvdata.Replace("\r", ""), out Err); foreach (PatInfo pat in PAT.UninuePatList) { decimal.TryParse(pat.Fare, out _xsFare); //存在此价格 if (_xsFare == pMode.PMFee) { IsExistParice = true; xuhao = pat.SerialNum; Seat = pat.SeatGroup; break; } } if (!IsExistParice) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},舱位价{3}与Pat价格{4}不一致,出票失败!", Order.OrderId, Pnr, pOffice, pMode.PMFee, _xsFare)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},舱位价{3}与Pat价格{4}不一致,出票失败!", Order.OrderId, Pnr, pOffice, pMode.PMFee, _xsFare)); return; } //做价格进去 SendIns = "RT" + Pnr + "|" + patPrice + "|SFC:" + xuhao + "|@"; PM.code = SendIns; PM.IsPn = false; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); if (Recvdata.Contains("超时") || Recvdata.Contains("NO PNR")) { //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); } //做备注 decimal _Discount = 0m; if (decimal.TryParse(Order.Discount, out _Discount) && Order.Space.IndexOf("Y") == -1 && Order.Space.IndexOf("C") == -1 && Order.Space.IndexOf("F") == -1 && _Discount < 100) { //做价格进去 SendIns = "RT" + Pnr + "|EI:不得签转|@"; PM.code = SendIns; PM.IsPn = false; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); if (Recvdata != "" && Recvdata.Contains("超时")) { //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); } } foreach (string item in XEList) { if (item != "") { Xe += "XE" + item + "|"; } } foreach (string item in RRList) { if (item != "") { RR += item + "RR" + "|"; } } if (Xe.Trim(new char[] { '|' }) == "") { Xe = ""; } else { Xe = "|" + Xe.Trim('|') + "|"; } if (RR.Trim(new char[] { '|' }) == "") { RR = ""; } else { RR = "|" + RR.Trim('|') + "|"; } if (RR == "") { RR = "|"; } if (XEList == null || XEList.Count == 0 || Xe == "") { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},未能取出出票时限!!", Order.OrderId, Pnr, pOffice, PnrStatus)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},未能取出出票时限!!", Order.OrderId, Pnr, pOffice, PnrStatus)); return; } //组合打票指令 string etdz = "rt" + Pnr + Xe + RR.TrimEnd('|') + "|ETDZ " + PrintCode; etdz = etdz.Replace("||", "|"); //出票 SendIns = etdz; PM.code = SendIns; PM.IsPn = false; // Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); if (Recvdata.Contains("超时") || Recvdata.Contains("NO PNR")) { //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); } if (Recvdata.Contains("请输入证件信息")) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},编码中没有证件号,请输入证件信息,否则不能出票!", Order.OrderId, Pnr, pOffice, PnrStatus)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3},编码中没有证件号,请输入证件信息,否则不能出票!", Order.OrderId, Pnr, pOffice, PnrStatus)); return; } if (Recvdata.ToUpper().Contains("STOCK")) { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3}," + Recvdata + "没有票号了!", Order.OrderId, Pnr, pOffice, PnrStatus)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3}," + Recvdata + "没有票号了!", Order.OrderId, Pnr, pOffice, PnrStatus)); return; } //出票成功 if (Recvdata.Contains("CNY") && Recvdata.ToUpper().Contains(Pnr.ToUpper())) { /*CNY2730.00 HF9550 * 876-3250823439 876-3250823441 */ SendIns = "RT" + Pnr; PM.code = SendIns; PM.IsPn = true; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); //存在的票号 PTList = GetTicketNum(Pnr, Recvdata.ToUpper(), pnrFormat); } else { //出票失败 重试 if (!Recvdata.ToUpper().Contains("**ELECTRONIC TICKET PNR**") && Recvdata.ToUpper().Contains("SSR TKNE") && Recvdata.ToUpper().Contains("/DPN") && Recvdata.ToUpper().Contains("RMK " + CarrayCode + "/")) { //"ETRY:" 重试指令 SendIns = "RT" + Pnr + "|ETRY:"; PM.code = SendIns; PM.IsPn = false; //Recvdata = SendNewPID.SendCommand(PM); Recvdata = WriteLogDB(PM, TicketLP); //指令日志 Log(0, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Order.OrderId, SendIns, Recvdata)); } else { Log(0, string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3}," + "出票失败,{4}", Order.OrderId, Pnr, pOffice, PnrStatus, Recvdata)); sbLog.Append(string.Format("订单号{0},编码{1} 出票Office{2},编码状态为{3}," + "出票失败,{4}", Order.OrderId, Pnr, pOffice, PnrStatus, Recvdata)); } } } } catch (Exception ex) { Log(0, string.Format("订单号{0},出票异常:{1}", Order.OrderId, ex.Message + ex.Source + ex.StackTrace.ToString())); sbLog.Append(string.Format("订单号{0},出票异常:{1}", Order.OrderId, ex.Message + ex.Source + ex.StackTrace.ToString())); } finally { string TicketMsg = ""; Log_Tb_AirOrder OrderLog = new Log_Tb_AirOrder(); //执行SQl语句 List <string> sqlList = new List <string>(); //修改订单数据列表 List <string> OrderList = new List <string>(); if (TicketLP != null) { //解锁 OrderList.Add(" LockCpyNo='' "); OrderList.Add(" LockLoginName='' "); OrderList.Add(" LockTime='1900-01-01' "); OrderList.Add(" CPTime=getdate() "); OrderList.Add(" CPName='管理员' "); OrderList.Add(string.Format(" CPCpyNo='{0}' ", TicketLP.CpyNo)); OrderList.Add(" CPRemark='BSP自动出票' "); OrderList.Add(string.Format(" CPCpyName='{0}' ", TicketLP.UninAllName)); //日志 OrderLog.id = Guid.NewGuid(); OrderLog.OrderId = Order.OrderId; OrderLog.OperType = "出票"; OrderLog.OperTime = DateTime.Now; OrderLog.OperLoginName = "管理员"; OrderLog.OperUserName = "******"; OrderLog.CpyNo = TicketLP.CpyNo; OrderLog.CpyType = 1; OrderLog.CpyName = TicketLP.UninAllName; } if (PTList != null && PTList.Count > 0 && PasList != null && PasList.Count > 0) { string PasName = "", TicketNumber = ""; for (int i = 0; i < PTList.Count; i++) { if (PTList[i].Split('|').Length == 2) { TicketNumber = PTList[i].Split('|')[0]; PasName = PTList[i].Split('|')[1]; Tb_Ticket_Passenger Passenger = PasList.Find(delegate(Tb_Ticket_Passenger _tempPassenger) { return(PTList[i].ToUpper().Trim().Contains(_tempPassenger.PassengerName.ToUpper().Trim())); }); if (Passenger != null) { sqlList.Add(string.Format(" update Tb_Ticket_Passenger set TicketNumber='{0}',TicketStatus=2 where id='{1}' and PassengerName='{2}' ", TicketNumber, Passenger.id.ToString(), Passenger.PassengerName)); } } } //修改订单数据 OrderList.Add(" TicketStatus=2 "); OrderList.Add(" OrderStatusCode=4 "); if (OrderList.Count > 0) { sqlList.Add(string.Format(" update Tb_Ticket_Order set {0} where id='{1}' ", string.Join(",", OrderList.ToArray()), Order.id.ToString())); } //出票成功 TicketMsg = "出票成功"; OrderLog.WatchType = 5; //日志 OrderLog.OperContent = "订单号:" + Order.OrderId + " BSP自动出票成功," + string.Format(",", PasList.ToArray()); //修改数据库状态 } else { //出票失败 TicketMsg = "出票失败"; //修改订单自动出票尝试次数 if (Order.AutoPrintTimes > 3)//尝试次数大于3改为手动出票 { sqlList.Add(string.Format(" update Tb_Ticket_Order set AutoPrintFlag=0,AutoPrintTimes=CAST(AutoPrintTimes as int)+1 where id='{0}' ", Order.id.ToString())); } else { sqlList.Add(string.Format(" update Tb_Ticket_Order set AutoPrintTimes=CAST(AutoPrintTimes as int)+1 where id='{0}' ", Order.id.ToString())); } OrderLog.WatchType = 2; //日志 OrderLog.OperContent = "BSP自动出票失败," + sbLog.ToString(); } //日志 string tempSql = Dal.Mapping.MappingHelper <Log_Tb_AirOrder> .CreateInsertModelSql(OrderLog); sqlList.Add(tempSql); string Msg = ""; //修改数据库 if (!Manage.ExecuteSqlTran(sqlList, out Msg)) { Log(0, string.Format("订单号{0},修改数据库失败:{1}", Order.OrderId, Msg)); } Log(0, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "订单号:" + Order.OrderId + " " + TicketMsg + "=======================end=====================\r\n"); } } }
/// <summary> /// 挂起解挂处理 /// </summary> private void Process() { IList <Tb_Ticket_Passenger> mPassenger = ViewState["mPassenger"] as IList <Tb_Ticket_Passenger>; Tb_Ticket_Order mOrder = ViewState["mOrder"] as Tb_Ticket_Order; if (mOrder == null) { return; } //操作日志 StringBuilder sbLog = new StringBuilder(); List <Tb_Ticket_Passenger> SelPasList = new List <Tb_Ticket_Passenger>(); List <string> SelPasIdsList = new List <string>(); sbLog.Append("对乘客 "); for (int i = 0; i < RepPassenger.Items.Count; i++) { string id = (RepPassenger.Items[i].FindControl("hid_Id") as System.Web.UI.HtmlControls.HtmlInputHidden).Value; bool isOk = ((CheckBox)RepPassenger.Items[i].FindControl("cboSelect")).Checked; for (int j = 0; j < mPassenger.Count; j++) { if (id == mPassenger[j].id.ToString()) { if (isOk) { SelPasList.Add(mPassenger[i]); SelPasIdsList.Add("'" + mPassenger[i].id + "'"); sbLog.Append(mPassenger[i].PassengerName + ","); } } } } //没有选中乘客 if (SelPasIdsList.Count == 0) { return; } string opLog = ""; //解挂 if (ViewState["Type"].ToString() == "1") { sbLog.Append(" 进行机票解挂"); opLog = "机票解挂"; } //挂起 else { sbLog.Append(" 进行机票挂起"); opLog = "机票挂起"; } string ErrMsg = ""; TicketSupLock(ViewState["Type"].ToString(), SelPasList, out ErrMsg); sbLog.Append(ErrMsg); //修改SQL List <string> sqlList = new List <string>(); foreach (Tb_Ticket_Passenger pas in SelPasList) { //乘客 sqlList.Add(string.Format(" update Tb_Ticket_Passenger set Suspended={0} where id ='{1}'", pas.Suspended ? "1" : "0", pas.id.ToString())); } //日志信息 Log_Tb_AirOrder OrderLog = new Log_Tb_AirOrder(); OrderLog.id = Guid.NewGuid(); OrderLog.OperContent = sbLog.ToString(); OrderLog.OperLoginName = mUser.LoginName; OrderLog.OperTime = DateTime.Now; OrderLog.OperType = opLog; OrderLog.OperUserName = mUser.UserName; OrderLog.OrderId = mOrder.OrderId; OrderLog.WatchType = mCompany.RoleType; OrderLog.CpyName = mCompany.UninAllName; OrderLog.CpyNo = mCompany.UninCode; OrderLog.CpyType = mCompany.RoleType; OrderLog.WatchType = mCompany.RoleType; sqlList.Add(PbProject.Dal.Mapping.MappingHelper <Log_Tb_AirOrder> .CreateInsertModelSql(OrderLog));//3.添加订单日志 //修改数据库 bool IsSuc = this.baseDataManage.ExecuteSqlTran(sqlList, out ErrMsg); string url = ViewState["Url"].ToString(); if (IsSuc) { ScriptManager.RegisterStartupScript(this, GetType(), Guid.NewGuid().ToString(), "showdialog('操作成功!',{op:1,url:'" + url + "'});", true); PageDataBind(); } else { ScriptManager.RegisterStartupScript(this, GetType(), Guid.NewGuid().ToString(), "showdialog('操作失败!',{op:0,url:'" + url + "'});", true); } }
/// <summary> /// 生成没有政策信息的订单,确定订单时回写政策数据 /// </summary> /// <param name="FQP"></param> /// <param name="msg"></param> /// <returns></returns> private bool GenerationOrder(UserLoginInfo userLogin, List <Tb_Ticket_SkyWay> skyWay, List <Tb_Ticket_Passenger> pasList, RePnrObj pnrInfo, out string msg) { bool IsSuc = false; msg = ""; //儿童备注关联成人编码 string RmkAdultPnr = ""; //是否为两个订单 bool IsSecOrder = false; bool IsExistAdult = false; bool IsExistCHD = false; bool IsExistINF = false; try { Tb_Ticket_Order AdultOrder = null, ChildOrder = null; if (userLogin.Company == null || userLogin.BaseParametersList == null) { msg = "mCompany公司信息丢失"; return(IsSuc); } //订单管理 Tb_Ticket_OrderBLL OrderManage = new Tb_Ticket_OrderBLL(); OrderInputParam OrderParam = new OrderInputParam(); OrderMustParamModel ParamModel = new OrderMustParamModel(); //构造生成订单需要的信息 List <Tb_Ticket_SkyWay> SkyWay1 = skyWay; //构造乘客信息 List <Tb_Ticket_Passenger> Paslist = pasList; //订单日志记录 Log_Tb_AirOrder logOrder = new Log_Tb_AirOrder(); logOrder.OperTime = DateTime.Now; logOrder.OperType = "创建订单"; logOrder.OperContent = userLogin.User.LoginName + "于" + logOrder.OperTime + "创建订单。"; logOrder.OperLoginName = userLogin.User.LoginName; logOrder.OperUserName = userLogin.User.UserName; logOrder.CpyNo = userLogin.Company.UninCode; logOrder.CpyName = userLogin.Company.UninName; logOrder.CpyType = userLogin.Company.RoleType; logOrder.WatchType = 5; if (IsExistCHD) { //添加权限 是否可以预定儿童票 未加 if (userLogin.FQP.GongYingKongZhiFenXiao != null && userLogin.FQP.GongYingKongZhiFenXiao.Contains("|90|")) { msg = "目前暂时无法预订儿童票!"; } } //关联成人订单号 if (isAsAdultOrder) { #region 关联成人订单号 //开启儿童编码必须关联成人编码或者成人订单号 if (userLogin.FQP.KongZhiXiTong != null && userLogin.FQP.KongZhiXiTong.Contains("|95|")) { string sqlWhere = ""; //儿童订单关联成人订单号 if (cHDAssociationAdultOrderId == "") { msg = "关联成人订单不能为空!"; } else { sqlWhere = string.Format(" OrderId='{0}' ", cHDAssociationAdultOrderId); List <Tb_Ticket_Order> list = baseDataManage.CallMethod("Tb_Ticket_Order", "GetList", null, new object[] { sqlWhere }) as List <Tb_Ticket_Order>; if (list != null && list.Count > 0) { if (list[0].IsChdFlag) { msg = "该订单非成人订单!"; } else { if (string.IsNullOrEmpty(list[0].PNR)) { msg = "该订单还未生成编码!"; } else if (list[0].OrderStatusCode < 4) { msg = "关联成人订单未出票!"; } else { RmkAdultPnr = list[0].PNR; } //添加权限是否验证 儿童航段与关联成人航段信息是否一致 还未加权限 if (userLogin.FQP.KongZhiXiTong == null || !userLogin.FQP.KongZhiXiTong.Contains("|91|")) { if (msg == "" && !ValSkyWay(cHDAssociationAdultOrderId, SkyWay1)) { msg = "成人订单航程与儿童订单航程信息不一致,无法预定!"; } } } } else { msg = "关联成人订单不存在!"; } } } #endregion } //关联订单号通过 if (msg == "") { #region 生成编码记录编码信息 //航空公司 出票Office 和儿童编码所备注的成人编码 string defaultOffice = userLogin.Configparam.Office.Split('^')[0]; string CpyNo = userLogin.Company.UninCode, CarryCode = SkyWay1[0].CarryCode; string PrintOffice = GetPrintOffice(CpyNo, CarryCode); if (!string.IsNullOrEmpty(PrintOffice)) { //Office = PrintOffice; } //记录指令 SaveInsInfo(pnrInfo, userLogin); pnrInfo.PrintOffice = PrintOffice; //记录Pnr日志Id= List <string> pnrLogList = new List <string>(); string AdultPnr = string.Empty; string childPnr = string.Empty; //成人预订信息编码记录 if (pnrInfo.AdultYudingList.Count > 0) { AdultPnr = pnrInfo.AdultPnr; if (string.IsNullOrEmpty(AdultPnr) || AdultPnr.Trim().Length != 6) { //提示pnr失败信息 string yudingRecvData = pnrInfo.AdultYudingList.Values[0]; msg = ShowPnrFailInfo(1, yudingRecvData); AdultPnr = ""; } //记录编码日志 YuDingPnrLog(userLogin, pnrInfo, pnrInfo.AdultYudingList.Keys[0], pnrInfo.AdultYudingList.Values[0], AdultPnr, pnrInfo.Office, ref pnrLogList); if (AdultPnr.Length == 6 && (pnrInfo.PatModelList[0] == null || pnrInfo.PatModelList[0].PatList.Count == 0)) { msg = "成人编码" + AdultPnr + "未能PAT取到价格,原因如下:<br />" + pnrInfo.PatList[0]; } } //儿童预订信息编码记录 if (pnrInfo.ChildYudingList.Count > 0) { childPnr = pnrInfo.childPnr; if (string.IsNullOrEmpty(childPnr) || childPnr.Trim().Length != 6) { //提示pnr失败信息 string yudingRecvData = pnrInfo.ChildYudingList.Values[0]; msg = ShowPnrFailInfo(2, yudingRecvData); childPnr = ""; } //记录编码日志 YuDingPnrLog(userLogin, pnrInfo, pnrInfo.ChildYudingList.Keys[0], pnrInfo.ChildYudingList.Values[0], childPnr, pnrInfo.Office, ref pnrLogList); if (childPnr.Length == 6 && (pnrInfo.PatModelList[1] == null || pnrInfo.PatModelList[1].PatList.Count == 0)) { msg = "儿童编码" + childPnr + "未能PAT取到价格,原因如下:<br />" + pnrInfo.PatList[0]; } } #endregion #region 组合生成订单所需要的实体数据 //成人+婴儿 成人+成人 儿童+备注成人订单号 只生成一个订单 //成人+儿童且没有备注订单号 成人+儿童+婴儿 生成两个订单 //存在儿童 也存在成人 if (IsExistCHD && IsExistAdult) { if (!isAsAdultOrder) { IsSecOrder = true; //生成儿童订单 List <Tb_Ticket_SkyWay> SkyWay2 = skyWay; //儿童乘客列表 List <Tb_Ticket_Passenger> ChildList = new List <Tb_Ticket_Passenger>(); foreach (Tb_Ticket_Passenger pas in Paslist) { if (pas.PassengerType == 2) { ChildList.Add(pas); } } ChildOrder = GetOrder(userLogin, true, ChildList, SkyWay2); Log_Tb_AirOrder logOrder1 = new Log_Tb_AirOrder(); logOrder1.OperTime = DateTime.Now; logOrder1.OperType = "创建订单"; logOrder1.OperContent = userLogin.User.LoginName + "于" + logOrder.OperTime + "创建订单。"; logOrder1.OperLoginName = userLogin.User.LoginName; logOrder1.OperUserName = userLogin.User.UserName; logOrder1.CpyNo = userLogin.Company.UninCode; logOrder1.CpyName = userLogin.Company.UninName; logOrder1.CpyType = userLogin.Company.RoleType; logOrder1.WatchType = 5; //加入参数 OrderMustParamModel ParamModel1 = new OrderMustParamModel(); OrderParam.PnrInfo = pnrInfo; ParamModel1.PasList = ChildList; ParamModel1.SkyList = SkyWay2; ParamModel1.Order = ChildOrder; ParamModel1.LogOrder = logOrder1; //加入集合 OrderParam.OrderParamModel.Add(ParamModel1); } } //为两个订单时 if (IsSecOrder) { //排除儿童乘客 List <Tb_Ticket_Passenger> NotCHDList = new List <Tb_Ticket_Passenger>(); foreach (Tb_Ticket_Passenger item in Paslist) { if (item.PassengerType != 2) { NotCHDList.Add(item); } } Paslist = NotCHDList; AdultOrder = GetOrder(userLogin, false, Paslist, SkyWay1); } else { //为一个订单时 AdultOrder = GetOrder(userLogin, IsExistCHD, Paslist, SkyWay1); if (isAsAdultOrder) { AdultOrder.PNR = RmkAdultPnr; AdultOrder.AssociationOrder = cHDAssociationAdultOrderId; } } // 是否有婴儿 AdultOrder.HaveBabyFlag = IsExistINF; // OrderParam.PnrInfo = pnrInfo; ParamModel.PasList = Paslist; ParamModel.SkyList = SkyWay1; ParamModel.Order = AdultOrder; ParamModel.LogOrder = logOrder; //加入集合 OrderParam.OrderParamModel.Add(ParamModel); #endregion if (pnrLogList.Count > 0 && !(AdultPnr == "" && childPnr == "")) { string UpdatePnrLogSQL = string.Format(" update Log_Pnr set OrderFlag=1 where id in({0}) ", string.Join(",", pnrLogList.ToArray())); OrderParam.ExecSQLList.Add(UpdatePnrLogSQL); } } //前面都通过 if (msg == "") { string ErrMsg = ""; //生成订单 IsSuc = OrderManage.CreateOrder(ref OrderParam, out ErrMsg); List <string> Paramlist = new List <string>(); //两个订单url处理 foreach (OrderMustParamModel item in OrderParam.OrderParamModel) { if (item.Order.IsChdFlag) { Paramlist.Add("ChildOrderId=" + item.Order.OrderId); } else { Paramlist.Add("AdultOrderId=" + item.Order.OrderId); } } if (IsSuc) { msg = string.Join("&", Paramlist.ToArray()); } else { //出错信息 msg = ErrMsg; } } } catch (Exception ex) { //异常信息 msg = ex.Message; IsSuc = false; } return(IsSuc); }
//自动取消处理线程 public static void XEPNRProcess() { string SendIns = string.Empty; string RecvData = string.Empty; string Office = string.Empty; string ErrMsg = string.Empty; string Pnr = string.Empty; string OrderId = string.Empty; PnrAnalysis.FormatPNR pnrFormat = new FormatPNR(); while (true) { try { SendIns = string.Empty; RecvData = string.Empty; Office = string.Empty; ErrMsg = string.Empty; Pnr = string.Empty; OrderId = string.Empty; //组织订单过滤条件 //订单来源:白屏预订PNR string tmpSQL = " OrderSourceType=1 " + //订单状态:新订单,等待支付 "and OrderStatusCode=1 " + //支付状态:未付 "and PayStatus=0 " + //预订公司编号(归属的落地运营商编号范围) "and left(OwnerCpyNo,12) in (" + string.Join(",", m_XePNRInfo.CompanyNoList.ToArray()) + ") " + //预定时间超过设置取消时间值 " and DateDiff(minute,CreateTime,getdate())>" + m_XePNRInfo.XEMinutes.ToString() + //3天内的预定订单 " and DateDiff(day,CreateTime,getdate())<" + XePNR.m_XePNRInfo.day.ToString(); //取消订单表 List <Tb_Ticket_Order> list = Manage.CallMethod("Tb_Ticket_Order", "GetList", null, new object[] { tmpSQL }) as List <Tb_Ticket_Order>; //滤过的PNR List <string> tempPntList = new List <string>(); for (int i = 0; i < list.Count; i++) { //停止服务,则退出处理 if (m_XePNRInfo.EndFlag || XeLog == null) { return; } Tb_Ticket_Order tmpTicketOrder = list[i]; ///控制权限 string KonZhiXT = GetGYParameters(tmpTicketOrder.OwnerCpyNo); //是否关闭后台自动取消编码功能 if (KonZhiXT != null && KonZhiXT.Contains("|98|")) { continue; } #region 过滤掉已经处理的PNR if (tempPntList.Contains("'" + tmpTicketOrder.PNR + "'")) { continue; } #endregion #region 检查同一编码、同一预订公司下是否存在已付款的订单 //包括收银 string tmpSQL3 = " PNR='" + tmpTicketOrder.PNR + "'" + " and CreateTime>='" + tmpTicketOrder.CreateTime.ToString("yyyy-MM-dd") + "' and ( (OrderStatusCode in(3,4) and PayStatus=0) or PayStatus=1 or OrderStatusCode=4 )"; bool flag1 = (bool)Manage.CallMethod("Tb_Ticket_Order", "IsExist", null, new object[] { tmpSQL3 }); if (flag1) { if (tmpTicketOrder.PNR != "") { tempPntList.Add("'" + tmpTicketOrder.PNR + "'"); } //存在已经支付的订单,略过 //记录日志 Log.Record("XePnr.log", "订单号:" + tmpTicketOrder.OrderId + ",PNR编号:" + tmpTicketOrder.PNR + "存在已经付款订单,略过该PNR..."); continue; } #endregion 检查同一编码、同一预订公司下是否存在已付款的订单 #region 提取并检查PNR是否已经出票或RR状态,如果是则略过 string GYCpyNo = tmpTicketOrder.OwnerCpyNo; if (GYCpyNo.Length >= 12) { GYCpyNo = GYCpyNo.Substring(0, 12); } List <Bd_Base_Parameters> baseParamList = Manage.CallMethod("Bd_Base_Parameters", "GetList", null, new Object[] { "CpyNo='" + GYCpyNo + "'" }) as List <Bd_Base_Parameters>; ConfigParam config = Bd_Base_ParametersBLL.GetConfigParam(baseParamList); if (config == null) { XeLog(1, string.Format("订单号{0},落地运营商未设置使用配置信息,请设置!", tmpTicketOrder.OrderId)); //移除该落地运营商 该落地运营商未设置配置参数 if (m_XePNRInfo.CompanyNoList.Contains("'" + GYCpyNo + "'")) { m_XePNRInfo.CompanyNoList.Remove("'" + GYCpyNo + "'"); } continue; } OrderId = tmpTicketOrder.OrderId; Office = string.IsNullOrEmpty(tmpTicketOrder.Office) ? config.Office.Split('^')[0] : tmpTicketOrder.Office; if (string.IsNullOrEmpty(Office)) { XeLog(1, string.Format("订单号{0}中没有Office或者落地运营商没有设置Office,请检查!", OrderId)); //移除该落地运营商 该落地运营商未设置配置参数 if (m_XePNRInfo.CompanyNoList.Contains("'" + GYCpyNo + "'")) { m_XePNRInfo.CompanyNoList.Remove("'" + GYCpyNo + "'"); } continue; } Pnr = tmpTicketOrder.PNR; if (string.IsNullOrEmpty(tmpTicketOrder.PNR) || (tmpTicketOrder.PNR.Trim() == "")) { XeLog(1, string.Format("订单号{0}中没有PNR,更改为已取消订单!", OrderId)); //更改订单状态为已经取消订单 string tempSql = "update Tb_Ticket_Order set OrderStatusCode=2,TicketStatus=6 where id='" + tmpTicketOrder.id + "'"; Manage.ExecuteNonQuerySQLInfo(tempSql); continue; } Tb_SendInsData SendModel = new Tb_SendInsData(); ParamObject PM = new ParamObject(); PM.ServerIP = config.WhiteScreenIP; PM.ServerPort = int.Parse(config.WhiteScreenPort); PM.Office = Office; //发送指令 SendIns = "RT" + Pnr; PM.code = SendIns; PM.IsPn = true; SendModel.SendIns = SendIns; //发送指令 SendModel.SendInsType = 13; //扫描程序发送的指令 SendModel.SendTime = System.DateTime.Now; //发送时间 SendModel.Office = Office; SendModel.ServerIPAndPort = PM.ServerIP + ":" + PM.ServerPort; SendModel.UserAccount = "扫描程序"; SendModel.CpyNo = GYCpyNo; //返回数据 RecvData = SendNewPID.SendCommand(PM); SendModel.RecvData = RecvData; SendModel.RecvTime = System.DateTime.Now; //记录指令到数据库 LogData(SendModel); //指令日志 XeLog(1, string.Format("\r\n【编码:{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n订单号:{3}\r\n", Pnr, SendIns, RecvData, tmpTicketOrder.OrderId)); if (RecvData.Contains("授权")) { //更改订单状态为已经取消订单 string tempSql = "update Tb_Ticket_Order set OrderStatusCode=2,TicketStatus=6 where id='" + tmpTicketOrder.id + "'"; Manage.ExecuteNonQuerySQLInfo(tempSql); if (tmpTicketOrder.PNR != "") { tempPntList.Add("'" + tmpTicketOrder.PNR + "'"); } XeLog(1, string.Format("订单号{0}中{1} {2},只取消订单不取消编码!", OrderId, Pnr, RecvData)); continue; } string PnrStatus = pnrFormat.GetPnrStatus(RecvData, out ErrMsg); if (!PnrStatus.ToUpper().Contains("HK") && !PnrStatus.ToUpper().Contains("HL") && !PnrStatus.ToUpper().Contains("NO"))//(PnrStatus.Contains("RR") || PnrStatus.Contains("XX")) { if (tmpTicketOrder.PNR != "") { tempPntList.Add("'" + tmpTicketOrder.PNR + "'"); } XeLog(1, string.Format("订单号{0}中{1}状态为{2},只取消订单,不处理PNR!", OrderId, Pnr, PnrStatus)); //更改订单状态为已经取消订单 string tempSql = "update Tb_Ticket_Order set OrderStatusCode=2,TicketStatus=6 where id='" + tmpTicketOrder.id + "'"; Manage.ExecuteNonQuerySQLInfo(tempSql); continue; } #endregion 提取并检查PNR是否已经出票或RR状态,如果是则略过 #region 发送取消PNR指令并检查结果 if (PnrStatus.ToUpper().Contains("HK") || PnrStatus.ToUpper().Contains("HL") || PnrStatus.ToUpper().Contains("NO")) { //取消编码 SendIns = "RT" + Pnr + "|XEPNR@" + Pnr; PM.code = SendIns; PM.IsPn = false; SendModel = new Tb_SendInsData(); SendModel.SendIns = SendIns; //发送指令 SendModel.SendInsType = 13; //扫描程序发送的指令 SendModel.SendTime = System.DateTime.Now; //发送时间 SendModel.Office = Office; SendModel.ServerIPAndPort = PM.ServerIP + ":" + PM.ServerPort; SendModel.UserAccount = "扫描程序"; SendModel.CpyNo = GYCpyNo; //返回数据 RecvData = SendNewPID.SendCommand(PM); SendModel.RecvData = RecvData; SendModel.RecvTime = System.DateTime.Now; //记录指令到数据库 LogData(SendModel); //指令日志 XeLog(1, string.Format("\r\n【订单号{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", OrderId, SendIns, RecvData)); if (RecvData.ToUpper().Contains("CANCELLED")) { //加入不需要取消的列表 tempPntList.Add("'" + tmpTicketOrder.PNR + "'"); //取消编码成功后 取消订单 List <string> ListSQL = new List <string>(); //修改订单数据 string tempSql = "update Tb_Ticket_Order set OrderStatusCode=2,TicketStatus=6 where id='" + tmpTicketOrder.id + "'"; ListSQL.Add(tempSql);// //修改乘客数据 tempSql = "update Tb_Ticket_Passenger set TicketStatus=6 where OrderId='" + OrderId + "'"; ListSQL.Add(tempSql);//1.添加订单日志 //取消编码 订单日志 Log_Tb_AirOrder OrderLog = new Log_Tb_AirOrder(); OrderLog.id = Guid.NewGuid(); OrderLog.OperContent = "订单超过" + m_XePNRInfo.XEMinutes.ToString() + "分钟未能成功支付,系统于" + System.DateTime.Now + "订单自动取消";; OrderLog.OperLoginName = "管理员"; OrderLog.OperTime = DateTime.Now; OrderLog.OperType = "修改"; OrderLog.OperUserName = "******"; OrderLog.OrderId = OrderId; OrderLog.WatchType = 1; //订单出票公司信息 ListParam TicketLP = LPList.Find(delegate(ListParam _tempLP) { return(tmpTicketOrder.OwnerCpyNo.Contains(_tempLP.CpyNo)); }); if (TicketLP != null) { OrderLog.CpyName = TicketLP.UninAllName; OrderLog.CpyNo = TicketLP.CpyNo; OrderLog.CpyType = 1; } else { OrderLog.CpyName = tmpTicketOrder.OwnerCpyName; OrderLog.CpyNo = tmpTicketOrder.OwnerCpyNo; OrderLog.CpyType = 1; } tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Tb_AirOrder> .CreateInsertModelSql(OrderLog); ListSQL.Add(tempSql); //取消订单 if (Manage.ExecuteSqlTran(ListSQL, out ErrMsg)) { XeLog(1, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 订单号:" + OrderId + " 订单已取消"); } } } #endregion 发送取消PNR指令并检查结果 } #region //修改滤过的PNR状态 if (tempPntList.Count > 0) { string sqlWhere = " update Log_Pnr set Flag=1 where Pnr in(" + string.Join(",", tempPntList.ToArray()) + ")"; Manage.ExecuteNonQuerySQLInfo(sqlWhere); } #endregion #region //生成了编码 没有生成订单的编码 string tmpSQL2 = " left(CpyNo,12) in (" + string.Join(",", m_XePNRInfo.CompanyNoList.ToArray()) + ") and DateDiff(minute,OperTime,getdate())>" + m_XePNRInfo.XEMinutes.ToString() + " and OrderFlag=0 and Flag=0 and RetryCount<" + m_XePNRInfo.ReTryCount; //过滤掉没有连接成功的PNR List <string> lstRepeat = new List <string>(); //取消PNR表 没有写入订单的数据 List <Log_Pnr> list2 = Manage.CallMethod("Log_Pnr", "GetList", null, new object[] { tmpSQL2 }) as List <Log_Pnr>; for (int j = 0; j < list2.Count; j++) { //停止服务,则退出处理 if (m_XePNRInfo.EndFlag) { return; } Log_Pnr tmpLogPnr = list2[j]; ///控制权限 string KonZhiXT = GetGYParameters(tmpLogPnr.CpyNo); //是否关闭后台自动取消编码功能 if (KonZhiXT != null && KonZhiXT.Contains("|98|")) { continue; } string GYCpyNo = tmpLogPnr.CpyNo.Length >= 12 ? tmpLogPnr.CpyNo.Substring(0, 12) : tmpLogPnr.CpyNo; //勾选了该落地运营商的才取消编码 if (!m_XePNRInfo.CompanyNoList.Contains("'" + GYCpyNo + "'")) { continue; } //不取消滤过的PNR if (tmpLogPnr.PNR != "" && tempPntList.Contains("'" + tmpLogPnr.PNR + "'")) { tmpLogPnr.Flag = true; string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(tmpLogPnr, "id"); Manage.ExecuteNonQuerySQLInfo(tempSql); continue; } #region 取消PNR string pnr = tmpLogPnr.PNR; //pnr为空不处理 //Office为空不处理 if (string.IsNullOrEmpty(pnr) || string.IsNullOrEmpty(tmpLogPnr.OfficeCode)) { tmpLogPnr.Flag = true; string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(tmpLogPnr, "id"); Manage.ExecuteNonQuerySQLInfo(tempSql); continue; } ////IP端口为空不处理 string[] strIPPort = tmpLogPnr.A7.Split('|'); if (strIPPort.Length == 2) { if (pnr.Trim() == "") { tmpLogPnr.Flag = true; string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(tmpLogPnr, "id"); Manage.ExecuteNonQuerySQLInfo(tempSql); continue; } string ip = strIPPort[0]; int Port = 0; int.TryParse(strIPPort[1], out Port); Tb_SendInsData SendModel = new Tb_SendInsData(); ParamObject PM = new ParamObject(); PM.ServerIP = ip; PM.ServerPort = Port; PM.Office = tmpLogPnr.OfficeCode; //发送指令 SendIns = "RT" + pnr; PM.code = SendIns; SendModel.SendIns = SendIns; //发送指令 SendModel.SendInsType = 13; //扫描程序发送的指令 SendModel.SendTime = System.DateTime.Now; //发送时间 SendModel.Office = Office; SendModel.ServerIPAndPort = PM.ServerIP + ":" + PM.ServerPort; SendModel.UserAccount = "扫描程序"; SendModel.CpyNo = GYCpyNo; //过滤连接不通的IP端口 if (lstRepeat.Contains(SendModel.ServerIPAndPort)) { continue; } //返回数据 RecvData = SendNewPID.SendCommand(PM); SendModel.RecvData = RecvData; SendModel.RecvTime = System.DateTime.Now; //记录指令到数据库 LogData(SendModel); //过滤连接不通的IP端口 if (RecvData.Contains("由于连接方在一段时间后没有正确答复或连接的主机没有反应") || RecvData.Contains("不知道这样的主机")) { lstRepeat.Add(SendModel.ServerIPAndPort); } //指令日志 XeLog(1, string.Format("\r\n【编码:{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", Pnr, SendIns, RecvData)); string PnrStatus = pnrFormat.GetPnrStatus(RecvData, out ErrMsg); if (!PnrStatus.Contains("RR") && !PnrStatus.Contains("XX") && PnrStatus != "") { if (PnrStatus.ToUpper().Contains("HK") || PnrStatus.ToUpper().Contains("HL") || PnrStatus.ToUpper().Contains("NO")) { //发送指令 SendIns = "RT" + pnr + "|XePNR@" + pnr; PM.code = SendIns; SendModel = new Tb_SendInsData(); SendModel.SendIns = SendIns; //发送指令 SendModel.SendInsType = 13; //扫描程序发送的指令 SendModel.SendTime = System.DateTime.Now; //发送时间 SendModel.Office = Office; SendModel.ServerIPAndPort = PM.ServerIP + ":" + PM.ServerPort; SendModel.UserAccount = "扫描程序"; SendModel.CpyNo = GYCpyNo; //返回数据 RecvData = SendNewPID.SendCommand(PM); SendModel.RecvData = RecvData; SendModel.RecvTime = System.DateTime.Now; //记录指令到数据库 LogData(SendModel); //指令日志 XeLog(1, string.Format("\r\n【编码:{0}】发送指令>{1}\r\n接收数据:\r\n{2}\r\n", pnr, SendIns, RecvData)); if (RecvData.ToUpper().Contains("CANCELLED")) { //取消成功 tmpLogPnr.Flag = true; } else { //取消失败 tmpLogPnr.Flag = false; tmpLogPnr.RetryCount++; } string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(tmpLogPnr, "id"); Manage.ExecuteNonQuerySQLInfo(tempSql); } } else { tmpLogPnr.Flag = true; string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(tmpLogPnr, "id"); Manage.ExecuteNonQuerySQLInfo(tempSql); } } #endregion } //更新数据库 //if (UpdateSQL.Count > 0) //{ // Manage.ExecuteSqlTran(UpdateSQL, out ErrMsg); //} #endregion } catch (Exception ex) { //记录错误日志 Log.Record("XePnrError.log", ex, "XEPNRProcess:自动取消PNR处理过程出错!"); } //遍历时间间隔 Thread.Sleep(m_XePNRInfo.InterMinutes * 1000);//分钟 } }