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, }