public QueryFltOrderListResponseViewModel QueryFltOrderList(QueryFltOrderListRequestViewModel request)
        {
            //1.查询机场信息
            SearchCityAportModel aportModel = _getCityForFlightServiceBll.SearchAirport(new List <string>()
            {
                "N"
            });
            //2.根据Cid查询客户信息
            CustomerModel customerModel = _getCustomerServiceBll.GetCustomerByCid(request.Cid);

            //3.查询机票订单
            QueryFlightOrderListDataQueryModel query = Mapper.Map <QueryFltOrderListRequestViewModel, QueryFlightOrderListDataQueryModel>(request);

            query.AportInfo = aportModel;
            query.CorpId    = customerModel.CorpID;
            query.Customer  = customerModel;
            //判断是否显示全部订单
            if ((query.IsShowAllOrder ?? 0) == 1)
            {
                //判断客户是否有查看全部订单权限
                if ((customerModel.IsShowAllOrder ?? 0) == 1)
                {
                    query.Cid = null;
                }
            }
            //3.1判断是否是administrator帐号,如果是则获取当前公司下所有订单 //administrator  administator
            if (customerModel.UserID.ToLower() == "administrator")
            {
                query.Cid = null;
            }
            if (!string.IsNullOrEmpty(customerModel.CorpID))
            {
                query.CorpCustomerList = _getCustomerServiceBll.GetCustomerByCorpId(customerModel.CorpID);
            }
            QueryFlightOrderListModel result = _queryFlightOrderListServiceBll.QueryFlightOrderList(query);

            if (result.OrderDataList != null && result.OrderDataList.Count > 0)
            {
                foreach (var order in result.OrderDataList)
                {
                    List <CorpAduitOrderInfoModel> corpAduitOrderInfoModels =
                        _getCorpAduitOrderServiceBll.GetAduitOrderInfoByOrderId(order.OrderId);

                    if (corpAduitOrderInfoModels != null && corpAduitOrderInfoModels.Count > 0)
                    {
                        order.AduitOrderStatus = corpAduitOrderInfoModels[0].Status;
                        if (!string.IsNullOrEmpty(corpAduitOrderInfoModels[0].NextAduitName))
                        {
                            order.AuditStatus = string.Format("待{0}审批", corpAduitOrderInfoModels[0].NextAduitName);
                        }
                    }
                }
            }



            QueryFltOrderListResponseViewModel viewModel = Mapper.Map <QueryFlightOrderListModel, QueryFltOrderListResponseViewModel>(result);

            SortedList <int, string> fltOrderStatusSortedList = EnumConvert.QueryEnum <FltOrderListOrderStatusEnum>();

            viewModel.QueryOrderStatusList = (from status in fltOrderStatusSortedList
                                              select new SortedListViewModel()
            {
                Key = status.Key,
                Value = status.Value
            }).ToList();

            return(viewModel);
        }
        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);
        }