/// <summary>
        /// 按照乘机人拆分订单
        /// </summary>
        /// <returns></returns>
        public List <int> SplitFltOrderByPassenger(int orderId, string oid)
        {
            #region 源数据
            FltOrderEntity splitFromOrderEntity = _fltOrderDal.Find <FltOrderEntity>(orderId);
            if (splitFromOrderEntity == null)
            {
                throw new Exception("未找到源订单");
            }
            List <FltFlightEntity> splitFromFlightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == orderId, true).ToList();
            List <FltPassengerEntity> splitFromPassengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == orderId, true)
                .ToList();
            if (splitFromPassengerEntities.Count == 1)
            {
                throw new Exception("只有一个乘机人不能拆单");
            }

            FltOrderUnionEntity     splitFromOrderUnionEntity = _fltOrderUnionDal.Find <FltOrderUnionEntity>(orderId);
            FltCorpCostCenterEntity splitFromCostCenterEntity =
                _fltCorpCostCenterDal.Find <FltCorpCostCenterEntity>(orderId);
            #endregion

            List <int> orderIdList = new List <int>();

            for (int i = 0; i < splitFromPassengerEntities.Count; i++)
            {
                int id = AddOrder(splitFromOrderEntity, splitFromOrderUnionEntity, splitFromCostCenterEntity,
                                  splitFromFlightEntities,
                                  splitFromPassengerEntities[i], (i == 0), oid);
                orderIdList.Add(id);
            }

            return(orderIdList);
        }
示例#2
0
        public GetRetApplyModel GetRetApply(GetRetApplyQueryModel query)
        {
            FltOrderEntity fltOrderEntity = _fltOrderDal.Find <FltOrderEntity>(query.OrderId);

            if (fltOrderEntity == null)
            {
                throw new Exception("查无此订单");
            }
            if ((fltOrderEntity.ProcessStatus & 8) != 8)
            {
                throw new Exception("该订单未出票,不能提交改签申请");
            }
            if (fltOrderEntity.Cid != query.Cid && query.Customer != null &&
                query.Customer.UserID.ToLower() != "administrator")
            {
                throw new Exception("查无此订单");
            }


            GetRetApplyModel result = new GetRetApplyModel();

            List <FltFlightEntity> flightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == query.OrderId).ToList();
            List <FltPassengerEntity> passengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == query.OrderId).ToList();
            List <FltTicketNoEntity> fltTicketNoEntities =
                _fltTicketNoDal.Query <FltTicketNoEntity>(n => n.OrderId == query.OrderId).ToList();
            List <SearchCityModel>    cityModels      = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels   = cityModels.SelectMany(n => n.AirportList).ToList();
            List <FltClassNameModel>  classNameModels = _getClassNameBll.GetFlightClassName();

            /*
             * 判断是否来回程开在一个票号上
             * 如果乘机人的票数=行程数量,则代表分开开;不等于则开在同一票上
             * **/
            int  nameTicketCount = fltTicketNoEntities.FindAll(n => n.PassengerName == passengerEntities[0].Name).Count;
            int  flightCount     = flightEntities.Count;
            bool isSame          = (nameTicketCount != flightCount); //是否开在同一票号上

            result.FlightList = new List <FltFlightModel>();

            result.CName        = fltOrderEntity.Cname;
            result.Mobile       = fltOrderEntity.Mobile;
            result.Email        = fltOrderEntity.Email;
            result.Cid          = fltOrderEntity.Cid;
            result.CorpAduitId  = fltOrderEntity.CorpAduitId;
            result.CorpPolicyId = fltOrderEntity.CorpPolicyId;

            result.FlightList = Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(flightEntities);
            result.FlightList.ForEach(n =>
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportLongName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportLongName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }

                FltClassNameModel classNameModel =
                    classNameModels.Find(
                        x =>
                        !string.IsNullOrEmpty(x.MClass) && !string.IsNullOrEmpty(n.Class) &&
                        x.MClass.ToLower() == n.Class.ToLower() &&
                        !string.IsNullOrEmpty(x.AirlineCode) && !string.IsNullOrEmpty(n.AirlineNo) &&
                        x.AirlineCode.ToLower() == n.AirlineNo.ToLower());

                if (classNameModel != null)
                {
                    n.ClassName   = classNameModel.ClassName;
                    n.ClassEnName = classNameModel.ClassEnName;
                }
            });

            List <FltPassengerModel> fltPassengerModels =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(passengerEntities);

            result.PassengerList = new List <FltPassengerModel>();


            foreach (var ticketNo in fltTicketNoEntities)
            {
                FltPassengerModel fltPassengerModel2 = fltPassengerModels.Find(n => n.Name == ticketNo.PassengerName);

                FltPassengerModel fltPassengerModel = Mapper.Map <FltPassengerModel, FltPassengerModel>(fltPassengerModel2);
                fltPassengerModel.RetApplyTicketNo = ticketNo.AirlineNo + "-" + ticketNo.TicketNo;

                if (isSame)
                {
                    #region 开同一票号的行程

                    List <string> dportList = result.FlightList.Select(n => n.Dport).ToList();
                    List <string> aportList = result.FlightList.Select(n => n.Aport).ToList();
                    List <string> lineList  = new List <string>();
                    List <string> lineList2 = new List <string>();

                    for (int i = 0; i < dportList.Count; i++)
                    {
                        string             dport         = dportList[i];
                        string             aport         = aportList[i];
                        SearchAirportModel airportModel  = airportModels.Find(x => x.AirportCode.ToLower() == dport.ToLower());
                        SearchCityModel    cityModel     = cityModels.Find(n => n.CityCode.ToLower() == airportModel.CityCode.ToLower());
                        SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == aport.ToLower());
                        SearchCityModel    cityModel2    = cityModels.Find(n => n.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                        lineList.Add(cityModel.CityName + "-" + cityModel2.CityName);

                        lineList2.Add(dport + "-" + aport);
                    }

                    fltPassengerModel.RetApplyFlightLine = Convert(lineList);
                    fltPassengerModel.RetApplyDAportList = lineList2;
                    fltPassengerModel.RetApplySequence   = 1;
                    fltPassengerModel.RetApplyFlightNo   =
                        result.FlightList.Select(n => n.FlightNo).ToList().FirstOrDefault();

                    #endregion
                }
                else
                {
                    #region 没有开在同一票号

                    var flight = result.FlightList.Find(n => n.Sequence == ticketNo.Sequence);
                    SearchAirportModel airportModel  = airportModels.Find(x => x.AirportCode.ToLower() == flight.Dport.ToLower());
                    SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == flight.Aport.ToLower());
                    if (airportModel != null && airportModel2 != null)
                    {
                        SearchCityModel cityModel  = cityModels.Find(n => n.CityCode.ToLower() == airportModel.CityCode.ToLower());
                        SearchCityModel cityModel2 = cityModels.Find(n => n.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                        fltPassengerModel.RetApplyFlightLine = cityModel.CityName + "-" + cityModel2.CityName;
                    }

                    fltPassengerModel.RetApplyDAportList = new List <string>()
                    {
                        flight.Dport + "-" + flight.Aport
                    };
                    fltPassengerModel.RetApplySequence = flight.Sequence;
                    fltPassengerModel.RetApplyFlightNo = flight.FlightNo;

                    #endregion
                }

                result.PassengerList.Add(fltPassengerModel);
            }

            List <int>    pidList         = result.PassengerList.Select(n => n.PId).ToList();
            List <string> orderStatusList = new List <string>()
            {
                "C"
            };
            var select = from flight in Context.Set <FltRetModFlightApplyEntity>()
                         join apply in Context.Set <FltRetModApplyEntity>() on flight.Rmid equals apply.Rmid into c
                         from apply in c.DefaultIfEmpty()
                         where
                         !orderStatusList.Contains(apply.OrderStatus) && pidList.Contains(flight.Pid) &&
                         apply.OrderType.ToUpper() == "R"
                         select flight;
            List <FltRetModFlightApplyEntity> list = select.ToList();
            if (list != null && list.Count > 0)
            {
                result.PassengerList.ForEach(n =>
                {
                    FltRetModFlightApplyEntity l = list.Find(x => x.Pid == n.PId && x.Sequence == n.RetApplySequence);
                    if (l != null)
                    {
                        n.IsRet = true;
                    }
                });
            }
            else
            {
                result.PassengerList.ForEach(n =>
                {
                    FltTicketNoEntity fltTicketNoEntity =
                        fltTicketNoEntities.Find(x => x.PassengerName == n.Name && x.Sequence == n.RetApplySequence);
                    if (fltTicketNoEntity != null && fltTicketNoEntity.TicketNoStatus == "R")
                    {
                        n.IsRet = true;
                    }
                });
            }

            return(result);
        }
        /// <summary>
        /// 获取机票出票通知邮件
        /// </summary>
        /// <param name="sendAppMessageModel"></param>
        private void GetFltPrintTicketEmail(SendAppMessageModel sendAppMessageModel)
        {
            CustomerInfoEntity customerInfoEntity = base.Context.Set <CustomerInfoEntity>().Find(sendAppMessageModel.Cid);

            if (string.IsNullOrEmpty(customerInfoEntity?.Email))
            {
                return;
            }

            sendAppMessageModel.Email = customerInfoEntity.Email;

            FltOrderEntity fltOrderEntity = _fltOrderDal.Find <FltOrderEntity>(sendAppMessageModel.OrderId);

            List <FltPassengerEntity> fltPassengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == fltOrderEntity.OrderId, true).ToList();

            List <FltFlightEntity> fltFlightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == fltOrderEntity.OrderId, true).ToList();
            //判断是否是同一个编码
            bool isSamePnr = fltFlightEntities.Select(n => n.RecordNo).Distinct().Count() == 1;

            if (fltFlightEntities.Count == 1)
            {
                isSamePnr = false;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("<p>{0}:</p>", customerInfoEntity.RealName);
            sb.Append("<p>&nbsp;</p>");
            sb.Append("<p>您好!</p>");

            foreach (var fltPassengerEntity in fltPassengerEntities)
            {
                sb.Append("<p>&nbsp; </p>");
                sb.AppendFormat("<p>{0}:{1}已成功预订!</p>", fltPassengerEntity.Name, fltPassengerEntity.CardNo);
                if (!isSamePnr)
                {
                    //不同编码的行程
                    foreach (var fltFlightEntity in fltFlightEntities)
                    {
                        string dportName =
                            _airPortDal.Query <AirPortEntity>(n => n.AirportCode == fltFlightEntity.Dport, true)
                            .FirstOrDefault()?
                            .AirportName;
                        string aportName =
                            _airPortDal.Query <AirPortEntity>(n => n.AirportCode == fltFlightEntity.Aport, true)
                            .FirstOrDefault()?
                            .AirportName;

                        string s1 = fltFlightEntity.Airportson.Length >= 2
                            ? fltFlightEntity.Airportson.Substring(0, 2)
                            : "--";
                        string s2 = fltFlightEntity.Airportson.Length >= 4
                            ? fltFlightEntity.Airportson.Substring(2, 2)
                            : "--";

                        sb.AppendFormat("<p>行程:{0} {1}{2}-{3}{4}</p>", fltFlightEntity.FlightNo, dportName, s1,
                                        aportName,
                                        s2);
                        sb.AppendFormat("<p>出行时间:{0} {1} 起飞 {2} 到达</p>", fltFlightEntity.TackoffTime.ToString("MM月dd日"),
                                        fltFlightEntity.TackoffTime.ToString("HH:mm"),
                                        fltFlightEntity.ArrivalsTime.ToString("HH:mm"));
                        sb.AppendFormat("<p>价格:{0}元</p>",
                                        fltFlightEntity.SalePrice + fltFlightEntity.TaxFee + fltFlightEntity.OilFee +
                                        (fltFlightEntity.ServiceFee ?? 0));
                    }
                }
                else
                {
                    //第一段
                    string f1         = fltFlightEntities[0].FlightNo;
                    string dport1     = fltFlightEntities[0].Dport;
                    string dportName1 =
                        _airPortDal.Query <AirPortEntity>(n => n.AirportCode == dport1, true)
                        .FirstOrDefault()?
                        .AirportName;
                    string aport1     = fltFlightEntities[0].Aport;
                    string aportName1 =
                        _airPortDal.Query <AirPortEntity>(n => n.AirportCode == aport1, true)
                        .FirstOrDefault()?
                        .AirportName;

                    string d1 = fltFlightEntities[0].Airportson.Length >= 2
                       ? fltFlightEntities[0].Airportson.Substring(0, 2)
                       : "--";
                    string a1 = fltFlightEntities[0].Airportson.Length >= 4
                        ? fltFlightEntities[0].Airportson.Substring(2, 2)
                        : "--";

                    //第二段
                    string f2         = fltFlightEntities[1].FlightNo;
                    string dport2     = fltFlightEntities[1].Dport;
                    string dportName2 =
                        _airPortDal.Query <AirPortEntity>(n => n.AirportCode == dport2, true)
                        .FirstOrDefault()?
                        .AirportName;

                    string aport2     = fltFlightEntities[1].Aport;
                    string aportName2 =
                        _airPortDal.Query <AirPortEntity>(n => n.AirportCode == aport2, true)
                        .FirstOrDefault()?
                        .AirportName;
                    string d2 = fltFlightEntities[1].Airportson.Length >= 2
                      ? fltFlightEntities[1].Airportson.Substring(0, 2)
                      : "--";
                    string a2 = fltFlightEntities[1].Airportson.Length >= 4
                        ? fltFlightEntities[1].Airportson.Substring(2, 2)
                        : "--";

                    sb.AppendFormat("<p>行程:去 {0} {1}{2}-{3}{4},回 {5} {6}{7}-{8}{9}</p>", f1, dportName1, d1,
                                    aportName1, a1, f2, dportName2, d2,
                                    aportName2, a2);

                    sb.AppendFormat("<p>出行时间:去 {0} {1} 起飞 {2} 到达,回 {3} {4} 起飞 {5} 到达</p>",
                                    fltFlightEntities[0].TackoffTime.ToString("MM月dd日"),
                                    fltFlightEntities[0].TackoffTime.ToString("HH:mm"),
                                    fltFlightEntities[0].ArrivalsTime.ToString("HH:mm"),
                                    fltFlightEntities[1].TackoffTime.ToString("MM月dd日"),
                                    fltFlightEntities[1].TackoffTime.ToString("HH:mm"),
                                    fltFlightEntities[1].ArrivalsTime.ToString("HH:mm"));

                    sb.AppendFormat("<p>价格:{0}元</p>",
                                    fltFlightEntities.Sum(n => n.SalePrice) + fltFlightEntities.Sum(n => n.TaxFee) +
                                    fltFlightEntities.Sum(n => n.OilFee) +
                                    fltFlightEntities.Sum(n => (n.ServiceFee ?? 0)));
                }
            }


            sb.Append("<p></p>");
            sb.Append("<p>退改签规则:</p>");

            if (fltFlightEntities.Count == 1)
            {
                sb.AppendFormat("<p>退票:{0}</p>", fltFlightEntities[0].RetDes);
                sb.AppendFormat("<p>改期:{0}</p>", fltFlightEntities[0].ModDes);
            }
            else
            {
                sb.AppendFormat("<p>去程:</p>");
                sb.AppendFormat("<p>退票:{0}</p>", fltFlightEntities[0].RetDes);
                sb.AppendFormat("<p>改期:{0}</p>", fltFlightEntities[0].ModDes);
                sb.AppendFormat("<p>回程:</p>");
                sb.AppendFormat("<p>退票:{0}</p>", fltFlightEntities[1].RetDes);
                sb.AppendFormat("<p>改期:{0}</p>", fltFlightEntities[1].ModDes);
            }
            sb.Append("<p>温馨提醒:请提前90分钟到达机场,祝您一路平安,旅途愉快!</p>");
            sendAppMessageModel.SendContent = sb.ToString();
        }
        public GetNotUseTicketNoModel GetNotUseNationTicketNoList(GetNotUseTicketNoQueryModel query)
        {
            GetNotUseTicketNoModel resultModel     = new GetNotUseTicketNoModel();
            List <string>          orderstatusList = new List <string>()
            {
                "N", "C", "W"
            };
            List <int> orderIdList = new List <int>();
            DateTime   beginTime   = DateTime.Now.AddYears(-1);
            var        select      = from ticketNo in Context.Set <FltTicketNoEntity>().AsNoTracking()
                                     join order in Context.Set <FltOrderEntity>().AsNoTracking() on ticketNo.OrderId equals order.OrderId into
                                     b
                                     from order in b.DefaultIfEmpty()
                                     join customer in Context.Set <CustomerInfoEntity>().AsNoTracking() on order.Cid equals customer.Cid into
                                     c
                                     from customer in c.DefaultIfEmpty()
                                     where (order.ProcessStatus & 8) == 8 && !orderstatusList.Contains(order.Orderstatus) &&
                                     !string.IsNullOrEmpty(order.IsInter) && order.IsInter.ToUpper() == "N" &&
                                     ticketNo.TicketNoStatus == "F" && ticketNo.AuditTime.HasValue && order.OrderDate >= beginTime
                                     select new GetNotUseTicketNoDataModel()
            {
                Cid           = order.Cid,
                OrderId       = order.OrderId,
                TicketNo      = ticketNo.AirlineNo + "-" + ticketNo.TicketNo,
                OrderDate     = order.OrderDate,
                CorpId        = customer.CorpID,
                PassengerName = ticketNo.PassengerName,
                Sequence      = ticketNo.Sequence
            };



            #region 分页功能
            if (query.Cid.HasValue)
            {
                select = select.Where(n => n.Cid == query.Cid.Value);
            }
            if (query.OrderId.HasValue)
            {
                select = select.Where(n => n.OrderId == query.OrderId.Value);
            }
            if (!string.IsNullOrEmpty(query.CorpId))
            {
                select = select.Where(n => n.CorpId == query.CorpId);
            }

            if (query.AllowShowDataBeginTime.HasValue)
            {
                select = select.Where(n => n.OrderDate > query.AllowShowDataBeginTime);
            }
            if (query.TackOffBeginTime.HasValue)
            {
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime >= query.TackOffBeginTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (query.TackOffEndTime.HasValue)
            {
                query.TackOffEndTime = query.TackOffEndTime.Value.AddDays(1);
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime < query.TackOffEndTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (!string.IsNullOrEmpty(query.PassengerName))
            {
                select = select.Where(m => m.PassengerName.Contains(query.PassengerName));
            }

            if (query.OrderBeginTime.HasValue)
            {
                select = select.Where(n => n.OrderDate >= query.OrderBeginTime.Value);
            }
            if (query.OrderEndTime.HasValue)
            {
                query.OrderEndTime = query.OrderEndTime.Value.AddDays(1);
                select             = select.Where(n => n.OrderDate < query.OrderEndTime.Value);
            }
            resultModel.TotalCount = select.Count();//查询所有结果的数量

            select =
                select.OrderByDescending(n => n.OrderId).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize);
            List <GetNotUseTicketNoDataModel> orderList = select.ToList();//分页结果


            #endregion

            orderList.ForEach(n => orderIdList.Add(n.OrderId));
            //1.根据订单号 获取航段信息
            List <FltFlightEntity> flightEntities = _fltFlightDal.Query <FltFlightEntity>(n => orderIdList.Contains(n.OrderId), true).ToList();
            //2.根据订单号 获取乘机人信息
            List <FltPassengerEntity> passengerEntities = _fltPassengerDal.Query <FltPassengerEntity>(n => orderIdList.Contains(n.OrderId), true).ToList();

            List <SearchCityModel>    cityModels         = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels      = cityModels.SelectMany(n => n.AirportList).ToList();
            List <FltPassengerModel>  fltPassengerModels =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(passengerEntities);
            List <FltFlightModel> flightModels =
                Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(flightEntities);
            flightModels.ForEach(n =>
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }
            });

            orderList.ForEach(n =>
            {
                n.FlightList    = flightModels.FindAll(x => x.OrderId == n.OrderId & x.Sequence == n.Sequence);
                n.PassengerList = fltPassengerModels.FindAll(x => x.OrderId == n.OrderId && x.Name == n.PassengerName);
            });

            resultModel.DataList = orderList;
            return(resultModel);
        }
示例#5
0
        /// <summary>
        /// 根据订单号获取订单信息
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public FltOrderInfoModel GetFltOrderById(int orderId)
        {
            FltOrderEntity fltOrderEntity = _fltOrderDal.Find <FltOrderEntity>(orderId);

            if (fltOrderEntity == null)
            {
                return(null);
            }

            //1.根据订单号 获取航段信息
            List <FltFlightEntity> flightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == orderId, true).ToList();
            //2.根据订单号 获取乘机人信息
            List <FltPassengerEntity> passengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == orderId, true).ToList();
            //3.根据订单号 获取成本中心
            FltCorpCostCenterEntity costCenterEntity =
                _fltCorpCostCenterDal.Query <FltCorpCostCenterEntity>(n => n.Orderid == orderId, true).FirstOrDefault();
            //4.获取仓等信息
            List <FltClassNameModel> classNameModels = _getClassNameBll.GetFlightClassName();
            //5.获取机场信息
            List <SearchCityModel>    cityModels    = AportInfo?.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels?.SelectMany(n => n.AirportList).ToList();
            //6.机票订单扩展表
            FltOrderUnionEntity fltOrderUnionEntity = _fltOrderUnionDal.Find <FltOrderUnionEntity>(orderId);

            FltOrderInfoModel result = Mapper.Map <FltOrderEntity, FltOrderInfoModel>(fltOrderEntity);

            if (!string.IsNullOrEmpty(costCenterEntity?.Depart))
            {
                result.CostCenter = costCenterEntity.Depart;
            }
            if (fltOrderUnionEntity?.ProjectId != null && ProjectNameList != null)
            {
                ProjectNameModel projectNameModel = ProjectNameList.Find(n => n.ProjectId == fltOrderUnionEntity.ProjectId.Value);
                result.ProjectName = projectNameModel?.ProjectName;
            }
            //result.CorpPolicy = fltOrderUnionEntity?.CorpPolicy;
            result.PassengerList =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(
                    passengerEntities.FindAll(n => n.OrderId == fltOrderEntity.OrderId));
            result.FlightList =
                Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(
                    flightEntities.FindAll(n => n.OrderId == fltOrderEntity.OrderId));

            result.PassengerList.ForEach(n =>
            {
                if (n.InsCompanyId.HasValue)
                {
                    n.InsuranceName = InsuranceCompanyList?.Find(x => x.CompanyID == n.InsCompanyId.Value)?.ProductName;
                }
            });
            #region 行程信息

            result.CorpPolicy   = string.Empty;
            result.ChoiceReason = string.Empty;
            foreach (var n in result.FlightList)
            {
                if (!string.IsNullOrEmpty(n.CorpPolicy) && n.CorpPolicy.ToLower() != "undefined")
                {
                    result.CorpPolicy += ";" + n.CorpPolicy;
                }
                if (!string.IsNullOrEmpty(n.ChoiceReason) && n.ChoiceReason.ToLower() != "undefined")
                {
                    result.ChoiceReason += ";" + n.ChoiceReason;
                }
                SearchAirportModel airportModel = airportModels?.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportLongName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels?.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportLongName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }

                FltClassNameModel classNameModel =
                    classNameModels.Find(
                        x =>
                        !string.IsNullOrEmpty(x.MClass) && !string.IsNullOrEmpty(n.Class) &&
                        x.MClass.ToLower() == n.Class.ToLower() &&
                        !string.IsNullOrEmpty(x.AirlineCode) && !string.IsNullOrEmpty(n.AirlineNo) &&
                        x.AirlineCode.ToLower() == n.AirlineNo.ToLower());

                if (classNameModel != null)
                {
                    n.ClassName   = classNameModel.ClassName;
                    n.ClassEnName = classNameModel.ClassEnName;
                }
            }

            if (!string.IsNullOrEmpty(result.CorpPolicy))
            {
                result.CorpPolicy = result.CorpPolicy.Substring(1);
            }

            if (!string.IsNullOrEmpty(result.ChoiceReason))
            {
                result.ChoiceReason = result.ChoiceReason.Substring(1);
            }

            #endregion

            return(result);
        }
示例#6
0
        public FltRetModApplyModel GetRetModApply(int rmid)
        {
            FltRetModApplyEntity fltRetModApply = _fltRetModApplyDal.Find <FltRetModApplyEntity>(rmid);
            List <FltRetModFlightApplyEntity> fltRetModFlightApplyEntities =
                _fltRetModFlightApplyDal.Query <FltRetModFlightApplyEntity>(n => n.Rmid == rmid).ToList();
            List <FltRetModApplyLogEntity> fltRetModApplyLogEntities =
                _fltRetModApplyLogDal.Query <FltRetModApplyLogEntity>(n => n.Rmid == rmid).ToList();



            FltRetModApplyModel fltRetModApplyModel =
                Mapper.Map <FltRetModApplyEntity, FltRetModApplyModel>(fltRetModApply);

            fltRetModApplyModel.DetailList =
                Mapper.Map <List <FltRetModFlightApplyEntity>, List <FltRetModFlightApplyModel> >(
                    fltRetModFlightApplyEntities);
            fltRetModApplyModel.LogList = Mapper.Map <List <FltRetModApplyLogEntity>, List <FltRetModApplyLogModel> >(
                fltRetModApplyLogEntities);
            List <SearchCityModel>    cityModels    = AportInfo?.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels?.SelectMany(n => n.AirportList).ToList();

            #region 乘机人信息
            List <int> pidList = fltRetModApplyModel.DetailList.Select(n => n.Pid).ToList();
            List <FltPassengerEntity> passengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => pidList.Any(x => x == n.PId)).ToList();

            #endregion

            //4.获取仓等信息
            List <FltClassNameModel> classNameModels = _getClassNameBll.GetFlightClassName();

            fltRetModApplyModel.DetailList.ForEach(n =>
            {
                FltFlightEntity orderFlightEntity =
                    _fltFlightDal.Query <FltFlightEntity>(x => x.OrderId == fltRetModApplyModel.OrderId && x.Sequence == n.Sequence)
                    .FirstOrDefault();
                if (orderFlightEntity != null)
                {
                    if (!n.TackoffTime.HasValue)
                    {
                        n.TackoffTime = orderFlightEntity.TackoffTime;
                    }
                    if (string.IsNullOrEmpty(n.FlightNo))
                    {
                        n.FlightNo = orderFlightEntity.FlightNo;
                    }
                }

                string dport = n.Dport.ToLower();
                if (fltRetModApplyModel.OrderType == "R" && orderFlightEntity != null)
                {
                    dport = orderFlightEntity.Dport.ToLower();
                }

                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == dport);
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                string aport = n.Aport.ToLower();
                if (fltRetModApplyModel.OrderType == "R" && orderFlightEntity != null)
                {
                    aport = orderFlightEntity.Aport.ToLower();
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == aport);
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }
                FltPassengerModel passengerModel =
                    Mapper.Map <FltPassengerEntity, FltPassengerModel>(passengerEntities.Find(x => x.PId == n.Pid));

                n.PassengerModel = passengerModel;

                if (fltRetModApplyModel.OrderType == "R")
                {
                    n.PassengerModel.RefundTicketNo = n.TicketNo;
                }

                if (n.ChoiceReasonId.HasValue)
                {
                    n.ChoiceReason = PolicyReasonList?.Find(x => x.Id == n.ChoiceReasonId.Value)?.Reason;
                }

                FltClassNameModel classNameModel =
                    classNameModels.Find(
                        x =>
                        !string.IsNullOrEmpty(x.MClass) && !string.IsNullOrEmpty(n.Class) &&
                        x.MClass.ToLower() == n.Class.ToLower() &&
                        !string.IsNullOrEmpty(x.AirlineCode) && !string.IsNullOrEmpty(n.FlightNo) &&
                        x.AirlineCode.ToLower() == n.FlightNo.Substring(0, 2).ToLower());

                if (classNameModel != null)
                {
                    n.ClassName = classNameModel.ClassName;
                }
            });


            return(fltRetModApplyModel);
        }
示例#7
0
        public QueryFlightModApplyListModel QueryFlightModApplyList(QueryFlightModApplyListDataQueryModel query)
        {
            QueryFlightModApplyListModel resultModel = new QueryFlightModApplyListModel();

            resultModel.ApplyDataList = new List <QueryFlightModApplyListDataModel>();

            //List<string> orderstatusList = new List<string>() {"C" };
            var select = from modApply in Context.Set <FltRetModApplyEntity>().AsNoTracking()
                         join order in Context.Set <FltOrderEntity>().AsNoTracking() on modApply.OrderId equals order.OrderId
                         into o
                         from order in o.DefaultIfEmpty()
                         join customer in Context.Set <CustomerInfoEntity>().AsNoTracking() on modApply.Cid equals customer.Cid
                         into c
                         from customer in c.DefaultIfEmpty()
                         where modApply.OrderType.ToUpper() == "M" && (order.IsInter == "N" || order.IsInter == "n") && (modApply.IsHidden ?? 0) == 0
                         select new QueryFlightModApplyListDataModel()
            {
                Rmid        = modApply.Rmid,
                CreateTime  = modApply.CreateTime,
                OrderId     = modApply.OrderId,
                OrderStatus = modApply.OrderStatus,
                Cid         = modApply.Cid,
                CorpId      = customer.CorpID,
                Cpid        = modApply.Cpid,
                CpidSecond  = modApply.CpidSecond
            };



            #region 查询条件
            //if(!query.IsHidden)
            //{
            //    select = select.Where(n=>n.ish)
            //}
            if (query.Cid.HasValue)
            {
                select = select.Where(n => n.Cid == query.Cid.Value);
            }

            if (!string.IsNullOrEmpty(query.CorpId))
            {
                select = select.Where(n => n.CorpId == query.CorpId);
            }
            if (query.AllowShowDataBeginTime.HasValue)
            {
                select = select.Where(n => n.CreateTime > query.AllowShowDataBeginTime.Value);
            }
            if (query.OrderId.HasValue)
            {
                select = select.Where(n => n.OrderId == query.OrderId.Value);
            }

            if (!string.IsNullOrEmpty(query.OrderStatus))
            {
                select = select.Where(n => n.OrderStatus.ToUpper() == query.OrderStatus.ToUpper());
            }

            if (query.TackOffBeginTime.HasValue)
            {
                select =
                    select.Where(
                        n =>
                        Context.Set <FltRetModFlightApplyEntity>()
                        .Where(m => m.TackoffTime >= query.TackOffBeginTime.Value)
                        .Select(m => m.Rmid).Contains(n.Rmid));
            }

            if (query.TackOffEndTime.HasValue)
            {
                query.TackOffEndTime = query.TackOffEndTime.Value.AddDays(1);
                select =
                    select.Where(
                        n =>
                        Context.Set <FltRetModFlightApplyEntity>()
                        .Where(m => m.TackoffTime < query.TackOffEndTime.Value)
                        .Select(m => m.Rmid).Contains(n.Rmid));
            }


            if (query.OrderBeginTime.HasValue)
            {
                select = select.Where(n => n.CreateTime >= query.OrderBeginTime.Value);
            }
            if (query.OrderEndTime.HasValue)
            {
                query.OrderEndTime = query.OrderEndTime.Value.AddDays(1);
                select             = select.Where(n => n.CreateTime < query.OrderEndTime.Value);
            }

            if (!string.IsNullOrEmpty(query.PassengerName))
            {
                select = select.Where(
                    n => Context.Set <FltRetModFlightApplyEntity>().Where(m => m.FltPassenger.Name.Contains(query.PassengerName))
                    .Select(m => m.Rmid).Contains(n.Rmid)
                    );
            }


            #endregion

            resultModel.TotalCount = select.Count();//查询所有结果的数量
            //如果是导出操作 则返回全部订单
            if ((query.IsExport ?? 0) == 0)
            {
                select =
                    select.OrderByDescending(n => n.Rmid).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize);
            }
            else
            {
                select = select.OrderByDescending(n => n.Rmid);
            }


            resultModel.ApplyDataList = select.ToList();//分页结果

            List <int> rmidList = new List <int>();
            resultModel.ApplyDataList.ForEach(n => rmidList.Add(n.Rmid));

            List <FltRetModFlightApplyEntity> flightApplyEntities =
                _fltRetModFlightApplyDal.Query <FltRetModFlightApplyEntity>(n => rmidList.Contains(n.Rmid), true).ToList();

            List <SearchCityModel>    cityModels    = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels.SelectMany(n => n.AirportList).ToList();


            List <FltRetModFlightApplyModel> flightApplyModels =
                Mapper.Map <List <FltRetModFlightApplyEntity>, List <FltRetModFlightApplyModel> > (flightApplyEntities);


            #region 乘机人信息
            List <int> pidList = flightApplyModels.Select(n => n.Pid).ToList();
            List <FltPassengerEntity> passengerEntities = _fltPassengerDal.Query <FltPassengerEntity>(n => pidList.Contains(n.PId), true).ToList();
            List <FltPassengerModel>  passengerModels   =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(passengerEntities);
            #endregion


            flightApplyModels.ForEach(n =>
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }
                n.PassengerModel = passengerModels.Find(x => x.PId == n.Pid);
            });



            resultModel.ApplyDataList.ForEach(n =>
            {
                if (n.Cpid.HasValue)
                {
                    n.FirstAuditCustomer = query.CorpCustomerList?.Find(x => x.Cid == n.Cpid.Value);
                }
                if (n.CpidSecond.HasValue)
                {
                    n.SecondAuditCustomer = query.CorpCustomerList?.Find(x => x.Cid == n.CpidSecond.Value);
                }

                n.DetailList = flightApplyModels.FindAll(x => x.Rmid == n.Rmid);

                List <int> dPidList     = new List <int>();
                List <int> sequenceList = new List <int>();

                n.DetailList.ForEach(x =>
                {
                    dPidList.Add(x.Pid);
                    sequenceList.Add(x.Sequence);
                });

                dPidList     = dPidList.Distinct().ToList();
                sequenceList = sequenceList.Distinct().ToList();


                n.PassengerList = new List <FltPassengerModel>();
                foreach (var pid in dPidList)
                {
                    n.PassengerList.Add(passengerModels.Find(x => x.PId == pid));
                }

                n.FlightList = new List <FltFlightModel>();
                foreach (var sequence in sequenceList)
                {
                    var dd = n.DetailList.Find(x => x.Sequence == sequence);
                    n.FlightList.Add(new FltFlightModel()
                    {
                        FlightNo    = dd.FlightNo,
                        Dport       = dd.Dport,
                        Aport       = dd.Aport,
                        DportName   = dd.DportName,
                        AportName   = dd.AportName,
                        AportCity   = dd.AportCity,
                        DportCity   = dd.DportCity,
                        TackoffTime = dd.TackoffTime ?? Convert.ToDateTime("2000-01-01")
                    });
                }
            });

            return(resultModel);
        }
示例#8
0
        /// <summary>
        /// 复制差旅订单
        /// </summary>
        /// <param name="copyFltOrderModel"></param>
        /// <returns></returns>
        public int CopyOrder(CopyFltOrderModel copyFltOrderModel)
        {
            FltOrderEntity copyFromOrderEntity = _fltOrderDal.Find <FltOrderEntity>(copyFltOrderModel.CopyFromOrderId);

            if (copyFromOrderEntity == null)
            {
                throw new Exception("复制来源订单异常");
            }
            List <FltFlightEntity> copyFromFlightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == copyFltOrderModel.CopyFromOrderId, true).ToList();

            List <FltPassengerEntity> copyFromPassengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == copyFltOrderModel.CopyFromOrderId, true)
                .ToList();

            List <FltTicketNoEntity> copyFromTicketNoEntities =
                _fltTicketNoDal.Query <FltTicketNoEntity>(n => n.OrderId == copyFltOrderModel.CopyFromOrderId, true)
                .ToList();

            FltOrderUnionEntity copyFromOrderUnionEntity =
                _fltOrderUnionDal.Find <FltOrderUnionEntity>(copyFltOrderModel.CopyFromOrderId);

            FltCorpCostCenterEntity copyFromCostCenterEntity =
                _fltCorpCostCenterDal.Find <FltCorpCostCenterEntity>(copyFltOrderModel.CopyFromOrderId);

            FltOrderEntity          fltOrderEntity          = Mapper.Map <FltOrderEntity, FltOrderEntity>(copyFromOrderEntity);
            FltOrderUnionEntity     fltOrderUnionEntity     = Mapper.Map <FltOrderUnionEntity, FltOrderUnionEntity>(copyFromOrderUnionEntity);
            FltCorpCostCenterEntity fltCorpCostCenterEntity =
                Mapper.Map <FltCorpCostCenterEntity, FltCorpCostCenterEntity>(copyFromCostCenterEntity);

            List <FltFlightEntity> fltFlightEntities =
                Mapper.Map <List <FltFlightEntity>, List <FltFlightEntity> >(copyFromFlightEntities);
            List <FltPassengerEntity> fltPassengerEntities =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerEntity> >(copyFromPassengerEntities);
            List <FltTicketNoEntity> fltTicketNoEntities =
                Mapper.Map <List <FltTicketNoEntity>, List <FltTicketNoEntity> >(copyFromTicketNoEntities);


            fltOrderEntity.Payamount           = copyFltOrderModel.PayAmount;
            fltOrderEntity.CreditcardfeeAmount = copyFltOrderModel.CreditCardfeeamount;
            fltOrderEntity.Voucheramount       = copyFltOrderModel.Voucheramount;
            fltOrderEntity.SendTicketAmount    = copyFltOrderModel.SendTicketamount;
            fltOrderEntity.Totalamount         = fltOrderEntity.Payamount + fltOrderEntity.CreditcardfeeAmount;
            fltOrderEntity.CreateOid           = copyFltOrderModel.CreateOid;
            if (string.IsNullOrEmpty(fltOrderEntity.Remark))
            {
                fltOrderEntity.Remark = "无";
            }

            fltOrderEntity.ReturnAccountOid  = "";
            fltOrderEntity.ReturnAccountTime = null;
            fltOrderEntity.OutTicketStatus   = "N";
            fltOrderEntity.ProcessStatus     = 1;
            fltOrderEntity.Orderstatus       = "P";

            if (string.IsNullOrEmpty(fltOrderEntity.Description))
            {
                fltOrderEntity.Description = ",";
            }
            if (string.IsNullOrEmpty(fltOrderEntity.IsOnLinePay))
            {
                fltOrderEntity.IsOnLinePay = "F";
            }
            if (string.IsNullOrEmpty(fltOrderEntity.SendTicketType))
            {
                fltOrderEntity.SendTicketType = SendTicketTypeEnum.Not.ToString();
            }

            fltOrderEntity.RealAcceptDatetime = null;
            fltOrderEntity.RealPayDatetime    = null;
            fltOrderEntity.Collectiontime     = null;
            fltOrderEntity.CollectionOid      = string.Empty;
            fltOrderEntity.PrintTicketOid     = null;
            fltOrderEntity.PrintTicketTime    = null;
            fltOrderEntity.PrintOrderTime     = null;

            if (copyFltOrderModel.CopyType == "X")//虚出复制
            {
                //判断当前原始订单是否有虚退
                int xuTuiCount = _fltRetModApplyDal.Query <FltRetModApplyEntity>(
                    n => n.OrderType.ToUpper() == "R" &&
                    n.OrderId == copyFltOrderModel.CopyFromOrderId && n.OrderStatus.ToUpper() != "C" &&
                    n.RefundType == "虚退").Count();
                if (xuTuiCount == 0)
                {
                    throw new Exception("当前订单不存在虚退,不允许虚退复制");
                }


                fltOrderEntity.OrderDate = copyFromOrderEntity.OrderDate;
                fltOrderEntity.CopyType  = "X";
                //如果当前原始订单不是虚退复制的订单
                if (string.IsNullOrEmpty(copyFromOrderEntity.CopyType))
                {
                    fltOrderEntity.CopyFromOrderId = copyFltOrderModel.CopyFromOrderId;
                }
                else
                {
                    if (copyFromOrderEntity.CopyType == "X" && copyFromOrderEntity.CopyFromOrderId.HasValue)
                    {
                        fltOrderEntity.CopyFromOrderId = copyFromOrderEntity.CopyFromOrderId;
                    }
                    else
                    {
                        fltOrderEntity.CopyFromOrderId = copyFltOrderModel.CopyFromOrderId;
                    }
                }
            }
            else
            {
                fltOrderEntity.CopyType        = "C";
                fltOrderEntity.CopyFromOrderId = copyFltOrderModel.CopyFromOrderId;
                fltOrderEntity.OrderDate       = DateTime.Now;
            }

            fltOrderEntity = _fltOrderDal.Insert(fltOrderEntity);

            if (fltOrderUnionEntity != null)
            {
                fltOrderUnionEntity.OrderId           = fltOrderEntity.OrderId;
                fltOrderUnionEntity.FivePrintId       = null;
                fltOrderUnionEntity.FivePrintLastTime = null;
                fltOrderUnionEntity.IsNeedPrintTime   = null;
                if (string.IsNullOrEmpty(fltOrderUnionEntity.IsMobile))
                {
                    fltOrderUnionEntity.IsMobile = "F";
                }
                _fltOrderUnionDal.Insert(fltOrderUnionEntity);
            }

            foreach (var fltFlightEntity in fltFlightEntities)
            {
                CopyFltFlightModel copyFltFlightModel =
                    copyFltOrderModel.FlightList.Find(n => n.Sequence == fltFlightEntity.Sequence);
                if (string.IsNullOrEmpty(fltFlightEntity.RecordNo))
                {
                    fltFlightEntity.RecordNo = "AAAAAA";
                }
                fltFlightEntity.OrderId   = fltOrderEntity.OrderId;
                fltFlightEntity.Sequence  = copyFltFlightModel.Sequence;
                fltFlightEntity.OilFee    = copyFltFlightModel.OilFee;
                fltFlightEntity.Rate      = copyFltFlightModel.Rate;
                fltFlightEntity.SalePrice = copyFltFlightModel.SalePrice;
                fltFlightEntity.TaxFee    = copyFltFlightModel.TaxFee;
                if (string.IsNullOrEmpty(fltFlightEntity.Airportson))
                {
                    fltFlightEntity.Airportson = "----";
                }
                _fltFlightDal.Insert(fltFlightEntity);
            }

            foreach (var fltPassengerEntity in fltPassengerEntities)
            {
                fltPassengerEntity.OrderId = fltOrderEntity.OrderId;
                if (string.IsNullOrEmpty(fltPassengerEntity.Remark))
                {
                    fltPassengerEntity.Remark = "无";
                }
                _fltPassengerDal.Insert(fltPassengerEntity);
            }

            if (fltTicketNoEntities != null && fltTicketNoEntities.Count > 0)
            {
                foreach (var fltTicketNoEntity in fltTicketNoEntities)
                {
                    fltTicketNoEntity.OrderId = fltOrderEntity.OrderId;
                    _fltTicketNoDal.Insert(fltTicketNoEntity);
                }
            }

            if (fltCorpCostCenterEntity != null)
            {
                fltCorpCostCenterEntity.Orderid = fltOrderEntity.OrderId;
                _fltCorpCostCenterDal.Insert <FltCorpCostCenterEntity>(fltCorpCostCenterEntity);
            }

            FltOrderLogEntity log = new FltOrderLogEntity()
            {
                OrderId = fltOrderEntity.OrderId,
                LogTime = DateTime.Now,
                LogType = "新建订单",
                Remark  = "复制订单,来源订单号:" + copyFltOrderModel.CopyFromOrderId + ",马甲订单号:" + fltOrderEntity.CopyFromOrderId,
                Oid     = fltOrderEntity.CreateOid
            };

            _fltOrderLogDal.Insert(log);


            //将原始订单设置为线上隐藏
            if (copyFltOrderModel.CopyType == "X")
            {
                copyFromOrderEntity.IsOnlineShow = 1;
                _fltOrderDal.Update(copyFromOrderEntity, new string[] { "IsOnlineShow" });
            }

            return(fltOrderEntity.OrderId);
        }
示例#9
0
        public QueryFlightOrderDataModel QueryFlightOrder(QueryFlightOrderQueryModel query)
        {
            var            select         = _fltOrderDal.Query <FltOrderEntity>(n => n.OrderId == query.OrderId, true);
            FltOrderEntity fltOrderEntity = select.FirstOrDefault();

            if (fltOrderEntity == null)
            {
                throw new Exception("查无此订单");
            }
            //如果登录用户没有查看全部订单的权限
            if ((query.Customer.IsShowAllOrder ?? 0) == 0)
            {
                if (!query.IsFromAduitQuery)//不是来自审批人查询
                {
                    if (!string.IsNullOrEmpty(query.Customer?.UserID) && query.Customer.UserID.ToLower() != "administrator" &&
                        query.Customer.Cid != fltOrderEntity.Cid)
                    {
                        throw new Exception("查无此订单");
                    }
                }
            }
            if (!string.IsNullOrEmpty(query.Customer?.UserID) && query.Customer.UserID.ToLower() == "administrator")
            {
                if ((query.CidList != null && !query.CidList.Contains(fltOrderEntity.Cid)) || query.CidList == null)
                {
                    throw new Exception("查无此订单");
                }
            }

            //1.根据订单号 获取航段信息
            List <FltFlightEntity> flightEntities = _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == query.OrderId, true).ToList();
            //2.根据订单号 获取乘机人信息
            List <FltPassengerEntity> passengerEntities = _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == query.OrderId, true).ToList();
            //3.根据订单号 获取成本中心
            FltCorpCostCenterEntity costCenterEntity = _fltCorpCostCenterDal.Query <FltCorpCostCenterEntity>(n => n.Orderid == query.OrderId, true).FirstOrDefault();
            //4.获取仓等信息
            List <FltClassNameModel> classNameModels = _getClassNameBll.GetFlightClassName();
            //5.获取机场信息
            List <SearchCityModel>    cityModels    = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels.SelectMany(n => n.AirportList).ToList();

            FltOrderUnionEntity fltOrderUnionEntity = _fltOrderUnionDal.Find <FltOrderUnionEntity>(query.OrderId);

            #region 机票正单信息
            QueryFlightOrderDataModel result = Mapper.Map <FltOrderEntity, QueryFlightOrderDataModel>(fltOrderEntity);
            if (!string.IsNullOrEmpty(costCenterEntity?.Depart))
            {
                result.CostCenter = costCenterEntity.Depart;
            }
            if (fltOrderUnionEntity?.ProjectId != null && query.ProjectName != null)
            {
                ProjectNameModel projectNameModel = query.ProjectName.Find(n => n.ProjectId == fltOrderUnionEntity.ProjectId.Value);
                result.ProjectName = projectNameModel?.ProjectName;
                result.ProjectId   = fltOrderUnionEntity.ProjectId;
            }
            result.PassengerList =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(
                    passengerEntities.FindAll(n => n.OrderId == fltOrderEntity.OrderId));


            result.FlightList =
                Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(
                    flightEntities.FindAll(n => n.OrderId == fltOrderEntity.OrderId));

            #region 行程
            int index1 = 0;
            foreach (var n in result.FlightList)
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportLongName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportLongName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }

                FltClassNameModel classNameModel =
                    classNameModels.Find(
                        x =>
                        !string.IsNullOrEmpty(x.MClass) && !string.IsNullOrEmpty(n.Class) &&
                        x.MClass.ToLower() == n.Class.ToLower() &&
                        !string.IsNullOrEmpty(x.AirlineCode) && !string.IsNullOrEmpty(n.AirlineNo) &&
                        x.AirlineCode.ToLower() == n.AirlineNo.ToLower());

                if (classNameModel != null)
                {
                    n.ClassName   = classNameModel.ClassName;
                    n.ClassEnName = classNameModel.ClassEnName;
                }

                index1++;
            }
            #endregion
            #endregion

            #region 机票退改签订单信息

            //改签订单
            List <string> modName         = new List <string>();
            List <string> modSequenceList = new List <string>();
            _getFlightModOrderBll.AportInfo = query.AportInfo;
            List <FltModOrderModel> fltModOrderList = _getFlightModOrderBll.GetModOrderByOrderId(query.OrderId);
            if (fltModOrderList != null && fltModOrderList.Count > 0)
            {
                fltModOrderList = fltModOrderList.FindAll(n => (n.ProcessStatus & 8) == 8);
                fltModOrderList.ForEach(n =>
                {
                    n.FltModFlightList.ForEach(x =>
                    {
                        n.FltModPassengerList.ForEach(m =>
                        {
                            modSequenceList.Add(x.Sequence + "|" + m.Name);
                        });

                        FltClassNameModel classNameModel =
                            classNameModels.Find(
                                m =>
                                !string.IsNullOrEmpty(m.MClass) && !string.IsNullOrEmpty(x.Class) &&
                                m.MClass.ToLower() == x.Class.ToLower() &&
                                !string.IsNullOrEmpty(m.AirlineCode) && !string.IsNullOrEmpty(x.AirlineNo) &&
                                m.AirlineCode.ToLower() == x.AirlineNo.ToLower());

                        if (classNameModel != null)
                        {
                            x.ClassName   = classNameModel.ClassName;
                            x.ClassEnName = classNameModel.ClassEnName;
                        }
                    });
                });
                modSequenceList = modSequenceList.Distinct().ToList();
            }

            //退票订单
            List <string> retName            = new List <string>();
            List <string> refundSequenceList = new List <string>();
            List <FltRefundOrderModel> fltRefundOrderList = _getFlighRefundOrderBll.GetFlighRefundOrderByOrderId(query.OrderId);
            if (fltRefundOrderList != null && fltRefundOrderList.Count > 0)
            {
                fltRefundOrderList = fltRefundOrderList.FindAll(n => n.RefundCustomer == "T");
                fltRefundOrderList.ForEach(n =>
                {
                    n.DetailList.ForEach(x =>
                    {
                        FltFlightModel flightTemp = result.FlightList.Find(m => m.Sequence == x.Sequence);
                        x.Dport     = flightTemp.Dport;
                        x.DportName = flightTemp.DportName;
                        x.DportCity = flightTemp.DportCity;
                        x.Aport     = flightTemp.Aport;
                        x.AportName = flightTemp.AportName;
                        x.AportCity = flightTemp.AportCity;
                        x.FlightNo  = flightTemp.FlightNo;
                        x.Class     = flightTemp.Class;
                        refundSequenceList.Add(x.Sequence + "|" + x.PassengerName);
                        retName.Add(x.PassengerName);
                    });
                });
                refundSequenceList        = refundSequenceList.Distinct().ToList();
                result.FltRefundOrderList = fltRefundOrderList;
            }

            #region 先处理改签情况
            if (fltModOrderList != null)
            {
                List <FltModOrderModel> tempList = new List <FltModOrderModel>();

                foreach (string modSequence in modSequenceList)
                {
                    int    sequence      = Convert.ToInt32(modSequence.Split('|')[0]);
                    string passengerName = modSequence.Split('|')[1];

                    var flightRmidList =
                        fltModOrderList.SelectMany(n => n.FltModFlightList)
                        .Where(n => n.Sequence == sequence)
                        .Select(n => n.Rmid)
                        .ToList();
                    var passengerRmidList =
                        fltModOrderList.SelectMany(n => n.FltModPassengerList)
                        .Where(n => n.Name == passengerName)
                        .Select(n => n.Rmid)
                        .ToList();

                    int maxRmid = fltModOrderList.Where(
                        n => flightRmidList.Contains(n.Rmid) && passengerRmidList.Contains(n.Rmid))
                                  .Max(n => n.Rmid);

                    var temp = fltModOrderList.Find(n => n.Rmid == maxRmid);
                    if (tempList.Find(n => n.Rmid == temp.Rmid) == null)
                    {
                        tempList.Add(temp);
                    }
                }

                result.FltModOrderList = tempList;
                result.FltModOrderList.ForEach(n =>
                {
                    n.FltModPassengerList.ForEach(x =>
                    {
                        modName.Add(x.Name);
                    });
                });
            }
            #endregion

            #region 既有改签又有退票

            if (fltModOrderList != null && refundSequenceList.Count > 0)
            {
                foreach (string refundSequence in refundSequenceList)
                {
                    //将相同行程号,并且是相同人名的改签行程删除
                    int    sequence      = Convert.ToInt32(refundSequence.Split('|')[0]);
                    string passengerName = refundSequence.Split('|')[1];

                    for (int i = 0; i < fltModOrderList.Count; i++)
                    {
                        List <FltModPassengerModel> fltModPassengerModels =
                            fltModOrderList[i].FltModPassengerList.FindAll(n => n.Name == passengerName);
                        FltModFlightModel fltModFlightModel =
                            fltModOrderList[i].FltModFlightList.Find(n => n.Sequence == sequence);

                        if (fltModPassengerModels != null && fltModPassengerModels.Count > 0 &&
                            fltModFlightModel != null)
                        {
                            fltModOrderList[i].FltModFlightList.Remove(fltModFlightModel);
                        }
                    }
                }


                if (fltModOrderList != null && fltModOrderList.Count > 0)
                {
                    List <FltModOrderModel> index = new List <FltModOrderModel>();
                    for (int i = 0; i < fltModOrderList.Count; i++)
                    {
                        if (fltModOrderList[i].FltModFlightList.Count == 0)
                        {
                            index.Add(fltModOrderList[i]);
                        }
                    }

                    foreach (var i in index)
                    {
                        fltModOrderList.Remove(i);
                    }

                    modName = new List <string>();
                    result.FltModOrderList = fltModOrderList;
                    result.FltModOrderList.ForEach(n =>
                    {
                        n.FltModPassengerList.ForEach(x =>
                        {
                            modName.Add(x.Name);
                        });
                    });
                }
            }
            #endregion
            #endregion
            result.PassengerList.ForEach(n =>
            {
                if (n.InsCompanyId.HasValue)
                {
                    n.InsuranceName = query.InsuranceCompany?.Find(x => x.CompanyID == n.InsCompanyId.Value)?.ProductName;
                }
                if (modName.Count > 0)
                {
                    n.IsMod = (modName.Find(x => x == n.Name) != null ? true : false);
                }

                if (retName.Count > 0)
                {
                    n.IsRet = (retName.Find(x => x == n.Name) != null ? true : false);
                }
            });
            return(result);
        }
        public QueryFlightOrderListModel QueryFlightOrderList(QueryFlightOrderListDataQueryModel query)
        {
            QueryFlightOrderListModel resultModel = new QueryFlightOrderListModel();

            resultModel.OrderDataList = new List <QueryFlightOrderListDataModel>();

            #region 订单分页
            List <string> orderstatusList = new List <string>()
            {
                "N"
            };
            List <int> orderIdList = new List <int>();

            var select = from order in Context.Set <FltOrderEntity>().AsNoTracking()
                         join customer in Context.Set <CustomerInfoEntity>().AsNoTracking() on order.Cid equals customer.Cid into
                         c
                         from customer in c.DefaultIfEmpty()

                         join aduitOrderDetail in Context.Set <CorpAduitOrderDetailEntity>().AsNoTracking() on order.OrderId
                         equals aduitOrderDetail.OrderId into aod
                         from aduitOrderDetail in aod.DefaultIfEmpty()

                         join aduitOrder in Context.Set <CorpAduitOrderEntity>().AsNoTracking() on aduitOrderDetail.AduitOrderId
                         equals aduitOrder.AduitOrderId into ao
                         from aduitOrder in ao.DefaultIfEmpty()

                         where !orderstatusList.Contains(order.Orderstatus) && (order.IsInter == "N" || order.IsInter == "n") &&
                         order.IsOnlineShow != 1
                         select new QueryFlightOrderListDataModel()
            {
                OrderId            = order.OrderId,
                Cid                = order.Cid,
                OrderDate          = order.OrderDate,
                OrderStatus        = order.Orderstatus,
                PayAmount          = order.Payamount,
                ProcessStatus      = order.ProcessStatus,
                CorpId             = customer.CorpID,
                AduitOrderId       = aduitOrderDetail.AduitOrderId,
                AduitOrderStatus   = aduitOrder.Status,
                CopyFromOrderId    = order.CopyFromOrderId,
                CopyType           = order.CopyType,
                ShowOnlineOrderId2 =
                    (order.CopyType == "X" && order.CopyFromOrderId.HasValue && (order.ProcessStatus & 8) == 8 &&
                     order.Orderstatus.ToUpper() != "C")
                            ? order.CopyFromOrderId.Value
                            : order.OrderId
            };

            #region 查询条件


            if (query.Cid.HasValue)
            {
                select = select.Where(n => n.Cid == query.Cid.Value);
            }
            if (query.OrderId.HasValue)
            {
                select = select.Where(n => n.ShowOnlineOrderId2 == query.OrderId.Value);
            }

            if (!string.IsNullOrEmpty(query.CorpId))
            {
                select = select.Where(n => n.CorpId == query.CorpId);
            }

            if (query.AllowShowDataBeginTime.HasValue)
            {
                select = select.Where(n => n.OrderDate > query.AllowShowDataBeginTime);
            }

            if (query.OrderStatus.HasValue)
            {
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.WaitTicket)
                {
                    select = select.Where(n => (n.ProcessStatus & 8) != 8 && n.OrderStatus.ToUpper() == "W");
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.Ticketing)
                {
                    select =
                        select.Where(
                            n =>
                            (n.ProcessStatus & 8) != 8 && n.OrderStatus.ToUpper() == "P" &&
                            ((n.AduitOrderStatus.HasValue && n.AduitOrderStatus == 7) ||
                             !n.AduitOrderStatus.HasValue));
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.Ticketed)
                {
                    select = select.Where(n => (n.ProcessStatus & 8) == 8);
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.PartRefunded)
                {
                    select = select.Where(n => (n.ProcessStatus & 8) != 8 && n.OrderStatus.ToUpper() == "S");
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.AllRefunded)
                {
                    select = select.Where(n => (n.ProcessStatus & 8) != 8 && n.OrderStatus.ToUpper() == "T");
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.Cancel)
                {
                    select = select.Where(n => n.OrderStatus.ToUpper() == "C");
                }
                if (query.OrderStatus.Value == (int)FltOrderListOrderStatusEnum.Aduiting)
                {
                    List <string> statusList = new List <string>()
                    {
                        "W",
                        "P"
                    };
                    select =
                        select.Where(
                            n =>
                            statusList.Contains(n.OrderStatus.ToUpper()) && n.AduitOrderStatus.HasValue &&
                            n.AduitOrderStatus != 6 && n.AduitOrderStatus != 7);
                }
            }

            if (query.TackOffBeginTime.HasValue)
            {
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime >= query.TackOffBeginTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (query.TackOffEndTime.HasValue)
            {
                query.TackOffEndTime = query.TackOffEndTime.Value.AddDays(1);
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime < query.TackOffEndTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (!string.IsNullOrEmpty(query.PassengerName))
            {
                select = select.Where(
                    n => Context.Set <FltPassengerEntity>().Where(m => m.Name.Contains(query.PassengerName))
                    .Select(m => m.OrderId).Contains(n.OrderId)
                    );
            }

            if (query.OrderBeginTime.HasValue)
            {
                select = select.Where(n => n.OrderDate >= query.OrderBeginTime.Value);
            }
            if (query.OrderEndTime.HasValue)
            {
                query.OrderEndTime = query.OrderEndTime.Value.AddDays(1);
                select             = select.Where(n => n.OrderDate < query.OrderEndTime.Value);
            }

            #endregion

            resultModel.TotalCount = select.Count();//查询所有结果的数量
            //判断是否是导出excel 如果是导出操作 返回全部订单
            if ((query.IsExport ?? 0) == 0)
            {
                select =
                    select.OrderByDescending(n => n.OrderId).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize);
            }
            else
            {
                select = select.OrderByDescending(n => n.OrderId);
            }
            List <QueryFlightOrderListDataModel> orderList = select.ToList();//分页结果
            if (orderList == null || orderList.Count == 0)
            {
                return(resultModel);
            }
            #endregion

            orderList.ForEach(n => orderIdList.Add(n.OrderId));

            //1.根据订单号 获取航段信息
            List <FltFlightEntity> flightEntities = _fltFlightDal.Query <FltFlightEntity>(n => orderIdList.Contains(n.OrderId), true).ToList();
            //2.根据订单号 获取乘机人信息
            List <FltPassengerEntity> passengerEntities = _fltPassengerDal.Query <FltPassengerEntity>(n => orderIdList.Contains(n.OrderId), true).ToList();


            #region 拼凑实体
            List <SearchCityModel>    cityModels    = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels.SelectMany(n => n.AirportList).ToList();

            for (int i = 0; i < orderList.Count; i++)
            {
                QueryFlightOrderListDataModel result = orderList[i];
                if (result == null)
                {
                    continue;
                }
                result.PassengerList =
                    Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(
                        passengerEntities.FindAll(n => n.OrderId == orderList[i].OrderId));
                result.FlightList =
                    Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(
                        flightEntities.FindAll(n => n.OrderId == orderList[i].OrderId));
                result.FlightList.ForEach(n =>
                {
                    SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                    if (airportModel != null)
                    {
                        n.DportName = airportModel.AirportName;
                        SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                        n.DportCity = cityModel.CityName;
                    }

                    SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                    if (airportModel2 != null)
                    {
                        n.AportName = airportModel2.AirportName;
                        SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                        n.AportCity = cityModel2.CityName;
                    }
                });

                resultModel.OrderDataList.Add(result);
            }

            #endregion



            return(resultModel);
        }
示例#11
0
        public GetModApplyModel GetModApplyView(GetModApplyQueryModel query)
        {
            //1.判断是否已经出票
            FltOrderEntity fltOrderEntity = _fltOrderDal.Find <FltOrderEntity>(query.OrderId);

            if (fltOrderEntity == null)
            {
                throw new Exception("查无此订单");
            }

            if ((fltOrderEntity.ProcessStatus & 8) != 8)
            {
                throw new Exception("该订单未出票,不能提交改签申请");
            }

            if (fltOrderEntity.Cid != query.Cid && query.Customer != null &&
                query.Customer.UserID.ToLower() != "administrator")
            {
                throw new Exception("查无此订单");
            }


            List <FltFlightEntity> flightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => n.OrderId == query.OrderId).ToList();
            List <FltPassengerEntity> passengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => n.OrderId == query.OrderId).ToList();
            List <FltTicketNoEntity> fltTicketNoEntities =
                _fltTicketNoDal.Query <FltTicketNoEntity>(n => n.OrderId == query.OrderId).ToList();

            //5.获取机场信息
            List <SearchCityModel>    cityModels      = query.AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels   = cityModels.SelectMany(n => n.AirportList).ToList();
            List <FltClassNameModel>  classNameModels = _getClassNameBll.GetFlightClassName();

            GetModApplyModel result = new GetModApplyModel();

            result.CName        = fltOrderEntity.Cname;
            result.Mobile       = fltOrderEntity.Mobile;
            result.Email        = fltOrderEntity.Email;
            result.Cid          = fltOrderEntity.Cid;
            result.CorpAduitId  = fltOrderEntity.CorpAduitId;
            result.CorpPolicyId = fltOrderEntity.CorpPolicyId;

            result.PassengerList = Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(passengerEntities);

            result.FlightList = Mapper.Map <List <FltFlightEntity>, List <FltFlightModel> >(flightEntities);

            result.FlightList.ForEach(n =>
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportLongName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportLongName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }

                FltClassNameModel classNameModel =
                    classNameModels.Find(
                        x =>
                        !string.IsNullOrEmpty(x.MClass) && !string.IsNullOrEmpty(n.Class) &&
                        x.MClass.ToLower() == n.Class.ToLower() &&
                        !string.IsNullOrEmpty(x.AirlineCode) && !string.IsNullOrEmpty(n.AirlineNo) &&
                        x.AirlineCode.ToLower() == n.AirlineNo.ToLower());

                if (classNameModel != null)
                {
                    n.ClassName   = classNameModel.ClassName;
                    n.ClassEnName = classNameModel.ClassEnName;
                }
            });

            List <int> pidList = result.PassengerList.Select(n => n.PId).ToList();

            #region 判断该乘机人是否有未处理的改签申请
            List <string> orderStatusList = new List <string>()
            {
                "C", "F"
            };
            var select = from flight in Context.Set <FltRetModFlightApplyEntity>()
                         join apply in Context.Set <FltRetModApplyEntity>() on flight.Rmid equals apply.Rmid into c
                         from apply in c.DefaultIfEmpty()
                         where !orderStatusList.Contains(apply.OrderStatus) && pidList.Contains(flight.Pid) && apply.OrderType.ToUpper() == "M"
                         select flight;

            List <FltRetModFlightApplyEntity> listMod = select.ToList();//已经改签人
            if (listMod != null && listMod.Count > 0)
            {
                result.PassengerList.ForEach(n =>
                {
                    FltRetModFlightApplyEntity l = listMod.Find(x => x.Pid == n.PId);
                    if (l != null)
                    {
                        n.IsMod = true;
                    }
                });
            }
            #endregion

            #region 判断该乘机人是否有存在退票申请
            List <string> refundStatusList = new List <string>()
            {
                "C"
            };
            var selectRefund = from flight in Context.Set <FltRetModFlightApplyEntity>()
                               join apply in Context.Set <FltRetModApplyEntity>() on flight.Rmid equals apply.Rmid into c
                               from apply in c.DefaultIfEmpty()
                               where !refundStatusList.Contains(apply.OrderStatus) && pidList.Contains(flight.Pid) && apply.OrderType.ToUpper() == "R"
                               select flight;

            List <FltRetModFlightApplyEntity> listRefund = selectRefund.ToList();//已经退票
            if (listRefund != null && listRefund.Count > 0)
            {
                result.PassengerList.ForEach(n =>
                {
                    FltRetModFlightApplyEntity l = listRefund.Find(x => x.Pid == n.PId);
                    if (l != null)
                    {
                        n.IsRet = true;
                    }
                });
            }
            #endregion

            //获取航程允许改签的乘机人Id
            foreach (var fltFlightModel in result.FlightList)
            {
                fltFlightModel.AllowModPidList = new List <int>();

                foreach (var fltPassengerModel in result.PassengerList)
                {
                    //判断当前是否已经退票
                    FltRetModFlightApplyEntity isRefund = listRefund.Find(n => n.Sequence == fltFlightModel.Sequence && fltPassengerModel.PId == n.Pid);

                    //判断票号使用情况
                    FltTicketNoEntity fltTicketNoEntity =
                        fltTicketNoEntities.Find(
                            x => x.PassengerName == fltPassengerModel.Name && x.Sequence == fltFlightModel.Sequence);
                    if (fltTicketNoEntity != null && fltTicketNoEntity.TicketNoStatus == "R")//如果当前乘机人对应航段票号已经退票了
                    {
                        isRefund = new FltRetModFlightApplyEntity();
                    }

                    if (isRefund == null)
                    {
                        //再判断是否已经改签
                        FltRetModFlightApplyEntity isMod =
                            listMod.Find(n => n.Sequence == fltFlightModel.Sequence && fltPassengerModel.PId == n.Pid);
                        if (isMod == null)
                        {
                            fltFlightModel.AllowModPidList.Add(fltPassengerModel.PId);
                        }
                    }
                }

                if (fltFlightModel.AllowModPidList.Count > 1)
                {
                    fltFlightModel.AllowModPidList = fltFlightModel.AllowModPidList.Distinct().ToList();
                }
            }

            return(result);
        }
示例#12
0
        private FltModOrderModel Convert(FltModOrderEntity fltModOrder)
        {
            //改签行程
            List <FltModFlightEntity> fltModFlightEntities =
                _fltModFlightDal.Query <FltModFlightEntity>(n => n.Rmid == fltModOrder.Rmid).ToList();
            //改签乘机人
            List <FltModPassengerEntity> fltModPassengerEntities =
                _fltModPassengerDal.Query <FltModPassengerEntity>(n => n.Rmid == fltModOrder.Rmid).ToList();
            //原订单乘机人
            List <int> pidList = fltModPassengerEntities.Select(n => n.Pid).ToList();
            List <FltPassengerEntity> fltPassengerEntities =
                _fltPassengerDal.Query <FltPassengerEntity>(n => pidList.Any(x => x == n.PId)).ToList();
            //改签票号
            List <FltModTicketNoEntity> fltModTicketNoEntities =
                _fltModTicketNoDal.Query <FltModTicketNoEntity>(n => n.Rmid == fltModOrder.Rmid).ToList();
            //改签日志
            List <FltModOrderLogEntity> fltModOrderLogEntities =
                _fltModOrderLogDal.Query <FltModOrderLogEntity>(n => n.Rmid == fltModOrder.Rmid).ToList();

            List <SearchCityModel>    cityModels    = AportInfo.CountryList.SelectMany(n => n.CityList).ToList();
            List <SearchAirportModel> airportModels = cityModels.SelectMany(n => n.AirportList).ToList();


            List <FltPassengerModel> fltPassengerModels = Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(fltPassengerEntities);

            FltModOrderModel fltModOrderModel = new FltModOrderModel();

            fltModOrderModel = Mapper.Map <FltModOrderEntity, FltModOrderModel>(fltModOrder);
            fltModOrderModel.FltModFlightList =
                Mapper.Map <List <FltModFlightEntity>, List <FltModFlightModel> >(fltModFlightEntities);

            fltModOrderModel.FltModFlightList.ForEach(n =>
            {
                SearchAirportModel airportModel = airportModels.Find(x => x.AirportCode.ToLower() == n.Dport.ToLower());
                if (airportModel != null)
                {
                    n.DportName = airportModel.AirportName;
                    SearchCityModel cityModel = cityModels.Find(x => x.CityCode.ToLower() == airportModel.CityCode.ToLower());
                    n.DportCity = cityModel.CityName;
                }

                SearchAirportModel airportModel2 = airportModels.Find(x => x.AirportCode.ToLower() == n.Aport.ToLower());
                if (airportModel2 != null)
                {
                    n.AportName = airportModel2.AirportName;
                    SearchCityModel cityModel2 = cityModels.Find(x => x.CityCode.ToLower() == airportModel2.CityCode.ToLower());
                    n.AportCity = cityModel2.CityName;
                }
            });

            fltModOrderModel.FltModPassengerList =
                Mapper.Map <List <FltModPassengerEntity>, List <FltModPassengerModel> >(fltModPassengerEntities);
            fltModOrderModel.FltModPassengerList.ForEach(n =>
            {
                n.Passenger = fltPassengerModels.Find(x => x.PId == n.Pid);
            });

            fltModOrderModel.FltModTicketNoList =
                Mapper.Map <List <FltModTicketNoEntity>, List <FltModTicketNoModel> >(fltModTicketNoEntities);
            fltModOrderModel.FltModOrderLogList =
                Mapper.Map <List <FltModOrderLogEntity>, List <FltModOrderLogModel> >(fltModOrderLogEntities);


            return(fltModOrderModel);
        }
        public GetUnAvailablePassengerModel GetUnAvailablePassengerList(GetUnAvailablePassengerQueryModel query)
        {
            GetUnAvailablePassengerModel resultModel = new GetUnAvailablePassengerModel();

            List <int>    orderIdList     = new List <int>();
            List <string> orderstatusList = new List <string>()
            {
                "N", "C", "W"
            };
            var select = from order in Context.Set <FltOrderEntity>().AsNoTracking()
                         join customer in Context.Set <CustomerInfoEntity>().AsNoTracking() on order.Cid equals customer.Cid
                         join operatorInfo in Context.Set <OperatorEntity>().AsNoTracking() on order.CreateOid equals
                         operatorInfo.Oid
                         where !orderstatusList.Contains(order.Orderstatus) && (order.ProcessStatus & 8) == 8
                         select new GetUnAvailablePassengerDataModel()
            {
                OrderId      = order.OrderId,
                CreateOName  = operatorInfo.OName,
                CreateOid    = operatorInfo.Oid,
                CustomerName = customer.RealName,
                OrderDate    = order.OrderDate,
                Cid          = order.Cid
            };

            #region 查询条件

            if (!string.IsNullOrEmpty(query.CreateOName))
            {
                select = select.Where(n => n.CreateOName.Contains(query.CreateOName));
            }
            else
            {
                select = select.Where(n => n.CreateOid == query.Oid);
            }

            if (query.OrderId.HasValue)
            {
                select = select.Where(n => n.OrderId == query.OrderId.Value);
            }

            if (!string.IsNullOrEmpty(query.CustomerName))
            {
                select = select.Where(n => n.CustomerName.Contains(query.CustomerName));
            }

            if (query.TackOffBeginTime.HasValue)
            {
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime >= query.TackOffBeginTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (query.TackOffEndTime.HasValue)
            {
                query.TackOffEndTime = query.TackOffEndTime.Value.AddDays(1);
                select = select.Where(n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime < query.TackOffEndTime.Value)
                                      .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (!string.IsNullOrEmpty(query.PassengerName))
            {
                select = select.Where(
                    n =>
                    Context.Set <FltPassengerEntity>()
                    .Where(m => m.Name.Contains(query.PassengerName) && m.IsAvailable == "F")
                    .Select(m => m.OrderId).Contains(n.OrderId)
                    );
            }
            else
            {
                select = select.Where(
                    n =>
                    Context.Set <FltPassengerEntity>()
                    .Where(m => m.IsAvailable == "F")
                    .Select(m => m.OrderId).Contains(n.OrderId)
                    );

                DateTime beginTime = DateTime.Now.AddYears(-1);
                select =
                    select.Where(
                        n => Context.Set <FltFlightEntity>().Where(m => m.TackoffTime >= beginTime)
                        .Select(m => m.OrderId).Contains(n.OrderId));
            }

            if (query.OrderBeginTime.HasValue)
            {
                select = select.Where(n => n.OrderDate >= query.OrderBeginTime.Value);
            }
            if (query.OrderEndTime.HasValue)
            {
                query.OrderEndTime = query.OrderEndTime.Value.AddDays(1);
                select             = select.Where(n => n.OrderDate < query.OrderEndTime.Value);
            }

            #endregion

            resultModel.TotalCount = select.Count();//查询所有结果的数量

            select =
                select.OrderByDescending(n => n.OrderId).Skip(query.PageSize * (query.PageIndex - 1)).Take(query.PageSize);
            resultModel.DataList = select.ToList(); //分页结果

            resultModel.DataList.ForEach(n => orderIdList.Add(n.OrderId));

            //1.根据订单号 获取航段信息
            List <FltFlightEntity> flightEntities =
                _fltFlightDal.Query <FltFlightEntity>(n => orderIdList.Contains(n.OrderId) && n.Sequence == 1, true)
                .ToList();


            //2.根据订单号 获取乘机人信息
            List <FltPassengerEntity> passengerEntities = _fltPassengerDal.Query <FltPassengerEntity>(n => orderIdList.Contains(n.OrderId) && n.IsAvailable == "F", true).ToList();
            List <FltPassengerModel>  passengerModels   =
                Mapper.Map <List <FltPassengerEntity>, List <FltPassengerModel> >(passengerEntities);

            for (int i = 0; i < resultModel.DataList.Count; i++)
            {
                resultModel.DataList[i].TackOffTime       = flightEntities.Find(n => n.OrderId == resultModel.DataList[i].OrderId).TackoffTime;
                resultModel.DataList[i].PassengerNameList = passengerModels.FindAll(n => n.OrderId == resultModel.DataList[i].OrderId);
            }

            return(resultModel);
        }