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
{