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)