//查询实时政策 http://ip/api/policy?orderId=... public override void Query(ResponseWriter writer, System.Collections.Specialized.NameValueCollection parames) { UserLoginInfo user = AuthLogin.GetUserInfo(Username); PbProject.Logic.ControlBase.BaseDataManage baseDataManage = new PbProject.Logic.ControlBase.BaseDataManage(); string orderId = parames["orderId"]; List <Tb_Ticket_Order> reList = baseDataManage.CallMethod("Tb_Ticket_Order", "GetList", null, new Object[] { string.Format("orderID='{0}'", orderId) }) as List <Tb_Ticket_Order>; if (reList == null && reList.Count == 0) { writer.WriteEx(541, "Can't Found Order by OrderID", "通过OrderID找不到订单信息"); } else { Tb_Ticket_Order order = reList[0]; PolicyMatch pm = new PolicyMatch(); Regex reg = new Regex(@"(\w{3})-(\w{3})(/\2-(\w{3}))?"); if (reg.IsMatch(order.TravelCode)) { var ma = reg.Match(order.TravelCode); var fcity = ma.Groups[1].Value; var mcity = ma.Groups[3].Success ? ma.Groups[2].Value : ""; var tcity = ma.Groups[3].Success ? ma.Groups[4].Value : ma.Groups[2].Value; OrderInputParam InputParam = new OrderInputParam(); string ErrMsg = ""; Tb_Ticket_OrderBLL orderBLL = new Tb_Ticket_OrderBLL(); InputParam = orderBLL.GetOrder(orderId, InputParam, out ErrMsg); PbProject.Logic.Buy.AirQurey airqurey = new PbProject.Logic.Buy.AirQurey(user.BaseParametersList, user.User, user.Company); var catchID = airqurey.SkyListSaveCache(InputParam, "0");//PNR导入不能确定舱位是否是特价舱位,暂时默认写死为普通 YYY 2013-05-22 var swList = baseDataManage.CallMethod("Tb_Ticket_SkyWay", "GetList", null, new Object[] { string.Format("orderID='{0}'", orderId) }) as List <Tb_Ticket_SkyWay>; if (swList == null && swList.Count == 0) { writer.WriteEx(541, "Can't Found Ticket_SkyWay by OrderID", "通过OrderID找不到航程信息"); } swList = swList.OrderBy(p => p.FromDate).ToList(); var policy = pm.getMatchingPolicy(user.Company.UninCode, fcity, mcity, tcity, swList[0].FromDate.ToString(), swList.Count > 1 ? swList[1].FromDate.ToString() : swList[0].ToDate.ToString(), order.TravelType.ToString(), catchID, false, user.Company.GroupId, orderId, user.User, order.IsChdFlag, order.HaveBabyFlag, false); var lst = dataSetToList(policy, true); writer.Write(lst); } else { writer.WriteEx(541, "Error:TravelCode's format have error", "航班Code格式错误"); } } }
private OrderInputParam createOrderInputParam(string adultOrderId, string childOrderId) { Tb_Ticket_OrderBLL OrderBLL = new Tb_Ticket_OrderBLL(); OrderInputParam oip = new OrderInputParam(); if (!string.IsNullOrEmpty(adultOrderId)) { string ErrMsg = ""; //成人订单数据显示 oip = OrderBLL.GetOrder(adultOrderId, oip, out ErrMsg); } if (!string.IsNullOrEmpty(childOrderId)) { //儿童订单数据显示 string ErrMsg = ""; //儿童订单数据显示 oip = OrderBLL.GetOrder(childOrderId, oip, out ErrMsg); } return(oip); }
private void GetPassenger(OrderInputParam InputParam, List <Tb_Ticket_Passenger> AdultPasList, List <Tb_Ticket_Passenger> ChildPasList, RePnrObj pnrObj) { AdultPasList = InputParam.OrderParamModel.Where(p => !p.Order.IsChdFlag).Select(p => p.PasList).FirstOrDefault(); ChildPasList = InputParam.OrderParamModel.Where(p => p.Order.IsChdFlag).Select(p => p.PasList).FirstOrDefault(); }
private bool HasBaby(OrderInputParam adultPasList) { return(adultPasList.OrderParamModel.Where(p => p.PasList.Where(q => q.PassengerType == 3).Count() != 0).Count() != 0); }
/// <summary> /// 确认订单 /// </summary> /// <param name="writer"></param> /// <param name="parames"></param> public override void Create(ResponseWriter writer, System.Collections.Specialized.NameValueCollection parames) { var userLogin = AuthLogin.GetUserInfo(Username); string adultOrderId = parames["adultOrderId"]; string childOrderId = parames["childOrderId"]; string adultPolicyGuid = parames["adultPolicyGuid"]; //成人政策guid string childPolicyGuid = parames["childPolicyGuid"]; //婴儿政策guid string remark = parames["remark"]; var adultPolicy = PolicyCacheManager.Get(adultPolicyGuid) as PolicyParamForAPI; var childPolicy = PolicyCacheManager.Get(childPolicyGuid) as PolicyParamForAPI; OrderInputParam InputParam = createOrderInputParam(adultOrderId, childOrderId); Tb_Ticket_OrderBLL orderBLL = new Tb_Ticket_OrderBLL(); if (adultPolicy == null) { writer.WriteEx(554, "Cache is disabled", "政策缓存已失效,请重新操作"); } else { #region 更新订单 主要修改价格,政策和添加订单账单明细 Bill bill = new Bill(); Data d = new Data(userLogin.Company.UninCode);//采购佣金进舍规则: 0.舍去佣金保留到元、1.舍去佣金保留到角、2.舍去佣金保留到分 string ErrMsg = ""; bool IsSuc = false; //扩展参数 ParamEx pe = new ParamEx(); pe.UsePIDChannel = userLogin.FQP.KongZhiXiTong != null && userLogin.FQP.KongZhiXiTong.Contains("|48|") ? 2 : 0; //发送指令管理类 SendInsManage SendIns = new SendInsManage(userLogin.User.LoginName, userLogin.Company.UninCode, pe, userLogin.Configparam); //提示 StringBuilder sbTip = new StringBuilder(); try { AjaxPolicyMatchOutData APM = new AjaxPolicyMatchOutData(); APM.OutPutPolicyList.Add(adultPolicy); APM.OutPutPolicyList.Add(childPolicy); //供应商Office string GYOffice = userLogin.Configparam != null?userLogin.Configparam.Office.ToUpper() : ""; if (InputParam != null && APM != null && APM.OutPutPolicyList != null && APM.OutPutPolicyList.Count > 0) { AjAxPolicyParam AdultPolicy = adultPolicy; AjAxPolicyParam ChildPolicy = childPolicy; //至少选择一条政策 成人或者儿童 if (AdultPolicy == null && ChildPolicy == null) { writer.WriteEx(567, "choose one policy at least", "请选择一条政策数据"); } else { PatInfo INFPrice = null; if (HasBaby(InputParam)) { //婴儿价格 INFPrice = GetINFPAT(); } //订单实体需要更改数据的字段名 List <string> UpdateOrderFileds = new List <string>(); //订单修改字段 UpdateOrderFileds.AddRange(new string[] { "OldRerurnMoney", "OldPolicyPoint", "OutOrderPayMoney", "A7", "A13", "A1", "A11", "PrintOffice", "CPCpyNo", "YDRemark", "PolicyId", "AirPoint", "PolicyPoint", "ReturnPoint", "PolicyMoney", "PolicyCancelTime", "PolicyReturnTime", "DiscountDetail", "PolicyType", "PolicySource", "AutoPrintFlag", "PolicyRemark", "PMFee", "ABFee", "FuelFee", "BabyFee", "PayMoney", "OrderMoney" }); //航段实体需要更改数据的字段名 List <string> UpdateSkyWayFileds = new List <string>(); //航段修改字段 UpdateSkyWayFileds.AddRange(new string[] { "SpacePrice", "ABFee", "FuelFee", "Discount" }); //乘客实体需要更改数据的字段名 List <string> UpdatePasFileds = new List <string>(); //修改乘机人 UpdatePasFileds.AddRange(new string[] { "PMFee", "ABFee", "FuelFee" }); //承运人二字码 string CarrayCode = string.Empty; string orderIDs = ""; //婴儿与编码中的婴儿个数是否不一致 true不一致 false一致 bool IsINFCheck = false; //婴儿与编码中的婴儿个数是否不一致提示 string INFCountCheckMsg = "<b class=\"red\">编码中婴儿个数与预订婴儿个数不一致,请手动补全编码中婴儿!</b>"; //Bill返回有无SQL bool IsBillOK = false; //修改实体相关的值后更新即可 for (int i = 0; i < InputParam.OrderParamModel.Count; i++) { OrderMustParamModel item = InputParam.OrderParamModel[i]; //承运人二字码 CarrayCode = item.Order.CarryCode.Split('/')[0].ToUpper().Trim(); if (orderIDs.Contains(item.Order.OrderId)) { continue; } else { orderIDs += item.Order.OrderId + "|"; } #region 设置需要更改数据的字段名集合 item.UpdateOrderFileds = UpdateOrderFileds; item.UpdateSkyWayFileds = UpdateSkyWayFileds; item.UpdatePassengerFileds = UpdatePasFileds; #endregion #region 实体处理 //订单中的总价 decimal TotalPMPrice = 0m, TotalABFare = 0, TotalRQFare = 0m; //item.Order.YDRemark = remark; //预订备注信息 item.Order.YDRemark = remark; //订单处理 成人订单政策 if (!item.Order.IsChdFlag && AdultPolicy != null) { #region 成人或者婴儿实体价格赋值 //检测白屏预订婴儿个数与编码中的婴儿个数 if (item.Order.OrderSourceType == 1 || item.Order.OrderSourceType == 5) { IsINFCheck = yudingINFCheck(InputParam.PnrInfo, item.PasList); } //婴儿价格 decimal INFPMFee = 0m, INFABFare = 0m, INFRQFare = 0m; if (INFPrice != null) { decimal.TryParse(INFPrice.Fare, out INFPMFee); decimal.TryParse(INFPrice.TAX, out INFABFare); decimal.TryParse(INFPrice.RQFare, out INFRQFare); } //成人价格 decimal PMFee = AdultPolicy.SeatPrice, ABFare = AdultPolicy.ABFare, RQFare = AdultPolicy.RQFare; #region 特价缓存处理 //特价时特价缓存处理 为特价且PAT内容不为空 if (AdultPolicy.PolicyKind == 2 && item.SkyList[0].Pat.Trim() != "") { //白屏和PNR导入 if (item.Order.OrderSourceType == 1 || item.Order.OrderSourceType == 2 || item.Order.OrderSourceType == 6 || item.Order.OrderSourceType == 10) { //特价缓存 SpecialCabinPriceInfoBLL SpBll = new SpecialCabinPriceInfoBLL(); PnrAnalysis.FormatPNR pnrformat = new PnrAnalysis.FormatPNR(); string errMsg = ""; PnrAnalysis.PatModel Pat = pnrformat.GetPATInfo(item.SkyList[0].Pat.Trim(), out errMsg); if (Pat.UninuePatList.Count > 0) { decimal m_Fare = 0m; decimal m_TAX = 0m; decimal m_RQFare = 0m; decimal.TryParse(Pat.UninuePatList[0].Fare, out m_Fare); decimal.TryParse(Pat.UninuePatList[0].TAX, out m_TAX); decimal.TryParse(Pat.UninuePatList[0].RQFare, out m_RQFare); //价格不相等 if (m_Fare != PMFee) { //存入缓存 SpBll.SaveSpPrice(item.SkyList[0].CarryCode.ToUpper(), item.SkyList[0].FlightCode, item.SkyList[0].FromDate, item.SkyList[0].FromCityCode, item.SkyList[0].ToCityCode, item.SkyList[0].Space, m_Fare, m_TAX, m_RQFare); } } } } #endregion //乘机人实体处理 for (int j = 0; j < item.PasList.Count; j++) { if (item.PasList[j].PassengerType == 1) { //成人 item.PasList[j].PMFee = PMFee; item.PasList[j].ABFee = ABFare; item.PasList[j].FuelFee = RQFare; } else { //婴儿 if (item.PasList[j].PassengerType == 3 && INFPrice != null) { item.PasList[j].PMFee = INFPMFee; item.PasList[j].ABFee = INFABFare; item.PasList[j].FuelFee = INFRQFare; } } if (item.PasList[j].PassengerType == 1 || item.PasList[j].PassengerType == 3) { //订单价格 TotalPMPrice += item.PasList[j].PMFee; TotalABFare += item.PasList[j].ABFee; TotalRQFare += item.PasList[j].FuelFee; } } //航段实体处理 //string Discount = "0"; for (int k = 0; k < item.SkyList.Count; k++) { item.SkyList[k].ABFee = ABFare; item.SkyList[k].FuelFee = RQFare; //只是单程才重新赋值 if (item.SkyList.Count == 1) { item.SkyList[k].SpacePrice = PMFee; } //item.SkyList[k].Discount = AdultPolicy.DiscountRate.ToString(); //if (Discount.Length > 10) //{ // Discount = Discount.Substring(0, 10); //} //item.SkyList[k].Discount = Discount; } //成人订单(含有婴儿) 赋值 item.Order.PMFee = TotalPMPrice; item.Order.ABFee = TotalABFare; item.Order.FuelFee = TotalRQFare; if (INFPrice != null) { //婴儿票面价 item.Order.BabyFee = INFPMFee; } item.Order.PolicyId = AdultPolicy.PolicyId; item.Order.PolicyPoint = AdultPolicy.PolicyPoint; item.Order.ReturnMoney = AdultPolicy.PolicyReturnMoney; item.Order.AirPoint = AdultPolicy.AirPoint; item.Order.ReturnPoint = AdultPolicy.ReturnPoint; item.Order.LaterPoint = AdultPolicy.LaterPoint; item.Order.PolicyMoney = AdultPolicy.PolicyYongJin; item.Order.DiscountDetail = AdultPolicy.DiscountDetail; item.Order.PolicyType = int.Parse(AdultPolicy.PolicyType); item.Order.PolicySource = int.Parse(AdultPolicy.PolicySource); item.Order.AutoPrintFlag = int.Parse(AdultPolicy.AutoPrintFlag); item.Order.PolicyCancelTime = AdultPolicy.FPGQTime; item.Order.PolicyReturnTime = AdultPolicy.PolicyReturnTime; //出票公司编号 string CPCpyNo = string.IsNullOrEmpty(AdultPolicy.CPCpyNo) ? userLogin.mSupCompany.UninCode : AdultPolicy.CPCpyNo; item.Order.CPCpyNo = CPCpyNo.Length > 12 ? CPCpyNo.Substring(0, 12) : CPCpyNo; item.Order.PolicyRemark = AdultPolicy.PolicyRemark;//政策备注 //原始政策返点 item.Order.OldPolicyPoint = AdultPolicy.OldPolicyPoint; //原始政策现返 item.Order.OldReturnMoney = AdultPolicy.OldPolicyReturnMoney; item.Order.A1 = 1; //已确认 item.Order.A2 = AdultPolicy.PolicyKind; //政策种类 item.Order.A7 = AdultPolicy.AirPoint; //航空公司返点 item.Order.A11 = AdultPolicy.PatchPonit; //补点 ////计算订单金额 //item.Order.PayMoney = d.CreateOrderPayMoney(item.Order, item.PasList); ////出票方收款金额 //item.Order.OrderMoney = d.CreateOrderOrderMoney(item.Order, item.PasList); bill.CreateOrderAndTicketPayDetailNew(item.Order, item.PasList); //出票Office if (AdultPolicy.PolicyOffice != "") { item.Order.PrintOffice = AdultPolicy.PolicyOffice; } if ((item.Order.OrderSourceType == 1 || item.Order.OrderSourceType == 2)) { //自动授权Office if (AdultPolicy.PolicyOffice.Trim().Length == 6 && !GYOffice.Contains(AdultPolicy.PolicyOffice.Trim().ToUpper())) { SendIns.AuthToOffice(item.Order.PNR, AdultPolicy.PolicyOffice, item.Order.Office, out ErrMsg); } //备注HU的A舱要添加一个指令才能入库,OSI HU CKIN SSAC/S1 if (AdultPolicy.PolicySource == "1" && AdultPolicy.PolicyType == "1" && AdultPolicy.AutoPrintFlag == "2" && item.Order.PNR.Trim().Length == 6 && item.Order.CarryCode.ToUpper().Trim() == "HU" && item.Order.Space.ToUpper().Trim() == "A") { string Office = item.Order.Office, Cmd = string.Format("RT{0}|OSI HU CKIN SSAC/S1^\\", item.Order.PNR.Trim()); SendIns.Send(Cmd, ref Office, 10); } } if (item.Order.PolicySource <= 2) { //本地政策提示 sbTip.Append("</br><ul><li>1.请于一小时内支付此订单,未支付将自动取消</li><li>2.编码内容中必须存在证件内容一项</li><li>3.PNR需要包含证件号</li><li>" + (IsINFCheck ? "4." + INFCountCheckMsg : "") + "</li></ul>"); } else { //接口和共享政策提示 if (AdultPolicy.PolicyOffice.Trim().Length == 6) { sbTip.Append("</br><ul><li>1.编码内容中必须存在证件内容一项</li><li>2.PNR需要包含证件号</li><li>3.请授权,授权指令:RMK TJ AUTH " + AdultPolicy.PolicyOffice + "</li>" + (IsINFCheck ? "4." + INFCountCheckMsg : "") + "</ul>"); } else { sbTip.Append("<ul ><li>1.编码内容中必须存在证件内容一项!</li><li>2.PNR需要包含证件号!</li>" + (IsINFCheck ? "3." + INFCountCheckMsg : "") + "</ul>"); } } #endregion } else { if (ChildPolicy != null) { #region 儿童实体赋值 //儿童订单政策 //儿童价格 decimal PMFee = ChildPolicy.SeatPrice, ABFare = ChildPolicy.ABFare, RQFare = ChildPolicy.RQFare; //乘机人实体处理 for (int j = 0; j < item.PasList.Count; j++) { if (item.PasList[j].PassengerType == 2) { //儿童 item.PasList[j].PMFee = PMFee; item.PasList[j].ABFee = ABFare; item.PasList[j].FuelFee = RQFare; //订单价格 TotalPMPrice += item.PasList[j].PMFee; TotalABFare += item.PasList[j].ABFee; TotalRQFare += item.PasList[j].FuelFee; } } //航段实体处理 //string Discount = "0"; for (int k = 0; k < item.SkyList.Count; k++) { item.SkyList[k].ABFee = ABFare; item.SkyList[k].FuelFee = RQFare; //只是单程才重新赋值 if (item.SkyList.Count == 1) { item.SkyList[k].SpacePrice = PMFee; } //Discount = ChildPolicy.DiscountRate.ToString(); //if (Discount.Length > 10) //{ // Discount = Discount.Substring(0, 10); //} //item.SkyList[k].Discount = Discount; } //儿童订单赋值 item.Order.PMFee = TotalPMPrice; item.Order.ABFee = TotalABFare; item.Order.FuelFee = TotalRQFare; //出票公司编号 string CPCpyNo = string.IsNullOrEmpty(ChildPolicy.CPCpyNo) ? userLogin.mSupCompany.UninCode : ChildPolicy.CPCpyNo; item.Order.CPCpyNo = CPCpyNo.Length > 12 ? CPCpyNo.Substring(0, 12) : CPCpyNo; item.Order.PolicyId = ChildPolicy.PolicyId; item.Order.AirPoint = ChildPolicy.AirPoint; item.Order.PolicyPoint = ChildPolicy.PolicyPoint; item.Order.ReturnPoint = ChildPolicy.ReturnPoint; item.Order.LaterPoint = ChildPolicy.LaterPoint; item.Order.ReturnMoney = ChildPolicy.PolicyReturnMoney; item.Order.PolicyMoney = ChildPolicy.PolicyYongJin; item.Order.DiscountDetail = ChildPolicy.DiscountDetail; item.Order.PolicyType = int.Parse(ChildPolicy.PolicyType); item.Order.PolicySource = int.Parse(ChildPolicy.PolicySource); item.Order.AutoPrintFlag = int.Parse(ChildPolicy.AutoPrintFlag); item.Order.PolicyCancelTime = ChildPolicy.FPGQTime; item.Order.PolicyReturnTime = ChildPolicy.PolicyReturnTime; item.Order.PolicyRemark = ChildPolicy.PolicyRemark;//政策备注 //原始政策返点 item.Order.OldPolicyPoint = ChildPolicy.OldPolicyPoint; //原始政策现返 item.Order.OldReturnMoney = ChildPolicy.OldPolicyReturnMoney; item.Order.A1 = 1; //已确认 item.Order.A7 = ChildPolicy.AirPoint; //航空公司返点 //政策种类 item.Order.A2 = ChildPolicy.PolicyKind; ////计算订单金额; //item.Order.PayMoney = d.CreateOrderPayMoney(item.Order, item.PasList); ////出票方收款金额 //item.Order.OrderMoney = d.CreateOrderOrderMoney(item.Order, item.PasList); bill.CreateOrderAndTicketPayDetailNew(item.Order, item.PasList); //出票Office if (ChildPolicy.PolicyOffice != "") { item.Order.PrintOffice = ChildPolicy.PolicyOffice; } //--------------------------------------- #endregion } } //代付返点,金额 if (item.Order.PolicySource > 2) { // 接口 取原始政策 item.Order.A7 = item.Order.OldPolicyPoint; item.Order.OutOrderPayMoney = d.CreateOrderIntfacePrice(item.Order, item.PasList); } else { //本地 取航空公司政策 decimal tempOldPolicyPoint = item.Order.OldPolicyPoint; item.Order.OldPolicyPoint = item.Order.A7; item.Order.OutOrderPayMoney = d.CreateOrderIntfacePrice(item.Order, item.PasList); item.Order.OldPolicyPoint = tempOldPolicyPoint; } item.Order.A13 = d.CreateOrderIntfacePrice(item.Order, item.PasList);// 后返金额 #endregion #region 添加订单账单明细sql List <string> sqlList = bill.CreateOrderAndTicketPayDetailNew(item.Order, item.PasList); if (sqlList != null && sqlList.Count > 0) { IsBillOK = true; InputParam.ExecSQLList.AddRange(sqlList.ToArray()); } #endregion }//For结束 //订单金额是否有误 bool IsOrderPayZero = false; foreach (OrderMustParamModel item in InputParam.OrderParamModel) { //判断金额是否正确 if (item.Order.PayMoney <= 0 || ((item.Order.PayMoney + item.Order.PayMoney * 0.003M) < item.Order.OrderMoney)) { IsOrderPayZero = true; PbProject.WebCommon.Log.Log.RecordLog("OrderServices", "PayMoneyError|" + ErrMsg + "订单:PayMoney=" + item.Order.PayMoney + " OrderMoney=" + item.Order.OrderMoney + "SQL:" + string.Join("\r\n ", InputParam.ExecSQLList.ToArray()), true, HttpContext.Current.Request); // DataBase.LogCommon.Log.Error("OrderServices", new Exception(ErrMsg + "订单:PayMoney=" + item.Order.PayMoney + " OrderMoney=" + item.Order.OrderMoney + "SQL:" + string.Join("\r\n ", InputParam.ExecSQLList.ToArray()))); break; } } #region 验证和修改订单 if (!IsBillOK) { ErrMsg = "订单生成失败!!"; PbProject.WebCommon.Log.Log.RecordLog("OrderServices", "时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\t" + ErrMsg + "SQL:" + string.Join("\r\n ", InputParam.ExecSQLList.ToArray()), true, HttpContext.Current.Request); } else { if (!IsOrderPayZero) { //修改订单有关实体信息 IsSuc = orderBLL.UpdateOrder(ref InputParam, out ErrMsg); if (IsSuc) { ErrMsg = "订单生成成功!" + sbTip.ToString(); } else { PbProject.WebCommon.Log.Log.RecordLog("OrderServices", "时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\t" + ErrMsg + "SQL:" + string.Join("\r\n ", InputParam.ExecSQLList.ToArray()), true, HttpContext.Current.Request); ErrMsg = "订单生成失败!"; } } else { PbProject.WebCommon.Log.Log.RecordLog("OrderServices", "时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\t" + ErrMsg + "SQL:" + string.Join("\r\n ", InputParam.ExecSQLList.ToArray()), true, HttpContext.Current.Request); ErrMsg = "订单金额错误,生成订单失败!"; } } #endregion } } else { ErrMsg = "未获取到政策数据,生成订单失败!"; } } catch (Exception ex) { PbProject.WebCommon.Log.Log.RecordLog("OrderServices", "时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\t" + ErrMsg, true, HttpContext.Current.Request); ErrMsg = "订单生成异常," + ex.Message; DataBase.LogCommon.Log.Error("OrderServices" + userLogin.User.id.ToString(), ex); } finally { if (IsSuc) { writer.Write("ok"); } else { writer.WriteEx(567, "confirm Order Error", ErrMsg); } } #endregion } }
/// <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); }
/// <summary> /// 获取打印数据 /// </summary> /// <returns></returns> public PnrAnalysis.Model.TripPrintData GetPrintData() { PnrAnalysis.Model.TripPrintData model = null; if (Request["OrderId"] != null && Request["OrderId"].ToString() != "" && Request["PasId"] != null && Request["PasId"].ToString() != "") { model = new PnrAnalysis.Model.TripPrintData(); model.m_strOrderId = Request["OrderId"].ToString(); model.m_strPassengerId = Request["PasId"].ToString(); OrderInputParam InputParam = new OrderInputParam(); string ErrMsg = ""; //成人订单数据显示 InputParam = OrderBLL.GetOrder(model.m_strOrderId, InputParam, out ErrMsg); if (InputParam != null && InputParam.OrderParamModel.Count > 0) { OrderMustParamModel OMP = InputParam.OrderParamModel[0]; Tb_Ticket_Passenger Passenger = OMP.PasList.Find(delegate(Tb_Ticket_Passenger _TP) { return(_TP.id.ToString().ToUpper() == model.m_strPassengerId.ToUpper()); }); Tb_TripDistribution tb_tripdistribution = null; Tb_Ticket_Order Order = OMP.Order; List <Tb_Ticket_SkyWay> skyList = OMP.SkyList; PbProject.Model.ConfigParam config = this.configparam; if (Passenger != null && Order != null) { if (Passenger.TravelNumber.Trim() != "") { string sqlWhere = string.Format(" TripNum='{0}' and UseCpyNo='{1}' ", Passenger.TravelNumber.Trim(), Order.OwnerCpyNo); List <Tb_TripDistribution> TTPList = this.baseDataManage.CallMethod("Tb_TripDistribution", "GetList", null, new object[] { sqlWhere }) as List <Tb_TripDistribution>; if (TTPList != null && TTPList.Count > 0) { tb_tripdistribution = TTPList[0]; } } //管理员 if (mCompany.RoleType == 1) { string GYCpyNo = Order.OwnerCpyNo; if (Order.OwnerCpyNo.Length >= 12) { GYCpyNo = GYCpyNo.Substring(0, 12); } List <Bd_Base_Parameters> baseParamList = baseDataManage.CallMethod("Bd_Base_Parameters", "GetList", null, new Object[] { "CpyNo='" + GYCpyNo + "'" }) as List <Bd_Base_Parameters>; config = Bd_Base_ParametersBLL.GetConfigParam(baseParamList); } #region 获取 配置号 if (tb_tripdistribution != null) { //航协号 model.m_strIataCode = tb_tripdistribution.IataCode; //中文填开单位 model.m_strCNTKTConjunction = tb_tripdistribution.OwnerCpyName; //office model.m_strAgentOffice = tb_tripdistribution.CreateOffice; //行程单号 model.m_strTravelNumber = tb_tripdistribution.TripNum; } else { //行程单号为空时 if (config != null) { string PrintOffice = GetPrintOffice(Order.OwnerCpyNo, Order.CarryCode.Split('/')[0]); string[] Arroffice = config.Office.Split('^'); //office string[] ArrIataCode = config.IataCode.Split('^'); //航协号 string[] ArrTicketCompany = config.TicketCompany.Split('^'); //公司名称 for (int i = 0; i < Arroffice.Length; i++) { if (Arroffice.Length == ArrIataCode.Length && Arroffice.Length == ArrTicketCompany.Length) { if (PrintOffice == "") { //Office model.m_strAgentOffice = Arroffice[i]; //中文填开单位 model.m_strCNTKTConjunction = ArrTicketCompany[i]; //航协号 model.m_strIataCode = ArrIataCode[i];//航协号 break; } else { if (PrintOffice.ToUpper() == Arroffice[i].ToUpper()) { //Office model.m_strAgentOffice = Arroffice[i]; //Office //中文填开单位 model.m_strCNTKTConjunction = ArrTicketCompany[i]; //填开单位 //航协号 model.m_strIataCode = ArrIataCode[i]; //航协号 break; } } } } } } #endregion //乘客姓名 model.m_strPassengerName = Passenger.PassengerName; //乘客证件号 model.m_strPassengerCardId = Passenger.Cid; //签注 model.m_strEndorsements = ddlEndorsements.SelectedValue; //小编码 model.m_strPnrB = Order.PNR.ToUpper(); //行程单号 model.m_strTravelNumber = Passenger.TravelNumber.Trim(); //舱位价 model.m_strSpaceFare = Passenger.PMFee.ToString("F2"); //基建费 model.m_strABFare = Passenger.ABFee.ToString("F2"); //燃油费 model.m_strFuelFare = Passenger.FuelFee.ToString("F2"); //总价 model.m_strTotalFare = (Passenger.PMFee + Passenger.ABFee + Passenger.FuelFee).ToString("F2"); //保险费 model.m_strInsuranceFare = "XXX"; //其他费用 model.m_strOtherFare = "0.00"; //票号 model.m_strTicketNumber = Passenger.TicketNumber; //验证码 model.m_strCheckNum = Passenger.TravelNumber.Length > 4 ? (Passenger.TravelNumber.Substring(Passenger.TravelNumber.Length - 4, 4)) : txtCheckNum.Value; //填开日期 model.m_strIssuedDate = System.DateTime.Now.ToString("yyyy-MM-dd"); //航段 if (skyList != null && skyList.Count > 0) { //第一段 model.m_strFCityName1 = skyList[0].FromCityName; //出发城市 model.m_strTCityName1 = skyList[0].ToCityName; //到达城市 model.m_strAirName1 = skyList[0].CarryName; //航空公司名称 model.m_strAirCode1 = skyList[0].CarryCode; //航空公司二字码 model.m_strFlightNum1 = skyList[0].FlightCode; //航班号 model.m_strSpace1 = skyList[0].Space.ToUpper(); //舱位 model.m_strTicketBasis1 = skyList[0].Space.ToUpper(); //舱位等级 model.m_strFlyDate1 = skyList[0].FromDate.ToString("yyyy-MM-dd"); model.m_strFlyStartTime1 = skyList[0].FromDate.ToString("HH:mm"); model.m_strFlyEndTime1 = skyList[0].ToDate.ToString("HH:mm"); //到达时间 model.m_strTerminal1 = skyList[0].Terminal; //航站楼 //行李 model.m_strAllowPacket1 = "20K"; if (model.m_strSpace1 == "C") { model.m_strAllowPacket1 = "30K"; } else if (model.m_strSpace1 == "F") { model.m_strAllowPacket1 = "40K"; } //------------------------------------------- //第二段 if (skyList.Count > 1) { model.m_strFCityName2 = skyList[1].FromCityName; //出发城市 model.m_strTCityName2 = skyList[1].ToCityName; //到达城市 model.m_strAirName2 = skyList[1].CarryName; //航空公司名称 model.m_strAirCode2 = skyList[1].CarryCode; //航空公司二字码 model.m_strFlightNum2 = skyList[1].FlightCode; //航班号 model.m_strSpace2 = skyList[1].Space.ToUpper(); //舱位 model.m_strTicketBasis2 = skyList[1].Space.ToUpper(); //舱位等级 model.m_strFlyDate2 = skyList[1].FromDate.ToString("yyyy-MM-dd"); model.m_strFlyStartTime2 = skyList[1].FromDate.ToString("HH:mm"); model.m_strFlyEndTime2 = skyList[1].ToDate.ToString("HH:mm"); //到达时间 model.m_strTerminal2 = skyList[1].Terminal; //航站楼 //行李 model.m_strAllowPacket2 = "20K"; if (model.m_strSpace2 == "C") { model.m_strAllowPacket2 = "30K"; } else if (model.m_strSpace2 == "F") { model.m_strAllowPacket2 = "40K"; } if (model.m_strFCityName2 == model.m_strTCityName1) { if (model.m_strFCityName1 != model.m_strTCityName2) { model.m_strTravelType = "3";//联程 } else { model.m_strTravelType = "2";//往返 } } else { if (skyList.Count == 2) { model.m_strTravelType = "4";//缺口程 } else { model.m_strTravelType = "5";//多程 } } } } } } } return(model); }