From df299bb0199bf9865439f54eb90f90967a4d27b4 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 18 Dec 2024 11:53:32 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BB=BB=E5=8A=A1=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/AppointmentAreaService.cs | 4 +- .../Services/Implements/AppointmentService.cs | 57 ++++++++--------- .../DevicePermissionsController.cs | 13 +--- .../IDevicePermissionAnalyzeService.cs | 2 +- .../Services/IDevicePermissionService.cs | 11 ++-- .../Services/IDeviceTimePeriodService.cs | 2 +- .../BasePermissionAnalyzeService.cs | 33 +++++----- .../Services/Implements/DeviceGroupService.cs | 64 +++++++++---------- .../DevicePermissionAnalyzeService.cs | 8 +-- .../Implements/DevicePermissionService.cs | 55 ++++++---------- .../Services/Implements/DeviceService.cs | 4 +- .../Implements/DeviceTimePeriodService.cs | 12 ++-- .../GainfoPermissionsController.cs | 2 +- .../Services/IGainfoPermissionService.cs | 2 +- .../Services/Implements/GainfoFaceService.cs | 6 +- .../Services/Implements/GainfoGroupService.cs | 6 +- .../Implements/GainfoOutsourceService.cs | 2 +- .../Implements/GainfoPermissionService.cs | 10 +-- .../Services/Implements/GainfoService.cs | 10 +-- .../Implements/GainfoUpdateService.cs | 8 +-- .../Implements/SapBusinessTripService.cs | 6 +- .../Device/Entities/DeviceTaskEntity.cs | 4 +- .../Device/Enums/DeviceTaskSourceEnumType.cs | 40 ------------ .../Jobs/AutoConfirmAppointmentJob.cs | 2 +- .../Jobs/AutoRemoveAppointmentJob.cs | 2 +- .../Jobs/CreateGetUploadRecordJob.cs | 2 +- .../Jobs/CreateSyncServerDateTimeJob.cs | 2 +- 27 files changed, 151 insertions(+), 218 deletions(-) delete mode 100644 Src/Dlhis.Entity/Device/Enums/DeviceTaskSourceEnumType.cs diff --git a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs index 85ba8e54..34fd9041 100644 --- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs @@ -109,7 +109,7 @@ public class AppointmentAreaService : IAppointmentAreaService Status = DeviceTaskStatusEnumType.Wait, Version = 0, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Appointment, + Source = "预约区域和设备组关系变更生成", Priority = 99 })); @@ -122,7 +122,7 @@ public class AppointmentAreaService : IAppointmentAreaService Status = DeviceTaskStatusEnumType.Wait, Version = 0, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Appointment, + Source = "预约区域和设备组关系变更生成", Priority = 99 })); } diff --git a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs index 171d178f..d242d82a 100644 --- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs +++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentService.cs @@ -114,7 +114,7 @@ public class AppointmentService : IAppointmentService Face = request.Base64Image }); - await GenerateDeviceTasksAsync(detail, false, DeviceTaskEnumType.Add); + await GenerateDeviceTasksAsync(detail, false, DeviceTaskEnumType.Add, "访客门岗认证生成"); try { @@ -189,7 +189,7 @@ public class AppointmentService : IAppointmentService detail.FocusLeaveDateTime = DateTime.Now; detail.Remark += "强制离场原因:" + reason; - await GenerateDeviceTasksAsync(detail, true, DeviceTaskEnumType.Delete); + await GenerateDeviceTasksAsync(detail, true, DeviceTaskEnumType.Delete, "访客手动强制离场"); } public async Task> GetRecordPageByIdNoAsync(AppointmentIdNoPageRequest request) @@ -306,41 +306,40 @@ public class AppointmentService : IAppointmentService Face = base64 }); - await GenerateDeviceTasksAsync(detail, true, DeviceTaskEnumType.Update); + await GenerateDeviceTasksAsync(detail, true, DeviceTaskEnumType.Update, "访客手动上传照片"); } //********************************************************************************************************************* - private async Task GenerateDeviceTasksAsync(VisitorAppointmentDetailEntity detail, bool withWorkplace, DeviceTaskEnumType deviceTaskType) + private async Task GenerateDeviceTasksAsync(VisitorAppointmentDetailEntity detail, bool withWorkplace, DeviceTaskEnumType deviceTaskType, string source) { var areaCodes = GetValidAreaCodes(detail, withWorkplace).ToList(); - if (areaCodes.Any()) + if (areaCodes.IsEmpty()) return; + + var existsAreaCodes = await _dbContext.Queryable().Where(x => areaCodes.Contains(x.CustomCode)).Select(x => x.CustomCode).ToListAsync(); + + //当前分配的设备组code + var deviceGroupCodes = await _dbContext.Queryable() + .Where(x => existsAreaCodes.Contains(x.CustomCode)) + .Select(x => x.DeviceGroupCode) + .ToListAsync(); + + var deviceCodes = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync(); + var deviceUniqueNos = await _dbContext.Queryable().Where(x => deviceCodes.Contains(x.Code)).Select(x => new { x.UniqueNo, x.TenantId }).ToListAsync(); + + await _dbContext.InsertAsync(deviceUniqueNos.Select(x => new DeviceTaskEntity { - var existsAreaCodes = await _dbContext.Queryable().Where(x => areaCodes.Contains(x.CustomCode)).Select(x => x.CustomCode).ToListAsync(); - - //当前分配的设备组code - var deviceGroupCodes = await _dbContext.Queryable() - .Where(x => existsAreaCodes.Contains(x.CustomCode)) - .Select(x => x.DeviceGroupCode) - .ToListAsync(); - - var deviceCodes = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync(); - var deviceUniqueNos = await _dbContext.Queryable().Where(x => deviceCodes.Contains(x.Code)).Select(x => new { x.UniqueNo, x.TenantId }).ToListAsync(); - - await _dbContext.InsertAsync(deviceUniqueNos.Select(x => new DeviceTaskEntity - { - DeviceType = DeviceTypeEnumType.Door, - DeviceUniqueNo = x.UniqueNo, - Status = DeviceTaskStatusEnumType.Wait, - UserNo = detail.UserNo, - Type = deviceTaskType, - Priority = 100, - TenantId = x.TenantId, - Source = DeviceTaskSourceEnumType.Appointment, - Version = 0 - }).ToList()); - } + DeviceType = DeviceTypeEnumType.Door, + DeviceUniqueNo = x.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + UserNo = detail.UserNo, + Type = deviceTaskType, + Priority = 100, + TenantId = x.TenantId, + Source = source, + Version = 0 + }).ToList()); } private static IEnumerable GetValidAreaCodes(VisitorAppointmentDetailEntity detail, bool withWorkplace) diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 1770f26f..887b11ea 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -46,9 +46,9 @@ public class DevicePermissionsController : ControllerBase [AssignPermissionLimit] [Transactional] [CrossTenant] - public async Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request) + public async Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request) { - await _devicePermissionService.AssignToUniqueAsync(request); + return await _devicePermissionService.AssignToUniqueAsync(request); } [AllowAnonymous] @@ -98,13 +98,6 @@ public class DevicePermissionsController : ControllerBase [CrossTenant] public async Task ResetGainfoPageByDeviceAsync(DeviceGainfoReset request) { - await _devicePermissionService.ResetGainfoPageByDeviceAsync(request); - } - - [HttpGet("userPermissionCodes")] - [IgnoreTenant] - public async Task> GetAssignDeviceCodesAsync(string userCode) - { - return await _devicePermissionService.GetAssignDeviceCodesAsync(userCode); + await _devicePermissionService.ResetGainfoPageByDeviceAsync(request.Code); } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs index 92daf68d..770e99f3 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs @@ -14,7 +14,7 @@ public interface IDevicePermissionAnalyzeService : IScopeDependency { Task> GetDevicePermissionsAsync(DevicePermissionSaveRequest request); - Task GenerateDeviceTasksAsync(Func func, List userNos); + Task GenerateDeviceTasksAsync(Func func, List userNos, string source); Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request); diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index b3f56470..1e9b597f 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -1,7 +1,6 @@ using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; -using Dlhis.Basic.Organization.Dto; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.DataAccess.Dto; @@ -36,21 +35,21 @@ public interface IDevicePermissionService : IScopeDependency /// /// /// - Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType, DeviceTaskSourceEnumType source); + Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType, string source); /// /// 获取用户所有设备权限 /// - /// + /// /// - Task> GetAssignDeviceCodesAsync(string userCode); + Task> GetUserDeviceCodesByNoAsync(string userNo); Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request); /// /// 重新下载设备中所有人员 /// - /// + /// /// - Task ResetGainfoPageByDeviceAsync(DeviceGainfoReset request); + Task ResetGainfoPageByDeviceAsync(Guid code); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceTimePeriodService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceTimePeriodService.cs index 3ad85f9e..11171b85 100644 --- a/Src/Dlhis.Basic/Device/Services/IDeviceTimePeriodService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDeviceTimePeriodService.cs @@ -15,5 +15,5 @@ public interface IDeviceTimePeriodService : IScopeDependency Task DeleteCardTypeAsync(DeviceTimePeriodDeleteCardTypeRequest request); - Task GenerateDeviceTimePeriodTasksAsync(Func func); + Task GenerateDeviceTimePeriodTasksAsync(Func func, string source); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs index 9ef0df5a..c97a1ce4 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs @@ -35,6 +35,8 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService public async Task AnalyzeAsync(DevicePermissionSaveRequest request) { + var source = request.ToJson(); + var tasksToAdd = new List(); var tasksToDelete = new List(); @@ -61,7 +63,6 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService ? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(gainfoNos, request.UniqueType, request.GetActualAssignValue(), request.AssignType) : new Dictionary>(); - foreach (var gainfoNo in gainfoNos) { IEnumerable currentDevicesToDelete = devicesToDelete; @@ -83,7 +84,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = source, Priority = 0, TenantId = x.TenantId, }).ToList()); @@ -99,7 +100,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = source, Priority = 0, TenantId = x.TenantId, }).ToList()); @@ -117,7 +118,18 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService } - public async Task CheckAssignedToTenantAsync(DevicePermissionSaveRequest request) + /// + /// 获取分配当前类型关联的用户 + /// + /// + /// + protected abstract Task> GetGainfoNosAsync(string assignValue); + + + //************************************************************************************************************************ + + + private async Task CheckAssignedToTenantAsync(DevicePermissionSaveRequest request) { if (request.AssignType != AssignTypeEnumType.Tenant) { @@ -166,17 +178,8 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService } } } - - /// - /// 获取分配当前类型关联的用户 - /// - /// - /// - protected abstract Task> GetGainfoNosAsync(string assignValue); - - - // --------------------------------------------------------------------------------------------------------------------- // - + + private async Task ChunkInsertAsync(List batch) where T : class, new() { foreach (var tasks in batch.Chunk(500)) diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs index fd7737a7..24781f2f 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -196,14 +196,13 @@ public class DeviceGroupService : IDeviceGroupService .Where(x => deviceGroupCodes.Contains(x.UniqueValue)) .ToListAsync(); - if (!dps.Any()) + if (dps.IsEmpty()) { return new DevicePermissionAssignResponse(0, 0); } var gainfoNos = await GetPermissionUserNosAsync(dps); - var userTenantDeviceCodes = codesToDelete.IsPresent() && dps.Exists(x => x.AssignType != AssignTypeEnumType.Tenant) ? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(gainfoNos) : new Dictionary>(); @@ -227,47 +226,44 @@ public class DeviceGroupService : IDeviceGroupService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = "人员分组分配", Priority = 0, - TenantId = x.TenantId, + TenantId = x.TenantId }).ToList()); - if (userTenantDeviceCodes.Any()) + if (userTenantDeviceCodes.TryGetValue(gainfoNo, out var permissions)) { - if (userTenantDeviceCodes.TryGetValue(gainfoNo, out var permissions)) + foreach (var permission in permissions) { - foreach (var permission in permissions) + permission.AssignTypes = permission.AssignTypes.Where(p => { - permission.AssignTypes = permission.AssignTypes.Where(p => + if (p.UniqueType == DeviceAssignmentTypeEnumType.Device) { - if (p.UniqueType == DeviceAssignmentTypeEnumType.Device) - { - return true; - } + return true; + } - return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode; - }).ToList(); - } - - var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).ToList(); - var currentDevicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList(); - - tasksToDelete.AddRange(currentDevicesToDelete.Select(x => new DeviceTaskEntity - { - Type = DeviceTaskEnumType.Delete, - DeviceType = x.Type, - UserId = null, - UserNo = gainfoNo, - DeviceUniqueNo = x.UniqueNo, - Status = DeviceTaskStatusEnumType.Wait, - Version = 0, - ResultMessage = null, - CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, - Priority = 0, - TenantId = x.TenantId, - }).ToList()); + return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode; + }).ToList(); } + + var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).ToList(); + var currentDevicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList(); + + tasksToDelete.AddRange(currentDevicesToDelete.Select(x => new DeviceTaskEntity + { + Type = DeviceTaskEnumType.Delete, + DeviceType = x.Type, + UserId = null, + UserNo = gainfoNo, + DeviceUniqueNo = x.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + ResultMessage = null, + CancellationId = 0, + Source = "人员分组分配", + Priority = 0, + TenantId = x.TenantId, + }).ToList()); } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs index 376533f1..85b0ef7e 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs @@ -73,7 +73,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService } - public async Task GenerateDeviceTasksAsync(Func func, List userNos) + public async Task GenerateDeviceTasksAsync(Func func, List userNos, string source) { var before = await GetUserAssignDeviceCodesInTenantAsync(userNos); @@ -130,7 +130,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService UserNo = userNo, Version = 0, TenantId = tenant, - Source = DeviceTaskSourceEnumType.Manually + Source = source })); addItems.ForEach(x => waitAddTasks.Add(new DeviceTaskEntity @@ -142,7 +142,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService UserNo = userNo, Version = 0, TenantId = tenant, - Source = DeviceTaskSourceEnumType.Manually + Source = source })); } } @@ -162,7 +162,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); if (!gainfos.Any()) return new Dictionary>(); - var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); + var devices = await _dbContext.Queryable().ToListAsync(); var enableFactoryPermissions = await _dbContext.Queryable().ToListAsync(); diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 1b25b65c..dc79662d 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -101,8 +101,8 @@ public class DevicePermissionService : IDevicePermissionService Status = DeviceTaskStatusEnumType.Wait, Version = 0, ResultMessage = null, - CancellationId = 20, - Source = DeviceTaskSourceEnumType.Manually, + CancellationId = 0, + Source = "人员分配到设备unique", Priority = 0, TenantId = currentTenantId, })); @@ -113,7 +113,9 @@ public class DevicePermissionService : IDevicePermissionService { foreach (var permission in permissions) { - permission.AssignTypes = permission.AssignTypes.Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device).ToList(); + permission.AssignTypes = permission.AssignTypes + .Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device && x.AssignType != AssignTypeEnumType.User) + .ToList(); } var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList(); @@ -130,7 +132,7 @@ public class DevicePermissionService : IDevicePermissionService Version = 0, ResultMessage = null, CancellationId = 20, - Source = DeviceTaskSourceEnumType.Manually, + Source = "人员分配到设备unique", Priority = 0, TenantId = currentTenantId }); @@ -208,7 +210,7 @@ public class DevicePermissionService : IDevicePermissionService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = "人员分配到设备import", Priority = 0, TenantId = device.TenantId, }).ToList(); @@ -274,8 +276,7 @@ public class DevicePermissionService : IDevicePermissionService var arr = permission.AssignValue.Split(":"); var tenantId = arr.First(); var currentDepartmentNo = arr.Last(); - var departmentNos = new List { currentDepartmentNo }; - DepartmentRecursionGetNext(currentDepartmentNo, departments, departmentNos); + var departmentNos = RecursionHelper.HandlerDepartmentNextCodes(currentDepartmentNo, departments); ids.AddRange(await _dbContext.Queryable().Where(x => x.Factory == tenantId && departmentNos.Contains(x.DepartmentNo)).Select(x => x.Id).ToListAsync()); } @@ -337,9 +338,9 @@ public class DevicePermissionService : IDevicePermissionService } /// - public async Task ResetGainfoPageByDeviceAsync(DeviceGainfoReset request) + public async Task ResetGainfoPageByDeviceAsync(Guid code) { - var device = await _dbContext.Queryable().Where(x => x.Code == request.Code).SingleAsync(); + var device = await _dbContext.Queryable().Where(x => x.Code == code).SingleAsync(); device.ThrowIfNull("设备不存在"); var departments = await _dbContext.Queryable().ToListAsync(); @@ -363,8 +364,8 @@ public class DevicePermissionService : IDevicePermissionService break; case AssignTypeEnumType.Group: { - var code = Guid.Parse(permission.AssignValue); - gainfoNos.AddRange(await _dbContext.Queryable().Where(x => x.Code == code) + var groupCode = Guid.Parse(permission.AssignValue); + gainfoNos.AddRange(await _dbContext.Queryable().Where(x => x.Code == groupCode) .LeftJoin((a, b) => a.Code == b.GroupCode) .LeftJoin((a, b, c) => b.UserNo == c.No) .Select((a, b, c) => c.No).ToListAsync()); @@ -376,8 +377,7 @@ public class DevicePermissionService : IDevicePermissionService var arr = permission.AssignValue.Split(":"); var tenantId = arr.First(); var currentDepartmentNo = arr.Last(); - var departmentNos = new List { currentDepartmentNo }; - DepartmentRecursionGetNext(currentDepartmentNo, departments, departmentNos); + var departmentNos = RecursionHelper.HandlerDepartmentNextCodes(currentDepartmentNo, departments); gainfoNos.AddRange(await _dbContext.Queryable().Where(x => x.Factory == tenantId && departmentNos.Contains(x.DepartmentNo)).Select(x => x.No).ToListAsync()); } @@ -404,31 +404,21 @@ public class DevicePermissionService : IDevicePermissionService UserNo = x, Version = 0, TenantId = device.TenantId, - Source = DeviceTaskSourceEnumType.Manually + Source = "重新生成设备下的人员" }).ToList()); } - void DepartmentRecursionGetNext(string current, List data, List result) + public async Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType, string source) { - var next = data.Where(x => x.PNo == current); - foreach (var item in next) - { - result.Add(item.No); - DepartmentRecursionGetNext(item.No, data, result); - } - } - - public async Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType, DeviceTaskSourceEnumType source) - { - var deviceCodes = await GetAssignDeviceCodesAsync(userNo); - if (!deviceCodes.Any()) return; + var deviceCodes = await GetUserDeviceCodesByNoAsync(userNo); + if (deviceCodes.IsEmpty()) return; var devices = await _dbContext.Queryable() .Where(x => x.Enable) .Where(x => deviceCodes.Contains(x.Code)) .ToListAsync(); - var tasks = devices.Select(x => new DeviceTaskEntity + await _dbContext.InsertAsync(devices.Select(x => new DeviceTaskEntity { DeviceUniqueNo = x.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, @@ -440,20 +430,17 @@ public class DevicePermissionService : IDevicePermissionService Version = 0, TenantId = x.TenantId, Source = source - }).ToList(); - - await _dbContext.InsertAsync(tasks); + }).ToList()); } /// /// 获取用户所有设备权限 /// - /// + /// /// - public async Task> GetAssignDeviceCodesAsync(string userCode) + public async Task> GetUserDeviceCodesByNoAsync(string userNo) { - var userNo = await _dbContext.Queryable().Where(x => x.Code == userCode || x.No == userCode).Select(x => x.No).SingleAsync(); var result = await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(new List { userNo }); return result.First().Value.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList(); } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index 6830d0ce..b34213f7 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -106,7 +106,7 @@ public class DeviceService : IDeviceService request.Adapt(entity); await _dbContext.UpdateAsync(entity); - + var registry = await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == request.UniqueNo).SingleAsync(); if (registry == null) { @@ -123,7 +123,7 @@ public class DeviceService : IDeviceService } await GenerateUploadRecordLogForBeginTimeAsync(entity); - }); + }, "设备启用/关闭时段码功能"); } /// diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceTimePeriodService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceTimePeriodService.cs index 05b39c7c..0f16b0f6 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceTimePeriodService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceTimePeriodService.cs @@ -79,7 +79,7 @@ public class DeviceTimePeriodService : IDeviceTimePeriodService await _dbContext.UpdateAsync(entity); } - }); + }, "时段码变更"); } /// @@ -121,11 +121,11 @@ public class DeviceTimePeriodService : IDeviceTimePeriodService entity.ThrowIfNull("数据不存在"); await _dbContext.DeleteReallyAsync(entity); - }); + }, "删除时段码"); } - public async Task GenerateDeviceTimePeriodTasksAsync(Func func) + public async Task GenerateDeviceTimePeriodTasksAsync(Func func, string source) { var cardTypes = await _dbContext.Queryable().Where(x => x.Type == "timeperiod").Select(x => SqlFunc.ToInt32(x.Code)).ToListAsync(); @@ -159,9 +159,9 @@ public class DeviceTimePeriodService : IDeviceTimePeriodService Status = DeviceTaskStatusEnumType.Wait, Version = 0, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = source, Priority = 90, - TenantId = device.TenantId, + TenantId = device.TenantId }); continue; @@ -192,7 +192,7 @@ public class DeviceTimePeriodService : IDeviceTimePeriodService Status = DeviceTaskStatusEnumType.Wait, Version = 0, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = source, Priority = 90, TenantId = device.TenantId }); diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs index 822ca79d..bef333d1 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs @@ -55,6 +55,6 @@ public class GainfoPermissionsController : ControllerBase [HttpPost("reset")] public async Task ResetPermissionsAsync(GainfoPermissionResetRequest request) { - return await _gainfoPermissions.ResetPermissionsAsync(request.UserNo, request.Status ? DeviceTaskEnumType.Add : DeviceTaskEnumType.Delete, null); + return await _gainfoPermissions.ResetPermissionsAsync(request.UserNo, request.Status ? DeviceTaskEnumType.Add : DeviceTaskEnumType.Delete, null, "admin手动操作重置"); } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs index c5b15bb0..b3729bf3 100644 --- a/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs @@ -13,5 +13,5 @@ public interface IGainfoPermissionService : IScopeDependency Task> GetAssignDeviceCodesAsync(DeviceAssRequest request); - Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes); + Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes, string source); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs index e1732961..d52e8d76 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs @@ -137,7 +137,7 @@ public class GainfoFaceService : IGainfoFaceService await _faceDbContext.UpdateAsync(face); } - await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, DeviceTaskSourceEnumType.Photo); + await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, "照片上传生成"); } public async Task GetExternalFaceAsync(string idno) @@ -264,7 +264,7 @@ public class GainfoFaceService : IGainfoFaceService } //生成任务 - await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, DeviceTaskSourceEnumType.Photo); + await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, "照片上传生成"); } public async Task UploadFacesAsync(List requests) @@ -309,7 +309,7 @@ public class GainfoFaceService : IGainfoFaceService } //生成任务 - await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, DeviceTaskSourceEnumType.Photo); + await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType, "照片上传生成"); } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs index 1e2f90bd..071b8647 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs @@ -178,7 +178,7 @@ public class GainfoGroupService : IGainfoGroupService { continue; } - + deleteTasks.Add(new DeviceTaskEntity { Type = DeviceTaskEnumType.Delete, @@ -190,7 +190,7 @@ public class GainfoGroupService : IGainfoGroupService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = "手动操作人员分组关系", Priority = 0, TenantId = device.TenantId }); @@ -210,7 +210,7 @@ public class GainfoGroupService : IGainfoGroupService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = "手动操作人员分组关系", Priority = 0, TenantId = device.TenantId }); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs index 775af9e6..b08bb76f 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs @@ -148,7 +148,7 @@ public class GainfoOutsourceService : IGainfoOutsourceService await _gainfoService.ResignAsync(new GainfoResignRequest { Id = outsource.Id, - Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无打开记录", + Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无通行记录", Date = DateTime.Now, IsOutsource = true }); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs index 37f44e02..c88bf32d 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs @@ -1,10 +1,8 @@ using Dlhis.Basic.Device.Dtos; -using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Basic.Device.Services; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; -using Dlhis.Basic.Places.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; @@ -18,13 +16,11 @@ namespace Dlhis.Basic.Organization.Services.Implements; public class GainfoPermissionService : IGainfoPermissionService { - private readonly IGainfoStore _gainfoStore; private readonly IDevicePermissionAnalyzeService _devicePermissionAnalyzeService; private readonly IDbContext _dbContext; - public GainfoPermissionService(IGainfoStore gainfoStore, IDevicePermissionAnalyzeService devicePermissionAnalyzeService, IDbContext dbContext) + public GainfoPermissionService(IDevicePermissionAnalyzeService devicePermissionAnalyzeService, IDbContext dbContext) { - _gainfoStore = gainfoStore; _devicePermissionAnalyzeService = devicePermissionAnalyzeService; _dbContext = dbContext; } @@ -154,7 +150,7 @@ public class GainfoPermissionService : IGainfoPermissionService } - public async Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes) + public async Task ResetPermissionsAsync(string userNo, DeviceTaskEnumType type, List deviceCodes, string source) { var gainfo = await _dbContext.Queryable() .Where(x => x.No == userNo) @@ -193,7 +189,7 @@ public class GainfoPermissionService : IGainfoPermissionService DeviceType = x.Type, TenantId = x.TenantId, Priority = 10, - Source = DeviceTaskSourceEnumType.Manually, + Source = source, }).ToList(); await _dbContext.InsertAsync(tasks); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index addbf9c1..d328f4c1 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -254,8 +254,8 @@ public class GainfoService : IGainfoService (outsource == null).ThrowIfTrue("非外包人员不可手动离职"); } - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, null); - + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, null, request.Reason); + await _dbContext.Deleteable().Where(x => x.UserNo != gainfo.No).ExecuteCommandAsync(); await _dbContext.Deleteable().Where(x => x.AssignType == AssignTypeEnumType.User && x.AssignValue == gainfo.No).ExecuteCommandAsync(); @@ -288,7 +288,7 @@ public class GainfoService : IGainfoService await _dbContext.UpdateAsync(gainfo); - var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.Code); + var deviceCodes = await _devicePermissionService.GetUserDeviceCodesByNoAsync(gainfo.No); var dhDevices = await _dbContext.Queryable().LeftJoin((x, xt) => x.TemplateCode == xt.Code) .Where((x, xt) => xt.Name == "大华人脸机") @@ -306,7 +306,7 @@ public class GainfoService : IGainfoService Version = 0, ResultMessage = null, CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, + Source = "安全级别提高", Priority = 60, TenantId = x.TenantId }).ToList()); @@ -451,7 +451,7 @@ public class GainfoService : IGainfoService //海宁触发权限下发 if (gainfo.Workplace == "5") { - await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, DeviceTaskEnumType.Add, DeviceTaskSourceEnumType.Migration); + await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, DeviceTaskEnumType.Add, "人员迁移生成"); } } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index b50fce1d..0f467016 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -175,7 +175,7 @@ public class GainfoUpdateService : IGainfoUpdateService { await _dbContext.InsertAsync(info); await _identityUserSyncService.SyncAccountAsync(info.Code, info.Name, info.IdNo, info.Factory); - }, new List { info.No }); + }, new List { info.No }, "入职生成"); } else { @@ -283,7 +283,7 @@ public class GainfoUpdateService : IGainfoUpdateService }).Where(x => x.Code == item.ename).ExecuteCommandAsync(); await _identityUserSyncService.SyncAccountAsync(gainfo.Code, gainfo.Name, gainfo.IdNo, factory); - }, new List { gainfo.No }); + }, new List { gainfo.No }, "人员数据变更"); } else { @@ -307,7 +307,7 @@ public class GainfoUpdateService : IGainfoUpdateService gainfo.Id = gainfo.IdentityUserId; await _dbContext.DeleteReallyAsync(gainfo); - }, new List { gainfo.No }); + }, new List { gainfo.No }, "人员离职生成"); await _dbContext.Client.Ado.CommitTranAsync(); } @@ -420,7 +420,7 @@ public class GainfoUpdateService : IGainfoUpdateService var native = GetNative(person.ZZ_SFZH); var sex = person.GESCH == "2" ? "F" : "M"; - person.ZZ_SFZH = person.ZZ_SFZH?.TrimStart(); + person.ZZ_SFZH = person.ZZ_SFZH.TrimStart(); GainfoSapEntity o = new() { gname = person.NAME, diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs index 4fbdcd90..2aeb6b73 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs @@ -101,7 +101,7 @@ public class SapBusinessTripService : ISapBusinessTripService await _dbContext.UpdateAsync(todayTripInfo); //下发 - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add, deviceCodes); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add, deviceCodes, "出差昨天今天都有"); continue; } @@ -120,7 +120,7 @@ public class SapBusinessTripService : ISapBusinessTripService .ExecuteCommandAsync(); await _dbContext.UpdateAsync(yesterdayTripInfo); - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, deviceCodes); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Delete, deviceCodes, "出差昨天有今天无"); } if (yesterdayTripInfo == null) @@ -149,7 +149,7 @@ public class SapBusinessTripService : ISapBusinessTripService todayTripInfo.Status = BusinessTripStatusEnumType.Generated; await _dbContext.UpdateAsync(todayTripInfo); - await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add, deviceCodes); + await _gainfoPermissionService.ResetPermissionsAsync(gainfo.No, DeviceTaskEnumType.Add, deviceCodes, "出差昨天无今天有"); } } catch (Exception e) diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs index d558a4b0..79ca66e0 100644 --- a/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs +++ b/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs @@ -68,8 +68,8 @@ public class DeviceTaskEntity : SugarBaseEntity, ITenantId, IVersion /// /// 任务来源 /// - [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))] - public DeviceTaskSourceEnumType? Source { get; set; } + [SugarColumn(IsNullable = true, ColumnDataType = "varchar(255)")] + public string Source { get; set; } /// /// 优先级 diff --git a/Src/Dlhis.Entity/Device/Enums/DeviceTaskSourceEnumType.cs b/Src/Dlhis.Entity/Device/Enums/DeviceTaskSourceEnumType.cs deleted file mode 100644 index af61b9da..00000000 --- a/Src/Dlhis.Entity/Device/Enums/DeviceTaskSourceEnumType.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.ComponentModel; - -namespace Dlhis.Entity.Device.Enums; - -/// -/// 设备任务来源 -/// -[Description("设备任务来源")] -public enum DeviceTaskSourceEnumType -{ - /// - /// 手动分配 - /// - [Description("手动分配")] - Manually = 1, - - /// - /// 上传照片 - /// - [Description("上传照片")] - Photo = 2, - - /// - /// 数据迁移 - /// - [Description("数据迁移")] - Migration = 3, - - /// - /// 任务调度 - /// - [Description("任务调度")] - Schedule = 4, - - /// - /// 预约 - /// - [Description("预约")] - Appointment = 10, -} \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/Jobs/AutoConfirmAppointmentJob.cs b/Src/Dlhis.ScheduledTask/Jobs/AutoConfirmAppointmentJob.cs index f87c9f01..225fbec0 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/AutoConfirmAppointmentJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/AutoConfirmAppointmentJob.cs @@ -55,7 +55,7 @@ public class AutoConfirmAppointmentJob : BaseJob Type = DeviceTaskEnumType.Add, Priority = 100, TenantId = x.TenantId, - Source = DeviceTaskSourceEnumType.Appointment, + Source = "定时任务判断触发车间下发任务", Version = 0 }).ToList()); diff --git a/Src/Dlhis.ScheduledTask/Jobs/AutoRemoveAppointmentJob.cs b/Src/Dlhis.ScheduledTask/Jobs/AutoRemoveAppointmentJob.cs index 4b2089e5..8faf467c 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/AutoRemoveAppointmentJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/AutoRemoveAppointmentJob.cs @@ -57,7 +57,7 @@ public class AutoRemoveAppointmentJob : BaseJob Type = DeviceTaskEnumType.Delete, Priority = 100, TenantId = x.TenantId, - Source = DeviceTaskSourceEnumType.Appointment, + Source = "定时任务判断触发移除", Version = 0 }).ToList()); diff --git a/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs b/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs index b62379be..f43ccec9 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs @@ -39,7 +39,7 @@ public class CreateGetUploadRecordJob : BaseJob Type = DeviceTaskEnumType.UploadRecord, CancellationId = 0, Priority = 50, - Source = DeviceTaskSourceEnumType.Schedule + Source = "定时任务创建设备获取通行记录任务" }).ToList(); await DbContext.InsertAsync(tasks); diff --git a/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs b/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs index d6b85b72..08f60d2e 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs @@ -40,7 +40,7 @@ public class CreateSyncServerDateTimeJob : BaseJob Type = DeviceTaskEnumType.SyncDateTime, DeviceType = x.Type, Priority = 49, - Source = DeviceTaskSourceEnumType.Schedule + Source = "定时任务创建设备同步时间任务" }).ToList(); await DbContext.InsertAsync(tasks);