diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index a812b5a3..f6620c07 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -550,17 +550,25 @@ public class DevicePermissionService : IDevicePermissionService var userCodes = await GetDeviceExceptUsersAsync(deviceUniqueNo); - var userNos = await _dbContext.Queryable() + var gainfoMap = await _dbContext.Queryable() .Where(x => userCodes.Contains(x.Code)) - .Select(x => x.No) + .Select(x => new { x.Code, x.No }) .ToListAsync(); - var userNoLeaves = await _dbContext.Queryable() + var leaveMap = await _dbContext.Queryable() .Where(x => userCodes.Contains(x.Code)) - .Select(x => x.No) + .Select(x => new { x.Code, x.No }) .ToListAsync(); + var userNos = gainfoMap.Select(x => x.No).ToList(); + var userNoLeaves = leaveMap.Select(x => x.No).ToList(); + + // 找出没有在两个表中映射到 No 的 code,原样作为 No 加入 + var mappedCodes = gainfoMap.Select(x => x.Code).Concat(leaveMap.Select(x => x.Code)).Distinct().ToList(); + var notMappedCodes = userCodes.Except(mappedCodes).ToList(); + userNos.AddRange(userNoLeaves); + userNos.AddRange(notMappedCodes); await _dbContext.Updateable() .SetColumns(x => x.IsDeleted == true) @@ -568,7 +576,9 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.DeviceUniqueNo == deviceUniqueNo) .ExecuteCommandAsync(); - return await _dbContext.InsertAsync(userNos.Select(x => new DeviceTaskEntity + var distinctUserNos = userNos.Distinct().ToList(); + + return await _dbContext.InsertAsync(distinctUserNos.Select(x => new DeviceTaskEntity { DeviceUniqueNo = device.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs index 220bde21..551e4d82 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/DeviceTaskAssignmentService.cs @@ -68,7 +68,7 @@ public class DeviceTaskAssignmentService : IDeviceTaskAssignmentService Status = deviceTask.Status, UserNo = deviceTask.UserNo, UserName = SqlFunc.IsNull(ga.Name, gaLeave.Name), - UserCode = SqlFunc.IsNull(ga.Code, gaLeave.Code), + UserCode = SqlFunc.IsNull(SqlFunc.IsNull(ga.Code, gaLeave.Code), deviceTask.UserNo), Type = deviceTask.Type, CreateTime = deviceTask.CreateTime, LastUpdateTime = deviceTask.ModifiedTime,