Former-commit-id: 452b8287161336526a0b6c72c2e67917e77a20b7
TangShanKaiPing
wanggang 6 years ago
parent 40bb8f4a62
commit 703df4f7bc

@ -31,6 +31,16 @@ namespace Infrastructure.Extensions
{
return (T)(Activator.CreateInstance(typeof(T)).InjectFrom<NullableInjection>(source));
}
public static T Update<T>(this T target, object source)
{
return (T)target.InjectFrom(new PlainInjection(null), source);
}
public static T UpdateWithoutId<T>(this T target, object source)
{
return (T)target.InjectFrom(new PlainInjection("Id"), source);
}
}
public class NullableInjection : LoopInjection
@ -86,15 +96,11 @@ namespace Infrastructure.Extensions
{
return false;
}
return sourceType == targetType;
return base.MatchTypes(sourceType, targetType);
}
protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp)
{
if (sp.Name == "RowVersion" || sp.Name == "UpdatedOn")
{
return;
}
if (this._skip != null && this._skip.Length > 0)
{
if (this._skip.Contains(sp.Name))

@ -30,7 +30,7 @@ namespace Infrastructure.Web.SignalR
Clients.Group(group).SendAsync(method, message, fromConnectinId);
}
public virtual void OnClientToServer(string method, string message, string connectionId)
public virtual void OnClientToServer(string method, string message, string fromConnectinId)
{
}
}

@ -0,0 +1,12 @@
using Infrastructure.Domain;
using System.Collections.Generic;
namespace Application.Domain.Entities
{
public class Category : BaseEntity
{
public string Name { get; set; }
public string Number { get; set; }
public List<Device> Devices { get; set; } = new List<Device>();
}
}

@ -57,6 +57,12 @@ namespace Application.Domain.Entities
[Display(Name = "型号")]
public string InfoNumber { get; set; }
[Display(Name = "分类Id")]
public Guid? CategoryId { get; set; }
[Display(Name = "分类")]
public Category Category { get; set; }
[Display(Name = "节点Id")]
public Guid? NodeId { get; set; }

@ -126,13 +126,13 @@ namespace IoT.Shared.Infrastructure
{
}
public void ClientToServer(string method, string message)
public void ClientToServer(string method, string message, string fromConnectionId = null)
{
Task.Run(() =>
{
try
{
this.Connection.SendAsync("ClientToServer", method, message);
this.Connection.SendAsync("OnClientToServer", method, message, fromConnectionId);
}
catch (Exception ex)
{

@ -82,17 +82,14 @@ namespace IoT.UI.Shard
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
//
modelBuilder.Entity<Node>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Category>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<DeviceInfo>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Api>().HasOne(o => o.Info).WithMany(o => o.Apis).HasForeignKey(o => o.InfoId);
modelBuilder.Entity<Device>().HasOne(o => o.Category).WithMany(o => o.Devices).HasForeignKey(o => o.CategoryId);
modelBuilder.Entity<Device>().HasOne(o => o.Info).WithMany(o => o.Devices).HasForeignKey(o => o.InfoId);
modelBuilder.Entity<Device>().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<Data>().HasOne(o => o.Device).WithMany(o => o.Data).HasForeignKey(o => o.DeviceId);
modelBuilder.Entity<Parameter>().HasOne(o => o.Api).WithMany(o => o.Parameters).HasForeignKey(o => o.ApiId);
//modelBuilder.Entity<Sence>().HasOne(o => o.Node).WithMany(o => o.Sences).HasForeignKey(o => o.NodeId);
//modelBuilder.Entity<Command>().HasOne(o => o.Sence).WithMany(o => o.Commands).HasForeignKey(o => o.SenceId);
//modelBuilder.Entity<Device>().HasIndex(o => o.Number).IsUnique();
//modelBuilder.Entity<Data>().HasIndex(o => new { o.DeviceId, o.Key }).IsUnique();
//modelBuilder.Entity<Api>().HasIndex(o => new { o.DeviceId, o.Path, o.Command }).IsUnique();
//modelBuilder.Entity<Parameter>().HasIndex(o => new { o.ApiId, o.Name }).IsUnique();
}
public override void Seed(DbContext dbContext, IServiceProvider serviceProvider, IConfiguration configuration)
@ -156,6 +153,12 @@ namespace IoT.UI.Shard
UserRoles = new List<UserRole> { new UserRole { Role = adminRole } }
});
dbContext.SaveChanges();
dbContext.Set<Category>().Add(new Category { Number = "00", Name = "网关" });
dbContext.Set<Category>().Add(new Category { Number = "10", Name = "安防" });
dbContext.Set<Category>().Add(new Category { Number = "20", Name = "电器" });
dbContext.Set<Category>().Add(new Category { Number = "30", Name = "照明" });
dbContext.Set<Category>().Add(new Category { Number = "40", Name = "监测" });
dbContext.SaveChanges();
}
}
}

@ -104,6 +104,7 @@ namespace IoTNode
modelBuilder.Entity<UserRole>().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique();
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
//
modelBuilder.Entity<Category>().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<Device>().HasOne(o => o.Node).WithMany(o => o.Devices).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<Data>().HasOne(o => o.Device).WithMany(o => o.Data).HasForeignKey(o => o.DeviceId);
modelBuilder.Entity<Api>().HasOne(o => o.Device).WithMany(o => o.Apis).HasForeignKey(o => o.DeviceId);

@ -24,16 +24,34 @@ namespace FBeeService
{
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
var deviceInfos = deviceInfoRepo.ReadOnlyTable().ToList();
foreach (var item in deviceInfos)
foreach (var deviceInfo in deviceInfos)
{
this.ClientToServer("UpdateDeviceInfo", item.ToJson());
this.SendDeviceInfo(deviceInfo);
}
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var devices = deviceRepo.ReadOnlyTable().Include(o => o.Data).ToList();
foreach (var item in devices)
foreach (var device in devices)
{
this.ClientToServer("UpdateDevice", item.ToJson());
this.SendDevice(device);
}
}
}
public override void OnServerToClient(string method, string message, string fromConnectionId)
{
if (method == "GetDeviceInfo")
{
var infoNumber = message;
using (var scope = this.applicationServices.CreateScope())
{
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
var deviceInfo = deviceInfoRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == infoNumber);
if (deviceInfo == null)
{
throw new Exception($"not has infoNumber:{infoNumber}");
}
this.SendDeviceInfo(deviceInfo);
}
}
}
@ -45,7 +63,7 @@ namespace FBeeService
try
{
Console.WriteLine("send device to server");
this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson(), null);
this.ClientToServer("UpdateDevice", device.ToJson());
}
catch (Exception ex)
{
@ -54,22 +72,20 @@ namespace FBeeService
});
}
public override void OnServerToClient(string method, string message, string fromConnectionId)
public void SendDeviceInfo(DeviceInfo deviceInfo)
{
if (method == "GetDeviceInfo")
Task.Run(() =>
{
var infoNumber = message;
using (var scope = this.applicationServices.CreateScope())
try
{
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
var deviceInfo = deviceInfoRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == infoNumber);
if (deviceInfo == null)
{
throw new Exception($"not has infoNumber:{infoNumber}");
}
Console.WriteLine("send device to server");
this.ClientToServer("UpdateDeviceInfo", deviceInfo.ToJson());
}
}
catch (Exception ex)
{
ex.PrintStack();
}
});
}
//public override void ConnectionOn()

@ -148,6 +148,7 @@ namespace FBeeService
};
deviceInfoRepo.Add(deviceInfo);
deviceInfoRepo.SaveChanges();
this.SendDeviceInfo(deviceInfo);
}
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
foreach (var result in list)
@ -163,12 +164,16 @@ namespace FBeeService
Number = sn,
Name = "网关",
Enable = true,
Icon = "gateway",
CategoryNumber = "0",
InfoNumber = deviceInfoNumber,
InfoId = deviceInfo.Id
};
deviceRepo.Add(device);
}
device.Ip = ip;
deviceRepo.SaveChanges();
this.SendDevice(device);
}
var gateways = deviceRepo.ReadOnlyTable().Where(o => o.Info.DeviceType == DeviceType.Gateway).ToList();
foreach (var gateway in gateways)
@ -500,10 +505,10 @@ namespace FBeeService
}
deviceInfoRepo.Add(deviceInfo);
deviceInfoRepo.SaveChanges();
this.SendDeviceInfo(deviceInfo);
}
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var device = this.GetDevice(deviceRepo, sn, ieee);
var clientService = scope.ServiceProvider.GetService<ClientService>();
if (device == null)
{
create = true;
@ -542,7 +547,7 @@ namespace FBeeService
{
this.UpdateStatus(device);
}
clientService.SendDevice(device);
this.SendDevice(device);
}
else
{
@ -634,6 +639,7 @@ namespace FBeeService
{
device.AddorUpdateData("State", ms.ReadInt(), DeviceDataType.Int, "状态");
deviceRepo.SaveChanges();
this.SendDevice(device);
}
else
{
@ -680,6 +686,7 @@ namespace FBeeService
{
device.AddorUpdateData(Keys.Brightness, ms.ReadByte(), DeviceDataType.Int, "亮度");
deviceRepo.SaveChanges();
this.SendDevice(device);
}
else
{
@ -724,6 +731,7 @@ namespace FBeeService
{
device.AddorUpdateData(Keys.Hue, ms.ReadByte(), DeviceDataType.Int, "色调");
deviceRepo.SaveChanges();
this.SendDevice(device);
}
else
{
@ -754,6 +762,7 @@ namespace FBeeService
{
device.AddorUpdateData(Keys.Saturation, ms.ReadByte(), DeviceDataType.Int, "饱和度");
deviceRepo.SaveChanges();
this.SendDevice(device);
}
else
{
@ -869,6 +878,7 @@ namespace FBeeService
var compileVersion = ms.ReadHexString(5);
}
gatewayRepo.SaveChanges();
this.SendDevice(gateway);
}
}
}
@ -911,7 +921,9 @@ namespace FBeeService
var device = this.GetDeviceByAddress(deviceRepo, sn, address);
if (device != null)
{
device.AddorUpdateData(Keys.ColorTemperature, ms.ReadInt(), DeviceDataType.Int, "色温"); deviceRepo.SaveChanges();
device.AddorUpdateData(Keys.ColorTemperature, ms.ReadInt(), DeviceDataType.Int, "色温");
deviceRepo.SaveChanges();
this.SendDevice(device);
}
else
{
@ -1248,5 +1260,25 @@ namespace FBeeService
return null;
}
}
public void SendDevice(Device device)
{
Console.WriteLine("send device to server");
using (var scope = _applicationServices.CreateScope())
{
var clientService = scope.ServiceProvider.GetService<ClientService>();
clientService.SendDevice(device);
}
}
public void SendDeviceInfo(DeviceInfo deviceInfo)
{
Console.WriteLine("send device to server");
using (var scope = _applicationServices.CreateScope())
{
var clientService = scope.ServiceProvider.GetService<ClientService>();
clientService.SendDeviceInfo(deviceInfo);
};
}
}
}

@ -3,7 +3,7 @@
ViewBag.HideBread = true;
}
<div class="box">
<a class="btn btn-primary cmd" href="/api/refresh">查询所有网关</a>
<a class="btn btn-primary cmd" href="/Gateway/Refresh">查询所有网关</a>
</div>
<div class="box">
<table class="table table-bordered">

@ -43,7 +43,7 @@ namespace IoTCenter.Services
var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.Number);
if (deviceInfo == null)
{
deviceInfo = new DeviceInfo().From(newDeviceInfo);
deviceInfo = new DeviceInfo().Update(newDeviceInfo);
deviceInfoRepo.Add(deviceInfo);
if (!string.IsNullOrEmpty(deviceInfo.ApiJson))
{
@ -74,6 +74,19 @@ namespace IoTCenter.Services
this.ServerToClient(newDevice.ConnectId, "GetDeviceInfo", newDevice.InfoNumber);
throw new Exception("need device info");
}
var categoryRepo = scope.ServiceProvider.GetService<IRepository<Category>>();
var category = categoryRepo.Table().FirstOrDefault(o => o.Number == newDevice.CategoryNumber);
if (category == null)
{
category = new Category
{
Number = newDevice.CategoryNumber,
Name = newDevice.CategoryNumber
};
categoryRepo.Add(category);
categoryRepo.SaveChanges();
}
var nodeRepo = scope.ServiceProvider.GetService<IRepository<Node>>();
var node = nodeRepo.Table().FirstOrDefault(o => o.Number == newDevice.NodeNumber);
if (node == null)
@ -90,8 +103,9 @@ namespace IoTCenter.Services
var device = deviceRepo.Table().Include(o => o.Data).FirstOrDefault(o => o.Number == newDevice.Number);
if (device == null)
{
device = new Device().From(newDevice);
device = new Device().Update(newDevice);
device.InfoId = deviceInfo.Id;
device.CategoryId = category.Id;
device.NodeId = node.Id;
deviceRepo.Add(device);
}
@ -102,11 +116,11 @@ namespace IoTCenter.Services
var data = device.Data.FirstOrDefault(o => o.Key == newData.Key);
if (data == null)
{
data = new Data().From(data);
data = new Data().Update(data);
data.DeviceId = device.Id;
device.Data.Add(data);
}
data.From(newDevice);
data.UpdateWithoutId(newDevice);
data.DeviceId = device.Id;
}
}

Loading…
Cancel
Save