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)); 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 public class NullableInjection : LoopInjection
@ -86,15 +96,11 @@ namespace Infrastructure.Extensions
{ {
return false; return false;
} }
return sourceType == targetType; return base.MatchTypes(sourceType, targetType);
} }
protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp) 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 != null && this._skip.Length > 0)
{ {
if (this._skip.Contains(sp.Name)) if (this._skip.Contains(sp.Name))

@ -30,7 +30,7 @@ namespace Infrastructure.Web.SignalR
Clients.Group(group).SendAsync(method, message, fromConnectinId); 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 = "型号")] [Display(Name = "型号")]
public string InfoNumber { get; set; } public string InfoNumber { get; set; }
[Display(Name = "分类Id")]
public Guid? CategoryId { get; set; }
[Display(Name = "分类")]
public Category Category { get; set; }
[Display(Name = "节点Id")] [Display(Name = "节点Id")]
public Guid? NodeId { get; set; } 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(() => Task.Run(() =>
{ {
try try
{ {
this.Connection.SendAsync("ClientToServer", method, message); this.Connection.SendAsync("OnClientToServer", method, message, fromConnectionId);
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -82,17 +82,14 @@ namespace IoT.UI.Shard
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique(); modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).IsUnique();
// //
modelBuilder.Entity<Node>().HasIndex(o => o.Number).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<DeviceInfo>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Api>().HasOne(o => o.Info).WithMany(o => o.Apis).HasForeignKey(o => o.InfoId); 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<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<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<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) 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 } } UserRoles = new List<UserRole> { new UserRole { Role = adminRole } }
}); });
dbContext.SaveChanges(); 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<UserRole>().HasIndex(o => new { o.UserId, o.RoleId }).IsUnique();
modelBuilder.Entity<RolePermission>().HasIndex(o => new { o.RoleId, o.PermissionId }).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<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<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); 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 deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
var deviceInfos = deviceInfoRepo.ReadOnlyTable().ToList(); 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 deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var devices = deviceRepo.ReadOnlyTable().Include(o => o.Data).ToList(); 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 try
{ {
Console.WriteLine("send device to server"); Console.WriteLine("send device to server");
this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson(), null); this.ClientToServer("UpdateDevice", device.ToJson());
} }
catch (Exception ex) 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; try
using (var scope = this.applicationServices.CreateScope())
{ {
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>(); Console.WriteLine("send device to server");
var deviceInfo = deviceInfoRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == infoNumber);
if (deviceInfo == null)
{
throw new Exception($"not has infoNumber:{infoNumber}");
}
this.ClientToServer("UpdateDeviceInfo", deviceInfo.ToJson()); this.ClientToServer("UpdateDeviceInfo", deviceInfo.ToJson());
} }
} catch (Exception ex)
{
ex.PrintStack();
}
});
} }
//public override void ConnectionOn() //public override void ConnectionOn()

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

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

Loading…
Cancel
Save