feat 获取需排除的人员
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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; }
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user