Ejemplo n.º 1
0
        public JsonResult GetMarkers(double minlng, double minlat, double maxlng, double maxlat)
        {
            var data = new AjaxDataModel <List <MarkerModel> > {
                success = true,
                message = "No data",
                total   = 0,
                data    = new List <MarkerModel>()
            };

            try {
                var stations = _workContext.Stations().FindAll(s => {
                    if (string.IsNullOrWhiteSpace(s.Current.Longitude))
                    {
                        return(false);
                    }

                    if (string.IsNullOrWhiteSpace(s.Current.Latitude))
                    {
                        return(false);
                    }

                    double lng, lat;
                    if (!double.TryParse(s.Current.Longitude, out lng))
                    {
                        return(false);
                    }

                    if (!double.TryParse(s.Current.Latitude, out lat))
                    {
                        return(false);
                    }

                    return(lng >= minlng && lng <= maxlng && lat >= minlat && lat <= maxlat);
                });

                if (stations.Count > 0)
                {
                    if (stations.Count > 100)
                    {
                        stations = stations.Take(100).ToList();
                    }
                    data.message = "200 Ok";
                    data.total   = stations.Count;

                    var almsInSta = from alarm in _workContext.ActAlarms()
                                    group alarm by alarm.Current.StationId into g
                                    select new { Id = g.Key, Alarms = g.Select(a => a.Current) };

                    foreach (var station in stations)
                    {
                        var model = new MarkerModel()
                        {
                            id   = station.Current.Id,
                            name = station.Current.Name,
                            type = station.Current.Type.Name,
                            lng  = double.Parse(station.Current.Longitude),
                            lat  = double.Parse(station.Current.Latitude)
                        };

                        var eachSta = almsInSta.FirstOrDefault(s => s.Id == station.Current.Id);
                        if (eachSta != null)
                        {
                            model.alm1 = eachSta.Alarms.Count(a => a.AlarmLevel == EnmAlarm.Level1);
                            model.alm2 = eachSta.Alarms.Count(a => a.AlarmLevel == EnmAlarm.Level2);
                            model.alm3 = eachSta.Alarms.Count(a => a.AlarmLevel == EnmAlarm.Level3);
                            model.alm4 = eachSta.Alarms.Count(a => a.AlarmLevel == EnmAlarm.Level4);

                            if (model.alm1 > 0)
                            {
                                model.level = (int)EnmAlarm.Level1;
                            }
                            else if (model.alm2 > 0)
                            {
                                model.level = (int)EnmAlarm.Level2;
                            }
                            else if (model.alm3 > 0)
                            {
                                model.level = (int)EnmAlarm.Level3;
                            }
                            else if (model.alm4 > 0)
                            {
                                model.level = (int)EnmAlarm.Level4;
                            }
                            else
                            {
                                model.level = (int)EnmAlarm.Level0;
                            }
                        }
                        else
                        {
                            model.level = (int)EnmAlarm.Level0;
                            model.alm1  = 0;
                            model.alm2  = 0;
                            model.alm3  = 0;
                            model.alm4  = 0;
                        }

                        data.data.Add(model);
                    }
                }
            } catch (Exception exc) {
                data.success = false;
                data.message = exc.Message;
            }

            return(Json(data, JsonRequestBehavior.AllowGet));
        }