diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 3a4b96dc..7ab07e4b 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -134,6 +134,14 @@ public class DevicePermissionsController : ControllerBase } + [HttpGet("temp-userPermissionCodes")] + [IgnoreTenant] + public async Task GetAssignDeviceCodesAsync(List userCodes) + { + return await _devicePermissionService.GetUserDeviceCodesByNoAsync(userCodes); + } + + [HttpGet("test-userPermissionCodes")] [IgnoreTenant] public async Task>> GetTestAssignDeviceCodesAsync(string userNo) diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index 10764054..a291b882 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -63,4 +63,6 @@ public interface IDevicePermissionService : IScopeDependency Task> GetDeviceNotInUsersAsync(string deviceUniqueNo); Task GenerateDeleteDeviceTasksAsync(string deviceUniqueNo); + + Task GetUserDeviceCodesByNoAsync(List userCodes); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 49b44072..346ab709 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -342,6 +342,41 @@ public class DevicePermissionService : IDevicePermissionService return deviceCodes.Concat(manuallyDeviceCodes).Distinct().ToList(); } + public async Task GetUserDeviceCodesByNoAsync(List userCodes) + { + var users = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).Select(x => new { x.No, x.Code, x.Name }).ToListAsync(); + var userNos = users.Select(x => x.No).ToList(); + + //例外处理: 特殊手动分配的设备权限 + var manuallyDeviceCodes = await _dbContext.Queryable() + .Where(x => userNos.Contains(x.UserNo)) + .Select(x => new { x.UserNo, x.DeviceCode }) + .ToListAsync(); + + var result = await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(userNos); + + var userWithDeviceCodes = result.ToDictionary(x => x.Key, x => + { + var codes = x.Value.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList(); + var userManuallyDeviceCodes = manuallyDeviceCodes.Where(p => p.UserNo == x.Key).Select(p => p.DeviceCode).ToList(); + return codes.Concat(userManuallyDeviceCodes).Distinct().ToList(); + }); + + var devices = await _dbContext.Queryable().ToListAsync(); + + var finialResult = new List(); + foreach (var item in userWithDeviceCodes) + { + var userNo = item.Key; + var user = users.First(x => x.No == userNo); + + var details = devices.Where(x => item.Value.Contains(x.Code)).Select(x => new { UserCode = user.Code, UserName = user.Name, DeviceUniqueNo = x.UniqueNo, DeviceDeployPlace = x.DeployPlace }); + finialResult.AddRange(details); + } + + return finialResult; + } + public async Task ResetVisitorsByDeviceAsync(string deviceUniqueNo) {