From 74d8bd7b3f0a658b04e84f598d7452e413280582 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 29 Dec 2023 10:09:51 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E8=AE=BE=E5=A4=87=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DeviceGroupsController.cs | 46 +++++++++ .../Device/Request/AssignDeviceRequest.cs | 12 +++ .../Device/Request/DeviceGroupPageRequest.cs | 7 ++ .../Device/Request/DeviceGroupSaveRequest.cs | 14 +++ .../Response/DeviceGroupPageResponse.cs | 5 + .../Device/Response/DeviceTemplateResponse.cs | 18 ++++ .../Response/DeviceUnderGroupResponse.cs | 19 ++++ .../Device/Services/IDeviceConnectService.cs | 2 +- .../Device/Services/IDeviceGroupService.cs | 16 ++++ .../Services/Implements/DeviceGroupService.cs | 93 +++++++++++++++++++ .../Services/Implements/DeviceService.cs | 3 - Src/Dlhis.Basic/Dlhis.Basic.csproj | 4 - Src/Dlhis.Basic/SqlSugarPack.cs | 10 +- .../Device/Entities/DeviceGroupEntity.cs | 8 +- .../Entities/DeviceGroupRelationshipEntity.cs | 8 +- .../Device/Enums/DeviceFuncEnumType.cs | 7 ++ Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs | 3 + Src/Dlhis.Entity/Sys/Entities/UserEntity.cs | 3 + 18 files changed, 259 insertions(+), 19 deletions(-) create mode 100644 Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs create mode 100644 Src/Dlhis.Basic/Device/Request/AssignDeviceRequest.cs create mode 100644 Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs create mode 100644 Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs create mode 100644 Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs create mode 100644 Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs create mode 100644 Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs create mode 100644 Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs diff --git a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs new file mode 100644 index 00000000..1f14823f --- /dev/null +++ b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs @@ -0,0 +1,46 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Dlhis.Basic.Device.Services; +using Kurisu.Core.DataAccess.Dto; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Basic.Device.Controllers; + +/// +/// 设备分组 +/// +[Authorize] +[Route("api/[controller]")] +[ApiController] +public class DeviceGroupsController : ControllerBase +{ + private readonly IDeviceGroupService _deviceGroupService; + + public DeviceGroupsController(IDeviceGroupService deviceGroupService) + { + _deviceGroupService = deviceGroupService; + } + + /// + /// 设备分组分页 + /// + /// + /// + [HttpPost("page")] + public async Task> GetPageAsync([FromQuery] DeviceGroupPageRequest request) + { + return await _deviceGroupService.GetPageAsync(request); + } + + /// + /// 设备分组保存 + /// + /// + /// + [HttpPost("save")] + public async Task SaveAsync(DeviceGroupSaveRequest request) + { + await _deviceGroupService.SaveAsync(request); + } +} diff --git a/Src/Dlhis.Basic/Device/Request/AssignDeviceRequest.cs b/Src/Dlhis.Basic/Device/Request/AssignDeviceRequest.cs new file mode 100644 index 00000000..ebe68812 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/AssignDeviceRequest.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Device.Request; + +public class AssignDevicesRequest +{ + [Required(ErrorMessage = "设备组不能为空")] + public Guid GroupCode { get; set; } + + + public List DeviceCodes { get; set; } = new List(); +} diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs new file mode 100644 index 00000000..419810f2 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs @@ -0,0 +1,7 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Basic.Device.Request; + +public class DeviceGroupPageRequest : PageDto +{ +} diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs new file mode 100644 index 00000000..e8ee96a2 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Device.Request; + +public class DeviceGroupSaveRequest +{ + public long? Id { get; set; } + + /// + /// 设备组名称 + /// + [Required(ErrorMessage = "设备组名称不能为空")] + public string Name { get; set; } +} diff --git a/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs new file mode 100644 index 00000000..cde4884f --- /dev/null +++ b/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs @@ -0,0 +1,5 @@ +namespace Dlhis.Basic.Device.Response; + +public class DeviceGroupPageResponse +{ +} diff --git a/Src/Dlhis.Basic/Device/Response/DeviceTemplateResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceTemplateResponse.cs index 9dd0f5cb..aed3c939 100644 --- a/Src/Dlhis.Basic/Device/Response/DeviceTemplateResponse.cs +++ b/Src/Dlhis.Basic/Device/Response/DeviceTemplateResponse.cs @@ -2,5 +2,23 @@ public class DeviceTemplateResponse { + public long Id { get; set; } + + public Guid Code { get; set; } + + /// + /// 品牌 + /// + public string Brand { get; set; } + + /// + /// 模板名称 + /// + public string Name { get; set; } + + /// + /// 模板json + /// + public string Template { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs new file mode 100644 index 00000000..8313672e --- /dev/null +++ b/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs @@ -0,0 +1,19 @@ +namespace Dlhis.Basic.Device.Response; + +public class DeviceUnderGroupResponse +{ + public Guid Code { get; set; } + + /// + /// 设备唯一码,IP/MAC/SNO + /// + public string UniqueNo { get; set; } + + /// + /// 品牌 + /// + public string Brand { get; set; } + + + public bool Enable { get; set; } +} diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceConnectService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceConnectService.cs index 25ff70d5..87777045 100644 --- a/Src/Dlhis.Basic/Device/Services/IDeviceConnectService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDeviceConnectService.cs @@ -3,7 +3,7 @@ using Dlhis.Basic.Device.Response; namespace Dlhis.Basic.Device.Services; -public interface IDeviceConnectService +public interface IDeviceConnectService : IScopeDependency { /// /// 设备注册 diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs new file mode 100644 index 00000000..4ac107e6 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs @@ -0,0 +1,16 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Basic.Device.Services; + +public interface IDeviceGroupService : IScopeDependency +{ + Task> GetPageAsync(DeviceGroupPageRequest request); + + Task SaveAsync(DeviceGroupSaveRequest request); + + Task> GetDevicesAsync(Guid code); + + Task AssignDevicesAsync(AssignDevicesRequest requests); +} diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs new file mode 100644 index 00000000..09e6bfe0 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -0,0 +1,93 @@ +using Dlhis.Basic.Device.Request; +using Dlhis.Basic.Device.Response; +using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Device.Entities; +using Kurisu.AspNetCore.Utils.Extensions; +using Kurisu.Core.DataAccess.Dto; +using Kurisu.SqlSugar.Extensions; +using Kurisu.SqlSugar.Services; +using Mapster; + +namespace Dlhis.Basic.Device.Services.Implements; + +public class DeviceGroupService : IDeviceGroupService +{ + private readonly IDbContext _dbContext; + + public DeviceGroupService(IDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task> GetPageAsync(DeviceGroupPageRequest request) + { + return await _dbContext.Queryable() + .WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search)) + .Select() + .ToPageListAsync(request); + } + + public async Task SaveAsync(DeviceGroupSaveRequest request) + { + if (!request.Id.HasValue) + { + var entity = request.Adapt(); + + entity.Code = Guid.NewGuid(); + await _dbContext.InsertAsync(entity); + } + else + { + var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync(); + entity.ThrowIfNull("设备组不存在,无法更新"); + await _dbContext.UpdateAsync(entity); + } + } + + public async Task DeleteAsync(long id) + { + var deviceGroup = await _dbContext.Queryable().Where(x => x.Id == id).FirstAsync(); + deviceGroup.ThrowIfNull("设备组不存在,无需删除"); + + await _dbContext.DeleteAsync(deviceGroup); + } + + public async Task AssignDevicesAsync(AssignDevicesRequest request) + { + var group = await _dbContext.Queryable().Where(x => x.Code == request.GroupCode).FirstAsync(); + group.ThrowIfNull("设备组不存在"); + + if (!request.DeviceCodes.Any()) + { + //todo 删除时候判断权限是否分配 + + var relationships = await _dbContext.Queryable().Where(x => x.GroupCode == request.GroupCode).ToListAsync(); + await _dbContext.DeleteAsync(relationships); + } + else + { + var entities = request.DeviceCodes.Select(x => new DeviceGroupRelationshipEntity + { + GroupCode = request.GroupCode, + DeviceCode = x + + }).ToList(); + + await _dbContext.InsertAsync(entities); + } + + //todo 生成下发任务 + } + + public async Task> GetDevicesAsync(Guid code) + { + var relationships = await _dbContext.Queryable().Where(x => x.GroupCode == code).ToListAsync(); + var deviceCodes = relationships.Select(x => x.DeviceCode); + + return await _dbContext.Queryable() + .Where(x => deviceCodes.Contains(x.Code)) + .Select() + .ToListAsync(); + + } +} diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index 577e001a..a8363c7c 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -1,8 +1,6 @@ using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Entity.Basic.Entity; -using Dlhis.Entity.Device.Entities; -using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; @@ -117,6 +115,5 @@ public class DeviceService : IDeviceService exists.ThrowIfTrue("唯一号已经存在"); } - } diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj index a52589ec..5b3b834d 100644 --- a/Src/Dlhis.Basic/Dlhis.Basic.csproj +++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj @@ -25,8 +25,4 @@ - - - - diff --git a/Src/Dlhis.Basic/SqlSugarPack.cs b/Src/Dlhis.Basic/SqlSugarPack.cs index 3145a868..e60a2855 100644 --- a/Src/Dlhis.Basic/SqlSugarPack.cs +++ b/Src/Dlhis.Basic/SqlSugarPack.cs @@ -17,11 +17,11 @@ public class SqlSugarPack : BaseAppPack public override void Configure(IApplicationBuilder app, IWebHostEnvironment env) { #if DEBUG - using var scope = app.ApplicationServices.CreateScope(); - var db = scope.ServiceProvider.GetService(); - var tables = App.ActiveTyps.Where(x => x.IsDefined(typeof(SugarTable), false)).ToArray(); - db.DbMaintenance.CreateDatabase(); - db.CodeFirst.InitTables(tables); + //using var scope = app.ApplicationServices.CreateScope(); + //var db = scope.ServiceProvider.GetService(); + //var tables = App.ActiveTyps.Where(x => x.IsDefined(typeof(SugarTable), false)).ToArray(); + //db.DbMaintenance.CreateDatabase(); + //db.CodeFirst.InitTables(tables); #endif } } diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs index 68978e83..f302cbd1 100644 --- a/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs +++ b/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs @@ -7,13 +7,13 @@ namespace Dlhis.Entity.Device.Entities; /// 设备组 /// [SugarTable(TableName = "DeviceGroup", TableDescription = "设备组")] -public class DeviceGroupEntity : SugarBaseEntity, ITenantId +public class DeviceGroupEntity : SugarBaseEntity, ITenantId, ISoftDeleted { /// /// 设备组code /// [SugarColumn(ColumnDescription = "设备组code")] - public string Code { get; set; } + public Guid Code { get; set; } /// /// 设备组名称 @@ -21,6 +21,8 @@ public class DeviceGroupEntity : SugarBaseEntity, ITenantId [SugarColumn(ColumnDescription = "设备组名称")] public string Name { get; set; } - public string TenantId { get; set; } + + + public bool IsDeleted { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceGroupRelationshipEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceGroupRelationshipEntity.cs index 08ab5530..848fc9ea 100644 --- a/Src/Dlhis.Entity/Device/Entities/DeviceGroupRelationshipEntity.cs +++ b/Src/Dlhis.Entity/Device/Entities/DeviceGroupRelationshipEntity.cs @@ -7,20 +7,22 @@ namespace Dlhis.Entity.Device.Entities; /// 设备组/设备关系 /// [SugarTable(TableName = "DeviceGroupRelationship", TableDescription = "设备组/设备关系")] -public class DeviceGroupRelationshipEntity : SugarBaseEntity, ITenantId +public class DeviceGroupRelationshipEntity : SugarBaseEntity, ITenantId, ISoftDeleted { /// /// 设备组code /// [SugarColumn(ColumnDescription = "设备组code")] - public string GroupCode { get; set; } + public Guid GroupCode { get; set; } /// /// 设备code /// [SugarColumn(ColumnDescription = "设备code")] - public string DeviceCode { get; set; } + public Guid DeviceCode { get; set; } public string TenantId { get; set; } + + public bool IsDeleted { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Entity/Device/Enums/DeviceFuncEnumType.cs b/Src/Dlhis.Entity/Device/Enums/DeviceFuncEnumType.cs index 18bee720..2d6a2f10 100644 --- a/Src/Dlhis.Entity/Device/Enums/DeviceFuncEnumType.cs +++ b/Src/Dlhis.Entity/Device/Enums/DeviceFuncEnumType.cs @@ -39,4 +39,11 @@ public enum DeviceFuncEnumType /// [Description("二维码")] QrCode, + + + /// + /// 布控 + /// + [Description("布控")] + Control, } diff --git a/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs index cd363143..62b0428c 100644 --- a/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs @@ -2,6 +2,9 @@ namespace Dlhis.Entity.Sys.Entities; +/// +/// identity-roles +/// [SugarTable(TableName = "Roles")] public class RoleEntity { diff --git a/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs b/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs index 13168e7b..55a4a8e5 100644 --- a/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/UserEntity.cs @@ -2,6 +2,9 @@ namespace Dlhis.Entity.Sys.Entities; +/// +/// identity-user +/// [SugarTable("Users")] public class UserEntity {