From 6a32fac05778d175261300d6202d5747ee438cc6 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Wed, 6 May 2020 16:53:56 +0800 Subject: [PATCH] 1.0.0.506 Former-commit-id: 362825eaba3212842fcfde8271b54eb8ed7242dc --- .../Infrastructure/Web/SignalR/BasePageHub.cs | 5 + .../Areas/Admin/Controlls/SharedController.cs | 6 +- .../Services/IoTCenter/IoTCenterHub.cs | 12 +- .../IoTCenter/NodeClientConnectedEvent.cs | 8 + .../Services/IoTNode/IoTNodeClient.cs | 3 +- .../IoTCenter/Application/Domain/Organ.cs | 2 + .../Application/Models/EditOrganModel.cs | 5 + .../Services/IoTCenterEventHandler.cs | 39 +++- projects/IoTCenter/Views/Home/Node.cshtml | 15 +- projects/IoTCenter/db.sql | 3 +- .../wwwroot/pages/iot/device/socket.html | 2 +- .../Areas/Admin/Views/Shared/_Menu.cshtml | 5 +- .../IoTNode/Controllers/HomeController.cs | 31 ++- projects/IoTNode/DbConfig.cs | 1 + .../DeviceServices/BaseDeviceService.cs | 7 +- .../DeviceServices/FBee/FBeeService.cs | 5 +- .../SerialPort/SerialPortService.cs | 5 +- .../IoTNode/Services/IoTNodeEventHandler.cs | 10 +- .../Services/IoTNodeToServerEventHandler.cs | 213 ++++++++++++++++++ projects/IoTNode/Views/Home/Index.cshtml | 18 +- projects/IoTNode/Views/Home/Scenes.cshtml | 53 +++++ projects/IoTNode/Views/Home/Test.cshtml | 0 projects/IoTNode/Views/Shared/_Menu.cshtml | 20 +- projects/IoTNode/db.sql | 4 +- projects/Version.cs | 2 +- 25 files changed, 404 insertions(+), 70 deletions(-) create mode 100644 projects/IoT.Shared/Services/IoTCenter/NodeClientConnectedEvent.cs create mode 100644 projects/IoTNode/Services/IoTNodeToServerEventHandler.cs create mode 100644 projects/IoTNode/Views/Home/Scenes.cshtml delete mode 100644 projects/IoTNode/Views/Home/Test.cshtml diff --git a/projects/Infrastructure/Web/SignalR/BasePageHub.cs b/projects/Infrastructure/Web/SignalR/BasePageHub.cs index 4c75f824..81bf50a3 100644 --- a/projects/Infrastructure/Web/SignalR/BasePageHub.cs +++ b/projects/Infrastructure/Web/SignalR/BasePageHub.cs @@ -28,6 +28,11 @@ namespace Infrastructure.Web.SignalR { Context.Items["type"] = type; } + var organ = Context.GetHttpContext().Request.Query["organ"].ToString(); + if (!string.IsNullOrEmpty(organ)) + { + Context.Items["organ"] = organ; + } this.Clients.Group(Context.ConnectionId).SendAsync("Connected", Context.ConnectionId); } diff --git a/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs b/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs index a1c0eb0a..e61fddb1 100644 --- a/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs +++ b/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs @@ -53,8 +53,6 @@ namespace IoT.Shared.Areas.Admin.Controlls { var dataService = scope.ServiceProvider.GetService(); dataService.Edit(model); - var iotNodeClient = scope.ServiceProvider.GetService(); - iotNodeClient.ClientToServer(method, model, null); } return RedirectTo(); } @@ -95,8 +93,8 @@ namespace IoT.Shared.Areas.Admin.Controlls var model = entity.To(); var dataService = scope.ServiceProvider.GetService(); dataService.Delete(model); - var iotNodeClient = scope.ServiceProvider.GetService(); - iotNodeClient.ClientToServer(method, model, null); + //var iotNodeClient = scope.ServiceProvider.GetService(); + //iotNodeClient.ClientToServer(method, model, null); } } } diff --git a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs index 5fa7d335..d6ca06ce 100644 --- a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs +++ b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs @@ -1,9 +1,11 @@ using Application.Domain.Entities; using Application.Models; using Infrastructure.Data; +using Infrastructure.Events; using Infrastructure.Extensions; using Infrastructure.Web.SignalR; using IoT.Shared.Services; +using IoT.Shared.Services.IoTCenter; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -36,6 +38,7 @@ namespace IoTCenter.Services private readonly IRepository _iotTiggerRepo; private readonly DataService _dataService; private readonly IHttpClientFactory _httpClientFactory; + private readonly IEventPublisher _publisher; public IoTCenterHub(IConfiguration cfg, ILogger logger, @@ -51,7 +54,8 @@ namespace IoTCenter.Services IRepository iotTimerRepo, IRepository iotTiggerRepo, DataService dataService, - IHttpClientFactory httpClientFactory) + IHttpClientFactory httpClientFactory, + IEventPublisher publisher) { this._cfg = cfg; this._logger = logger; @@ -68,6 +72,7 @@ namespace IoTCenter.Services this._iotTiggerRepo = iotTiggerRepo; this._dataService = dataService; this._httpClientFactory = httpClientFactory; + this._publisher = publisher; } public override Task OnConnectedAsync() @@ -97,6 +102,11 @@ namespace IoTCenter.Services try { this._nodeRepo.SaveChanges(); + var organ = Context.Items["organ"] as string; + if (!string.IsNullOrEmpty(organ)) + { + this._publisher.Publish(new NodeClientConnectedEvent { NodeNumber=node.Number,OrganNumber=organ }); + } } catch (Exception ex) { diff --git a/projects/IoT.Shared/Services/IoTCenter/NodeClientConnectedEvent.cs b/projects/IoT.Shared/Services/IoTCenter/NodeClientConnectedEvent.cs new file mode 100644 index 00000000..b771a32a --- /dev/null +++ b/projects/IoT.Shared/Services/IoTCenter/NodeClientConnectedEvent.cs @@ -0,0 +1,8 @@ +namespace IoT.Shared.Services.IoTCenter +{ + public class NodeClientConnectedEvent + { + public string NodeNumber { get; set; } + public string OrganNumber { get; set; } + } +} diff --git a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs index b4028080..f5e31f4a 100644 --- a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs +++ b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs @@ -132,7 +132,8 @@ namespace IoT.Shared.Services private void InitConnection() { this._notifyHost = GetSetting("notify:host"); - var url = $"{this._notifyHost}/hub?type=node&group={GetSetting("sn")}"; + var organ= GetSetting("organ"); + var url = $"{this._notifyHost}/hub?type=node&organ={organ}&group={GetSetting("sn")}"; this._logger.LogDebug($"init connection for {url}"); if (this.Connection != null) { diff --git a/projects/IoTCenter/Application/Domain/Organ.cs b/projects/IoTCenter/Application/Domain/Organ.cs index b1800b71..dd473b75 100644 --- a/projects/IoTCenter/Application/Domain/Organ.cs +++ b/projects/IoTCenter/Application/Domain/Organ.cs @@ -9,6 +9,8 @@ namespace IoTCenter.Application.Domain { public string Name { get; set; } public string Number { get; set; } + [Display(Name = "分类图标")] + public string Image { get; set; } public List OrganNodes { get; set; } = new List(); } } \ No newline at end of file diff --git a/projects/IoTCenter/Application/Models/EditOrganModel.cs b/projects/IoTCenter/Application/Models/EditOrganModel.cs index ada8a4cc..21d4b93c 100644 --- a/projects/IoTCenter/Application/Models/EditOrganModel.cs +++ b/projects/IoTCenter/Application/Models/EditOrganModel.cs @@ -16,6 +16,11 @@ namespace IoTCenter.Application.Models [Required(ErrorMessage = nameof(RequiredAttribute))] public string Number { get; set; } + [Display(Name = "Icon")] + [Required(ErrorMessage = nameof(RequiredAttribute))] + [DataType(DataType.ImageUrl)] + public string Image { get; set; } + [Display(Name = "节点")] [DataType("MultiSelectList")] public List Nodes { get; set; } = new List(); diff --git a/projects/IoTCenter/Services/IoTCenterEventHandler.cs b/projects/IoTCenter/Services/IoTCenterEventHandler.cs index 7679e169..43c83a12 100644 --- a/projects/IoTCenter/Services/IoTCenterEventHandler.cs +++ b/projects/IoTCenter/Services/IoTCenterEventHandler.cs @@ -4,13 +4,14 @@ using CSScriptLib; using Infrastructure.Data; using Infrastructure.Events; using Infrastructure.Extensions; +using IoT.Shared.Services.IoTCenter; +using IoTCenter.Application.Domain; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -42,10 +43,14 @@ namespace IoTCenter.Services IEventHander>, IEventHander>, IEventHander>, - IEventHander> + IEventHander>, + IEventHander { private readonly IConfiguration _cfg; private readonly ILogger _logger; + private readonly IRepository _nodeRepo; + private readonly IRepository _organRepo; + private readonly IRepository _organNodeRepo; private readonly IRepository _sceneRepo; private readonly IRepository _deviceRepo; private readonly IRepository _sceneTiggerRepo; @@ -55,6 +60,9 @@ namespace IoTCenter.Services public IoTCenterEventHandler(IConfiguration cfg, ILogger logger, + IRepository nodeRepo, + IRepository organRepo, + IRepository organNodeRepo, IRepository sceneRepo, IRepository deviceRepo, IRepository sceneTiggerRepo, @@ -64,6 +72,9 @@ namespace IoTCenter.Services { this._cfg = cfg; this._logger = logger; + this._nodeRepo = nodeRepo; + this._organRepo = organRepo; + this._organNodeRepo = organNodeRepo; this._sceneRepo = sceneRepo; this._deviceRepo = deviceRepo; this._sceneTiggerRepo = sceneTiggerRepo; @@ -377,5 +388,29 @@ namespace IoTCenter.Services _ => model.Value, }; } + + public void Handle(NodeClientConnectedEvent message) + { + var organ = this._organRepo.Table().FirstOrDefault(o => o.Number == message.OrganNumber); + if(organ==null) + { + organ = new Organ { + Name=message.OrganNumber, + Number= message.OrganNumber, + Image = "/images/classroom.png" + }; + this._organRepo.Add(organ); + this._organRepo.SaveChanges(); + } + if (!this._organNodeRepo.Table().Any(o => o.Organ.Number == message.OrganNumber && o.Node.Number == message.NodeNumber)) + { + var node = this._nodeRepo.Table().FirstOrDefault(o => o.Number == message.NodeNumber); + if (node != null) + { + this._organNodeRepo.Add(new OrganNode { NodeId=node.Id,OrganId=organ.Id }); + this._organNodeRepo.SaveChanges(); + } + } + } } } \ No newline at end of file diff --git a/projects/IoTCenter/Views/Home/Node.cshtml b/projects/IoTCenter/Views/Home/Node.cshtml index 71466e60..f6835a96 100644 --- a/projects/IoTCenter/Views/Home/Node.cshtml +++ b/projects/IoTCenter/Views/Home/Node.cshtml @@ -5,19 +5,12 @@