Esempio n. 1
0
        public bool AssociateAssetDevice(AssociateDeviceAssetEvent associateDeviceAsset)
        {
            associateDeviceAsset.ReceivedUTC = DateTime.UtcNow;

            var assetDevice = new DbAssetDevice
            {
                fk_AssetUID   = associateDeviceAsset.AssetUID,
                fk_DeviceUID  = associateDeviceAsset.DeviceUID,
                ActionUTC     = associateDeviceAsset.ActionUTC.Value,
                RowUpdatedUTC = associateDeviceAsset.ReceivedUTC
            };

            var kafkaMessageList = new List <KafkaMessage>();

            kafkaTopicNames.ForEach(topic =>
            {
                var kafkaMessage = new KafkaMessage()
                {
                    Key     = associateDeviceAsset.DeviceUID.ToString(),
                    Message = new { AssociateDeviceAssetEvent = associateDeviceAsset },
                    Topic   = topic
                };
                kafkaMessageList.Add(kafkaMessage);
            });
            var actions = new List <Action>();

            actions.Add(() => transactions.Upsert(assetDevice));
            actions.Add(() => transactions.Publish(kafkaMessageList));
            return(transactions.Execute(actions));
        }
Esempio n. 2
0
        public IActionResult AssociateDeviceAsset([FromBody] AssociateDeviceAssetEvent associateDeviceAsset)
        {
            try
            {
                logger.LogInformation($"AssociateDeviceAsset called for Asset {associateDeviceAsset.AssetUID} Device {associateDeviceAsset.DeviceUID}");

                var associateDeviceDetail = deviceService.GetAssetDevice(associateDeviceAsset.AssetUID, associateDeviceAsset.DeviceUID);
                if (associateDeviceDetail != null)
                {
                    if (associateDeviceDetail.ActionUTC >= associateDeviceAsset.ActionUTC)
                    {
                        return(BadRequest("The AssociateDeviceAsset does not have the latest data to be updated."));
                    }
                    else
                    {
                        return(BadRequest("The Device is already Associated with this Asset."));
                    }
                }
                //To check any device are dissociated for this asset
                var associateDevice = deviceService.GetAssociatedDevicesByAsset(associateDeviceAsset.AssetUID);
                if (associateDevice != null)
                {
                    if (associateDevice.DeviceStatusID == DeviceStateEnum.Subscribed.GetHashCode())
                    {
                        logger.LogInformation(string.Format("AssociateDeviceAsset ignored. Already Asset ({0}) associated with Device ({1})"
                                                            , associateDeviceAsset.AssetUID, associateDevice.DeviceUID));
                        return(Ok("AssociateDeviceAsset ignored as another device is subscribed already"));
                    }
                    else
                    {
                        var dissociateDeviceAsset = new DissociateDeviceAssetEvent()
                        {
                            AssetUID    = new Guid(associateDeviceAsset.AssetUID.ToString()),
                            DeviceUID   = associateDevice.DeviceUID,
                            ActionUTC   = associateDeviceAsset.ActionUTC.Value.AddMilliseconds(-1),
                            ReceivedUTC = DateTime.UtcNow
                        };

                        deviceService.DissociateAssetDevice(dissociateDeviceAsset);
                    }
                }


                if (deviceService.AssociateAssetDevice(associateDeviceAsset))
                {
                    return(Ok());
                }
                else
                {
                    return(StatusCode((int)HttpStatusCode.InternalServerError, "AssociateDeviceAsset is not published."));
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message + ex.StackTrace);
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
            }
        }