From 53d46cee0ccbe75b3fabcab58238b8f9c17f10af Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 7 Jul 2025 12:42:04 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=A1=A5=E5=85=85=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetDataPermissionService.cs | 30 +++++++++++++++++++ Src/Dlhis.ScheduledTask/RecursionHelper.cs | 27 +++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 Src/Dlhis.ScheduledTask/RecursionHelper.cs diff --git a/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs b/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs index 2ee6f1d3..707de003 100644 --- a/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs +++ b/Src/Dlhis.ScheduledTask/DataPermissions/GetDataPermissionService.cs @@ -44,8 +44,38 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc .GetProperties() .FirstOrDefault(x => x.IsDefined(typeof(DeviceCodeAttribute), false)); + var deviceGroupCodeProperty = typeof(T) + .GetProperties() + .FirstOrDefault(x => x.IsDefined(typeof(DeviceGroupCodeAttribute), false)); + + var deviceCodes = new List(); + //先计算分组权限下的设备 + var deviceGroupCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Group).Select(x => x.UniqueValue).ToList(); + if (deviceGroupCodes.Any()) + { + var data = db.Queryable().ToList(); + + var myCodes = new List(); + foreach (Guid deviceGroupCode in deviceGroupCodes) + { + myCodes.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(deviceGroupCode, data)); + } + + myCodes = myCodes.Distinct().ToList(); + + if (deviceCodeProperty != null) + { + deviceCodes = db.Queryable().Where(x => myCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList(); + } + } + + if (deviceGroupCodeProperty != null) + { + dict.Add(deviceGroupCodeProperty.Name, deviceGroupCodes); + } + if (deviceCodeProperty != null) { var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Device).Select(x => x.UniqueValue).ToList(); diff --git a/Src/Dlhis.ScheduledTask/RecursionHelper.cs b/Src/Dlhis.ScheduledTask/RecursionHelper.cs new file mode 100644 index 00000000..3039719e --- /dev/null +++ b/Src/Dlhis.ScheduledTask/RecursionHelper.cs @@ -0,0 +1,27 @@ +using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Device.Entities; + +namespace Dlhis.ScheduledTask; + +public static class RecursionHelper +{ + + public static List HandlerDeviceGroupNextCodes(Guid current, List data) + { + var result = new List { current }; + + InternalHandlerCodes(current, data, result); + + return result; + + static void InternalHandlerCodes(Guid internalCurrent, List internalData, List internalResult) + { + var next = internalData.Where(x => x.PCode == internalCurrent); + foreach (var item in next) + { + internalResult.Add(item.Code); + InternalHandlerCodes(item.Code, internalData, internalResult); + } + } + } +} \ No newline at end of file