Exemple #1
0
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            List <int> pidList      = context.AddRetModApplyModel.DetailList.Select(n => n.Pid).ToList();
            List <int> sequenceList = context.AddRetModApplyModel.DetailList.Select(n => n.Sequence).ToList();

            List <string> orderStatusList = new List <string>()
            {
                "C"
            };
            int count = (from flight in context.DbContext.Set <FltRetModFlightApplyEntity>()
                         join apply in context.DbContext.Set <FltRetModApplyEntity>() on flight.Rmid equals apply.Rmid into c
                         from apply in c.DefaultIfEmpty()
                         where
                         !orderStatusList.Contains(apply.OrderStatus) && pidList.Contains(flight.Pid) &&
                         sequenceList.Contains(flight.Sequence) &&
                         apply.OrderType.ToUpper() == "R"
                         select flight).Count();

            if (count > 0)
            {
                throw new Exception("已经申请退票,不能重复提交!");
            }
            this.NextNode?.ActionValidate(context);
            return(true);
        }
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            if (!context.AddOrderModel.IsCheckUnUsedTicketNo)
            {
                this.NextNode?.ActionValidate(context);
                return(true);
            }
            List <string> passengerNameList = context.AddOrderModel.PassengerList.Select(n => n.Name).Distinct().ToList();

            string message = string.Empty;

            foreach (var fltFlightModel in context.AddOrderModel.FlightList)
            {
                string temp = GetUnTicketNo(fltFlightModel.Dport, fltFlightModel.Aport,
                                            context.AddOrderModel.Customer?.CorpID,
                                            passengerNameList, context.DbContext, fltFlightModel.FlightNo.Substring(0, 2));
                if (!string.IsNullOrEmpty(temp))
                {
                    message += string.Format(",第{0}程,{1}存在未使用的机票", fltFlightModel.Sequence, temp);
                }
            }

            if (!string.IsNullOrEmpty(message))
            {
                throw new MojoryException(MojoryApiResponseCode.HasUnUsedTicketNo, message.Substring(1));
            }

            this.NextNode?.ActionValidate(context);
            return(true);
        }
Exemple #3
0
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            AddCorpOrderCustomer addCorpOrderCustomer = null;

            if (context.AddRetModApplyModel.Customer.Corporation?.IsAmplitudeCorp == "T")
            {
                if (context.AddRetModApplyModel.Customer.IsMaster == "T")
                {
                    addCorpOrderCustomer = new AddCorpOrderBookingCustomer();
                }
                else
                {
                    if (context.AddRetModApplyModel.Customer.IsCheck == "T")
                    {
                        addCorpOrderCustomer = new AddCorpOrderNeedCheckCustomer();
                    }
                    else
                    {
                        addCorpOrderCustomer = new AddCorpOrderNotNeedCheckCustomer();
                    }
                }
            }

            if (addCorpOrderCustomer != null)
            {
                IAddCorpRetApplyCustomerVisitor visitor = new AddCorpRetApplyCustomerVisitor();
                addCorpOrderCustomer.AddModApply = context.AddRetModApplyModel;
                context.AddRetModApplyModel      = addCorpOrderCustomer.AddCorpRetApplyValidate(visitor);
            }

            this.NextNode?.ActionValidate(context);
            return(true);
        }
Exemple #4
0
 public override bool ActionValidate(AddOrderAbstractContext context)
 {
     if (context.AddOrderModel != null)
     {
         context.AddOrderModel.TravelType  = 0;
         context.AddOrderModel.BalanceType = 1;
     }
     this.NextNode?.ActionValidate(context);
     return(true);
 }
Exemple #5
0
        /// <summary>
        /// 判断当前订单:南航最多支持一张订单3人
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            int           passengerCount = context.AddOrderModel.PassengerList.Select(n => n.Name).Count();
            List <string> flightList     = context.AddOrderModel.FlightList.Select(n => n.FlightNo.ToUpper()).Distinct().ToList();

            if (flightList.Contains("CZ") && passengerCount > 3)
            {
                throw new Exception("南航最多支持一张订单3人");
            }
            this.NextNode?.ActionValidate(context);
            return(true);
        }
 private void B2GBuyRemark(AddOrderAbstractContext context, Dictionary <int, string> b2GDictionary)
 {
     if (b2GDictionary.Count > 0)
     {
         if (context.AddOrderModel.FlightList.Count == 1)
         {
             context.AddOrderModel.BuyRemark += ",请B2G采购";
         }
         else
         {
             foreach (var d in b2GDictionary)
             {
                 context.AddOrderModel.BuyRemark += string.Format(",第{0}段,请B2G采购", d.Key);
             }
         }
     }
 }
 private void B2GOrderRemark(AddOrderAbstractContext context, Dictionary <int, bool> hasB2GPriceDictionary)
 {
     if (hasB2GPriceDictionary.Count > 0)
     {
         if (context.AddOrderModel.FlightList.Count == 1)
         {
             context.AddOrderModel.BuyRemark += ",该航段存在B2G价格,请B2G采购";
             context.AddOrderModel.Remark    += ",该航段存在B2G价格,请B2G采购";
         }
         else
         {
             foreach (var d in hasB2GPriceDictionary)
             {
                 context.AddOrderModel.BuyRemark += string.Format(",第{0}段存在B2G价格,请B2G采购", d.Key);
                 context.AddOrderModel.Remark    += string.Format(",第{0}段存在B2G价格,请B2G采购", d.Key);
             }
         }
     }
 }
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            //1.航段合计
            if (context.AddOrderModel.FlightList.Count == 0)
            {
                throw new Exception("订单航程信息异常");
            }
            decimal flightAmount =
                context.AddOrderModel.FlightList.Sum(
                    n => (n.SalePrice ?? 0) + n.TaxFee + (n.OilFee ?? 0) + (n.ServiceFee ?? 0));
            //2.保险合计
            decimal insuranceAmount = context.AddOrderModel.PassengerList.Sum(n => (n.Insurance ?? 0) * (n.InsuranceCount ?? 0));
            //3.人数
            int passengerCount = context.AddOrderModel.PassengerList.Count;

            if (passengerCount == 0)
            {
                throw new Exception("订单人数异常");
            }
            //订单合计
            decimal totalAmount = flightAmount * passengerCount + insuranceAmount
                                  + context.AddOrderModel.CreditcardfeeAmount
                                  + context.AddOrderModel.SendTicketAmount
                                  + context.AddOrderModel.OtherAmount
                                  - context.AddOrderModel.Voucheramount;

            if (context.AddOrderModel.Payamount != totalAmount)
            {
                throw new Exception("订单价格异常");
            }

            context.AddOrderModel.FlightList.ForEach(n =>
            {
                n.StandardPrice = n.FacePrice;
                n.StandardRate  = n.FRate;
            });

            this.NextNode?.ActionValidate(context);
            return(true);
        }
        /// <summary>
        /// 判断是否存在同人同行程的订单
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            if (!context.AddOrderModel.IsCheckSameFlight)
            {
                this.NextNode?.ActionValidate(context);
                return(true);
            }
            List <string> passengerNameList = context.AddOrderModel.PassengerList.Select(n => n.Name).Distinct().ToList();
            List <string> flightList        = context.AddOrderModel.FlightList.Select(n => n.Dport + n.Aport).Distinct().ToList();
            //List<string> flightNoList= context.AddOrderModel.FlightList.Select(n => n.FlightNo).Distinct().ToList();
            List <DateTime> tackoffTimeList = context.AddOrderModel.FlightList.Select(n => n.TackoffTime).Distinct().ToList();

            List <string> orderStatusList = new List <string>()
            {
                "N", "C"
            };
            DateTime beginTime = DateTime.Now.AddYears(-1);
            var      select    = from order in context.DbContext.Set <FltOrderEntity>()
                                 join flight in context.DbContext.Set <FltFlightEntity>() on order.OrderId equals flight.OrderId
                                 join passenger in context.DbContext.Set <FltPassengerEntity>() on order.OrderId equals passenger.OrderId
                                 where
                                 !orderStatusList.Contains(order.Orderstatus.ToUpper()) && passengerNameList.Contains(passenger.Name) &&
                                 flightList.Contains(flight.Dport + flight.Aport) && order.OrderDate > beginTime &&
                                 tackoffTimeList.Contains(flight.TackoffTime)
                                 select order;

            var list = select.ToList();

            if (list.Any())
            {
                string message = string.Concat(list.Select(n => "," + n.OrderId).Distinct().ToList()).Substring(1);
                throw new MojoryException(MojoryApiResponseCode.SameFlight, "存在相同乘机人与航程的订单,订单号:" + message);
            }

            this.NextNode?.ActionValidate(context);
            return(true);
        }
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            /****
             *  这里进行B2G采购备注验证
             *  如果是选择了B2G价格,则备注
             *  如果选择了协议价格,但是其中存在B2G价格,则订单备注
             * ***/
            Dictionary <int, string> b2GDictionary         = new Dictionary <int, string>();
            Dictionary <int, bool>   hasB2GPriceDictionary = new Dictionary <int, bool>();

            foreach (var f in context.AddOrderModel.FlightList)
            {
                //选择B2G政策的
                if (!string.IsNullOrEmpty(f.CorpPolicyType) && f.CorpPolicyType == FltPolicyTypeEnum.G.ToString())
                {
                    if (string.IsNullOrEmpty(f.PlcId))
                    {
                        throw new Exception("请传入" + FltPolicyTypeEnum.G.ToDescription() + " 政策Id");
                    }
                    b2GDictionary.Add(f.Sequence, FltPolicyTypeEnum.G.ToString());
                    f.PolicyMemo = f.ModDes;
                }
                //选择协议政策,但是有B2G价格的
                if (!string.IsNullOrEmpty(f.CorpPolicyType) && f.CorpPolicyType == FltPolicyTypeEnum.X.ToString() &&
                    f.HasB2GPrice)
                {
                    hasB2GPriceDictionary.Add(f.Sequence, true);
                }
            }

            B2GBuyRemark(context, b2GDictionary);

            B2GOrderRemark(context, hasB2GPriceDictionary);

            this.NextNode?.ActionValidate(context);
            return(true);
        }
Exemple #11
0
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            List <string> ticketNoList = context.AddRetModApplyModel.DetailList.Select(n => n.TicketNo).ToList();

            if (ticketNoList == null || ticketNoList.Count == 0)
            {
                throw new Exception("退票申请请传入票号信息");
            }

            foreach (var ticketNo in ticketNoList)
            {
                if (!ticketNo.Contains("-"))
                {
                    throw new Exception("票号:" + ticketNo + "格式不正确");
                }
                if (ticketNo.Length != 14)
                {
                    throw new Exception("票号:" + ticketNo + "格式不正确");
                }
            }

            this.NextNode?.ActionValidate(context);
            return(true);
        }
Exemple #12
0
        public override bool ActionValidate(AddOrderAbstractContext context)
        {
            /****
             *  一旦有PolicyType有数据并且=X||G,则代表有协议,进行名单匹配
             *  线上订单,一旦不在名单内,则提示不能下单;
             *  线下订单,一旦不在名单内,则提示请前去B2T或者官网进行比价;
             * ***/
            bool isNeedCheck = false;

            foreach (FltFlightModel f in context.AddOrderModel.FlightList)
            {
                if (string.IsNullOrEmpty(f.CorpPolicyType))
                {
                    if (!string.IsNullOrEmpty(f.PolicyType))
                    {
                        if (f.PolicyType == FltPolicyTypeEnum.G.ToString() ||
                            f.PolicyType == FltPolicyTypeEnum.X.ToString())
                        {
                            isNeedCheck = true;
                        }

                        if (f.PolicyType == "C")
                        {
                            f.PolicyType = "差旅普通政策";
                        }
                        else if (f.PolicyType == "X")
                        {
                            f.PolicyType = "差旅三协政策";
                        }
                        else if (f.PolicyType == "G")
                        {
                            f.PolicyType = "差旅二协政策";
                        }
                    }
                }
                else
                {
                    if (f.CorpPolicyType == FltPolicyTypeEnum.G.ToString() ||
                        f.CorpPolicyType == FltPolicyTypeEnum.X.ToString())
                    {
                        isNeedCheck = true;
                    }
                }
            }

            if (isNeedCheck)
            {
                bool   flag   = false;//是否在名单内
                string result = string.Empty;
                foreach (var flight in context.AddOrderModel.FlightList)
                {
                    string airlineNo = flight.FlightNo.Length < 2 ? flight.FlightNo : flight.FlightNo.Substring(0, 2);
                    if (CheckByNameAirlineNo.Contains(airlineNo.ToUpper()))
                    {
                        if (_checkPassengerIsInWhiteListBll.CheckPassenger(context.AddOrderModel.PassengerList, true))
                        {
                            flag = true;
                        }

                        result += "," + _checkPassengerIsInWhiteListBll.Result;
                    }
                    else
                    {
                        if (_checkPassengerIsInWhiteListBll.CheckPassenger(context.AddOrderModel.PassengerList, false))
                        {
                            flag = true;
                        }

                        result += "," + _checkPassengerIsInWhiteListBll.Result;
                    }
                }

                if (!flag)
                {
                    string message = "不在白名单内,不享受协议价,请删除后继续提交!";
                    if (context.AddOrderModel.PassengerList.Count == 1)
                    {
                        message = "不在白名单内,不享受协议价,请重新选择航班!";
                    }
                    throw new MojoryException(MojoryApiResponseCode.NotInWhiteList,
                                              result.Substring(1) + message);
                }
                else
                {
                    context.AddOrderModel.BuyRemark += result;
                }
            }

            this.NextNode?.ActionValidate(context);
            return(true);
        }
Exemple #13
0
 public ValidateOrderBll(AddOrderAbstractContext orderAbstractContext, ICheckPassengerIsInWhiteListBll checkPassengerIsInWhiteListBll) : base()
 {
     _orderAbstractContext           = orderAbstractContext;
     _checkPassengerIsInWhiteListBll = checkPassengerIsInWhiteListBll;
 }
 public ValidateModApplyBll(AddOrderAbstractContext orderAbstractContext) : base()
 {
     _orderAbstractContext = orderAbstractContext;
 }