From 9d95112d0661cf06a345a07e7514b6cb4dadba80 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Wed, 11 Sep 2019 12:50:19 +0800 Subject: [PATCH] update Former-commit-id: 4903b725c5f21ebbc760a43d4e7b8619dc2352cf --- .../IoT.Shared/Application/Models/Methods.cs | 1 + .../Infrastructure/ClientService.cs | 29 ++++++++++++++-- .../Controllers/IoT/CommandController.cs | 2 ++ .../IoTCenter/Controllers/AppController.cs | 33 ++++++++++++++++--- projects/IoTCenter/wwwroot/home.default.html | 13 +++++--- 5 files changed, 66 insertions(+), 12 deletions(-) diff --git a/projects/IoT/IoT.Shared/Application/Models/Methods.cs b/projects/IoT/IoT.Shared/Application/Models/Methods.cs index 87d2e68a..e5eebd7f 100644 --- a/projects/IoT/IoT.Shared/Application/Models/Methods.cs +++ b/projects/IoT/IoT.Shared/Application/Models/Methods.cs @@ -9,6 +9,7 @@ public const string HealthCheckResponse = nameof(HealthCheckResponse); public const string CallApi = nameof(CallApi); + public const string CallScene = nameof(CallScene); public const string ApiCallback = nameof(ApiCallback); public const string GetProductRequest = nameof(GetProductRequest); diff --git a/projects/IoT/IoT.Shared/Infrastructure/ClientService.cs b/projects/IoT/IoT.Shared/Infrastructure/ClientService.cs index 7308bfc3..b2cee869 100644 --- a/projects/IoT/IoT.Shared/Infrastructure/ClientService.cs +++ b/projects/IoT/IoT.Shared/Infrastructure/ClientService.cs @@ -98,14 +98,37 @@ namespace IoT.Shared.Infrastructure } else if (method == Methods.CallApi) { - var serviceProvider = scope.ServiceProvider; - var cfg = serviceProvider.GetService(); + var cfg = scope.ServiceProvider.GetService(); var port = cfg["server.urls"].Split(':')[2]; var url = $"http://localhost:{port}{message}"; - var httpClient = serviceProvider.GetService().CreateClient(); + var httpClient = scope.ServiceProvider.GetService().CreateClient(); var result = httpClient.GetStringAsync(url).Result; this.Connection.SendAsync(Methods.ClientToServer, Methods.ApiCallback, result, cfg["connectId"]); } + else if (method == Methods.CallScene) + { + var commandRepo = scope.ServiceProvider.GetService>(); + var commands = commandRepo.ReadOnlyTable() + .Include(o => o.Api) + .Include(o => o.Device) + .Where(o => o.Scene.Name == message) + .ToList(); + foreach (var command in commands) + { + try + { + var cfg = scope.ServiceProvider.GetService(); + var port = cfg["server.urls"].Split(':')[2]; + var url = $"http://localhost:{port}{command.Api.Path}{command.Api.Command}?number={command.Device.Number}{(string.IsNullOrEmpty(command.QueryString)?"":"&")}{command.QueryString}"; + var httpClient = scope.ServiceProvider.GetService().CreateClient(); + var result = httpClient.GetStringAsync(url).Result; + } + catch (Exception ex) + { + ex.PrintStack(); + } + } + } else if (method == Methods.EditNodeRequest) { var model = message.FromJson(); diff --git a/projects/IoTCenter/Areas/Admin/Controllers/IoT/CommandController.cs b/projects/IoTCenter/Areas/Admin/Controllers/IoT/CommandController.cs index e7b73aa6..7ae5f69d 100644 --- a/projects/IoTCenter/Areas/Admin/Controllers/IoT/CommandController.cs +++ b/projects/IoTCenter/Areas/Admin/Controllers/IoT/CommandController.cs @@ -117,6 +117,8 @@ namespace IoTCenter.Areas.Admin.Controllers { model.NodeId = entity.Scene.NodeId; model.DeviceId = entity.DeviceId; + model.NodeNumber = entity.Scene.Node.Number; + model.DeviceNumber = entity.Device.Number; } ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId)); ViewData.SelectList(o => model.SceneId, () => this._ajax.GetSceneSelectList(model.NodeId.Value, model.SceneId), model.NodeId.HasValue); diff --git a/projects/IoTCenter/Controllers/AppController.cs b/projects/IoTCenter/Controllers/AppController.cs index e732bf68..dd5a8a7c 100644 --- a/projects/IoTCenter/Controllers/AppController.cs +++ b/projects/IoTCenter/Controllers/AppController.cs @@ -25,6 +25,7 @@ namespace IoTCenter.Controllers private readonly IConfiguration _configuration; private readonly IJwtHelper _jwtHelper; private readonly IRepository _nodeRepo; + private readonly IRepository _sceneRepo; private readonly IRepository _deviceRepo; private readonly IRepository _liveRecordRepo; private readonly IHubContext _pageHubContext; @@ -32,6 +33,7 @@ namespace IoTCenter.Controllers public AppController(IConfiguration configuration, IJwtHelper jwtHelper, IRepository nodeRepo, + IRepository sceneRepo, IRepository deviceRepo, IRepository liveRecordRepo, IHubContext pageHubContext) @@ -39,6 +41,7 @@ namespace IoTCenter.Controllers this._configuration = configuration; this._jwtHelper = jwtHelper; this._nodeRepo = nodeRepo; + this._sceneRepo = sceneRepo; this._deviceRepo = deviceRepo; this._liveRecordRepo = liveRecordRepo; this._pageHubContext = pageHubContext; @@ -133,11 +136,12 @@ namespace IoTCenter.Controllers } } - public IActionResult Sence(string connectionId, string node, Guid id) + public IActionResult Scene(string connectionId, string node, string name) { try { - this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.Scene), connectionId, id); + var scene = this._sceneRepo.ReadOnlyTable().FirstOrDefault(o => o.Node.Number == node && o.Name == name); + this._pageHubContext.Clients.Group(node).SendAsync(Methods.ServerToClient, Methods.CallScene, name, null); return Json(ApiResponse.AsyncSuccess()); } catch (Exception ex) @@ -240,6 +244,18 @@ namespace IoTCenter.Controllers return Json(ApiResponse.AsyncSuccess()); } + public IActionResult NodePowerOn(string connectionId, string node) + { + this.Power(connectionId, new string[] { node }, "On", o => o.Name.Contains("开关") || o.Name.Contains("插座")); + return Json(ApiResponse.AsyncSuccess()); + } + + public IActionResult NodePowerOff(string connectionId, string node) + { + this.Power(connectionId, new string[] { node }, "Off", o => o.Name.Contains("开关") || o.Name.Contains("插座")); + return Json(ApiResponse.AsyncSuccess()); + } + private void Power(string connectionId, string[] nodes, string command, Func func) { var devices = this._deviceRepo.ReadOnlyTable() @@ -250,9 +266,16 @@ namespace IoTCenter.Controllers .ToList(); foreach (var device in devices) { - var api = device.Product.Apis.FirstOrDefault(o => o.Command == command); - var message = $"{api.Path}{api.Command}?number={device.Number}"; - this._pageHubContext.Clients.Group(device.Node.Number).SendAsync(Methods.ServerToClient, Methods.CallApi, message, connectionId); + try + { + var api = device.Product.Apis.FirstOrDefault(o => o.Command == command); + var message = $"{api.Path}{api.Command}?number={device.Number}"; + this._pageHubContext.Clients.Group(device.Node.Number).SendAsync(Methods.ServerToClient, Methods.CallApi, message, connectionId); + } + catch (Exception ex) + { + ex.PrintStack(); + } } } } diff --git a/projects/IoTCenter/wwwroot/home.default.html b/projects/IoTCenter/wwwroot/home.default.html index 42b14685..158255bb 100644 --- a/projects/IoTCenter/wwwroot/home.default.html +++ b/projects/IoTCenter/wwwroot/home.default.html @@ -75,17 +75,17 @@