diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs index 5bca130a..f9efc594 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs @@ -12,9 +12,12 @@ public class DevicePermissionSaveReuqest public AssignTypeEnumType AssignType { get; set; } /// - /// 人员档案号 + /// 分配值 /// - [Required(ErrorMessage = "人员档案号不能为空")] + /// + /// 如果为用户,那么AssignValue=UserNo + /// + [Required(ErrorMessage = "分配值不能为空")] public string AssignValue { get; set; } /// diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs index 8af87410..b6ab81bf 100644 --- a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs @@ -1,8 +1,6 @@ using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; -using Dlhis.Entity.Basic.Entity; using Kurisu.Core.DataAccess.Dto; -using Microsoft.AspNetCore.Mvc; namespace Dlhis.Basic.Device.Services; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 4c494bcc..7575648b 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -7,7 +7,6 @@ using Dlhis.Entity.Sys.Entities; using Dlhis.Entity.Sys.Enums; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; -using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Services; namespace Dlhis.Basic.Device.Services.Implements; @@ -25,7 +24,6 @@ public class DevicePermissionService : IDevicePermissionService { await GenerateDeviceTasksAsync(async () => { - var p = await _dbContext.Queryable() .Where(x => x.AssignType == reuqest.AssignType) .Where(x => x.AssignValue == reuqest.AssignValue) @@ -34,50 +32,27 @@ public class DevicePermissionService : IDevicePermissionService await _dbContext.DeleteReallyAsync(p); - var devicePermissions = reuqest.Codes.Select(x => new DevicePermissionEntity + var devicePermissions = reuqest.Codes.Select(grpOrDeviceCode => new DevicePermissionEntity { AssignType = reuqest.AssignType, AssignValue = reuqest.AssignValue, UniqueType = reuqest.UniqueType, - UniqueValue = x, + UniqueValue = grpOrDeviceCode, }).ToList(); - await _dbContext.InsertAsync(devicePermissions); + if (devicePermissions.Any()) + await _dbContext.InsertAsync(devicePermissions); }, null); } public async Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue) { - var devicePermissions = await _dbContext.Queryable() - .Where(x => x.UniqueType == uniqueType) - .Where(x => x.AssignType == assignType) - .Where(x => x.AssignValue == assignValue) - .Select(x => x.UniqueValue) - .ToListAsync(); + var devicePermissions = await _dbContext.Queryable().ToListAsync(); + var deviceGroups = await _dbContext.Queryable().ToListAsync(); - if (uniqueType == DeviceAssignmentTypeEnumType.Group) - { - var deviceGroups = await _dbContext.Queryable().ToListAsync(); - var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList(); - tops.ForEach(x => - { - RecursionGetNext(x, deviceGroups, devicePermissions, devicePermissions.Contains(x.Code)); - }); - } - - return devicePermissions.Distinct().ToList(); - - void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) - { - var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); - foreach (var item in next) - { - if (add) result.Add(item.Code); - RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code)); - } - } + return GetAssignmentsInternal(devicePermissions, deviceGroups, uniqueType, assignType, assignValue); } @@ -88,20 +63,18 @@ public class DevicePermissionService : IDevicePermissionService userNos = await GetPermissionUserNosAsync(); } - var beforeDic = await GetAssignDeviceCodesAsync(userNos); + var beforeDic = await GetAssignDeviceCodesInternalAsync(userNos); //获取处理 await func(); - //获取当前的权限code - var nextUserNos = await GetPermissionUserNosAsync(); if (nextUserNos.Any()) { userNos = nextUserNos; } - var currentDic = await GetAssignDeviceCodesAsync(userNos); + var currentDic = await GetAssignDeviceCodesInternalAsync(userNos); var deivces = await _dbContext.Queryable().ToListAsync(); foreach (var userNo in userNos) @@ -181,7 +154,6 @@ public class DevicePermissionService : IDevicePermissionService }) .SingleAsync(); - var tasks = deviceCodes.Select(x => new DeviceTaskEntity { DeviceUniqueNo = deivces.First(item => item.Code == x).UniqueNo, @@ -215,124 +187,58 @@ public class DevicePermissionService : IDevicePermissionService public async Task> GetAssignDeviceCodesAsync(string userNo) { var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync(); - var gainfoGroups = await _dbContext.Queryable().Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToListAsync(); + var gainfoGroups = await _dbContext.Queryable().ToListAsync(); + var devicePermissions = await _dbContext.Queryable().ToListAsync(); + var deviceGroups = await _dbContext.Queryable().ToListAsync(); + var deviceRelationships = await _dbContext.Queryable().ToListAsync(); + + return GetAssignDeviceCodesInternal(new List { gainfo }, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, userNo); + } + + public List GetAssignDeviceCodesInternal(List gainfos, + List gainfoGroupRelationships, + List devicePermissions, + List deviceGroups, + List deviceGroupRelationships, + string userNo) + { var deviceCodes = new List(); var deviceGroupCodes = new List(); - var du = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); - var gu = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); + var gainfo = gainfos.Where(x => x.No == userNo).FirstOrDefault(); + var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToList(); + + var du = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); + var gu = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); deviceCodes.AddRange(du); deviceGroupCodes.AddRange(gu); foreach (var group in gainfoGroups) { - var dg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString()); - var gg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString()); + var dg = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString()); + var gg = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString()); deviceCodes.AddRange(dg); deviceGroupCodes.AddRange(gg); } - var dd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); - var gd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); + var dd = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); + var gd = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); deviceCodes.AddRange(dd); deviceGroupCodes.AddRange(gd); - var dt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks); - var gt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Werks); + var dt = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks); + var gt = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Werks); deviceCodes.AddRange(du); deviceGroupCodes.AddRange(gu); - var deveiceCodesByGroup = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync(); + var deveiceCodesByGroup = deviceGroupRelationships.Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList(); deviceCodes.AddRange(deveiceCodesByGroup); return deviceCodes.Distinct().ToList(); } - private async Task>> GetAssignDeviceCodesAsync(List userNos) - { - var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); - if (!gainfos.Any()) - { - return new Dictionary>(); - } - var gainfoGroupRelationships = await _dbContext.Queryable().ToListAsync(); - var devicePermissions = await _dbContext.Queryable().ToListAsync(); - var deviceGroups = await _dbContext.Queryable().ToListAsync(); - var result = new Dictionary>(); - - foreach (var gainfo in gainfos) - { - var userNo = gainfo.No; - - var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).ToList(); - - var deviceCodes = new List(); - var deviceGroupCodes = new List(); - - var du = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); - var gu = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); - deviceCodes.AddRange(du); - deviceGroupCodes.AddRange(gu); - - foreach (var group in gainfoGroups) - { - var dg = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString()); - var gg = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString()); - deviceCodes.AddRange(dg); - deviceGroupCodes.AddRange(gg); - } - - var dd = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); - var gd = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); - deviceCodes.AddRange(dd); - deviceGroupCodes.AddRange(gd); - - var dt = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks); - var gt = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Werks); - deviceCodes.AddRange(du); - deviceGroupCodes.AddRange(gu); - - var deveiceCodesByGroup = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync(); - deviceCodes.AddRange(deveiceCodesByGroup); - - result.Add(userNo, deviceCodes.Distinct().ToList()); - } - - return result; - - - List GetAssignmentsInternal(DeviceAssignmentTypeEnumType uniqueTypeInternal, AssignTypeEnumType assignTypeInternal, string assignValueInternal) - { - var devicePermissionsInternal = devicePermissions.Where(x => x.UniqueType == uniqueTypeInternal) - .Where(x => x.AssignType == assignTypeInternal) - .Where(x => x.AssignValue == assignValueInternal) - .Select(x => x.UniqueValue) - .ToList(); - - if (uniqueTypeInternal == DeviceAssignmentTypeEnumType.Group) - { - var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList(); - tops.ForEach(x => - { - RecursionGetNext(x, deviceGroups, devicePermissionsInternal, devicePermissionsInternal.Contains(x.Code)); - }); - } - - return devicePermissionsInternal.Distinct().ToList(); - - void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) - { - var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); - foreach (var item in next) - { - if (add) result.Add(item.Code); - RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code)); - } - } - } - } /// /// 获取用户权限设备 @@ -412,8 +318,67 @@ public class DevicePermissionService : IDevicePermissionService var tenants = permissions.Where(x => x.AssignType == AssignTypeEnumType.Tenant).Select(x => x.AssignValue).ToList(); var userNosByWerk = await _dbContext.Queryable().Where(x => tenants.Contains(x.Werks)).Select(x => x.No).ToListAsync(); - - return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).ToList(); + return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).Distinct().ToList(); } + + private static List GetAssignmentsInternal( + List devicePermissions, List deviceGroups, + DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue) + { + var devicePermissionCodes = devicePermissions + .Where(x => x.UniqueType == uniqueType) + .Where(x => x.AssignType == assignType) + .Where(x => x.AssignValue == assignValue) + .Select(x => x.UniqueValue).ToList(); + + //处理获取设备组的情况,递归到最下级获取设备code + if (uniqueType == DeviceAssignmentTypeEnumType.Group) + { + var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList(); + tops.ForEach(x => + { + RecursionGetNext(x, deviceGroups, devicePermissionCodes, devicePermissionCodes.Contains(x.Code)); + }); + } + + return devicePermissionCodes.Distinct().ToList(); + + void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) + { + var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); + foreach (var item in next) + { + if (add) result.Add(item.Code); + RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code)); + } + } + } + + + private async Task>> GetAssignDeviceCodesInternalAsync(List userNos) + { + var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); + if (!gainfos.Any()) + { + return new Dictionary>(); + } + + var gainfoGroupRelationships = await _dbContext.Queryable().ToListAsync(); + var devicePermissions = await _dbContext.Queryable().ToListAsync(); + var deviceGroups = await _dbContext.Queryable().ToListAsync(); + var deviceRelationships = await _dbContext.Queryable().ToListAsync(); + + var result = new Dictionary>(); + + foreach (var gainfo in gainfos) + { + var userNo = gainfo.No; + var codes = GetAssignDeviceCodesInternal(gainfos, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, userNo); + + result.Add(userNo, codes); + } + + return result; + } } diff --git a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs b/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs index c0ebc007..77a92955 100644 --- a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs +++ b/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs @@ -12,13 +12,18 @@ public class AttendanceDeviceSummary /// /// 在线数 /// - public int OnlineCount { get; set; } + public int OnlineCount { get; set; } /// /// 启用数 /// public int EnableCount { get; set; } + /// + /// 离线数 + /// + public int OfflineCount => Total - OnlineCount; + /// /// 新增设备趋势 30天内 /// diff --git a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs index 38e03872..d1c15b1c 100644 --- a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs +++ b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs @@ -53,7 +53,7 @@ public class SummaryService : ISummaryService { if (x.HeartbeatInterval <= 0) { - return false; + return true; } return x.LastHeartbeatTime.AddSeconds(x.HeartbeatInterval * 3) >= now; diff --git a/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs index f41385d5..c4dcdf1b 100644 --- a/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs @@ -21,7 +21,7 @@ public enum AssignTypeEnumType Role = 2, /// - /// 组别 + /// 用户组别 /// [Description("组别")] Group = 3, diff --git a/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs b/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs index 2fc2c372..9e90db6e 100644 --- a/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs +++ b/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs @@ -48,7 +48,7 @@ public class HangfirePack : BaseAppPack new BasicAuthAuthorizationUser { Login ="admin", - PasswordClear = "admin" + PasswordClear = "dlhis123" } } })