コード例 #1
0
        public void SetAsInactive(string deviceId, Alarm.AlarmSubtype subtype)
        {
            Device device = collection.AsQueryable()
                            .SelectMany(e => e.Devices)
                            .Where(e => e.Id == deviceId)
                            .FirstOrDefault();
            IEnumerable <Alarm> alarms = device.Alarms.Where(e => e.IsActive && e.Subtype == subtype);

            System.Diagnostics.Debug.WriteLine(collection.AsQueryable()
                                               .SelectMany(e => e.Devices)
                                               .Where(e => e.Id == deviceId));

            foreach (Alarm alarm in alarms)
            {
                var filterAlarm = Builders <Device> .Filter.ElemMatch(e => e.Alarms, a => a.Id == alarm.Id);

                var filter = Builders <Site> .Filter.ElemMatch(e => e.Devices, filterAlarm);

                int index = (device.Alarms as List <Alarm>).IndexOf(alarm);

                collection.UpdateOne(filter, Builders <Site> .Update
                                     .Set($"Devices.$.Alarms.{index}.IsActive", false));
            }
        }
コード例 #2
0
        private void CreateAlarm(string deviceId, string siteId, Alarm.Type alarmType, Alarm.AlarmSubtype subtype, Alarm.Gravity alarmGravity, string shortDescription, string description)
        {
            Alarm alarm = new Alarm()
            {
                Id               = $"{deviceId}-{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}",
                DeviceId         = deviceId,
                SiteId           = siteId,
                IsActive         = true,
                AlarmType        = alarmType,
                AlarmGravity     = alarmGravity,
                OccuredAt        = DateTime.UtcNow,
                ShortDescription = shortDescription,
                Description      = description,
                Subtype          = subtype
            };

            deviceRepository.AddAlarm(deviceId, alarm);
        }