Former-commit-id: 11d028055dc9d7897f94489569d61f20cc741bb4
TangShanKaiPing
wanggang 6 years ago
parent 703df4f7bc
commit 4492d21c45

@ -32,14 +32,9 @@ namespace Infrastructure.Extensions
return (T)(Activator.CreateInstance(typeof(T)).InjectFrom<NullableInjection>(source));
}
public static T Update<T>(this T target, object source)
public static T Update<T>(this T target, object source, params string[] skips)
{
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);
return (T)target.InjectFrom(new PlainInjection(skips), source);
}
}

@ -18,12 +18,12 @@ namespace Application.Domain.Entities
/// <summary>
/// 场景Id
/// </summary>
public Guid SenceId { get; set; }
public Guid SceneId { get; set; }
/// <summary>
/// 场景
/// </summary>
public Sence Sence { get; set; }
public Scene Scene { get; set; }
/// <summary>
/// API Id
@ -34,5 +34,15 @@ namespace Application.Domain.Entities
/// API
/// </summary>
public Api Api { get; set; }
/// <summary>
/// API Id
/// </summary>
public Guid DeviceId { get; set; }
/// <summary>
/// API
/// </summary>
public Device Device { get; set; }
}
}

@ -75,6 +75,9 @@ namespace Application.Domain.Entities
[Display(Name = "数据")]
public List<Data> Data { get; set; } = new List<Data>();
[Display(Name = "命令")]
public List<Command> Commands { get; set; } = new List<Command>();
public Data GetData(string key)
{
return this.Data.FirstOrDefault(o => o.Key == key);

@ -28,6 +28,6 @@ namespace Application.Domain.Entities
/// <summary>
/// 场景
/// </summary>
public List<Sence> Sences { get; set; } = new List<Sence>();
public List<Scene> Scenes { get; set; } = new List<Scene>();
}
}

@ -5,20 +5,19 @@ using Infrastructure.Domain;
namespace Application.Domain.Entities
{
/// <summary>
/// 场景
/// </summary>
[Display(Name = "场景")]
public class Sence : BaseEntity, IDisableRemove
public class Scene : BaseEntity, IDisableRemove
{
/// <summary>
/// 名称
/// </summary>
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// 节点Id
/// </summary>
[Display(Name = "启用定时")]
public bool Timed { get; set; }
[Display(Name = "定时表达式")]
public string Corn { get; set; }
[Display(Name = "节点Id")]
public Guid NodeId { get; set; }
/// <summary>

@ -7,6 +7,6 @@ namespace Application.Models
{
public Node Node { get; set; } = new Node();
public List<Device> Devices { get; set; } = new List<Device>();
public List<Sence> Sences { get; set; } = new List<Sence>();
public List<Scene> Scenes { get; set; } = new List<Scene>();
}
}

@ -150,8 +150,8 @@ namespace Application.Services
{
using (var scope = applicationServices.CreateScope())
{
var repo = scope.ServiceProvider.GetService<IRepository<Sence>>();
var entity = new Sence().From(model);
var repo = scope.ServiceProvider.GetService<IRepository<Scene>>();
var entity = new Scene().From(model);
repo.Add(entity);
if (repo.SaveChanges() > 0)
{
@ -176,7 +176,7 @@ namespace Application.Services
{
using (var scope = applicationServices.CreateScope())
{
var repo = scope.ServiceProvider.GetService<IRepository<Sence>>();
var repo = scope.ServiceProvider.GetService<IRepository<Scene>>();
var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id);
entity.From(model);
if (repo.SaveChanges() > 0)
@ -202,7 +202,7 @@ namespace Application.Services
{
using (var scope = applicationServices.CreateScope())
{
var repo = scope.ServiceProvider.GetService<IRepository<Sence>>();
var repo = scope.ServiceProvider.GetService<IRepository<Scene>>();
var entity = repo.Table().FirstOrDefault(o => o.Id == id);
if (entity != null)
{
@ -367,7 +367,7 @@ namespace Application.Services
using (var scope = applicationServices.CreateScope())
{
var httpClientFactory = scope.ServiceProvider.GetService<IHttpClientFactory>();
var senceRepo = scope.ServiceProvider.GetService<IRepository<Sence>>();
var senceRepo = scope.ServiceProvider.GetService<IRepository<Scene>>();
var sence = senceRepo.ReadOnlyTable()
.Include(o => o.Commands)
.ThenInclude(o => o.Api)
@ -507,7 +507,7 @@ namespace Application.Services
Console.WriteLine("PushSenceAndDevice");
var schoolUrl = $"http://{configuration["notify:host"]}/Notify/Update";
var nodeRepo = scope.ServiceProvider.GetService<IRepository<Node>>();
var node = nodeRepo.ReadOnlyTable().Include(o => o.Sences).Include(o => o.Devices).FirstOrDefault();
var node = nodeRepo.ReadOnlyTable().Include(o => o.Scenes).Include(o => o.Devices).FirstOrDefault();
var data = node.ToJson();
var httpClientFactory = scope.ServiceProvider.GetService<IHttpClientFactory>();
var task = httpClientFactory.CreateClient().PostAsync(schoolUrl, new StringContent(data));

@ -15,13 +15,13 @@ namespace IoTShared.Controllers
{
private readonly ILogger<AjaxController> _logger;
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Api> _apiRepo;
public AjaxController(ILogger<AjaxController> logger,
IRepository<Node> nodeRepo,
IRepository<Sence> senceRepo,
IRepository<Scene> senceRepo,
IRepository<Device> deviceRepo,
IRepository<Api> apiRepo)
{

@ -90,6 +90,9 @@ namespace IoT.UI.Shard
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<Command>().HasOne(o => o.Scene).WithMany(o => o.Commands).HasForeignKey(o => o.SceneId);
modelBuilder.Entity<Command>().HasOne(o => o.Api).WithMany(o => o.Commands).HasForeignKey(o => o.ApiId);
modelBuilder.Entity<Command>().HasOne(o => o.Device).WithMany(o => o.Commands).HasForeignKey(o => o.DeviceId);
}
public override void Seed(DbContext dbContext, IServiceProvider serviceProvider, IConfiguration configuration)

@ -21,14 +21,14 @@ namespace IoTNode.Areas.Admin.Controllers
public class CommandController : CrudController<Command, PagedListModel<DisplayCommandModel>, DisplayCommandModel, EditCommandModel>
{
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
private readonly IRepository<Api> _apiRepo;
private readonly IRepository<Command> _repo;
private readonly AjaxController _ajax;
private readonly INodeService _nodeService;
public CommandController(IRepository<Node> nodeRepo,
IRepository<Sence> senceRepo,
IRepository<Scene> senceRepo,
IRepository<Api> apiRepo,
IRepository<Command> repo,
AjaxController ajax,
@ -85,7 +85,7 @@ namespace IoTNode.Areas.Admin.Controllers
public override IQueryable<Command> Include(IQueryable<Command> query)
{
return query.Include(o => o.Sence).Include(o => o.Api).ThenInclude(o => o.Device).ThenInclude(o => o.Node);
return query.Include(o => o.Scene).Include(o => o.Api).ThenInclude(o => o.Device).ThenInclude(o => o.Node);
}
public override void ToDisplayModel(Command entity, DisplayCommandModel model)
@ -93,7 +93,7 @@ namespace IoTNode.Areas.Admin.Controllers
model.NodeId = entity.Api.Device.Node.Name;
model.DeviceId = entity.Api.Device.DisplayName;
model.ApiId = entity.Api.Name;
model.SenceId = entity.Sence.Name;
model.SenceId = entity.Scene.Name;
}
public override void ToModel(Command entity, EditCommandModel model)

@ -17,14 +17,14 @@ namespace IoTNode.Areas.Admin.Controllers
{
[Authorize]
[Area(nameof(Admin))]
public class SenceController : CrudController<Sence, PagedListModel<DisplaySenceModel>, DisplaySenceModel, EditSenceModel>
public class SenceController : CrudController<Scene, PagedListModel<DisplaySenceModel>, DisplaySenceModel, EditSenceModel>
{
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Sence> _repo;
private readonly IRepository<Scene> _repo;
private readonly AjaxController _ajax;
private readonly INodeService _nodeService;
public SenceController(IRepository<Node> nodeRepo, IRepository<Sence> repo, AjaxController ajax, INodeService nodeService) : base(repo)
public SenceController(IRepository<Node> nodeRepo, IRepository<Scene> repo, AjaxController ajax, INodeService nodeService) : base(repo)
{
this._repo = repo;
this._nodeRepo = nodeRepo;
@ -32,17 +32,17 @@ namespace IoTNode.Areas.Admin.Controllers
this._nodeService = nodeService;
}
public override IQueryable<Sence> Include(IQueryable<Sence> query)
public override IQueryable<Scene> Include(IQueryable<Scene> query)
{
return query.Include(o => o.Node);
}
public override void ToDisplayModel(Sence entity, DisplaySenceModel model)
public override void ToDisplayModel(Scene entity, DisplaySenceModel model)
{
model.NodeId = entity.Node.Name;
}
public override void ToModel(Sence entity, EditSenceModel model)
public override void ToModel(Scene entity, EditSenceModel model)
{
ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId));
base.ToModel(entity, model);

@ -64,7 +64,7 @@ namespace IoTCenter.Controllers
{
//var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Sences)
.Include(o => o.Scenes)
.Include(o => o.Devices).ThenInclude(o => o.Data)
.FirstOrDefault(o => o.Number == number);
return Json(model, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });

@ -17,13 +17,13 @@ namespace IoTNode.Controllers
private readonly ILogger<CommandController> _logger;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
private readonly INodeService _nodeService;
public CommandController(ILogger<CommandController> logger,
IHttpClientFactory httpClientFactory,
IRepository<Device> deviceRepo,
IRepository<Sence> senceRepo,
IRepository<Scene> senceRepo,
INodeService nodeService)
{
this._logger = logger;

@ -36,7 +36,7 @@ namespace IoTNode.Controllers
public IActionResult GetNode(Guid id)
{
var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Sences)
.Include(o => o.Scenes)
.Include(o => o.Devices).ThenInclude(o => o.Data)
.Include(o => o.Devices).ThenInclude(o => o.Apis).ThenInclude(o => o.Parameters)
.FirstOrDefault(o => o.Id == id);

@ -26,7 +26,7 @@ namespace IoTNode.Controllers
private readonly IHubContext<PageHub> _pageHubContext;
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
public NotifyController(ILogger<NotifyController> logger,
IConfiguration configuration,
@ -35,7 +35,7 @@ namespace IoTNode.Controllers
IHubContext<PageHub> pageHubContext,
IRepository<Node> nodeRepo,
IRepository<Device> deviceRepo,
IRepository<Sence> senceRepo)
IRepository<Scene> senceRepo)
{
this._logger = logger;
this._configuration = configuration;

@ -109,8 +109,8 @@ namespace IoTNode
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<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<Scene>().HasOne(o => o.Node).WithMany(o => o.Scenes).HasForeignKey(o => o.NodeId);
modelBuilder.Entity<Command>().HasOne(o => o.Scene).WithMany(o => o.Commands).HasForeignKey(o => o.SceneId);
modelBuilder.Entity<Node>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Device>().HasIndex(o => o.Number).IsUnique();
modelBuilder.Entity<Data>().HasIndex(o => new { o.DeviceId, o.Key }).IsUnique();

@ -19,14 +19,14 @@ namespace IoTCenter.Areas.Admin.Controllers
{
[Authorize]
[Area(nameof(Admin))]
public class SenceController : CrudController<Sence, PagedListModel<DisplaySenceModel>, DisplaySenceModel, EditSenceModel>
public class SenceController : CrudController<Scene, PagedListModel<DisplaySenceModel>, DisplaySenceModel, EditSenceModel>
{
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Sence> _repo;
private readonly IRepository<Scene> _repo;
private readonly AjaxController _ajax;
private readonly IHubContext<PageHub> _pageHubContext;
public SenceController(IRepository<Node> nodeRepo, IRepository<Sence> repo, AjaxController ajax, IHubContext<PageHub> pageHubContext) : base(repo)
public SenceController(IRepository<Node> nodeRepo, IRepository<Scene> repo, AjaxController ajax, IHubContext<PageHub> pageHubContext) : base(repo)
{
this._repo = repo;
this._nodeRepo = nodeRepo;
@ -34,12 +34,12 @@ namespace IoTCenter.Areas.Admin.Controllers
this._pageHubContext = pageHubContext;
}
public override IQueryable<Sence> Include(IQueryable<Sence> query)
public override IQueryable<Scene> Include(IQueryable<Scene> query)
{
return query.Include(o => o.Node);
}
public override void ToDisplayModel(Sence entity, DisplaySenceModel model)
public override void ToDisplayModel(Scene entity, DisplaySenceModel model)
{
model.NodeId = entity.Node.Name;
}
@ -87,7 +87,7 @@ namespace IoTCenter.Areas.Admin.Controllers
return RedirectTo();
}
public override void ToModel(Sence entity, EditSenceModel model)
public override void ToModel(Scene entity, EditSenceModel model)
{
ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId));
base.ToModel(entity, model);

@ -19,13 +19,13 @@ namespace IoTCenter.Controllers
private readonly ILogger<CommandController> _logger;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
private readonly IHubContext<PageHub> _pageHubContext;
public CommandController(ILogger<CommandController> logger,
IHttpClientFactory httpClientFactory,
IRepository<Device> deviceRepo,
IRepository<Sence> senceRepo,
IRepository<Scene> senceRepo,
IHubContext<PageHub> pageHubContext)
{
this._logger = logger;

@ -43,7 +43,7 @@ namespace IoTCenter.Controllers
public IActionResult GetNode(Guid id)
{
var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Sences)
.Include(o => o.Scenes)
.Include(o => o.Devices).ThenInclude(o => o.Data)
//.Include(o => o.Devices).ThenInclude(o => o.Apis).ThenInclude(o => o.Parameters)
.FirstOrDefault(o => o.Id == id);

@ -29,7 +29,7 @@ namespace IoTCenter.Controllers
private readonly IHubContext<PageHub> _pageHubContext;
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Sence> _senceRepo;
private readonly IRepository<Scene> _senceRepo;
public NotifyController(ILogger<NotifyController> logger,
IConfiguration configuration,
@ -38,7 +38,7 @@ namespace IoTCenter.Controllers
IHubContext<PageHub> pageHubContext,
IRepository<Node> nodeRepository,
IRepository<Device> deviceReposigory,
IRepository<Sence> senceRepository)
IRepository<Scene> senceRepository)
{
this._logger = logger;
this._configuration = configuration;
@ -230,7 +230,7 @@ namespace IoTCenter.Controllers
{
var model = this.ReadPostData();
var newNode = model.FromJson<Node>();
var node = this._nodeRepo.Table().Include(o => o.Sences).Include(o => o.Devices).FirstOrDefault(o => o.Number == newNode.Number);
var node = this._nodeRepo.Table().Include(o => o.Scenes).Include(o => o.Devices).FirstOrDefault(o => o.Number == newNode.Number);
if (node != null && node.Id != newNode.Id)
{
this._nodeRepo.Delete(node);
@ -244,22 +244,22 @@ namespace IoTCenter.Controllers
}
node.FromPlain(newNode);
this._nodeRepo.SaveChanges();
foreach (var id in node.Sences.Select(o => o.Id).ToList())
foreach (var id in node.Scenes.Select(o => o.Id).ToList())
{
if (!newNode.Sences.Any(o => o.Id == id))
if (!newNode.Scenes.Any(o => o.Id == id))
{
node.Sences.Remove(node.Sences.FirstOrDefault(o => o.Id == id));
node.Scenes.Remove(node.Scenes.FirstOrDefault(o => o.Id == id));
this._nodeRepo.SaveChanges();
this._pageHubContext.Clients.Group("page").SendAsync("DeleteSence", id.ToString());
}
}
foreach (var newSence in newNode.Sences)
foreach (var newSence in newNode.Scenes)
{
var sence = node.Sences.FirstOrDefault(o => o.Id == newSence.Id);
var sence = node.Scenes.FirstOrDefault(o => o.Id == newSence.Id);
if (sence == null)
{
sence = new Sence();
node.Sences.Add(sence);
sence = new Scene();
node.Scenes.Add(sence);
}
sence.FromPlain(newSence);
this._nodeRepo.SaveChanges();

@ -116,11 +116,11 @@ namespace IoTCenter.Services
var data = device.Data.FirstOrDefault(o => o.Key == newData.Key);
if (data == null)
{
data = new Data().Update(data);
data = new Data().Update(newData);
data.DeviceId = device.Id;
device.Data.Add(data);
}
data.UpdateWithoutId(newDevice);
data.Update(newData, "Id", "UpdatedOn");
data.DeviceId = device.Id;
}
}

@ -1,11 +1,11 @@
using System;
using System.Linq;
using Application.Models;
using Application.Models;
using Infrastructure.Extensions;
using Infrastructure.Web.SignalR;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Raven.Embedded;
using System;
using System.Linq;
using UserCenter.Services;
namespace UserCenter.Controllers
{

@ -0,0 +1,8 @@
using Infrastructure.Web.SignalR;
namespace UserCenter.Services
{
public class PageHub : BasePageHub
{
}
}
Loading…
Cancel
Save