Former-commit-id: e75256c4ecf111b880fcf517d88faa82b9c710ac
TangShanKaiPing
wanggang 5 years ago
parent 2e5da57423
commit d547a849d7

@ -14,6 +14,13 @@ namespace Application.Domain.Entities
[Required] [Required]
public string OrganNumber { get; set; } public string OrganNumber { get; set; }
[Display(Name = "分类名称")]
public string CategoryName { get; set; }
[Display(Name = "分类编号")]
[Required]
public string CategoryNumber { get; set; }
[Display(Name = "节点名称")] [Display(Name = "节点名称")]
public string Name { get; set; } public string Name { get; set; }

@ -17,12 +17,23 @@ namespace Application.Models
[Required(ErrorMessage = nameof(RequiredAttribute))] [Required(ErrorMessage = nameof(RequiredAttribute))]
public string OrganNumber { get; set; } public string OrganNumber { get; set; }
[MaxLength(64, ErrorMessage = "{0}最大长度为{1}")]
[Display(Name = "分类名称")]
public string CategoryName { get; set; }
[MaxLength(64, ErrorMessage = "{0}最大长度为{1}")]
[Display(Name = "分类编号")]
[Required]
public string CategoryNumber { get; set; }
[Display(Name = "节点名称")] [Display(Name = "节点名称")]
[MaxLength(64, ErrorMessage = "{0}最大长度为{1}")]
[Required(ErrorMessage = nameof(RequiredAttribute))] [Required(ErrorMessage = nameof(RequiredAttribute))]
public string Name { get; set; } public string Name { get; set; }
[Display(Name = "节点编号")] [Display(Name = "节点编号")]
[ReadOnly(true)] [ReadOnly(true)]
[MaxLength(64, ErrorMessage = "{0}最大长度为{1}")]
[Required(ErrorMessage = nameof(RequiredAttribute))] [Required(ErrorMessage = nameof(RequiredAttribute))]
public string Number { get; set; } public string Number { get; set; }

@ -15,10 +15,8 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Reflection;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -86,6 +84,7 @@ namespace IoT.Shared.Services
InitConnection(); InitConnection();
} }
Connection.StartAsync().Wait(); Connection.StartAsync().Wait();
this._logger.LogDebug($"{_notifyHost} OnConnected");
this.OnConnected(); this.OnConnected();
} }
else else
@ -102,7 +101,20 @@ namespace IoT.Shared.Services
} }
catch (Exception ex) catch (Exception ex)
{ {
ex.PrintStack(); this._logger.LogError(ex, ex.Message);
}
try
{
var now = DateTime.Now;
if (now.Hour == 0 && now.Minute == 0 && now.Second > 0 && now.Second <= 10)
{
this._logger.LogInformation("upload at 00:00 everyday");
this.OnConnected();
}
}
catch (Exception ex)
{
this._logger.LogError(ex, ex.Message);
} }
} }
else else
@ -193,8 +205,6 @@ namespace IoT.Shared.Services
public void OnConnected() public void OnConnected()
{ {
this._logger.LogDebug($"{_notifyHost} OnConnected");
//上传节点 //上传节点
this.UpdateEntityIdList<Node>(null, Methods.UpdateNodeResponse); this.UpdateEntityIdList<Node>(null, Methods.UpdateNodeResponse);

@ -10,6 +10,8 @@ namespace IoTCenter.Application.Domain
[Display(Name = "分类名称")] [Display(Name = "分类名称")]
public string Name { get; set; } public string Name { get; set; }
public string Number { get; set; }
[Display(Name = "模板")] [Display(Name = "模板")]
public string Template { get; set; } public string Template { get; set; }

@ -4,13 +4,15 @@ using System.ComponentModel.DataAnnotations;
namespace IoTCenter.Application.Domain namespace IoTCenter.Application.Domain
{ {
[Display(Name = "用户")] [Display(Name = "机构")]
public class Organ : BaseEntity public class Organ : BaseEntity
{ {
public string Name { get; set; } public string Name { get; set; }
public string Number { get; set; } public string Number { get; set; }
[Display(Name = "分类图标")] [Display(Name = "分类图标")]
public string Image { get; set; } public string Image { get; set; }
public List<OrganNode> OrganNodes { get; set; } = new List<OrganNode>(); public List<OrganNode> OrganNodes { get; set; } = new List<OrganNode>();
} }
} }

@ -28,6 +28,8 @@ namespace IoTCenter.Services
public class IoTCenterEventHandler : public class IoTCenterEventHandler :
IEventHander<EntityInsertedEvent<Organ>>, IEventHander<EntityInsertedEvent<Organ>>,
IEventHander<EntityUpdatedEvent<Organ>>, IEventHander<EntityUpdatedEvent<Organ>>,
IEventHander<EntityInsertedEvent<NodeCategory>>,
IEventHander<EntityUpdatedEvent<NodeCategory>>,
IEventHander<EntityInsertedEvent<SceneTimer>>, IEventHander<EntityInsertedEvent<SceneTimer>>,
IEventHander<EntityUpdatedEvent<SceneTimer>>, IEventHander<EntityUpdatedEvent<SceneTimer>>,
IEventHander<EntityDeletedEvent<SceneTimer>>, IEventHander<EntityDeletedEvent<SceneTimer>>,
@ -55,6 +57,8 @@ namespace IoTCenter.Services
private readonly ISettingService _settingService; private readonly ISettingService _settingService;
private readonly ILogger<IoTCenterEventHandler> _logger; private readonly ILogger<IoTCenterEventHandler> _logger;
private readonly IRepository<Node> _nodeRepo; private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<NodeCategory> _nodeCategoryRepo;
private readonly IRepository<NodeCategoryNode> _nodeCategoryNodeRepo;
private readonly IRepository<Organ> _organRepo; private readonly IRepository<Organ> _organRepo;
private readonly IRepository<OrganNode> _organNodeRepo; private readonly IRepository<OrganNode> _organNodeRepo;
private readonly IRepository<Scene> _sceneRepo; private readonly IRepository<Scene> _sceneRepo;
@ -68,6 +72,8 @@ namespace IoTCenter.Services
ISettingService settingService, ISettingService settingService,
ILogger<IoTCenterEventHandler> logger, ILogger<IoTCenterEventHandler> logger,
IRepository<Node> nodeRepo, IRepository<Node> nodeRepo,
IRepository<NodeCategory> nodeCategoryRepo,
IRepository<NodeCategoryNode> nodeCategoryNodeRepo,
IRepository<Organ> organRepo, IRepository<Organ> organRepo,
IRepository<OrganNode> organNodeRepo, IRepository<OrganNode> organNodeRepo,
IRepository<Scene> sceneRepo, IRepository<Scene> sceneRepo,
@ -81,6 +87,8 @@ namespace IoTCenter.Services
this._settingService = settingService; this._settingService = settingService;
this._logger = logger; this._logger = logger;
this._nodeRepo = nodeRepo; this._nodeRepo = nodeRepo;
this._nodeCategoryRepo = nodeCategoryRepo;
this._nodeCategoryNodeRepo = nodeCategoryNodeRepo;
this._organRepo = organRepo; this._organRepo = organRepo;
this._organNodeRepo = organNodeRepo; this._organNodeRepo = organNodeRepo;
this._sceneRepo = sceneRepo; this._sceneRepo = sceneRepo;
@ -193,6 +201,22 @@ namespace IoTCenter.Services
#endregion organ #endregion organ
#region nodeCategory
public void Handle(EntityInsertedEvent<NodeCategory> message)
{
this.Notify(message);
this.UpdateNodeCategory(message.Data);
}
public void Handle(EntityUpdatedEvent<NodeCategory> message)
{
this.Notify(message);
this.UpdateNodeCategory(message.Data);
}
#endregion nodeCategory
#region Device #region Device
public void Handle(EntityInsertedEvent<Device> message) public void Handle(EntityInsertedEvent<Device> message)
@ -466,6 +490,24 @@ namespace IoTCenter.Services
private void UpdateOrganNode(Node node) private void UpdateOrganNode(Node node)
{ {
try
{
var category = this._nodeCategoryRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == node.CategoryNumber);
if (category != null)
{
var nodeCategory = this._nodeCategoryNodeRepo.Table().FirstOrDefault(o => o.NodeId == node.Id);
if (nodeCategory == null)
{
nodeCategory = new NodeCategoryNode { CategoryId = category.Id, NodeId = node.Id };
this._nodeCategoryNodeRepo.Add(nodeCategory);
this._nodeCategoryNodeRepo.SaveChanges();
}
}
}
catch (Exception ex)
{
this._logger.LogError(ex.ToString());
}
try try
{ {
var organ = this._organRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == node.OrganNumber); var organ = this._organRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == node.OrganNumber);
@ -507,5 +549,27 @@ namespace IoTCenter.Services
this._logger.LogError(ex.ToString()); this._logger.LogError(ex.ToString());
} }
} }
private void UpdateNodeCategory(NodeCategory category)
{
try
{
var nodes = this._nodeRepo.ReadOnlyTable().Where(o => o.CategoryNumber == category.Number).Select(o => o.Id).ToList();
foreach (var nodeId in nodes)
{
var categoryNode = this._nodeCategoryNodeRepo.Table().FirstOrDefault(o => o.NodeId == nodeId);
if (categoryNode == null)
{
categoryNode = new NodeCategoryNode { CategoryId = category.Id, NodeId = nodeId };
this._nodeCategoryNodeRepo.Add(categoryNode);
this._nodeCategoryNodeRepo.SaveChanges();
}
}
}
catch (Exception ex)
{
this._logger.LogError(ex.ToString());
}
}
} }
} }

@ -20,6 +20,8 @@ CREATE TABLE "iot_Node" (
"IsDeleted" TEXT NULL, "IsDeleted" TEXT NULL,
"OrganName" TEXT NULL, "OrganName" TEXT NULL,
"OrganNumber" TEXT NOT NULL, "OrganNumber" TEXT NOT NULL,
"CategoryName" TEXT NULL,
"CategoryNumber" TEXT NOT NULL,
"Name" TEXT NULL, "Name" TEXT NULL,
"Number" TEXT NOT NULL, "Number" TEXT NOT NULL,
"IsOnline" INTEGER NOT NULL, "IsOnline" INTEGER NOT NULL,
@ -33,6 +35,7 @@ CREATE TABLE "iot_NodeCategory" (
"Id" TEXT NOT NULL CONSTRAINT "PK_iot_NodeCategory" PRIMARY KEY, "Id" TEXT NOT NULL CONSTRAINT "PK_iot_NodeCategory" PRIMARY KEY,
"IsDeleted" TEXT NULL, "IsDeleted" TEXT NULL,
"Name" TEXT NULL, "Name" TEXT NULL,
"Number" TEXT NULL,
"Template" TEXT NULL, "Template" TEXT NULL,
"DisplayOrder" INTEGER NOT NULL "DisplayOrder" INTEGER NOT NULL
); );

@ -96,7 +96,9 @@ namespace IoTNode
{ {
Id = $"nodeid-{sn}".ToGuid(), Id = $"nodeid-{sn}".ToGuid(),
OrganName = "默认机构名称", OrganName = "默认机构名称",
OrganNumber = "默认机构编码", OrganNumber = "默认机构编号",
CategoryName = "默认分类名称",
CategoryNumber = "默认分类编号",
Name = "节点", Name = "节点",
Number = sn, Number = sn,
IsOnline = true, IsOnline = true,

@ -11,6 +11,8 @@ CREATE TABLE "iot_Node" (
"IsDeleted" TEXT NULL, "IsDeleted" TEXT NULL,
"OrganName" TEXT NULL, "OrganName" TEXT NULL,
"OrganNumber" TEXT NOT NULL, "OrganNumber" TEXT NOT NULL,
"CategoryName" TEXT NULL,
"CategoryNumber" TEXT NOT NULL,
"Name" TEXT NULL, "Name" TEXT NULL,
"Number" TEXT NOT NULL, "Number" TEXT NOT NULL,
"IsOnline" INTEGER NOT NULL, "IsOnline" INTEGER NOT NULL,

Loading…
Cancel
Save