Compare commits
No commits in common. "45e52b9f1fb45d757620f0a5c454c87ab2b87db3" and "fd30054a8b0479f9121c22927000fd67525ec3c1" have entirely different histories.
45e52b9f1f
...
fd30054a8b
@ -1 +1 @@
|
||||
Subproject commit db06f880158a1bb85996b0f7e08153943fd9e40c
|
||||
Subproject commit 8df0a54f551a1f894014c9b0e8eca5d7c5c4f51b
|
||||
@ -1,5 +1,4 @@
|
||||
using JiShe.ServicePro.Core;
|
||||
using JiShe.ServicePro.Enums;
|
||||
using JiShe.ServicePro.Enums;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace JiShe.IoT.DeviceAggregation
|
||||
@ -8,8 +7,26 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
/// <summary>
|
||||
/// 设备命令
|
||||
/// </summary>
|
||||
public class DeviceCommandForApiInput:IdInput
|
||||
public class DeviceCommandForApiInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 表通信地址
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "设备地址不能为空")]
|
||||
public string DeviceAddress { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物联网平台类型
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "物联网平台类型不能为空")]
|
||||
public IoTPlatformTypeEnum IoTPlatform { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备在物联网平台中对应的产品Id
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "产品Id不能为空")]
|
||||
public string IoTPlatformProductId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设备在物联网平台中发送的命令内容,JSON格式
|
||||
/// </summary>
|
||||
|
||||
@ -267,8 +267,6 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
|
||||
RedisProvider.Instance.HSet<DeviceCacheInfos>(RedisConst.CacheAllDeviceInfoHashKey, input.DeviceAddress, deviceCacheInfos);
|
||||
|
||||
|
||||
|
||||
return input.Adapt<DeviceManagementInfoDto>();
|
||||
}
|
||||
|
||||
@ -281,13 +279,13 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
{
|
||||
try
|
||||
{
|
||||
var deviceInfo = await deviceAppService.FindByIdAsync(input);
|
||||
var deviceInfo = await deviceAppService.FindByDeviceAddressAsync(input.DeviceAddress);
|
||||
//将指令存储Kafka的OneNET主题中
|
||||
var commandRequest = new OpenApiRequest()
|
||||
{
|
||||
Message = new ReceiveCommandInfoDto()
|
||||
{
|
||||
DeviceAddress = deviceInfo.DeviceAddress,
|
||||
DeviceAddress = input.DeviceAddress,
|
||||
Commands = input.CommandContent.Deserialize<Dictionary<string,object>>(),
|
||||
DeviceType = DeviceTypeEnum.Focus,//todo 设备类型 需要跟设备统一什么情况下知道具体设备类型
|
||||
SourceType = DeviceTelemetrySourceTypeEnum.AdminSystem,
|
||||
@ -296,7 +294,8 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
|
||||
if (deviceInfo.IoTPlatform == IoTPlatformTypeEnum.OneNET)
|
||||
{
|
||||
return await DeviceCommandInfoToOneNET(deviceInfo, commandRequest);
|
||||
await producerService.ProduceAsync(KafkaTopicConsts.OneNETCommandIssuedEventName, $"{GuidGenerator.Create()}", commandRequest);
|
||||
return true;
|
||||
}
|
||||
else if (deviceInfo.IoTPlatform == IoTPlatformTypeEnum.CTWing)
|
||||
{
|
||||
@ -407,15 +406,11 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
{
|
||||
CreateDeviceInput createDeviceInput = input.Adapt<CreateDeviceInput>();
|
||||
createDeviceInput.DeviceName = item;
|
||||
createDeviceInput.DeviceAddress = item;
|
||||
createDeviceInput.IoTPlatformAccountId = productInfo.OneNETAccountId;
|
||||
createDeviceInput.IoTPlatformDeviceOpenInfo = $"{input.IoTPlatformProductId}{item}";
|
||||
createDeviceInput.PlatformPassword = productInfo.ProductAccesskey;
|
||||
createDeviceInput.IoTPlatformProductName = productInfo.ProductName;
|
||||
createDeviceInput.AccountPhoneNumber = productInfo.AccountPhoneNumber;
|
||||
createDeviceInput.DeviceSourceTypeEnum = input.DeviceSourceTypeEnum.Value;
|
||||
|
||||
batchCreateDeviceInput.DeviceInputs.Add(createDeviceInput);
|
||||
}
|
||||
|
||||
|
||||
@ -431,11 +426,9 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
{
|
||||
ProductId = productInfo.IoTPlatformProductId,
|
||||
OneNETAccountId = productInfo.OneNETAccountId,
|
||||
DeviceList = new List<string>()
|
||||
DeviceList = batchCreateDeviceInput.DeviceInputs.Select(d => d.IoTPlatformDeviceOpenInfo).ToList(),
|
||||
};
|
||||
|
||||
oneNETBatchCreateDeviceInfoInput.DeviceList = batchCreateDeviceInput.DeviceInputs.Select(d => d.IoTPlatformDeviceOpenInfo).ToList();
|
||||
|
||||
var pushResult = await oneNETDeviceService.BatchCreateDeviceInfoAsync(oneNETBatchCreateDeviceInfoInput);
|
||||
|
||||
if (pushResult == null || pushResult.Code != ServicePro.Enums.ResponeResultEnum.Success)
|
||||
@ -473,8 +466,9 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
var productInfo = await FreeSqlDbContext.Instance.Select<OneNETProductInfos>()
|
||||
.Where(e => e.IoTPlatformProductId == input.IoTPlatformProductId)
|
||||
.Where(e => e.IsEnabled == true && e.IoTPlatformProductId == input.IoTPlatformProductId)
|
||||
.FirstAsync();
|
||||
|
||||
if (productInfo == null)
|
||||
@ -482,18 +476,6 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
throw new UserFriendlyException($"推送失败,未找到对应的产品配置信息。");
|
||||
}
|
||||
|
||||
//检查OneNET平台设备是否已经存在
|
||||
var oneNETDeviceInfoResult = await oneNETDeviceService.DeviceInfoDetailAsync(new DeviceInfoDetailInput()
|
||||
{
|
||||
DeviceName = input.IoTPlatformDeviceOpenInfo,
|
||||
ProductId = productInfo.IoTPlatformProductId,
|
||||
OneNETAccountId = productInfo.OneNETAccountId,
|
||||
});
|
||||
|
||||
if (oneNETDeviceInfoResult != null && oneNETDeviceInfoResult.Code == ServicePro.Enums.ResponeResultEnum.Success)
|
||||
{
|
||||
throw new UserFriendlyException($"推送失败,OneNET账号{productInfo.AccountPhoneNumber}的产品下{productInfo.ProductName}已经存在该设备{input.DeviceAddress}。");
|
||||
}
|
||||
|
||||
//推送至OneNET平台
|
||||
var pushResult = await oneNETDeviceService.CreateDeviceInfoAsync(new CreateDeviceInfoInput()
|
||||
@ -546,6 +528,7 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
DeviceName = input.IoTPlatformDeviceOpenInfo,
|
||||
ProductId = productInfo.IoTPlatformProductId,
|
||||
OneNETAccountId = productInfo.OneNETAccountId,
|
||||
Description = input.DeviceAddress,
|
||||
});
|
||||
|
||||
if (deleteResult == null || deleteResult.Code != ServicePro.Enums.ResponeResultEnum.Success)
|
||||
@ -569,45 +552,6 @@ namespace JiShe.IoT.DeviceAggregation
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送OneNET平台设备指令
|
||||
/// </summary>
|
||||
/// <param name="deviceInfo"></param>
|
||||
/// <param name="commandRequest"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="UserFriendlyException"></exception>
|
||||
public async Task<bool> DeviceCommandInfoToOneNET(DeviceManagementInfoDto deviceInfo, OpenApiRequest commandRequest)
|
||||
{
|
||||
try
|
||||
{
|
||||
//检查下设备是否在线
|
||||
var deviceOnlineStatus = await oneNETDeviceService.DeviceInfoDetailAsync(new DeviceInfoDetailInput()
|
||||
{
|
||||
DeviceName = deviceInfo.IoTPlatformDeviceOpenInfo,
|
||||
OneNETAccountId = deviceInfo.IoTPlatformAccountId,
|
||||
ProductId = deviceInfo.IoTPlatformProductId,
|
||||
});
|
||||
|
||||
if (deviceOnlineStatus == null || deviceOnlineStatus.Code != ResponeResultEnum.Success)
|
||||
{
|
||||
throw new UserFriendlyException("获取平台设备信息失败");
|
||||
}
|
||||
|
||||
if (deviceOnlineStatus.Data.Status != 1)
|
||||
{
|
||||
throw new UserFriendlyException("设备不在线");
|
||||
}
|
||||
|
||||
await producerService.ProduceAsync(KafkaTopicConsts.OneNETCommandIssuedEventName, $"{GuidGenerator.Create()}", commandRequest);
|
||||
return true;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CTWing 设备操作
|
||||
|
||||
@ -83,13 +83,6 @@ namespace JiShe.ServicePro.OneNETManagement.Subscribers
|
||||
return SubscribeAck.Fail();
|
||||
}
|
||||
|
||||
//更新设备数据缓存到Redis
|
||||
DeviceCacheInfos deviceCacheInfos = deviceEntity.Adapt<DeviceCacheInfos>();
|
||||
deviceCacheInfos.IoTPlatformResponse = null;
|
||||
deviceCacheInfos.PlatformPassword = null;
|
||||
|
||||
RedisProvider.Instance.HSet<DeviceCacheInfos>(RedisConst.CacheAllDeviceInfoHashKey, deviceEntity.DeviceAddress, deviceCacheInfos);
|
||||
|
||||
return SubscribeAck.Success();
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
@ -66,25 +66,11 @@ namespace JiShe.IoT.Controllers
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost(nameof(RepushDeviceInfoToIoTPlatform))]
|
||||
[HttpPost("RepushDeviceInfoToIoTPlatform")]
|
||||
[SwaggerOperation(summary: "重新推送设备信息到物联网平台", Tags = new[] { "AggregationDevice" })]
|
||||
public Task<DeviceManagementInfoDto> RepushDeviceInfoToIoTPlatform(IdInput input)
|
||||
{
|
||||
return _deviceAggregationService.RepushDeviceInfoToIoTPlatform(input);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 发送设备指令信息
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost(nameof(DeviceCommandForApiAsync))]
|
||||
[SwaggerOperation(summary: "发送设备指令信息", Tags = new[] { "AggregationDevice" })]
|
||||
public Task<bool> DeviceCommandForApiAsync(DeviceCommandForApiInput input)
|
||||
{
|
||||
return _deviceAggregationService.DeviceCommandForApiAsync(input);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user