public async Task <IActionResult> GetHouses([FromQuery, SwaggerParameter("所在城市,默认上海", Required = true)] string city = "上海",
                                                    [FromQuery, SwaggerParameter("来源")] string source         = "",
                                                    [FromQuery, SwaggerParameter("页码")] int page              = 0,
                                                    [FromQuery, SwaggerParameter("分页数量")] int pageSize        = 20,
                                                    [FromQuery, SwaggerParameter("房源类型")] int?rentType        = null,
                                                    [FromQuery, SwaggerParameter("最低价")] int fromPrice        = 0,
                                                    [FromQuery, SwaggerParameter("最高价")] int toPrice          = 0,
                                                    [FromQuery, SwaggerParameter("经度")] double?longitude      = null,
                                                    [FromQuery, SwaggerParameter("维度")] double?latitude       = null,
                                                    [FromQuery, SwaggerParameter("距离范围(公里)")] double distance = 5)
        {
            var condition = new MongoHouseQuery();

            condition.city      = city;
            condition.source    = source;
            condition.page      = page;
            condition.pageSize  = pageSize;
            condition.rentType  = rentType;
            condition.fromPrice = fromPrice;
            condition.toPrice   = toPrice;
            condition.latitude  = latitude;
            condition.longitude = longitude;
            condition.distance  = distance;
            return(Ok(new { success = true, data = await _houseMongoMapper.QueryHouses(condition) }));
        }
        /// <summary>
        /// 查询记录
        /// </summary>
        public virtual async Task <List <MongoHouseEntity> > QueryHouses(MongoHouseQuery houseQuery)
        {
            var db             = _client.GetDatabase(this._mongoDBName);
            var collectionName = $"{ConstMongoTables.HouseData}_{houseQuery.city}";
            var query          = db.GetCollection <MongoHouseEntity>(collectionName).AsQueryable();

            if (!string.IsNullOrEmpty(houseQuery.source))
            {
                query = query.Where(h => h.Source == houseQuery.source);
            }
            if (houseQuery.rentType.HasValue)
            {
                query = query.Where(h => h.RentType == houseQuery.rentType);
            }
            if (!string.IsNullOrEmpty(houseQuery.source))
            {
                query = query.Where(h => h.Source == houseQuery.source);
            }
            var position = default(PositionModel);

            if (houseQuery.latitude != null && houseQuery.longitude != null)
            {
                position = DistanceHelper.FindNeighPosition(houseQuery.longitude.Value, houseQuery.latitude.Value, houseQuery.distance);
                query    = query.Where(item => item.Latitude.HasValue && item.Longitude.HasValue &&
                                       item.Longitude.Value >= position.MinLng &&
                                       item.Longitude.Value <= position.MaxLng &&
                                       item.Latitude.Value >= position.MinLat &&
                                       item.Latitude.Value <= position.MaxLat);
            }
            // var text = query.ToString();
            var results = await query.OrderByDescending(h => h.Timestamp)
                          .Skip(houseQuery.page * houseQuery.pageSize)
                          .Take(houseQuery.pageSize).ToListAsync();

            return(results);
        }
 public async Task <IActionResult> SearchHouses([FromBody] MongoHouseQuery search)
 {
     return(Ok(new { success = true, data = await _houseMongoMapper.QueryHouses(search) }));
 }