feat 获取需排除的人员

This commit is contained in:
2025-10-10 17:41:06 +08:00
parent af38a600e8
commit 011c166439
4 changed files with 96 additions and 34 deletions

View File

@@ -121,7 +121,7 @@ public class DevicePermissionsController : ControllerBase
/// <returns></returns> /// <returns></returns>
[HttpGet("gainfo/others")] [HttpGet("gainfo/others")]
[IgnoreTenant] [IgnoreTenant]
public async Task<object> ExternalAndManuallyUserNoAsync(string deviceUniqueNo) public async Task<DeviceOtherUserCountResponse> ExternalAndManuallyUserNoAsync(string deviceUniqueNo)
{ {
return await _devicePermissionService.ExternalAndManuallyUserNoAsync(deviceUniqueNo); return await _devicePermissionService.ExternalAndManuallyUserNoAsync(deviceUniqueNo);
} }
@@ -147,4 +147,11 @@ public class DevicePermissionsController : ControllerBase
{ {
return await _devicePermissionService.ResetVisitorsByDeviceAsync(deviceUniqueNo); return await _devicePermissionService.ResetVisitorsByDeviceAsync(deviceUniqueNo);
} }
[HttpGet("exceptUsers")]
[IgnoreTenant]
public async Task<List<string>> GetDeviceExceptUsersAsync(string deviceUniqueNo)
{
return await _devicePermissionService.GetDeviceExceptUsersAsync(deviceUniqueNo);
}
} }

View File

@@ -0,0 +1,14 @@
namespace Dlhis.Basic.Device.Response;
public class DeviceOtherUserCountResponse
{
/// <summary>
/// 例外(手动单独分配)
/// </summary>
public int ManuallyUserCount { get; set; }
/// <summary>
/// 访客
/// </summary>
public int VisitorCount { get; set; }
}

View File

@@ -54,7 +54,10 @@ public interface IDevicePermissionService : IScopeDependency
Task<List<string>> GetDeviceUserCodesAsync(string deviceUniqueNo); Task<List<string>> GetDeviceUserCodesAsync(string deviceUniqueNo);
Task<object> ExternalAndManuallyUserNoAsync(string deviceUniqueNo); Task<DeviceOtherUserCountResponse> ExternalAndManuallyUserNoAsync(string deviceUniqueNo);
Task<int> ResetVisitorsByDeviceAsync(string deviceUniqueNo); Task<int> ResetVisitorsByDeviceAsync(string deviceUniqueNo);
Task<List<string>> GetDeviceExceptUsersAsync(string deviceUniqueNo);
} }

View File

@@ -335,6 +335,31 @@ public class DevicePermissionService : IDevicePermissionService
} }
public async Task<int> ResetVisitorsByDeviceAsync(string deviceUniqueNo)
{
var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo);
device.ThrowIfNull("设备不存在");
var userNos = await GetDeviceUserNosFromVisitorAsync(device.Code);
var deviceTaskEntities = userNos.Select(x => new DeviceTaskEntity
{
Type = DeviceTaskEnumType.Add,
DeviceType = device.Type,
UserId = null,
UserNo = x,
DeviceUniqueNo = device.UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
Version = 0,
ResultMessage = null,
Source = "手动下发设备中的访客人员",
Priority = 0,
TenantId = device.TenantId
}).ToList();
return await _dbContext.InsertAsync(deviceTaskEntities);
}
//********************************************************************help methods******************************************************************************************** //********************************************************************help methods********************************************************************************************
/// <summary> /// <summary>
@@ -468,26 +493,53 @@ public class DevicePermissionService : IDevicePermissionService
return ids.Distinct().ToList(); return ids.Distinct().ToList();
} }
public async Task<object> ExternalAndManuallyUserNoAsync(string deviceUniqueNo) public async Task<DeviceOtherUserCountResponse> ExternalAndManuallyUserNoAsync(string deviceUniqueNo)
{ {
var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo); var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo);
device.ThrowIfNull("设备不存在"); device.ThrowIfNull("设备不存在");
var devicePermissionManuallyUserNoCount = await _dbContext.Queryable<GainfoEntity>() var devicePermissionManuallyUserNos = await GetManuallyDeviceUserNoAsync(device.Code);
.Where(x => SqlFunc.Subqueryable<DevicePermissionManuallyEntity>() var visitorUserNos = await GetDeviceUserNosFromVisitorAsync(device.Code);
.Where(p => p.DeviceCode == device.Code)
.Where(p => p.UserNo == x.No).Any())
.CountAsync();
var userNos = await GetDeviceUserNosFromVisitorAsync(device.Code); return new DeviceOtherUserCountResponse
return new
{ {
ManuallyUserCount = devicePermissionManuallyUserNoCount, ManuallyUserCount = devicePermissionManuallyUserNos.Count,
VisitorCount = userNos.Count VisitorCount = visitorUserNos.Count
}; };
} }
public async Task<List<string>> GetDeviceExceptUsersAsync(string deviceUniqueNo)
{
var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo);
device.ThrowIfNull("设备不存在");
var userIds = await GetDeviceUserIdsAsync(deviceUniqueNo);
var userCodes = await _dbContext.Queryable<GainfoEntity>()
.Where(x => userIds.Contains(x.Id))
.Select(x => x.Code)
.ToListAsync();
var devicePermissionManuallyUserNos = await GetManuallyDeviceUserNoAsync(device.Code);
var visitorUserNos = await GetDeviceUserNosFromVisitorAsync(device.Code);
var otherUserCodes = await _dbContext.Queryable<GainfoEntity>()
.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<DeviceUserEntity>()
.Where(x => x.DeviceUniqueNo == deviceUniqueNo)
.Select(x => x.UserCode)
.ToListAsync();
//获取deviceExistsUserCodes不存在existsUserCodes的工号
var toDeleteUserCodes = deviceExistsUserCodes.Except(existsUserCodes).ToList();
return toDeleteUserCodes;
}
public async Task<List<string>> GetDeviceUserCodesAsync(string deviceUniqueNo) public async Task<List<string>> GetDeviceUserCodesAsync(string deviceUniqueNo)
{ {
var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo); var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo);
@@ -553,27 +605,13 @@ public class DevicePermissionService : IDevicePermissionService
.ToList(); .ToList();
} }
public async Task<int> ResetVisitorsByDeviceAsync(string deviceUniqueNo) private async Task<List<string>> GetManuallyDeviceUserNoAsync(Guid deviceCode)
{ {
var device = await _dbContext.Queryable<DeviceEntity>().SingleAsync(x => x.UniqueNo == deviceUniqueNo); return await _dbContext.Queryable<GainfoEntity>()
device.ThrowIfNull("设备不存在"); .Where(x => SqlFunc.Subqueryable<DevicePermissionManuallyEntity>()
.Where(p => p.DeviceCode == deviceCode)
var userNos = await GetDeviceUserNosFromVisitorAsync(device.Code); .Where(p => p.UserNo == x.No).Any())
var deviceTaskEntities = userNos.Select(x => new DeviceTaskEntity .Select(x => x.No)
{ .ToListAsync();
Type = DeviceTaskEnumType.Add,
DeviceType = device.Type,
UserId = null,
UserNo = x,
DeviceUniqueNo = device.UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
Version = 0,
ResultMessage = null,
Source = "手动下发设备中的访客人员",
Priority = 0,
TenantId = device.TenantId
}).ToList();
return await _dbContext.InsertAsync(deviceTaskEntities);
} }
} }