diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 65682aa1..f19e51fb 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -78,6 +78,7 @@ public class DevicePermissionsController : ControllerBase /// /// [HttpGet("gainfos/page")] + [CrossTenant] public async Task> GetGainfoPageByDeviceAsync([FromQuery] DeviceWithGainfoRequest request) { return await _devicePermissionService.GetGainfoPageByDeviceAsync(request); diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 63fbf923..6b1cae24 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -364,6 +364,7 @@ public class DevicePermissionService : IDevicePermissionService public async Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request) { var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync(); + var departments = await _dbContext.Queryable().ToListAsync(); //当前设备的分组 var groups = await _dbContext.Queryable() @@ -394,7 +395,14 @@ public class DevicePermissionService : IDevicePermissionService break; case AssignTypeEnumType.Department: { - ids.AddRange(await _dbContext.Queryable().Where(x => x.DepartmentNo == permission.AssignValue).Select(x => x.Id).ToListAsync()); + //递归向上获取 assignValue = department.No + var arr = permission.AssignValue.Split(":"); + var tenantId = arr.First(); + var currentDepartmentNo = arr.Last(); + var departmentNos = new List { currentDepartmentNo }; + DepartmentRecursionGetPNo(currentDepartmentNo, departments, departmentNos); + + ids.AddRange(await _dbContext.Queryable().Where(x => x.Factory == tenantId && departmentNos.Contains(x.DepartmentNo)).Select(x => x.Id).ToListAsync()); } break; case AssignTypeEnumType.Tenant: @@ -450,6 +458,16 @@ public class DevicePermissionService : IDevicePermissionService }); return page; + + void DepartmentRecursionGetPNo(string current, List data, List result) + { + var p = data.FirstOrDefault(x => x.No == current)?.PNo; + if (p.IsPresent()) + { + result.Add(p); + DepartmentRecursionGetPNo(p, data, result); + } + } } public async Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType, DeviceTaskSourceEnumType source)