diff --git a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
index bba3ae80..c05c41ba 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
@@ -1,6 +1,7 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
using Dlhis.Basic.Device.Services;
+using Dlhis.Entity.Device.Enums;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -37,11 +38,12 @@ public class DeviceGroupsController : ControllerBase
/// 获取设备组树
///
/// 是否显示设备
+ /// 分组类型
///
[HttpGet("tree")]
- public async Task> GetTreeAsync(bool showDevices)
+ public async Task> GetTreeAsync(bool showDevices, DeviceTypeEnumType? type)
{
- return await _deviceGroupService.GetTreeAsync(showDevices);
+ return await _deviceGroupService.GetTreeAsync(showDevices, type);
}
///
diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs
index 419810f2..aee1a3d9 100644
--- a/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DeviceGroupPageRequest.cs
@@ -1,7 +1,12 @@
-using Kurisu.Core.DataAccess.Dto;
+using Dlhis.Entity.Device.Enums;
+using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.Device.Request;
public class DeviceGroupPageRequest : PageDto
{
+ ///
+ /// 分组类型
+ ///
+ public DeviceTypeEnumType? Type { get; set; }
}
diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs
index 35240dac..9cbf1ee9 100644
--- a/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DeviceGroupSaveRequest.cs
@@ -21,7 +21,6 @@ public class DeviceGroupSaveRequest
///
/// 分类类型 DeviceTypeEnumType
///
- [Required(ErrorMessage = "分类不能为空")]
[EnumDataType(typeof(DeviceTypeEnumType))]
- public DeviceTypeEnumType Type { get; set; }
+ public DeviceTypeEnumType? Type { get; set; }
}
diff --git a/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs
index 446557ed..8d81e4a4 100644
--- a/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs
+++ b/Src/Dlhis.Basic/Device/Response/DeviceGroupPageResponse.cs
@@ -1,4 +1,7 @@
-namespace Dlhis.Basic.Device.Response;
+using Dlhis.Entity.Device.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+
+namespace Dlhis.Basic.Device.Response;
public class DeviceGroupPageResponse
{
@@ -11,4 +14,25 @@ public class DeviceGroupPageResponse
/// 设备组名称
///
public string Name { get; set; }
+
+ ///
+ /// 分组类型
+ ///
+ public DeviceTypeEnumType? Type { get; set; }
+
+ ///
+ /// 分组类型描述
+ ///
+ public string TypeDesc
+ {
+ get
+ {
+ if (!Type.HasValue)
+ {
+ return string.Empty;
+ }
+
+ return Type.Value.GetDescription();
+ }
+ }
}
diff --git a/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs b/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs
index 806a7d9b..c9d59404 100644
--- a/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs
+++ b/Src/Dlhis.Basic/Device/Response/DeviceUnderGroupResponse.cs
@@ -1,4 +1,6 @@
-namespace Dlhis.Basic.Device.Response;
+using Dlhis.Entity.Device.Enums;
+
+namespace Dlhis.Basic.Device.Response;
public class DeviceUnderGroupResponse
{
@@ -14,6 +16,12 @@ public class DeviceUnderGroupResponse
///
public string Brand { get; set; }
+ ///
+ /// 设备类型
+ ///
+ public DeviceTypeEnumType Type { get; set; }
+
+
///
/// 是否启用
///
diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs
index e759376e..13368b4f 100644
--- a/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDeviceGroupService.cs
@@ -1,5 +1,6 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
+using Dlhis.Entity.Device.Enums;
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Basic.Device.Services;
@@ -8,7 +9,7 @@ public interface IDeviceGroupService : IScopeDependency
{
Task> GetPageAsync(DeviceGroupPageRequest request);
- Task> GetTreeAsync(bool showDevices);
+ Task> GetTreeAsync(bool showDevices, DeviceTypeEnumType? type);
Task SaveAsync(DeviceGroupSaveRequest request);
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
index 3047dc21..04722357 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
@@ -2,6 +2,7 @@
using Dlhis.Basic.Device.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
+using Dlhis.Entity.Device.Enums;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.SqlSugar.Attributes;
@@ -26,13 +27,15 @@ public class DeviceGroupService : IDeviceGroupService
{
return await _dbContext.Queryable()
.WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search))
+ .WhereIF(request.Type.HasValue, x => x.Type == request.Type)
.Select()
.ToPageListAsync(request);
}
- public async Task> GetTreeAsync(bool showDevices)
+ public async Task> GetTreeAsync(bool showDevices, DeviceTypeEnumType? type)
{
var deviceGroups = await _dbContext.Queryable()
+ .WhereIF(type.HasValue, x => x.Type == type)
.Select()
.ToListAsync();
@@ -61,6 +64,18 @@ public class DeviceGroupService : IDeviceGroupService
{
var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync();
entity.ThrowIfNull("设备组不存在,无法更新");
+
+ var nextDevices = await GetDevicesAsync(entity.Code);
+ if (!entity.Type.HasValue)
+ {
+ (request.Type.HasValue && nextDevices.Any(x => x.Type != request.Type)).ThrowIfTrue($"分组设备存在非{request.Type.Value.GetDescription()}类型的设备设备");
+ }
+ else
+ {
+ (request.Type.HasValue && request.Type != entity.Type && nextDevices.Any()).ThrowIfTrue("分组设备类型不匹配,无法修改类型");
+ }
+
+
await _dbContext.UpdateAsync(entity);
}
}
@@ -73,6 +88,7 @@ public class DeviceGroupService : IDeviceGroupService
await _dbContext.DeleteAsync(deviceGroup);
}
+
[Transactional]
public async Task AssignDevicesAsync(DeviceAssignRequest request)
{
diff --git a/Src/Dlhis.Entity/Basic/Entity/DeviceEntity.cs b/Src/Dlhis.Entity/Basic/Entity/DeviceEntity.cs
index 6c24630f..6bde31c3 100644
--- a/Src/Dlhis.Entity/Basic/Entity/DeviceEntity.cs
+++ b/Src/Dlhis.Entity/Basic/Entity/DeviceEntity.cs
@@ -84,5 +84,12 @@ public class DeviceEntity : SugarBaseEntity, ITenantId
[SugarColumn(ColumnDataType = "bit", ColumnDescription = "是否启用")]
public bool Enable { get; set; }
+
+ ///
+ /// 是否作为考勤设备
+ ///
+ [SugarColumn(ColumnDataType = "bit", ColumnDescription = "是否作为考勤设备")]
+ public bool AsAttendance { get; set; }
+
public string TenantId { get; set; }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Entity/Device/Enums/DeviceTypeEnumType.cs b/Src/Dlhis.Entity/Device/Enums/DeviceTypeEnumType.cs
index 230e6e17..48c2ec70 100644
--- a/Src/Dlhis.Entity/Device/Enums/DeviceTypeEnumType.cs
+++ b/Src/Dlhis.Entity/Device/Enums/DeviceTypeEnumType.cs
@@ -25,10 +25,4 @@ public enum DeviceTypeEnumType
///
[Description("考勤")]
Attendance = 3,
-
- ///
- /// 门禁并作为考勤
- ///
- [Description("门禁并作为考勤")]
- DoorAndAttendance = 4,
}