Former-commit-id: e554d2170dfdff4618c660ad48202fd3cdbaedb0
TangShanKaiPing
wanggang 6 years ago
parent 0b80a76b26
commit 0a7b8a2990

@ -52,10 +52,7 @@ namespace Infrastructure.Extensions
protected override void SetValue(object source, object target, PropertyInfo sp, PropertyInfo tp)
{
if (!sp.CustomAttributes.Any(o => o.AttributeType == typeof(ReadOnlyAttribute)))
{
base.SetValue(source, target, sp, tp);
}
base.SetValue(source, target, sp, tp);
}
}

@ -9,15 +9,15 @@ namespace Application.Domain.Entities
[Display(Name = "设备")]
public class Device : BaseEntity
{
[Display(Name = "网关编号")]
public string Gateway { get; set; }
[Display(Name = "名称")]
public string Name { get; set; }
[Display(Name = "编号")]
public string Number { get; set; }
[Display(Name = "网关编号")]
public string Gateway { get; set; }
[Display(Name = "显示名称")]
public string DisplayName { get; set; }

@ -1,4 +1,6 @@
using Infrastructure.Application;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Application.Models
@ -6,21 +8,15 @@ namespace Application.Models
[Display(Name = "设备")]
public class EditDeviceModel : EditModel
{
[Display(Name = "节点编号")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string NodeNumber { get; set; }
[Display(Name = "型号")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string InfoNumber { get; set; }
[Display(Name = "网关编号")]
public string GatewayNumber { get; set; }
[HiddenInput(DisplayValue = false)]
[ScaffoldColumn(true)]
public string ProductNumber { get; set; }
[Display(Name = "分类编号")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string CategoryNumber { get; set; }
[HiddenInput(DisplayValue = false)]
[ScaffoldColumn(true)]
public string NodeNumber { get; set; }
[ReadOnly(true)]
[Display(Name = "名称")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Name { get; set; }
@ -28,24 +24,27 @@ namespace Application.Models
[Display(Name = "显示名称")]
public string DisplayName { get; set; }
[Display(Name = "标记")]
public string Tag { get; set; }
[Display(Name = "用户名")]
public string UserName { get; set; }
[Display(Name = "密码")]
public string Password { get; set; }
[Display(Name = "启用")]
public bool Enable { get; set; }
[ReadOnly(true)]
[Display(Name = "编号")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
public string Number { get; set; }
[ReadOnly(true)]
[Display(Name = "在线状态")]
public bool IsOnline { get; set; }
[Display(Name = "连接Id")]
[Required(ErrorMessage = nameof(RequiredAttribute))]
[ReadOnly(true)]
public string ConnectId { get; set; }
}
}

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace IoT.Shared.Application.Models
namespace IoT.Shared.Application.Models
{
public class Methods
{
@ -26,5 +22,11 @@ namespace IoT.Shared.Application.Models
public const string EditNodeRequest = nameof(EditNodeRequest);
public const string EditNodeResponse = nameof(EditNodeResponse);
public const string EditDeviceRequest = nameof(EditDeviceRequest);
public const string EditDeviceResponse = nameof(EditDeviceResponse);
public const string DeleteDeviceRequest = nameof(DeleteDeviceRequest);
public const string DeleteDeviceResponse = nameof(DeleteDeviceResponse);
}
}

@ -114,6 +114,38 @@ namespace IoT.Shared.Infrastructure
}
}
}
else if (method == Methods.EditDeviceRequest)
{
var model = message.FromJson<DeviceDto>();
using (var scope = this.applicationServices.CreateScope())
{
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var device = deviceRepo.Table().FirstOrDefault(o => o.Number == model.Number);
if (device != null)
{
device.From(model);
deviceRepo.SaveChanges();
var deviceDto = device.To<DeviceDto>();
deviceDto.NodeNumber = model.NodeNumber;
deviceDto.ProductNumber = model.ProductNumber;
this.ClientToServer(Methods.EditDeviceResponse, deviceDto.ToJson());
}
}
}
else if (method == Methods.DeleteDeviceRequest)
{
using (var scope = this.applicationServices.CreateScope())
{
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var device = deviceRepo.Table().FirstOrDefault(o => o.Number == message);
if (device != null)
{
deviceRepo.Delete(device);
deviceRepo.SaveChanges();
this.ClientToServer(Methods.DeleteDeviceResponse, message);
}
}
}
}
public void SendNode(NodeDto node)

@ -1,9 +1,18 @@
using Application.Domain.Entities;
using Application.Models;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Infrastructure.Web.Mvc;
using IoT.Shared.Application.Models;
using IoTCenter.Services;
using IoTShared.Controllers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
namespace IoTCenter.Areas.Admin.Controllers
{
@ -11,8 +20,62 @@ namespace IoTCenter.Areas.Admin.Controllers
[Area(nameof(Admin))]
public class DeviceController : CrudController<Device, DeviceSearchMode, EditDeviceModel, EditDeviceModel>
{
public DeviceController(IRepository<Device> repo) : base(repo)
private readonly AjaxController _ajax;
private readonly IHubContext<PageHub> _pageHubContext;
public DeviceController(IRepository<Device> repo, AjaxController ajax, IHubContext<PageHub> pageHubContext) : base(repo)
{
this._ajax = ajax;
this._pageHubContext = pageHubContext;
}
public override IQueryable<Device> Include(IQueryable<Device> query)
{
return query.Include(o => o.Product).Include(o => o.Node);
}
public override IQueryable<Device> Query(DeviceSearchMode model, IQueryable<Device> query)
{
ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId));
return query.WhereIf(model.NodeId.HasValue, o => o.NodeId == model.NodeId.Value)
.WhereIf(!string.IsNullOrEmpty(model.Keyword), o => o.Name.Contains(model.Keyword));
}
public override void ToModel(Device entity, EditDeviceModel model)
{
model.NodeNumber = entity.Node.Number;
model.ProductNumber = entity.Product.Number;
}
public override IActionResult Edit(EditDeviceModel model)
{
if (ModelState.IsValid)
{
var deviceDto = model.To<DeviceDto>();
this._pageHubContext.Clients.Group(model.NodeNumber).SendAsync(Methods.ServerToClient, Methods.EditDeviceRequest, deviceDto.ToJson(), null);
return RedirectTo();
}
ModelState.AddModelError("", "服务器出现异常,请稍后重试");
return View(model);
}
public override IActionResult Delete(List<Guid> list)
{
foreach (var id in list)
{
try
{
var entity = this.repo.Table().Include(o => o.Node).FirstOrDefault(o => o.Id == id);
var number = entity.Node.Number;
this._pageHubContext.Clients.Group(number).SendAsync(Methods.ServerToClient, Methods.DeleteDeviceRequest, entity.Number, null);
}
catch (Exception ex)
{
ex.PrintStack();
return RedirectTo(message: ex.Message);
}
}
return RedirectTo();
}
}
}

@ -29,7 +29,6 @@ namespace IoTCenter.Areas.Admin.Controllers
if (ModelState.IsValid)
{
var nodeDto = model.To<NodeDto>();
nodeDto.Number = model.Number;
this._pageHubContext.Clients.Group(model.Number).SendAsync(Methods.ServerToClient, Methods.EditNodeRequest, nodeDto.ToJson(), null);
return RedirectTo();
}

@ -56,6 +56,14 @@ namespace IoTCenter.Services
{
this.UpdateNode(message);
}
else if (method == Methods.EditDeviceResponse)
{
this.UpdateDevice(message);
}
else if (method == Methods.DeleteDeviceResponse)
{
this.DeleteDevice(message);
}
}
private void UpdateNode(string message)
@ -164,6 +172,29 @@ namespace IoTCenter.Services
}
}
private void DeleteDevice(string number)
{
try
{
Console.WriteLine("iot center> receive device message");
using (var scope = this._applicationService.CreateScope())
{
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var device = deviceRepo.Table().FirstOrDefault(o => o.Number == number);
if (device != null)
{
deviceRepo.Delete(device);
deviceRepo.SaveChanges();
this.Clients.Group("page").SendAsync("DeleteDevice", number);
}
}
}
catch (Exception ex)
{
ex.PrintStack();
}
}
private void UpdateData(string message)
{
Console.WriteLine("iot center> receive data message");

@ -892,10 +892,10 @@
}
});
connection.on("DeleteDevice", (message) => {
var newDevice = JSON.parse(message);
var number = message;
if (node && node.Node.Id === newDevice.NodeId) {
for (var i = 0; i < node.Node.Devices.length; i++) {
if (node.Node.Devices[i].Number == newDevice.Number) {
if (node.Node.Devices[i].Number == number) {
node.Node.Devices.splice(i, 1);
break;
}

Loading…
Cancel
Save