diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index fc8934fa..3a4b96dc 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -155,6 +155,14 @@ public class DevicePermissionsController : ControllerBase return await _devicePermissionService.GetDeviceExceptUsersAsync(deviceUniqueNo); } + [HttpGet("notInDeviceUsers")] + [IgnoreTenant] + public async Task> GetDeviceNotInUsersAsync(string deviceUniqueNo) + { + return await _devicePermissionService.GetDeviceNotInUsersAsync(deviceUniqueNo); + } + + [HttpPost("removeExceptUsers")] [Transactional] [IgnoreTenant] diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index 34475ebc..10764054 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -60,6 +60,7 @@ public interface IDevicePermissionService : IScopeDependency Task> GetDeviceExceptUsersAsync(string deviceUniqueNo); + Task> GetDeviceNotInUsersAsync(string deviceUniqueNo); Task GenerateDeleteDeviceTasksAsync(string deviceUniqueNo); } \ 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 6285a778..49b44072 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -545,6 +545,35 @@ public class DevicePermissionService : IDevicePermissionService return toDeleteUserCodes; } + + public async Task> GetDeviceNotInUsersAsync(string deviceUniqueNo) + { + var device = await _dbContext.Queryable().SingleAsync(x => x.UniqueNo == deviceUniqueNo); + device.ThrowIfNull("设备不存在"); + + var usersQuery = await GetDeviceUsersQueryAsync(deviceUniqueNo, string.Empty, null); + var userCodes = (await usersQuery.ToListAsync()).Select(x => x.Code); + + var devicePermissionManuallyUserNos = await GetManuallyDeviceUserNoAsync(device.Code); + var visitorUserNos = await GetDeviceUserNosFromVisitorAsync(device.Code); + + var otherUserCodes = await _dbContext.Queryable() + .Where(x => devicePermissionManuallyUserNos.Contains(x.No) || visitorUserNos.Contains(x.No)) + .Select(x => x.Code) + .ToListAsync(); + + var existsUserCodes = userCodes.Concat(otherUserCodes).Distinct().ToList(); + + var deviceExistsUserCodes = await _dbContext.Queryable() + .Where(x => x.DeviceUniqueNo == deviceUniqueNo) + .Select(x => x.UserCode) + .ToListAsync(); + + //获取existsUserCodes不存在deviceExistsUserCodes的工号 + var toAddUserCodes = existsUserCodes.Except(deviceExistsUserCodes).ToList(); + return toAddUserCodes; + } + public async Task GenerateDeleteDeviceTasksAsync(string deviceUniqueNo) { var device = await _dbContext.Queryable().SingleAsync(x => x.UniqueNo == deviceUniqueNo);