Exemplo n.º 1
0
        private static void CreateOrderTypeFilter(HeatDataResultRequestDto input, FilterDefinitionBuilder <BsonDocument> builderFilter, List <FilterDefinition <BsonDocument> > filterDefinitions)
        {
            List <FilterDefinition <BsonDocument> > orderTypeFilterDefinitions = new List <FilterDefinition <BsonDocument> >();

            input.OrderType.ForEach(x =>
            {
                switch (x)
                {
                case InputOrderType.TotalOrder:
                default:
                    break;

                case InputOrderType.ImmediateOrder:
                    orderTypeFilterDefinitions.Add(builderFilter.Eq("orderType", OrderType.Immediate));
                    break;

                case InputOrderType.BookingOrder:
                    orderTypeFilterDefinitions.Add(builderFilter.And(builderFilter.Eq("orderType", OrderType.Booking), builderFilter.Eq("orderType2", BookingOrderType.Normal)));
                    break;

                case InputOrderType.PickupOrder:
                    orderTypeFilterDefinitions.Add(builderFilter.Eq("orderType2", BookingOrderType.Pickup));
                    break;

                case InputOrderType.DropoffOrder:
                    orderTypeFilterDefinitions.Add(builderFilter.Eq("orderType2", BookingOrderType.Dropoff));
                    break;
                }
            });
            if (orderTypeFilterDefinitions.Count > 0)
            {
                filterDefinitions.Add(builderFilter.Or(orderTypeFilterDefinitions));
            }
        }
Exemplo n.º 2
0
        private static IAggregateFluent <BsonDocument> PlaceTypeFilter(HeatDataResultRequestDto input, IAggregateFluent <BsonDocument> orderAggregateFluent)
        {
            string poinitLocationName = "$startPoinitLocation";

            switch (input.PlaceType)
            {
            case InputPlaceType.ExpectedGetOnLocation:
            default:
                break;

            case InputPlaceType.ExpectedGetOutLocation:
                poinitLocationName = "$endPointLocation";
                break;

            case InputPlaceType.ActualGetOnLocation:
                poinitLocationName = "$startPoinitLocationReal";
                break;

            case InputPlaceType.ActualGetOutLocation:
                poinitLocationName = "$endPointLocationReal";
                break;
            }

            orderAggregateFluent = orderAggregateFluent.Project(new BsonDocument {
                { "lat", new BsonDocument
                  {
                      {
                          "$arrayElemAt", new BsonArray(new List <BsonValue>()
                            {
                                poinitLocationName, 0
                            })
                      }
                  } },
                { "lng", new BsonDocument
                  {
                      {
                          "$arrayElemAt", new BsonArray(new List <BsonValue>()
                            {
                                poinitLocationName, 1
                            })
                      }
                  } },
            });
            return(orderAggregateFluent);
        }
Exemplo n.º 3
0
        private static void CreateTimeFilter(HeatDataResultRequestDto input, FilterDefinitionBuilder <BsonDocument> builderFilter, List <FilterDefinition <BsonDocument> > filterDefinitions)
        {
            List <FilterDefinition <BsonDocument> > timeFilterDefinitions = new List <FilterDefinition <BsonDocument> >();

            input.Dates.ForEach(x =>
            {
                var date = x.ToLocalTime();
                timeFilterDefinitions.Add(builderFilter.And(new List <FilterDefinition <BsonDocument> >()
                {
                    builderFilter.Gte("updateTimeList.status1", new DateTime(date.Year, date.Month, date.Day, input.Times[0].Hour, input.Times[0].Minute, input.Times[0].Second, DateTimeKind.Local)),
                    builderFilter.Lte("updateTimeList.status1", new DateTime(date.Year, date.Month, date.Day, input.Times[1].Hour, input.Times[1].Minute, input.Times[1].Second, DateTimeKind.Local)),
                }));
            });
            if (timeFilterDefinitions.Count > 0)
            {
                filterDefinitions.Add(builderFilter.Or(timeFilterDefinitions));
            }
        }
Exemplo n.º 4
0
        private static void CreateOrderStatusFilter(HeatDataResultRequestDto input, FilterDefinitionBuilder <BsonDocument> builderFilter, List <FilterDefinition <BsonDocument> > filterDefinitions)
        {
            List <FilterDefinition <BsonDocument> > orderStatusFilterDefinitions = new List <FilterDefinition <BsonDocument> >();

            input.OrderStatus.ForEach(x =>
            {
                switch (x)
                {
                case InputOrderStatus.TotalStatus:
                default:
                    break;

                case InputOrderStatus.CancelPlaceOrder:
                    orderStatusFilterDefinitions.Add(builderFilter.And(builderFilter.In("orderStatus", new List <int>()
                    {
                        30, 40, 45
                    }), builderFilter.Exists("updateTimeList.status5", false)));
                    break;

                case InputOrderStatus.CancelAcceptOrder:
                    orderStatusFilterDefinitions.Add(builderFilter.And(builderFilter.In("orderStatus", new List <int>()
                    {
                        30, 40, 45
                    }), builderFilter.Exists("updateTimeList.status5", true)));
                    break;

                case InputOrderStatus.CompletedOrder:
                    orderStatusFilterDefinitions.Add(builderFilter.Exists("updateTimeList.status20", true));
                    break;

                case InputOrderStatus.ToBeCompletedOrder:
                    orderStatusFilterDefinitions.Add(builderFilter.And(builderFilter.Exists("updateTimeList.status20", false), builderFilter.Not(builderFilter.In("orderStatus", new List <int>()
                    {
                        30, 40, 45
                    }))));
                    break;
                }
            });
            if (orderStatusFilterDefinitions.Count > 0)
            {
                filterDefinitions.Add(builderFilter.Or(orderStatusFilterDefinitions));
            }
        }
Exemplo n.º 5
0
        public async Task <HeatDataDto> HeatData(HeatDataResultRequestDto input)
        {
            var cellCount        = new int[] { input.SegmentationNumber, input.SegmentationNumber };
            var lngExtent        = new double[] { 29.8, 30.8 };
            var latExtent        = new double[] { 119.7, 120.6 };
            var lngCellSizeCoord = (lngExtent[1] - lngExtent[0]) / cellCount[0];
            var latCellSizeCoord = (latExtent[1] - latExtent[0]) / cellCount[1];
            var mapData          = new List <int[]>();
            var rangeList        = new List <int>();

            var builderFilter = Builders <BsonDocument> .Filter;
            List <FilterDefinition <BsonDocument> > filterDefinitions = new List <FilterDefinition <BsonDocument> >();

            CreateTimeFilter(input, builderFilter, filterDefinitions);
            CreateOrderTypeFilter(input, builderFilter, filterDefinitions);
            CreateOrderStatusFilter(input, builderFilter, filterDefinitions);

            var orderAggregateFluent = _mongoDBRepository.Database.GetCollection <BsonDocument>("tab_order").Aggregate()
                                       .Match(builderFilter.And(filterDefinitions));

            orderAggregateFluent = PlaceTypeFilter(input, orderAggregateFluent);

            var orderBson = await GeoGroup(lngExtent, latExtent, lngCellSizeCoord, latCellSizeCoord, orderAggregateFluent);

            int max = GetMapDataAndMax(cellCount, mapData, orderBson);

            GetRangeList(rangeList, max);

            return(new HeatDataDto
            {
                CellCount = cellCount,
                LngExtent = lngExtent,
                LatExtent = latExtent,
                MapData = mapData.ToArray(),
                RangeList = rangeList.ToArray(),
            });
        }