/// <summary>
        /// 构建ef查询条件
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        private Expression <Func <TravelInfo, bool> > BuildQuery(TravelInfoQuery query)
        {
            var oLamadaExtention = new LamadaExtention <TravelInfo>();

            if (query.ProId != null)
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.ProId), query.ProId, ExpressionTypeEnum.Equal);
            }

            if (!string.IsNullOrWhiteSpace(query.PlaceOfDeparture))
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.PlaceOfDeparture), query.PlaceOfDeparture, ExpressionTypeEnum.Equal);
            }

            if (!string.IsNullOrWhiteSpace(query.City))
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.City), query.City, ExpressionTypeEnum.Equal);
            }

            if (!string.IsNullOrWhiteSpace(query.Country))
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.Country), query.Country, ExpressionTypeEnum.Equal);
            }

            if (query.EndTime != null)
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.EndTime), query.EndTime, ExpressionTypeEnum.LessThanOrEqual);
            }

            if (query.StartTime != null)
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.StartTime), query.StartTime, ExpressionTypeEnum.GreaterThanOrEqual);
            }

            if (!string.IsNullOrWhiteSpace(query.ProDestination))
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.ProDestination), query.ProDestination, ExpressionTypeEnum.Equal);
            }

            if (!string.IsNullOrWhiteSpace(query.ProTitle))
            {
                oLamadaExtention.GetExpression(nameof(TravelInfo.ProTitle), query.ProTitle, ExpressionTypeEnum.Equal);
            }

            return(oLamadaExtention.GetLambda());
        }
        public async Task <IActionResult> GetTravelInfoListByFrontierAsync(string frontier, int pageSize = 10, int pageIndex = 1)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(frontier))
                {
                    _result.status     = (int)HttpStatusCode.BadRequest;
                    _result.msg        = "frontier is not null";
                    _result.resultData = null;
                    return(BadRequest(_result));
                }
                var url   = _configurationManager.GetSection(ConfigEnum.MediaUrl.ToString());
                var query = new TravelInfoQuery();
                if (frontier == "0")
                {
                    query.Country = "中国";
                }
                else if (frontier == "1")
                {
                    query.Country = "!中国";
                }
                else
                {
                    _result.status     = (int)HttpStatusCode.BadRequest;
                    _result.msg        = "faild";
                    _result.resultData = null;
                    return(BadRequest(_result));
                }
                var res = await _travelInfoService.GetTravelInfoListAsync(query);

                res.ToList().ForEach(x => x.Cover = $"{url}/{x.ProId}/{x.Cover}");
                _result.status     = (int)HttpStatusCode.OK;
                _result.msg        = "success";
                _result.resultData = res;
                return(Ok(_result));
            }
            catch (Exception ex)
            {
                _log.Error("GetTravelInfoListByFrontierAsync method error:" + ex);
                _result.status     = (int)HttpStatusCode.InternalServerError;
                _result.msg        = "fail";
                _result.resultData = null;
                return(StatusCode(_result.status, _result));
            }
        }
        /// <summary>
        /// 根据ID查找产品详细信息
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <TravelInfo> GetTravelInfoAsync(TravelInfoQuery query)
        {
            try
            {
                string sql = "SELECT * FROM TravelInfo WHERE 1=1";

                if (query.ProId != null)
                {
                    sql += " AND proId = @ProId";
                }

                var info = MapperManager.SetMapper <TravelInfo, TravelInfoQuery>(query);
                return(await _mysqlRespository.QueryInfoAsync(sql, info));
            }
            catch (Exception ex)
            {
                _log.Error("GetTravelInfoAsync method error:" + ex);
                throw;
            }
        }
        /// <summary>
        /// 根据条件查询产品列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <IEnumerable <TravelInfo> > GetTravelInfoListAsync(TravelInfoQuery query)
        {
            try
            {
                string sql = "SELECT * FROM TravelInfo WHERE 1=1";

                #region 条件
                if (query.ProId != null)
                {
                    sql += " AND proId = @ProId";
                }

                if (!string.IsNullOrWhiteSpace(query.ProType))
                {
                    query.ProType = SqlHandler.ReplaceSQLChar(query.ProType);
                    query.ProType = $"%{query.ProType}%";
                    sql          += " AND proType LIKE @ProType";
                }

                if (!string.IsNullOrWhiteSpace(query.Country
                                               ))
                {
                    if (query.Country.StartsWith("!"))
                    {
                        query.Country = query.Country.TrimStart('!');
                        sql          += " AND country <> @Country";
                    }
                    else
                    {
                        sql += " AND country = @Country";
                    }
                }

                if (!string.IsNullOrWhiteSpace(query.City
                                               ))
                {
                    sql += " AND city = @City";
                }

                if (!string.IsNullOrWhiteSpace(query.Area
                                               ))
                {
                    sql += " AND area = @Area";
                }

                if (query.StartTime != null)
                {
                    sql += " AND startTime >= @StartTime";
                }

                if (query.Month?.Length > 0)
                {
                    sql += " AND month IN @Month";
                }

                if (query.EndTime != null)
                {
                    sql += " AND endTime <= @EndTime";
                }


                if (query.ProDays?.Length > 0)
                {
                    if (query.ProDays.Length > 1)
                    {
                        sql += " AND proDays IN @ProDays";
                    }
                    else
                    {
                        sql += " AND proDays = @ProDays";
                    }
                }

                if (query.Them?.Length > 0)
                {
                    for (var i = 0; i < query.Them.Length; i++)
                    {
                        if (i == 0)
                        {
                            sql += " AND them LIKE '%" + query.Them[i] + "%'";
                        }
                        else
                        {
                            sql += " OR them LIKE '%" + query.Them[i] + "%'";
                        }
                    }
                }


                if (!string.IsNullOrWhiteSpace(query.Sort))
                {
                    query.Sort = SqlHandler.ReplaceSQLChar(query.Sort);
                    sql       += $" ORDER BY {query.Sort}";
                    if (!string.IsNullOrWhiteSpace(query.Order))
                    {
                        query.Order = SqlHandler.ReplaceSQLChar(query.Order);
                        sql        += $" {query.Order}";
                    }
                }
                #endregion

                if (query.PageIndex != 0 && query.PageSize != 0)
                {
                    query.PageIndex = (query.PageIndex - 1) * query.PageSize;
                    sql            += $" LIMIT {query.PageIndex},{query.PageSize}";
                }
                return(await _mysqlRespository.QueryListAsync <TravelInfo, TravelInfoQuery>(sql, query));
            }
            catch (Exception ex)
            {
                _log.Error("GetTravelInfoListAsync method error:" + ex);
                throw;
            }
        }
        public async Task <IActionResult> GetTravelInfoListByFilterAsync(TravelConditionQuery conditionQuery)
        {
            var travelQuery = new TravelInfoQuery();

            try
            {
                if (conditionQuery == null)
                {
                    _result.status     = (int)HttpStatusCode.BadRequest;
                    _result.msg        = "conditionQuery is not null";
                    _result.resultData = null;
                    return(BadRequest(_result));
                }
                var url = _configurationManager.GetSection(ConfigEnum.MediaUrl.ToString());
                if (conditionQuery.dateList?.Length > 0)
                {
                    travelQuery.ProDays = conditionQuery.dateList;
                }

                if (conditionQuery.travelTimeList?.Length > 0)
                {
                    travelQuery.Month = conditionQuery.travelTimeList;
                }

                if (conditionQuery.specialList?.Length > 0)
                {
                    travelQuery.Them = conditionQuery.specialList;
                }

                if (!string.IsNullOrWhiteSpace(conditionQuery.orderFiled))
                {
                    //除了价格从低到高是正序,其他条件都是倒序
                    if (conditionQuery.orderFiled == ConditionEnum.priceDown.ToString())
                    {
                        travelQuery.Order = "asc";
                        travelQuery.Sort  = "proPrice";
                    }
                    else if (conditionQuery.orderFiled == ConditionEnum.priceUp.ToString())
                    {
                        travelQuery.Order = "desc";
                        travelQuery.Sort  = "proPrice";
                    }
                    else
                    {
                        travelQuery.Order = "desc";
                        travelQuery.Sort  = conditionQuery.orderFiled;
                    }
                }

                travelQuery.PageIndex = conditionQuery.PageIndex;
                travelQuery.PageSize  = conditionQuery.PageSize;

                var res = await _travelInfoService.GetTravelInfoListAsync(travelQuery);

                res.ToList().ForEach(x => x.Cover = $"{url}/{x.ProId}/{x.Cover}");
                _result.status     = (int)HttpStatusCode.OK;
                _result.msg        = "success";
                _result.resultData = res.ToList();
                return(Ok(_result));
            }
            catch (Exception ex)
            {
                _log.Error("GetTravelInfoListByFilterAsync method error:" + ex);
                _result.status     = (int)HttpStatusCode.InternalServerError;
                _result.msg        = "fail";
                _result.resultData = null;
                return(StatusCode(_result.status, _result));
            }
        }