Former-commit-id: 9427f50189b771723e1e89525609009d938f1eb8
TangShanKaiPing
wanggang 5 years ago
parent a58eae7e12
commit 7ab8d1ad08

@ -1,7 +1,10 @@
using Application.Domain.Entities;
using Application.Models;
using Infrastructure.Data;
using Infrastructure.Extensions;
using IoTCenter.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
@ -19,16 +22,19 @@ namespace UserCenter.Controllers
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<NodeCategory> _nodeCategoryRepo;
private readonly IRepository<Device> _deviceRepo;
private readonly IHubContext<IoTCenterHub> _hub;
public NodeController(IConfiguration cfg,
IRepository<Node> nodeRepo,
IRepository<NodeCategory> nodeCategoryRepo,
IRepository<Device> deviceRepo)
IRepository<Device> deviceRepo,
IHubContext<IoTCenterHub> hub)
{
this._cfg = cfg;
this._nodeRepo = nodeRepo;
this._nodeCategoryRepo = nodeCategoryRepo;
this._deviceRepo = deviceRepo;
this._hub = hub;
}
[HttpPost]
@ -75,5 +81,46 @@ namespace UserCenter.Controllers
return Problem(ex.Message);
}
}
[HttpPost]
public ActionResult PowerOn([FromBody][Required]string number)
{
return this.Power(number, "On");
}
[HttpPost]
public ActionResult PowerOff([FromBody][Required]string number)
{
return this.Power(number, "Off");
}
private ActionResult Power(string number, string command)
{
var devices = this._deviceRepo.ReadOnlyTable()
.Include(o => o.Node)
.Include(o => o.Product)
.ThenInclude(o => o.Apis)
.Where(o => o.Node.Number == number)
.Where(o => o.Name.Contains("开关") || o.Name.Contains("插座"))
.ToList();
foreach (var device in devices)
{
try
{
var api = device.Product.Apis.FirstOrDefault(o => o.Command == command);
if (api != null)
{
var message = $"{api.Path}{api.Command}?number={device.Number}";
this._hub.ServerToClient(Methods.ExecApiRequest, message, device.Node.Number, null);
}
}
catch (Exception ex)
{
ex.PrintStack();
}
}
return Ok();
}
}
}

@ -35,7 +35,63 @@
@section scripts{
<script>
var baseUrl = '@Url.Content("~")';
var hubUrl = "@Url.Content("~")/hub?group=page";
var onMessage = null;
</script>
<script src="~/lib/WXInlinePlayer/index.js"></script>
<script src="~/js/util.js"></script>
<script src="~/js/iot.js"></script>
<script src="~/js/message.js"></script>
<script>
var app = new Vue({
el: '#app',
data() {
return {
title: "产品",
url: '/api/v1/node/getNodes',
model: []
};
},
mounted: function () {
connect();
this.load();
},
methods: {
load: function () {
var vm = this;
axios.post(baseUrl + '/api/v1/node/getNodes').then(function (response) {
vm.model = response.data;
});
},
GetNodes() {
return Enumerable.from(this.model).orderBy('o=>o.displayOrder').toArray();
},
SelectNode: Select,
Power(method) {
var numbers = [];
$('.item:checked').each(function () {
numbers.push($(this).val());
});
if (numbers.length) {
for (var i = 0; i < numbers.length; i++) {
nodePower(numbers[i], method);
}
}
else {
toastr.error('没有选中任何项');
}
}
}
});
onMessage = function (method, json, to, from) {
var item = JSON.parse(json);
if (method === 'NodeEntityInserted' ||
method === 'NodeEntityUpdated' ||
method === 'NodeEntityDeleted' ||
method === 'DeviceEntityInserted' ||
method === 'DeviceEntityDeleted') {
loadData();
}
}
</script>
<script src="~/js/page.js"></script>
<script src="~/js/nodes.js"></script>
}

@ -136,6 +136,8 @@
for (var i = 0; i < numbers.length; i++) {
execApi(numbers[i], this.product.path + method, null);
}
} else {
toastr.error('没有选中任何项');
}
}
}

@ -88,6 +88,20 @@ function execScene(id) {
loading.show();
});
}
function nodePower(number,command) {
loading.show();
axios.post('/IoTCenter/api/v1/node/power'+command, '"' + number + '"', { headers: { 'Content-Type': 'application/json;charset=UTF-8' } })
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.finally(function () {
loading.show();
});
}
//
function Select(e) {
var checkbox = $(e.target);

Loading…
Cancel
Save