示例#1
0
        public List <HubMessage> Generate(IEnumerable <Flat> flats)
        {
            var groups = flats.GroupBy(x => x.House);

            var rnd         = new Random();
            var hubMessages = new List <HubMessage>();


            Parallel.ForEach(groups, group =>
            {
                MeterHub hub = null;
                IEnumerable <Meter> meters = null;
                IEnumerable <Flat> flts    = null;

                lock (_lock)
                {
                    hub    = _db.MeterHubs.FirstOrDefault(p => p.House.id == group.Key.id);
                    meters = _db.Meters.Include(p => p.Flat).Where(p => p.Hub.id == hub.id).ToList();
                    flts   = meters.Select(p => p.Flat).Distinct().OrderBy(p => p.Num).ToList();
                }

                var hubMessage = new HubMessage()
                {
                    HubId    = hub.id,
                    Messages = new List <MeterMessage>()
                };

                foreach (var flat in group)
                {
                    var f = flts.FirstOrDefault(x => x.Id == flat.Id);
                    foreach (var meter in f.Meters)
                    {
                        var meterMsg = new MeterMessage()
                        {
                            Id            = meter.id,
                            Address       = Int32.Parse(f.Num),
                            Env           = 1,
                            Maker         = "lora",
                            SerialNumber  = meter.id,
                            SetupIdentity = 1,
                            Body          = new StateMessage
                            {
                                MeasureUnit = GetMeterType(meter.type),
                                Message     = "OK",
                                State       = 1,
                                MeterDt     = DateTime.Now,
                                Volume      = float.Parse((200 + rnd.NextDouble() * rnd.Next(0, 800)).ToString())
                            }
                        };
                        hubMessage.Messages.Add(meterMsg);
                    }
                }
                hubMessages.Add(hubMessage);
            });
            return(hubMessages);
        }
示例#2
0
文件: Parcer.cs 项目: gevorg96/IsUakr
        public async Task RunAsync()
        {
            var housesUrl = @"http://dom.mingkh.ru";

            var housesResponse = await LoadData(housesUrl + "/api/houses");

            var housesJObject = JsonConvert.DeserializeObject <DataGO>(housesResponse);
            var housesList    = new List <House>();

            foreach (var house in housesJObject.rows)
            {
                var h = new House
                {
                    id              = house.rownumber,
                    square          = house.square != "Незаполнено" ? Convert.ToDouble(house.square.Replace(".", ",")) : 0,
                    fullAddress     = house.address,
                    year            = house.year != "Не заполнено" ? Convert.ToInt32(house.year) : 0,
                    manageStartDate = house.managestartdate != "Не заполнено"
                        ? Convert.ToDateTime(house.managestartdate)
                        : DateTime.MinValue,
                    number = house.url.Split('/').Last(),
                    floors = house.floors != "Не заполнено" ? Convert.ToInt32(house.floors) : 0
                };

                var result = await LoadPage(housesUrl + house.url) as string;

                HtmlDocument hap = new HtmlDocument();
                hap.LoadHtml(result);
                var dtnodes = hap.DocumentNode.SelectNodes("//dt");
                var ddnodes = hap.DocumentNode.SelectNodes("//dd");

                var idx = 0;
                for (int i = 0; i < dtnodes.Count; i++)
                {
                    if (dtnodes[i].InnerHtml == "Жилых помещений")
                    {
                        idx = i;
                        break;
                    }
                }

                int flats       = 0;
                var isConverted = Int32.TryParse(ddnodes[idx].InnerHtml, out flats);
                if (isConverted)
                {
                    h.flatsCount = flats;
                    housesList.Add(h);
                }
            }

            using (var db = new NpgDbContext(conn))
            {
                foreach (var h in housesList)
                {
                    var(streetStr, houseStr) = GetStreetAndHouse(h.fullAddress);

                    var streetDal = db.Streets.FirstOrDefault(p => p.name == streetStr);

                    if (streetDal != null)
                    {
                        var house = new House
                        {
                            number          = houseStr,
                            square          = Convert.ToDouble(h.square),
                            year            = Convert.ToInt32(h.year),
                            code            = Convert.ToInt32(h.code),
                            floors          = Convert.ToInt32(h.floors),
                            flatsCount      = Convert.ToInt32(h.flatsCount),
                            manageStartDate = Convert.ToDateTime(h.manageStartDate),
                            Street          = streetDal
                        };
                        db.Houses.Add(house);
                        db.SaveChanges();
                    }
                    else
                    {
                        var street = new Street
                        {
                            name = streetStr
                        };
                        db.Streets.Add(street);
                        db.SaveChanges();



                        var house = new House
                        {
                            number          = houseStr,
                            square          = Convert.ToDouble(h.square),
                            year            = Convert.ToInt32(h.year),
                            code            = Convert.ToInt32(h.code),
                            floors          = Convert.ToInt32(h.floors),
                            flatsCount      = Convert.ToInt32(h.flatsCount),
                            manageStartDate = Convert.ToDateTime(h.manageStartDate),
                            Street          = db.Streets.FirstOrDefault(p => p.name == streetStr)
                        };
                        db.Houses.Add(house);
                        db.SaveChanges();
                    }
                }


                foreach (var house in db.Houses.ToList())
                {
                    var meterHub = new MeterHub
                    {
                        House = house,
                        code  = Guid.NewGuid().ToString()
                    };
                    db.MeterHubs.Add(meterHub);

                    for (int i = 0; i < house.flatsCount; i++)
                    {
                        var flat = new Flat
                        {
                            Num   = (i + 1).ToString(),
                            House = house
                        };
                        db.Flats.Add(flat);



                        var energyMeter = new Meter
                        {
                            code = Guid.NewGuid().ToString(),
                            type = "energy",
                            Flat = flat,
                            Hub  = meterHub
                        };
                        var heat_water = new Meter
                        {
                            code = Guid.NewGuid().ToString(),
                            type = "heat_water",
                            Flat = flat,
                            Hub  = meterHub
                        };
                        var cold_water = new Meter
                        {
                            code = Guid.NewGuid().ToString(),
                            type = "cold_water",
                            Flat = flat,
                            Hub  = meterHub
                        };
                        db.Meters.Add(energyMeter);
                        db.Meters.Add(heat_water);
                        db.Meters.Add(cold_water);
                    }
                }

                db.SaveChanges();
            }
        }