diff --git a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs index 66a5089f..723635c4 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs @@ -43,6 +43,7 @@ public class DeviceGroupsController : ControllerBase /// /// [HttpPost("save")] + [IgnoreTenant] public async Task SaveAsync(DeviceGroupSaveRequest request) { await _deviceGroupService.SaveAsync(request); diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs index f9efc594..ae282891 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs @@ -27,7 +27,7 @@ public class DevicePermissionSaveReuqest public DeviceAssignmentTypeEnumType UniqueType { get; set; } /// - /// 分配权限值不能为空 + /// 分配权限值 /// - public List Codes { get; set; } = new List(); + public List Codes { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs index 23cc9137..3bef9e57 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -43,11 +43,7 @@ public class DeviceGroupService : IDeviceGroupService public async Task SaveAsync(DeviceGroupSaveRequest request) { //检查父级节点 - await CheckPCodeExistsDeviceAsync(request.PCode); - - var pGrp = await _dbContext.Queryable().Where(x => x.Code == request.PCode).FirstAsync(); - pGrp.AbleSetNext.ThrowIfFalse($"分组{pGrp.Name}不可添加下级"); - (pGrp != null && pGrp.Type != request.Type).ThrowIfTrue("分组类型必须与上级类型保持一致"); + var pGrp = await CheckPCodeAsync(request); if (!request.Id.HasValue) { @@ -59,8 +55,8 @@ public class DeviceGroupService : IDeviceGroupService else { var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync(); - entity.ThrowIfNull("设备组不存在,无法更新"); - entity.Editable.ThrowIfFalse("不可编辑当前组"); + entity.ThrowIfNull("设备分组不存在,无法更新"); + entity.Editable.ThrowIfFalse("不可编辑当前分组"); if (request.Type != entity.Type) { @@ -84,7 +80,7 @@ public class DeviceGroupService : IDeviceGroupService public async Task DeleteAsync(long id) { var deviceGroup = await _dbContext.Queryable().Where(x => x.Id == id).FirstAsync(); - deviceGroup.ThrowIfNull("设备组不存在,无需删除"); + deviceGroup.ThrowIfNull("设备分组不存在,无需删除"); await _dbContext.DeleteAsync(deviceGroup); } @@ -131,28 +127,35 @@ public class DeviceGroupService : IDeviceGroupService /****************************************************** help methods *********************************************************/ /// - /// 检查父级分组存在设备 + /// 检查父级分组 /// - /// + /// /// - private async Task CheckPCodeExistsDeviceAsync(Guid? pCode) + private async Task CheckPCodeAsync(DeviceGroupSaveRequest request) { - if (pCode.HasValue) + + var pGrp = await _dbContext.Queryable().Where(x => x.Code == request.PCode).FirstAsync(); + if (pGrp != null) { - var exists = await _dbContext.Queryable().Where(x => x.GroupCode == pCode).AnyAsync(); + (!pGrp.AbleSetNext && !request.Id.HasValue).ThrowIfTrue($"{pGrp.Name}不可添加下级"); + var exists = await _dbContext.Queryable().Where(x => x.GroupCode == request.PCode).AnyAsync(); exists.ThrowIfTrue("父级分组存在设备"); } + + (pGrp != null && pGrp.Type != request.Type).ThrowIfTrue("分组类型必须与上级类型保持一致"); + + return pGrp; } /// - /// + /// 检查分组是否存在下级 /// /// /// private async Task CheckNoNextGroupAsync(Guid currentCode) { var exists = await _dbContext.Queryable().Where(x => x.PCode == currentCode).AnyAsync(); - exists.ThrowIfTrue("存在下级设备分组"); + exists.ThrowIfTrue("存在下级设备分组,无法分配设备"); } /// @@ -165,7 +168,7 @@ public class DeviceGroupService : IDeviceGroupService { var devices = await _dbContext.Queryable().Where(x => request.DeviceCodes.Contains(x.Code)).ToListAsync(); //检查分组的分类控制 - devices.Any(x => x.Type != group.Type).ThrowIfTrue("存在设备类型有误,无法分配到当前分组"); + devices.Any(x => x.Type != group.Type).ThrowIfTrue($"存在设备类型不一致,无法分配到当前{group.Type.GetDescription()}分组"); //重新赋值到请求参数中 request.DeviceCodes = devices.Select(x => x.Code).ToList(); diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index e28e3c0d..42fac162 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -47,19 +47,25 @@ public class DeviceService : IDeviceService var deviceUniqueNos = page.Data.Select(x => x.UniqueNo).ToList(); - var balanceRecords = await _dbContext.Queryable().Where(x => x.Type == BalanceRecordTypeEnumType.Out) + var balanceInfos = await _dbContext.Queryable().Where(x => x.Type == BalanceRecordTypeEnumType.Out) .Where(x => deviceUniqueNos.Contains(x.DeviceInfo)) .Select(x => new { - x.Amount, - x.UserCode + x.DeviceInfo, + Amount = SqlFunc.AggregateSum(x.Amount), + UserCount = SqlFunc.AggregateDistinctCount(x.UserCode) }) + .GroupBy(x => x.DeviceInfo) .ToListAsync(); page.Data.ForEach(device => { - device.Amount = balanceRecords.Sum(x => x.Amount); - device.UserCount = balanceRecords.DistinctBy(x => x.UserCode).Count(); + var info = balanceInfos.FirstOrDefault(x => x.DeviceInfo == device.UniqueNo); + if (info != null) + { + device.Amount = info.Amount; + device.UserCount = info.UserCount; + } }); return page; diff --git a/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs index 8f2a3c09..39135b68 100644 --- a/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs @@ -13,7 +13,7 @@ namespace Dlhis.Entity.Sys.Entities; public class DevicePermissionEntity : SugarBaseEntity, ITenantId { /// - /// 分配权限类型 + /// 分配权限类型(User,Role,Group...) /// [SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "分配权限类型", SqlParameterDbType = typeof(EnumToStringConvert))] public AssignTypeEnumType AssignType { get; set; } @@ -25,7 +25,7 @@ public class DevicePermissionEntity : SugarBaseEntity, ITenantId public string AssignValue { get; set; } /// - /// 设备权限类型 + /// 设备权限类型(Device/DeviceGroup) /// [SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "设备权限类型", SqlParameterDbType = typeof(EnumToStringConvert))] public DeviceAssignmentTypeEnumType UniqueType { get; set; } diff --git a/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs b/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs index ed994038..bd7cdb19 100644 --- a/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs +++ b/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs @@ -38,11 +38,11 @@ public class HeartbeatJob await _dbContext.Updateable().SetColumns(x => x.LastHeartbeatTime == DateTime.Now) .Where(x => x.DeviceUniqueNo == device.UniqueNo).ExecuteCommandAsync(); - _logger.LogInformation("心跳设备成功:{no}", device.UniqueNo); + // _logger.LogInformation("心跳设备成功:{no}", device.UniqueNo); } - catch (Exception ex) + catch (Exception) { - _logger.LogError(ex, "心跳设备失败:{no}. {message}", device.UniqueNo, ex.Message); + //_logger.LogError(ex, "心跳设备失败:{no}. {message}", device.UniqueNo, ex.Message); } } }