コード例 #1
0
        public IActionResult UpdateDeviceProperties([FromBody] UpdateDeviceProperties device)
        {
            try
            {
                logger.LogInformation($"UpdateDeviceProperties called for Device {device.DeviceSerialNumber}-{device.DeviceType}");

                if (device.ModuleType != null ||
                    device.MainboardSoftwareVersion != null ||
                    device.RadioFirmwarePartNumber != null ||
                    device.GatewayFirmwarePartNumber != null ||
                    device.DataLinkType != null ||
                    device.CellularFirmwarePartnumber != null ||
                    device.NetworkFirmwarePartnumber != null ||
                    device.SatelliteFirmwarePartnumber != null)
                {
                    if (!deviceTypesCache.TryGetValue(device.DeviceType, out DbDeviceType deviceType))
                    {
                        logger.LogWarning($"DeviceType {device.DeviceType} is not exists");
                        return(BadRequest("Make sure request contains valid DeviceType"));
                    }

                    var deviceUids = deviceService.GetDeviceDetailsBySerialNumberAndType(device.DeviceSerialNumber, device.DeviceType) ?? new List <Guid>();

                    if (deviceUids != null && deviceUids.Count() > 1)                     // two devices for same serialnumber
                    {
                        logger.LogWarning($"Two Devices are with same SerailNumber {device.DeviceSerialNumber} & DeviceType {device.DeviceType}");
                        return(Ok());
                    }
                    if (!deviceUids.Any())
                    {
                        return(BadRequest("Device doesn't exist!"));
                    }

                    if (deviceService.UpdateDeviceProperties(device, deviceUids.First()))
                    {
                        return(Ok());
                    }
                    else
                    {
                        return(BadRequest("No properties to update"));
                    }
                }
                else
                {
                    return(BadRequest("UpdateDeviceProperties should have atleast one data to update"));
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message + ex.StackTrace);
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
            }
        }
コード例 #2
0
        public bool UpdateDeviceProperties(UpdateDeviceProperties device, Guid deviceUid)
        {
            DbDeviceType deviceType    = deviceTypesCache.First(x => string.Equals(x.Key, device.DeviceType, StringComparison.InvariantCultureIgnoreCase)).Value;
            var          currentUTC    = DateTime.UtcNow;
            var          devicePayload = new UpdateDevicePayload
            {
                ActionUTC = currentUTC,
                CellularFirmwarePartnumber = device.CellularFirmwarePartnumber,
                DataLinkType                = device.DataLinkType,
                DeviceSerialNumber          = device.DeviceSerialNumber,
                DeviceType                  = device.DeviceType,
                DeviceUID                   = deviceUid,
                GatewayFirmwarePartNumber   = device.GatewayFirmwarePartNumber,
                MainboardSoftwareVersion    = device.MainboardSoftwareVersion,
                ModuleType                  = device.ModuleType,
                NetworkFirmwarePartnumber   = device.NetworkFirmwarePartnumber,
                RadioFirmwarePartNumber     = device.RadioFirmwarePartNumber,
                ReceivedUTC                 = device.ReceivedUTC,
                SatelliteFirmwarePartnumber = device.SatelliteFirmwarePartnumber,
                Description                 = device.Description
            };


            var existingDeviceProp    = GetExistingDeviceProperties(deviceUid);
            var existingPersonalities = GetExistingDevicePersonalities(devicePayload.DeviceUID);
            var devicePersonality     = GetDevicePersonalities(devicePayload, existingPersonalities, deviceType);

            devicePayload = AppendExistingDeviceProperties(devicePayload, existingDeviceProp);
            devicePayload.OwningCustomerUID = GetExistingOwningCustomerUid(deviceUid);
            var deviceState = (DeviceStateEnum)Enum.Parse(typeof(DeviceStateEnum), existingDeviceProp.DeviceState, true);

            devicePayload.ReceivedUTC = DateTime.UtcNow;

            bool equal = CheckExistingDevicePropertiesForUpdate(devicePayload, deviceState, devicePayload.OwningCustomerUID, existingDeviceProp);

            if (equal)
            {
                logger.LogInformation("No properties to update");
                return(false);
            }
            else
            {
                var kafkaMessageList = new List <KafkaMessage>();
                kafkaTopicNames.ForEach(topic =>
                {
                    var kafkaMessage = new KafkaMessage()
                    {
                        Key     = deviceUid.ToString(),
                        Message = new { UpdateDeviceEvent = mapper.Map <UpdateDevicePayload, UpdateDeviceEvent>(devicePayload) },
                        Topic   = topic
                    };
                    kafkaMessageList.Add(kafkaMessage);
                });

                kafkaTopicNamesV2.ForEach(topic =>
                {
                    var kafkaMessage = new KafkaMessage()
                    {
                        Key     = deviceUid.ToString(),
                        Message = ToDevicePayloadV2(devicePayload, devicePersonality),
                        Topic   = topic
                    };
                    kafkaMessageList.Add(kafkaMessage);
                });

                var actions     = new List <Action>();
                var deviceModel = new DbDevice
                {
                    CellModemIMEI = devicePayload.CellModemIMEI,
                    CellularFirmwarePartnumber = devicePayload.CellularFirmwarePartnumber,
                    DataLinkType                = devicePayload.DataLinkType,
                    DeregisteredUTC             = devicePayload.DeregisteredUTC,
                    DevicePartNumber            = devicePayload.DevicePartNumber,
                    SerialNumber                = devicePayload.DeviceSerialNumber,
                    fk_DeviceTypeID             = deviceType.DeviceTypeID,
                    DeviceUID                   = devicePayload.DeviceUID,
                    FirmwarePartNumber          = devicePayload.RadioFirmwarePartNumber == null ? devicePayload.FirmwarePartNumber : devicePayload.RadioFirmwarePartNumber,
                    GatewayFirmwarePartNumber   = devicePayload.GatewayFirmwarePartNumber,
                    MainboardSoftwareVersion    = devicePayload.MainboardSoftwareVersion,
                    ModuleType                  = devicePayload.ModuleType,
                    NetworkFirmwarePartnumber   = devicePayload.NetworkFirmwarePartnumber,
                    SatelliteFirmwarePartnumber = devicePayload.SatelliteFirmwarePartnumber,
                    UpdateUTC                   = currentUTC,
                    fk_DeviceStatusID           = deviceState.GetHashCode()
                };
                actions.Add(() => transactions.Upsert(deviceModel));
                actions.Add(() => transactions.Upsert <DbDevicePersonality>(devicePersonality));
                actions.Add(() => transactions.Publish(kafkaMessageList));
                return(transactions.Execute(actions));
            }
        }