diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index b6b5f369..d0f468c4 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -114,4 +114,13 @@ public class DevicePermissionsController : ControllerBase { return await _devicePermissionService.GetUserDevicePermissionsAsync(code); } + + + [AllowAnonymous] + [HttpGet("test2")] + [IgnoreTenant] + public async Task GetUserDevicePermissions2Async() + { + await _devicePermissionService.GetUserDevicePermissions2Async(); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index e228ce00..1f118f91 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -38,6 +38,8 @@ public interface IDevicePermissionService : IScopeDependency Task>> GetUserDevicePermissionsAsync(string code); + Task GetUserDevicePermissions2Async(); + /// /// 生成下发任务 /// diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 4156ce61..fecba190 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -774,6 +774,49 @@ public class DevicePermissionService : IDevicePermissionService return await GetAssignDeviceCodesInternalAsync(new List { userNo }); } + /// + public async Task GetUserDevicePermissions2Async() + { + var today = DateTime.Today; + var yesterday = today.AddDays(-1); + + var tripInfos = await _dbContext.Queryable() + .LeftJoin((x, ga) => x.Code == ga.Code) + .Where(x => SqlFunc.DateIsSame(x.BeginDate, today) || SqlFunc.DateIsSame(x.BeginDate, yesterday)) + .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) + .Select((x, ga) => new + { + x.Code, UserNo = ga.No + }) + .ToListAsync(); + + + //获取人员的设备权限 + + + foreach (var tripInfo in tripInfos) + { + var myDeviceCodes = await GetAssignDeviceCodesAsync(tripInfo.Code); + + var devices = await _dbContext.Queryable().Where(x => myDeviceCodes.Contains(x.Code)).ToListAsync(); + + var tasks = devices.Select(x => new DeviceTaskEntity + { + DeviceUniqueNo = x.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + UserNo = tripInfo.UserNo, + Type = DeviceTaskEnumType.Add, + DeviceType = x.Type, + TenantId = x.TenantId, + Priority = 10, + Source = DeviceTaskSourceEnumType.Manually + }).ToList(); + + await _dbContext.InsertAsync(tasks); + } + } + public async Task GenerateDeviceTasksAsync(Func func, List userNos) { var getAllUser = userNos.IsEmpty(); diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs index a5f6d054..a5b7caed 100644 --- a/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs @@ -17,5 +17,5 @@ public interface IGainfoPermissionService : IScopeDependency Task> GetAssignGroupAsync(string userNo); - Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type); + Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs index 7a379f8d..72156e44 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs @@ -143,7 +143,7 @@ public class GainfoPermissionService : IGainfoPermissionService } - public async Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type) + public async Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes) { var gainfo = await _dbContext.Queryable() .Where(x => x.No == userNo) @@ -170,8 +170,13 @@ public class GainfoPermissionService : IGainfoPermissionService gainfo.ThrowIfNull($"档案数据有误:{msg}"); //获取人员的设备权限 - var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo!.Code); - var devices = await _dbContext.Queryable().Where(x => deviceCodes.Contains(x.Code)).ToListAsync(); + var myDeviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo!.Code); + if (deviceCodes.IsPresent()) + { + myDeviceCodes = deviceCodes; + } + + var devices = await _dbContext.Queryable().Where(x => myDeviceCodes.Contains(x.Code)).ToListAsync(); var tasks = devices.Select(x => new DeviceTaskEntity { diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 156bca6f..7982be9b 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -267,7 +267,7 @@ public class GainfoService : IGainfoService gainfo.Id = gainfo.IdentityUserId; await _dbContext.DeleteReallyAsync(gainfo); - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, null); } public async Task SetSecurityWhiteAsync(string userCode) diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs index 7a94b2b2..8c0eabec 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs @@ -63,8 +63,7 @@ public class SapBusinessTripService : ISapBusinessTripService //获取今天和昨天的出差数据 var tripInfos = await _dbContext.Queryable() - .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today)) - || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday))) + .Where(x => SqlFunc.DateIsSame(x.BeginDate, today) || SqlFunc.DateIsSame(x.BeginDate, yesterday)) .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) .Where(x => x.Destination == factory) .ToListAsync(); @@ -76,6 +75,8 @@ public class SapBusinessTripService : ISapBusinessTripService .Where(x => x.IsBusinessTrip) .SingleAsync(); + var deviceCodes = await _dbContext.Queryable().Where(x => x.GroupCode == tripGroup.Code).Select(x => x.DeviceCode).ToListAsync(); + var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList(); var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).Select(x => new { x.No, x.Code }).ToListAsync(); @@ -115,8 +116,7 @@ public class SapBusinessTripService : ISapBusinessTripService .ExecuteCommandAsync(); await _dbContext.UpdateAsync(yesterdayTripInfo); - - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, deviceCodes); } if (yesterdayTripInfo == null) @@ -145,7 +145,7 @@ public class SapBusinessTripService : ISapBusinessTripService todayTripInfo.Status = BusinessTripStatusEnumType.Generated; await _dbContext.UpdateAsync(todayTripInfo); - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add, null); } } catch (Exception e)