From 2ddfaf442cd7ea6d3ca035defaf9dda04a88aba1 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Thu, 24 Dec 2020 17:26:28 +0800 Subject: [PATCH] update Former-commit-id: 90c757ba0db46b51b578a26cf6dbbf2461b55de5 Former-commit-id: f4874040f16c2c46c8615bf51a5fb9fbb713e6de --- .../Domain/Entities/IoTCenter/IoTScene.cs | 9 +++++---- .../Domain/Entities/UserCenter/Organ.cs | 1 - .../IoT.Shared/Controllers/AjaxBaseController.cs | 10 ---------- projects/IoTNode/db.sql | 6 +++--- projects/Platform/Api/SceneController.cs | 4 ++-- .../Application/Models/EditIoTSceneModel.cs | 1 + .../IoTCenter/Controllers/IoTSceneController.cs | 16 ++++++++++++---- .../Controllers/IoTSceneIoTCommandController.cs | 6 +++--- .../IoTCenter/Controllers/IoTTiggerController.cs | 6 +++--- .../IoTCenter/Controllers/IoTTimerController.cs | 8 ++++---- projects/Platform/Controllers/AjaxController.cs | 14 ++++++++++++-- projects/Platform/Controllers/HomeController.cs | 8 ++++---- projects/Platform/Data/PlatformDbContext.cs | 11 +++++------ projects/Platform/db.sql | 8 ++------ 14 files changed, 56 insertions(+), 52 deletions(-) diff --git a/projects/IoT.Shared/Application/Domain/Entities/IoTCenter/IoTScene.cs b/projects/IoT.Shared/Application/Domain/Entities/IoTCenter/IoTScene.cs index 71f97c9f..4f8f9152 100644 --- a/projects/IoT.Shared/Application/Domain/Entities/IoTCenter/IoTScene.cs +++ b/projects/IoT.Shared/Application/Domain/Entities/IoTCenter/IoTScene.cs @@ -24,13 +24,14 @@ namespace IoT.Shared.Application.Domain.Entities [Display(Name = "序号")] public int DisplayOrder { get; set; } - [Display(Name = "机构Id")] - public Guid OrganId { get; set; } - public Guid? BuildingId { get; set; } - public Organ Organ { get; set; } + public Guid BuildingId { get; set; } + public Building Building { get; set; } + public List IoTCommands { get; set; } = new List(); + public List IoTTimers { get; set; } = new List(); + public List IoTTiggers { get; set; } = new List(); } } diff --git a/projects/IoT.Shared/Application/Domain/Entities/UserCenter/Organ.cs b/projects/IoT.Shared/Application/Domain/Entities/UserCenter/Organ.cs index ccf190bc..d2bc520c 100644 --- a/projects/IoT.Shared/Application/Domain/Entities/UserCenter/Organ.cs +++ b/projects/IoT.Shared/Application/Domain/Entities/UserCenter/Organ.cs @@ -21,7 +21,6 @@ namespace IoT.Shared.Application.Domain.Entities public bool IsReadOnly { get; set; } public List Buildings { get; set; } = new List(); public List OrganUsers { get; set; } = new List(); - public List OrganScenes { get; set; } = new List(); public List Roles { get; set; } = new List(); public List Categories { get; set; } = new List(); public List Titles { get; set; } = new List<Title>(); diff --git a/projects/IoT.Shared/Controllers/AjaxBaseController.cs b/projects/IoT.Shared/Controllers/AjaxBaseController.cs index 6c424328..8f8b1296 100644 --- a/projects/IoT.Shared/Controllers/AjaxBaseController.cs +++ b/projects/IoT.Shared/Controllers/AjaxBaseController.cs @@ -135,16 +135,6 @@ namespace IoT.Shared.Areas.IoTCenter.Controlls return new JsonResult(this.GetProductApiSelectList(parentId, selected)); } - public SelectList GetCameraSelectList(string deviceNumber) - { - var list = this._deviceRepo.ReadOnlyTable() - .Where(o => o.Product.Number == "onvifcamera") - .WhereIf(!string.IsNullOrEmpty(deviceNumber), o => o.Number == deviceNumber) - .Select(o => new { Id = o.Number, Name = o.DisplayName }) - .ToList(); - return new SelectList(list, "Id", "Name", deviceNumber); - } - #pragma warning disable CA1822 // Mark members as static public JsonResult CronValid(string cron) { diff --git a/projects/IoTNode/db.sql b/projects/IoTNode/db.sql index 66277b3c..078ea966 100644 --- a/projects/IoTNode/db.sql +++ b/projects/IoTNode/db.sql @@ -167,9 +167,9 @@ CREATE TABLE "iot_IoTScene" ( "Image" TEXT NOT NULL, "Hidden" INTEGER NOT NULL, "DisplayOrder" INTEGER NOT NULL, - "OrganId" TEXT NOT NULL, - "BuildingId" TEXT NULL, - CONSTRAINT "FK_iot_IoTScene_iot_Organ_OrganId" FOREIGN KEY ("OrganId") REFERENCES "iot_Organ" ("Id") ON DELETE CASCADE + "BuildingId" TEXT NOT NULL, + "OrganId" TEXT NULL, + CONSTRAINT "FK_iot_IoTScene_iot_Organ_OrganId" FOREIGN KEY ("OrganId") REFERENCES "iot_Organ" ("Id") ON DELETE RESTRICT ); CREATE TABLE "iot_OrganRole" ( diff --git a/projects/Platform/Api/SceneController.cs b/projects/Platform/Api/SceneController.cs index 2f888595..b4e03ecf 100644 --- a/projects/Platform/Api/SceneController.cs +++ b/projects/Platform/Api/SceneController.cs @@ -27,8 +27,8 @@ namespace Platform.Apis.Controllers try { var model = this._sceneRepo.ReadOnlyTable() - .Include(o => o.Organ) - .WhereIf(organId.HasValue, o => o.OrganId == organId.Value) + .Include(o => o.Building).ThenInclude(o=>o.Organ) + .WhereIf(organId.HasValue, o => o.Building.OrganId == organId.Value) .Where(o => !o.Hidden) .OrderBy(o => o.DisplayOrder); return Ok(model); diff --git a/projects/Platform/Application/Models/EditIoTSceneModel.cs b/projects/Platform/Application/Models/EditIoTSceneModel.cs index e6533efa..90dc268a 100644 --- a/projects/Platform/Application/Models/EditIoTSceneModel.cs +++ b/projects/Platform/Application/Models/EditIoTSceneModel.cs @@ -16,6 +16,7 @@ namespace Platform.Application.Models [Display(Name = "建筑")] [SelectList] [ReadOnlyForEdit] + [Required(ErrorMessage = nameof(RequiredAttribute))] public Guid? BuildingId { get; set; } [Display(Name = "场景名称")] diff --git a/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneController.cs b/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneController.cs index 4d8d8497..0432feb7 100644 --- a/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneController.cs +++ b/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneController.cs @@ -36,14 +36,14 @@ namespace Platform.Areas.IoTCenter.Controllers public override IQueryable<IoTScene> Include(IQueryable<IoTScene> query) { - return query.Include(o => o.Organ).Include(o => o.Building); + return query.Include(o => o.Building).ThenInclude(o => o.Organ); } public override IQueryable<IoTScene> Query(PagedListModel<EditIoTSceneModel> model, IQueryable<IoTScene> query) { ViewData.SelectList(o => model.Query.OrganId, () => this._ajax.GetOrgan(model.Query.OrganId).SelectList()); return query - .WhereIf(model.Query.OrganId.HasValue, o => o.OrganId == model.Query.OrganId.Value) + .WhereIf(model.Query.OrganId.HasValue, o => o.Building.OrganId == model.Query.OrganId.Value) .WhereIf(model.Query.BuildingId.HasValue, o => o.BuildingId == model.Query.BuildingId.Value) .WhereIf(!string.IsNullOrEmpty(model.Query.Name), o => o.Name.Contains(model.Query.Name)) .WhereIf(model.Query.Hidden.HasValue, o => o.Hidden == model.Query.Hidden.Value) @@ -52,6 +52,10 @@ namespace Platform.Areas.IoTCenter.Controllers public override void ToDisplayModel(IoTScene entity, EditIoTSceneModel model) { + if(entity!=null) + { + model.OrganId = entity.Building.OrganId; + } if (model.BuildingId.HasValue) { var name = this._buildingRepo.ReadOnlyTable() @@ -66,16 +70,20 @@ namespace Platform.Areas.IoTCenter.Controllers { var name = this._organRepo.ReadOnlyTable() .Where(o => o.ParentId != null) - .Where(o => o.Left <= entity.Organ.Left && o.Right >= entity.Organ.Right) + .Where(o => o.Left <= entity.Building.Organ.Left && o.Right >= entity.Building.Organ.Right) .ToList() .ToTree() - .FirstOrDefault(o => o.Id == entity.OrganId)?.GetDisplayName(); + .FirstOrDefault(o => o.Id == entity.Building.OrganId)?.GetDisplayName(); ViewData.Add(model.OrganId, name); } } public override void ToEditModel(IoTScene entity, EditIoTSceneModel model) { + if (entity != null) + { + model.OrganId = entity.Building.OrganId; + } ViewData.SelectList(o => model.OrganId, () => this._ajax.GetOrgan(model.OrganId).SelectList()); ViewData.SelectList(o => model.BuildingId, () => this._ajax.GetBuilding(model.OrganId.Value, model.BuildingId).SelectList(), model.OrganId.HasValue); } diff --git a/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneIoTCommandController.cs b/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneIoTCommandController.cs index 3acd26cb..93624429 100644 --- a/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneIoTCommandController.cs +++ b/projects/Platform/Areas/IoTCenter/Controllers/IoTSceneIoTCommandController.cs @@ -30,7 +30,7 @@ namespace Platform.Areas.IoTCenter.Controllers public override IQueryable<IoTSceneIoTCommand> Include(IQueryable<IoTSceneIoTCommand> query) { return query - .Include(o => o.IoTScene).ThenInclude(o => o.Organ) + .Include(o => o.IoTScene).ThenInclude(o=>o.Building).ThenInclude(o => o.Organ) .Include(o => o.IoTCommand).ThenInclude(o => o.Device).ThenInclude(o => o.IoTGateway); } @@ -53,9 +53,9 @@ namespace Platform.Areas.IoTCenter.Controllers public override void ToDisplayModel(IoTSceneIoTCommand entity, EditIoTSceneIoTCommandModel model) { - model.OrganId = entity?.IoTScene.OrganId; + model.OrganId = entity?.IoTScene?.Building?.OrganId; model.IoTGatewayId = entity?.IoTCommand.Device.IoTGatewayId; - ViewData.Add(model.OrganId, entity?.IoTScene?.Organ?.Name); + ViewData.Add(model.OrganId, entity?.IoTScene?.Building?.Organ?.Name); ViewData.Add(model.IoTSceneId, entity?.IoTScene?.Name); ViewData.Add(model.IoTGatewayId, entity?.IoTCommand?.Device?.IoTGateway?.Name); ViewData.Add(model.CommandId, entity?.IoTCommand?.Name); diff --git a/projects/Platform/Areas/IoTCenter/Controllers/IoTTiggerController.cs b/projects/Platform/Areas/IoTCenter/Controllers/IoTTiggerController.cs index 96b91eeb..dba17adf 100644 --- a/projects/Platform/Areas/IoTCenter/Controllers/IoTTiggerController.cs +++ b/projects/Platform/Areas/IoTCenter/Controllers/IoTTiggerController.cs @@ -40,7 +40,7 @@ namespace Platform.Areas.IoTCenter.Controllers public override IQueryable<IoTTigger> Query(PagedListModel<EditIoTTiggerModel> model, IQueryable<IoTTigger> query) { return query - .WhereIf(model.Query.OrganId.HasValue, o => o.IoTScene.OrganId == model.Query.OrganId.Value) + .WhereIf(model.Query.OrganId.HasValue, o => o.IoTScene.Building.OrganId == model.Query.OrganId.Value) .WhereIf(model.Query.IoTGatewayId.HasValue, o => o.Data.Device.IoTGatewayId == model.Query.IoTGatewayId.Value) .WhereIf(model.Query.OrganSceneId.HasValue, o => o.IoTSceneId == model.Query.OrganSceneId.Value) .WhereIf(model.Query.DeviceId.HasValue, o => o.Data.DeviceId == model.Query.DeviceId.Value) @@ -57,13 +57,13 @@ namespace Platform.Areas.IoTCenter.Controllers ViewData.SelectList(o => model.OrganId, () => this._ajax.GetOrgan(model.OrganId).SelectList()); ViewData.SelectList(o => model.IoTGatewayId, () => this._ajax.GetIoTGateway(model.IoTGatewayId).SelectList(), model.OrganId.HasValue); ViewData.SelectList(o => model.OrganSceneId, () => this._ajax.GetOrganSceneSelectList(model.OrganId.Value, model.OrganSceneId), model.OrganId.HasValue); - ViewData.SelectList(o => model.DeviceId, () => this._ajax.GetIoTDevice(model.IoTGatewayId.Value, model.DeviceId).SelectList()); + ViewData.SelectList(o => model.DeviceId, () => this._ajax.GetIoTDevice(model.IoTGatewayId.Value, model.DeviceId).SelectList(), model.IoTGatewayId.HasValue); ViewData.SelectList(o => model.DataId, () => this._ajax.GetDataSelectList(model.DeviceId.Value), model.DeviceId.HasValue); } public override void ToDisplayModel(IoTTigger entity, EditIoTTiggerModel model) { - model.OrganId = entity?.IoTScene?.OrganId; + model.OrganId = entity?.IoTScene?.Building?.OrganId; model.DeviceId = entity?.Data?.DeviceId; model.IoTGatewayId = entity?.Data?.Device?.IoTGatewayId; ViewData.Add(model.IoTGatewayId, entity?.Data?.Device?.IoTGateway?.Name); diff --git a/projects/Platform/Areas/IoTCenter/Controllers/IoTTimerController.cs b/projects/Platform/Areas/IoTCenter/Controllers/IoTTimerController.cs index c2e5e5fd..f28f70f5 100644 --- a/projects/Platform/Areas/IoTCenter/Controllers/IoTTimerController.cs +++ b/projects/Platform/Areas/IoTCenter/Controllers/IoTTimerController.cs @@ -33,7 +33,7 @@ namespace Platform.Areas.IoTCenter.Controllers public override IQueryable<IoTTimer> Query(PagedListModel<EditIoTTimerModel> model, IQueryable<IoTTimer> query) { return query - .WhereIf(model.Query.OrganId.HasValue, o => o.IoTScene.OrganId == model.Query.OrganId.Value) + .WhereIf(model.Query.OrganId.HasValue, o => o.IoTScene.Building.OrganId == model.Query.OrganId.Value) .WhereIf(model.Query.OrganSceneId.HasValue, o => o.IoTSceneId == model.Query.OrganSceneId.Value) .WhereIf(!string.IsNullOrEmpty(model.Query.Name), o => o.Name.Contains(model.Query.Name)) .WhereIf(model.Query.Disabled.HasValue, o => o.Disabled == model.Query.Disabled.Value); @@ -41,7 +41,7 @@ namespace Platform.Areas.IoTCenter.Controllers public override IQueryable<IoTTimer> Include(IQueryable<IoTTimer> query) { - return query.Include(o => o.IoTScene).ThenInclude(o => o.Organ); + return query.Include(o => o.IoTScene).ThenInclude(o=>o.Building).ThenInclude(o => o.Organ); } public override void ToEditModel(IoTTimer entity, EditIoTTimerModel model) @@ -53,8 +53,8 @@ namespace Platform.Areas.IoTCenter.Controllers public override void ToDisplayModel(IoTTimer entity, EditIoTTimerModel model) { - model.OrganId = entity?.IoTScene.OrganId; - ViewData.Add(model.OrganId, entity?.IoTScene?.Organ?.Name); + model.OrganId = entity?.IoTScene?.Building.OrganId; + ViewData.Add(model.OrganId, entity?.IoTScene?.Building?.Organ?.Name); ViewData.Add(model.OrganSceneId, entity?.IoTScene?.Name); } } diff --git a/projects/Platform/Controllers/AjaxController.cs b/projects/Platform/Controllers/AjaxController.cs index 8101164d..04ae9172 100644 --- a/projects/Platform/Controllers/AjaxController.cs +++ b/projects/Platform/Controllers/AjaxController.cs @@ -203,7 +203,17 @@ namespace Platform.Areas.IoTCenter.Controllers } return new JsonResult(new SelectList(list, "Id", "Name", selected)); } - + public SelectList GetCameraSelectList(string deviceNumber) + { + using var scope = this._services.CreateScope(); + var repo = scope.ServiceProvider.GetRequiredService<IRepository<IoTDevice>>(); + var list = repo.ReadOnlyTable() + .Where(o => o.Product.Number == "onvifcamera") + .WhereIf(!string.IsNullOrEmpty(deviceNumber), o => o.Number == deviceNumber) + .Select(o => new { Id = o.Number, Name = o.DisplayName }) + .ToList(); + return new SelectList(list, "Id", "Name", deviceNumber); + } public SelectList GetOrganNodeSelectList(Guid parentId, Guid? selected = null) { using var scope = this._services.CreateScope(); @@ -221,7 +231,7 @@ namespace Platform.Areas.IoTCenter.Controllers using var scope = this._services.CreateScope(); var repo = scope.ServiceProvider.GetRequiredService<IRepository<IoTScene>>(); var list = repo.ReadOnlyTable() - .Where(o => o.OrganId == parentId) + .Where(o => o.Building.OrganId == parentId) .Select(o => new { o.Id, o.Name }) .ToList(); return new SelectList(list, "Id", "Name", selected); diff --git a/projects/Platform/Controllers/HomeController.cs b/projects/Platform/Controllers/HomeController.cs index 74c9938e..19a4f2f5 100644 --- a/projects/Platform/Controllers/HomeController.cs +++ b/projects/Platform/Controllers/HomeController.cs @@ -74,11 +74,11 @@ namespace Platform.Controllers {//即未选中建筑也未选中机构,则用户所在机构为当前机构 model.Organ = organList.FirstOrDefault(o => o.Id == userOrganId); } - model.Scenes = this._organRepo.ReadOnlyTable() - .Where(o => o.Id == model.Organ.Id) - .SelectMany(o => o.OrganScenes) + model.Scenes = this._buildingRepo.ReadOnlyTable() + .Where(o => o.OrganId == model.Organ.Id) + .SelectMany(o=>o.Scenes) .Where(o => o.Hidden == false) - .Where(o => o.BuildingId == null) + .WhereIf(model.BuildingId.HasValue,o => o.BuildingId == model.BuildingId.Value) .ToList(); } model.OrganId = model.Organ.Id; diff --git a/projects/Platform/Data/PlatformDbContext.cs b/projects/Platform/Data/PlatformDbContext.cs index cdbb6324..fde6e4c9 100644 --- a/projects/Platform/Data/PlatformDbContext.cs +++ b/projects/Platform/Data/PlatformDbContext.cs @@ -92,15 +92,14 @@ namespace Platform.Data //modelBuilder.Entity<IoTProductCategoryIoTProduct>().HasIndex(o => o.ProductId).IsUnique();//通过唯一约束,保证一个商品只有一个分类 //IoTCommand modelBuilder.Entity<IoTCommand>().HasOne(o => o.Api).WithMany().HasForeignKey(o => o.ApiId); - //OrganIoTScene - modelBuilder.Entity<IoTScene>().HasOne(o => o.Organ).WithMany(o => o.OrganScenes).HasForeignKey(o => o.OrganId); - modelBuilder.Entity<IoTScene>().HasOne(o => o.Building).WithMany(o => o.Scenes).HasForeignKey(o => o.BuildingId).OnDelete(DeleteBehavior.Cascade); - //OrganIoTSceneIoTCommand + //IoTScene + modelBuilder.Entity<IoTScene>().HasOne(o => o.Building).WithMany(o => o.Scenes).HasForeignKey(o => o.BuildingId); + //IoTSceneIoTCommand modelBuilder.Entity<IoTSceneIoTCommand>().HasOne(o => o.IoTScene).WithMany(o => o.IoTCommands).HasForeignKey(o => o.IoTSceneId); modelBuilder.Entity<IoTSceneIoTCommand>().HasOne(o => o.IoTCommand).WithMany().HasForeignKey(o => o.IoTCommandId); - //OrganIoTSceneTimer + //IoTTimer modelBuilder.Entity<IoTTimer>().HasOne(o => o.IoTScene).WithMany(o => o.IoTTimers).HasForeignKey(o => o.IoTSceneId); - //OrganIoTSceneTigger + //IoTTigger modelBuilder.Entity<IoTTigger>().HasOne(o => o.IoTScene).WithMany(o => o.IoTTiggers).HasForeignKey(o => o.IoTSceneId); modelBuilder.Entity<IoTTigger>().HasOne(o => o.Data).WithMany().HasForeignKey(o => o.DataId); //LiveRecord diff --git a/projects/Platform/db.sql b/projects/Platform/db.sql index 845df7dd..254843e9 100644 --- a/projects/Platform/db.sql +++ b/projects/Platform/db.sql @@ -243,11 +243,9 @@ CREATE TABLE `iot_IoTScene` ( `Image` longtext CHARACTER SET utf8mb4 NOT NULL, `Hidden` tinyint(1) NOT NULL, `DisplayOrder` int NOT NULL, - `OrganId` char(36) NOT NULL, - `BuildingId` char(36) NULL, + `BuildingId` char(36) NOT NULL, CONSTRAINT `PK_iot_IoTScene` PRIMARY KEY (`Id`), - CONSTRAINT `FK_iot_IoTScene_iot_Building_BuildingId` FOREIGN KEY (`BuildingId`) REFERENCES `iot_Building` (`Id`) ON DELETE CASCADE, - CONSTRAINT `FK_iot_IoTScene_iot_Organ_OrganId` FOREIGN KEY (`OrganId`) REFERENCES `iot_Organ` (`Id`) ON DELETE CASCADE + CONSTRAINT `FK_iot_IoTScene_iot_Building_BuildingId` FOREIGN KEY (`BuildingId`) REFERENCES `iot_Building` (`Id`) ON DELETE CASCADE ); CREATE TABLE `iot_OrganUserRole` ( @@ -470,8 +468,6 @@ CREATE INDEX `IX_iot_IoTProductCategory_ParentId` ON `iot_IoTProductCategory` (` CREATE INDEX `IX_iot_IoTScene_BuildingId` ON `iot_IoTScene` (`BuildingId`); -CREATE INDEX `IX_iot_IoTScene_OrganId` ON `iot_IoTScene` (`OrganId`); - CREATE INDEX `IX_iot_IoTSceneIoTCommand_IoTCommandId` ON `iot_IoTSceneIoTCommand` (`IoTCommandId`); CREATE INDEX `IX_iot_IoTSceneIoTCommand_IoTCommandId1` ON `iot_IoTSceneIoTCommand` (`IoTCommandId1`);