From ea5761d9b4102e7850d799c3226150a1b72ec963 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 15 Jan 2024 14:55:26 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=A1=A3=E6=A1=88=E7=BB=84,=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=9D=83=E9=99=90=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevicePermissionsController.cs | 20 +-- .../Request/DeviceGetAssignmentsRequest.cs | 19 ++- .../Request/DevicePermissionSaveReuqest.cs | 13 +- .../Services/IDevicePermissionService.cs | 16 +-- .../Implements/DevicePermissionService.cs | 135 +++++++++++------- Src/Dlhis.Basic/Dlhis.Basic.csproj | 2 +- .../Controllers/GainfoGroupsController.cs | 80 +++++++++++ .../Controllers/GainfosController.cs | 7 +- .../Request/GainfoAssignRequest.cs | 17 +++ .../Request/GainfoDImissionRequest.cs | 17 ++- .../Request/GainfoGroupPageRequest.cs | 7 + .../Request/GainfoGroupSaveRequest.cs | 16 +++ .../Request/GainfoUploadFaceRequest.cs | 20 ++- .../Response/GainfoGroupResponse.cs | 19 +++ .../Services/IGainfoGroupService.cs | 18 +++ .../Organization/Services/IGainfoService.cs | 4 +- .../Services/Implements/GainfoGroupService.cs | 101 +++++++++++++ .../Services/Implements/GainfoService.cs | 4 +- 18 files changed, 408 insertions(+), 107 deletions(-) create mode 100644 Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs create mode 100644 Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs create mode 100644 Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs create mode 100644 Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs create mode 100644 Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs create mode 100644 Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs create mode 100644 Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 0efd2afc..aedb02e5 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -20,12 +20,12 @@ public class DevicePermissionsController : ControllerBase /// /// 分配权限 /// - /// + /// /// [HttpPost("assign")] - public async Task AssignmentAsync(List requests) + public async Task AssignAsync(DevicePermissionSaveReuqest request) { - await _devicePermissionService.AssignmentAsync(requests); + await _devicePermissionService.AssignAsync(request); } /// @@ -36,18 +36,6 @@ public class DevicePermissionsController : ControllerBase [HttpGet("assignments")] public async Task> GetAssignmentsAsync([FromQuery] DeviceGetAssignmentsRequest request) { - return await _devicePermissionService.GetAssignmentsAsync(request.UserNo, request.UniqueType); - } - - - /// - /// 重置 - /// - /// - /// - [HttpPost("reset")] - public async Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request) - { - await _devicePermissionService.ResetAssignmentsAsync(request); + return await _devicePermissionService.GetAssignmentsAsync(request.UniqueType, request.AssignType, request.AssignValue); } } diff --git a/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs index f4974b17..9d4f4114 100644 --- a/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/DeviceGetAssignmentsRequest.cs @@ -6,14 +6,19 @@ namespace Dlhis.Basic.Device.Request; public class DeviceGetAssignmentsRequest { /// - /// 用户档案号 - /// - [Required] - public string UserNo { get; set; } - - /// - /// 权限分配类型 MenuAssignmentTypeEnumType + /// 权限分配类型 DeviceAssignmentTypeEnumType /// [EnumDataType(typeof(DeviceAssignmentTypeEnumType))] public DeviceAssignmentTypeEnumType UniqueType { get; set; } + + /// + /// 分配类型 AssignTypeEnumType + /// + [EnumDataType(typeof(AssignTypeEnumType))] + public AssignTypeEnumType AssignType { get; set; } + + /// + /// 分配值 + /// + public string AssignValue { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs index e115b57d..5bca130a 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs @@ -5,14 +5,20 @@ namespace Dlhis.Basic.Device.Request; public class DevicePermissionSaveReuqest { + /// + /// 分配类型 AssignTypeEnumType + /// + [EnumDataType(typeof(AssignTypeEnumType), ErrorMessage = "枚举类型错误")] + public AssignTypeEnumType AssignType { get; set; } + /// /// 人员档案号 /// [Required(ErrorMessage = "人员档案号不能为空")] - public string UserNo { get; set; } + public string AssignValue { get; set; } /// - /// 分配权限类型 DevicePermissionTypeEnumType + /// 来源分配权限类型 DevicePermissionTypeEnumType /// [EnumDataType(typeof(DeviceAssignmentTypeEnumType), ErrorMessage = "枚举类型错误")] public DeviceAssignmentTypeEnumType UniqueType { get; set; } @@ -20,6 +26,5 @@ public class DevicePermissionSaveReuqest /// /// 分配权限值不能为空 /// - [Required(ErrorMessage = "分配权限值不能为空")] - public Guid UniqueValue { get; set; } + public List Codes { get; set; } = new List(); } diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index 8c75e764..b88bd079 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -8,24 +8,18 @@ public interface IDevicePermissionService : IScopeDependency /// /// 保存设备权限 /// - /// + /// /// - Task AssignmentAsync(List reuqests); + Task AssignAsync(DevicePermissionSaveReuqest reuqest); /// /// 获取分配的权限 /// - /// /// + /// + /// /// - Task> GetAssignmentsAsync(string userNo, DeviceAssignmentTypeEnumType? uniqueType); - - - /// - /// 重置分配 - /// - /// - Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request); + Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue); /// diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 3798ede7..e1f52e36 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -20,81 +20,66 @@ public class DevicePermissionService : IDevicePermissionService } [Transactional] - public async Task AssignmentAsync(List reuqests) + public async Task AssignAsync(DevicePermissionSaveReuqest reuqest) { - foreach (var grp in reuqests.GroupBy(x => x.UserNo)) + await GenerateDeviceTasksAsync(async () => { - var userNo = grp.Key; - var data = grp.AsEnumerable().DistinctBy(x => x.UniqueValue).ToList(); + await _dbContext.Client.Deleteable() + .Where(x => x.AssignType == reuqest.AssignType) + .Where(x => x.AssignValue == reuqest.AssignValue) + .ExecuteCommandAsync(); - await GenerateDeviceTasksAsync(async () => + var devicePermissions = reuqest.Codes.Select(x => new DevicePermissionEntity { - await _dbContext.Client.Deleteable() - .Where(x => x.UserNo == userNo) - .ExecuteCommandAsync(); + AssignType = reuqest.AssignType, + AssignValue = reuqest.AssignValue, + UniqueType = reuqest.UniqueType, + UniqueValue = x, + }).ToList(); - var devicePermissions = data.Select(x => new DevicePermissionEntity - { - UserNo = x.UserNo, - UniqueType = x.UniqueType, - UniqueValue = x.UniqueValue, + await _dbContext.InsertAsync(devicePermissions); - }).ToList(); - - await _dbContext.InsertAsync(devicePermissions); - - }, new List { userNo }); - }; + }, null); } - public async Task> GetAssignmentsAsync(string userNo, DeviceAssignmentTypeEnumType? uniqueType) + public async Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue) { - var assignments = await _dbContext.Queryable() - .WhereIF(uniqueType.HasValue, x => x.UniqueType == uniqueType) - .Where(x => x.UserNo == userNo) + var devicePermissions = await _dbContext.Queryable() + .Where(x => x.UniqueType == uniqueType) + .Where(x => x.AssignType == assignType) + .Where(x => x.AssignValue == assignValue) .Select(x => x.UniqueValue) .ToListAsync(); - if (uniqueType.HasValue && uniqueType == DeviceAssignmentTypeEnumType.Group) + if (uniqueType == DeviceAssignmentTypeEnumType.Group) { var deviceGroups = await _dbContext.Queryable().ToListAsync(); var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList(); tops.ForEach(x => { - RecursionGetNext(x, deviceGroups, assignments, assignments.Contains(x.Code)); + RecursionGetNext(x, deviceGroups, devicePermissions, devicePermissions.Contains(x.Code)); }); } - return assignments.Distinct().ToList(); + return devicePermissions.Distinct().ToList(); void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) { var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); foreach (var item in next) { - if (add) assignments.Add(item.Code); - RecursionGetNext(item, deviceGroups, result, assignments.Contains(item.Code)); + if (add) result.Add(item.Code); + RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code)); } } } - public async Task ResetAssignmentsAsync(DeviceResetAssignmentsRequest request) - { - await GenerateDeviceTasksAsync(async () => - { - await _dbContext.Client.Deleteable() - .Where(x => x.UserNo == request.UserNo) - .ExecuteCommandAsync(); - - }, new List { request.UserNo }); - } - public async Task GenerateDeviceTasksAsync(Func func, List userNos) { if (userNos.IsEmpty()) { - userNos = await _dbContext.Queryable().Select(x => x.UserNo).Distinct().ToListAsync(); + userNos = await GetPermissionUserNosAsync(); } var beforeDic = new Dictionary>(userNos.Count); @@ -108,6 +93,7 @@ public class DevicePermissionService : IDevicePermissionService //获取当前的权限code var currentDic = new Dictionary>(userNos.Count); + userNos = await GetPermissionUserNosAsync(); foreach (var userNo in userNos) { currentDic.TryAdd(userNo, await GetAssignDeviceCodesAsync(userNo)); @@ -115,8 +101,11 @@ public class DevicePermissionService : IDevicePermissionService foreach (var userNo in userNos) { - var beforeCodes = beforeDic[userNo]; - var currentCodes = currentDic[userNo]; + beforeDic.TryGetValue(userNo, out var beforeCodes); + if (beforeCodes == null) beforeCodes = new List(); + + currentDic.TryGetValue(userNo, out var currentCodes); + if (currentCodes == null) currentCodes = new List(); //被删除 var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList(); @@ -171,6 +160,32 @@ public class DevicePermissionService : IDevicePermissionService //************************************************ help methods ******************************************************* + private async Task> GetPermissionUserNosAsync() + { + var permissions = await _dbContext.Queryable().ToListAsync(); + //User + var userNos = permissions.Where(x => x.AssignType == AssignTypeEnumType.User).Select(x => x.AssignValue).ToList(); + + //Group + var groupCode = permissions.Where(x => x.AssignType == AssignTypeEnumType.Group).Select(x => Guid.Parse(x.AssignValue)).ToList(); + var userNosByGroup = await _dbContext.Queryable() + .Where(x => groupCode.Contains(x.GroupCode)) + .Select(x => x.UserNo) + .ToListAsync(); + + //Department + var departmentNos = permissions.Where(x => x.AssignType == AssignTypeEnumType.Department).Select(x => x.AssignValue).ToList(); + var userNosByDepartment = await _dbContext.Queryable().Where(x => departmentNos.Contains(x.DepartmentNo)).Select(x => x.No).ToListAsync(); + + //Tenant + var tenants = permissions.Where(x => x.AssignType == AssignTypeEnumType.Tenant).Select(x => x.AssignValue).ToList(); + var userNosByWerk = await _dbContext.Queryable().Where(x => tenants.Contains(x.Werks)).Select(x => x.No).ToListAsync(); + + + return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).ToList(); + } + + /// /// 获取用户所有设备权限 /// @@ -178,17 +193,37 @@ public class DevicePermissionService : IDevicePermissionService /// private async Task> GetAssignDeviceCodesAsync(string userNo) { - var deviceCodes = await GetAssignmentsAsync(userNo, DeviceAssignmentTypeEnumType.Device); + var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync(); + var gainfoGroups = await _dbContext.Queryable().Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToListAsync(); - var groupCodes = await GetAssignmentsAsync(userNo, DeviceAssignmentTypeEnumType.Group); - var deviceCodeUnderGroups = await _dbContext.Queryable() - .Where(x => groupCodes.Contains(x.GroupCode)) - .Select(x => x.DeviceCode) - .Distinct() - .ToListAsync(); + var deviceCodes = new List(); + var deviceGroupCodes = new List(); - deviceCodes.AddRange(deviceCodeUnderGroups); + var du = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); + var gu = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); + deviceCodes.AddRange(du); + deviceGroupCodes.AddRange(gu); + foreach (var group in gainfoGroups) + { + var dg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString()); + var gg = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString()); + deviceCodes.AddRange(dg); + deviceGroupCodes.AddRange(gg); + } + + var dd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); + var gd = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); + deviceCodes.AddRange(dd); + deviceGroupCodes.AddRange(gd); + + var dt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks); + var gt = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Werks); + deviceCodes.AddRange(du); + deviceGroupCodes.AddRange(gu); + + var deveiceCodesByGroup = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToListAsync(); + deviceCodes.AddRange(deveiceCodesByGroup); return deviceCodes.Distinct().ToList(); } diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj index 2d3bb2ea..ddf7fbde 100644 --- a/Src/Dlhis.Basic/Dlhis.Basic.csproj +++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj @@ -17,7 +17,7 @@ - + diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs new file mode 100644 index 00000000..b578cf1a --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs @@ -0,0 +1,80 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; +using Dlhis.Basic.Organization.Services; +using Kurisu.AspNetCore.MVC; +using Kurisu.Core.DataAccess.Dto; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Basic.Organization.Controllers; + +/// +/// 档案分组 +/// +[Authorize] +[ApiDefinition("SAP", Description = "晶科sap组织架构信息")] +[Route("api/[controller]")] +[ApiController] +public class GainfoGroupsController : ControllerBase +{ + private readonly IGainfoGroupService _gainfoGroupService; + + public GainfoGroupsController(IGainfoGroupService gainfoGroupService) + { + _gainfoGroupService = gainfoGroupService; + } + + /// + /// 获取档案组分页 + /// + /// + /// + [HttpGet("page")] + public async Task> GetPageAsync([FromQuery] GainfoGroupPageRequest request) + { + return await _gainfoGroupService.GetPageAsync(request); + } + + /// + /// 获取所有档案组 + /// + /// + [HttpGet("list")] + public async Task> GetListAsync() + { + return await _gainfoGroupService.GetListAsync(); + } + + /// + /// 保存档案组 + /// + /// + /// + [HttpPost] + public async Task SaveAsync(GainfoGroupSaveRequest request) + { + await _gainfoGroupService.SaveAsync(request); + } + + /// + /// 根据分组code获取人员档案 + /// + /// + /// + [HttpGet("gainfos")] + public async Task> GetGainfosByGroupAsync(Guid code) + { + return await _gainfoGroupService.GetGainfosByGroupAsync(code); + } + + /// + /// 分配人员 + /// + /// + /// + [HttpPost("assign")] + public async Task AssignGainfosAsync(GainfoAssignRequest request) + { + await _gainfoGroupService.AssignGainfosAsync(request); + } +} diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs index c18beb24..7c9fac1b 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs @@ -1,5 +1,4 @@ -using System.ComponentModel.DataAnnotations; -using Dlhis.Basic.Organization.Filters; +using Dlhis.Basic.Organization.Filters; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Basic.Organization.Services; @@ -65,7 +64,7 @@ public class GainfosController : ControllerBase /// /// [HttpPost("dimission")] - public async Task DimissionAsync(GainfoDImissionRequest request) + public async Task DimissionAsync(GainfoDimissionRequest request) { await _gainfoService.DimissionAsync(request); } @@ -76,7 +75,7 @@ public class GainfosController : ControllerBase /// /// [HttpPost("onboarding")] - public async Task OnboardingAsync(GainfoDImissionRequest request) + public async Task OnboardingAsync(GainfoDimissionRequest request) { await _gainfoService.OnboardingAsync(request); } diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs new file mode 100644 index 00000000..6741f83a --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/GainfoAssignRequest.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Organization.Request; + +public class GainfoAssignRequest +{ + /// + /// 分组code + /// + [Required(ErrorMessage = "档案组code")] + public Guid GroupCode { get; set; } + + /// + /// 档案号 + /// + public List UserNos { get; set; } = new List(); +} diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs index 6d56fcd7..320420f8 100644 --- a/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs +++ b/Src/Dlhis.Basic/Organization/Request/GainfoDImissionRequest.cs @@ -1,13 +1,12 @@ using System.ComponentModel.DataAnnotations; -namespace Dlhis.Basic.Organization.Request +namespace Dlhis.Basic.Organization.Request; + +public class GainfoDimissionRequest { - public class GainfoDImissionRequest - { - /// - /// 档案号 - /// - [Required(ErrorMessage = "档案号不能为空")] - public string UserNo { get; set; } - } + /// + /// 档案号 + /// + [Required(ErrorMessage = "档案号不能为空")] + public string UserNo { get; set; } } diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs new file mode 100644 index 00000000..b38a161d --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/GainfoGroupPageRequest.cs @@ -0,0 +1,7 @@ +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Basic.Organization.Request; + +public class GainfoGroupPageRequest: PageDto +{ +} diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs new file mode 100644 index 00000000..bb5173e4 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/GainfoGroupSaveRequest.cs @@ -0,0 +1,16 @@ +namespace Dlhis.Basic.Organization.Request; + +public class GainfoGroupSaveRequest +{ + public long? Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } +} diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs index 495a329e..5f403df8 100644 --- a/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs +++ b/Src/Dlhis.Basic/Organization/Request/GainfoUploadFaceRequest.cs @@ -2,7 +2,7 @@ namespace Dlhis.Basic.Organization.Request; -public class GainfoUploadFaceRequest +public class GainfoUploadFaceRequest : IValidatableObject { /// /// 用户档案号 @@ -15,4 +15,22 @@ public class GainfoUploadFaceRequest /// [Required(ErrorMessage = "人脸照片不能为空")] public string Face { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + bool v = true; + try + { + Convert.FromBase64String(Face); + } + catch (Exception) + { + v = false; + } + + if (!v) + { + yield return new ValidationResult("人脸照片需要为Base64格式", new[] { nameof(Face) }); + } + } } diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs new file mode 100644 index 00000000..c53fdec5 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Response/GainfoGroupResponse.cs @@ -0,0 +1,19 @@ +namespace Dlhis.Basic.Organization.Response; + +public class GainfoGroupResponse +{ + /// + /// 分组code + /// + public Guid Code { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } +} diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs new file mode 100644 index 00000000..344f4dd1 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoGroupService.cs @@ -0,0 +1,18 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; +using Kurisu.Core.DataAccess.Dto; + +namespace Dlhis.Basic.Organization.Services; + +public interface IGainfoGroupService : IScopeDependency +{ + Task> GetPageAsync(GainfoGroupPageRequest request); + + Task> GetListAsync(); + + Task SaveAsync(GainfoGroupSaveRequest request); + + Task> GetGainfosByGroupAsync(Guid code); + + Task AssignGainfosAsync(GainfoAssignRequest request); +} diff --git a/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs b/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs index eff29b50..43c71e75 100644 --- a/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IGainfoService.cs @@ -13,9 +13,9 @@ public interface IGainfoService : IScopeDependency Task UpdateAsync(GainfoSaveRequest request); - Task DimissionAsync(GainfoDImissionRequest request); + Task DimissionAsync(GainfoDimissionRequest request); - Task OnboardingAsync(GainfoDImissionRequest request); + Task OnboardingAsync(GainfoDimissionRequest request); Task CurrentUserInfoAsync(); diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs new file mode 100644 index 00000000..a82c11f6 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs @@ -0,0 +1,101 @@ +using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Organization.Response; +using Dlhis.Entity.Basic.Entity; +using Kurisu.AspNetCore.Utils.Extensions; +using Kurisu.Core.DataAccess.Dto; +using Kurisu.SqlSugar.Extensions; +using Kurisu.SqlSugar.Services; +using Mapster; + +namespace Dlhis.Basic.Organization.Services.Implements; + +public class GainfoGroupService : IGainfoGroupService +{ + private readonly IDbContext _dbContext; + + public GainfoGroupService(IDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task> GetPageAsync(GainfoGroupPageRequest request) + { + return await _dbContext.Queryable() + .Select() + .ToPageListAsync(request); + } + + + public async Task> GetListAsync() + { + return await _dbContext.Queryable() + .Select() + .ToListAsync(); + } + + public async Task SaveAsync(GainfoGroupSaveRequest request) + { + await CheckDuplicateNameAsync(request); + + if (!request.Id.HasValue) + { + var entity = request.Adapt(); + entity.Code = Guid.NewGuid(); + await _dbContext.InsertAsync(entity); + } + else + { + var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).SingleAsync(); + request.Adapt(entity); + + await _dbContext.UpdateAsync(entity); + } + } + + public async Task> GetGainfosByGroupAsync(Guid code) + { + var userNos = await _dbContext.Queryable() + .Where(x => x.GroupCode == code) + .Select(x => x.UserNo) + .ToListAsync(); + + var list = await _dbContext.Queryable() + .Where(x => userNos.Contains(x.No)) + .Select() + .ToListAsync(); + + return list; + } + + public async Task AssignGainfosAsync(GainfoAssignRequest request) + { + var relations = await _dbContext.Queryable().Where(x => x.GroupCode == request.GroupCode).ToListAsync(); + await _dbContext.DeleteReallyAsync(relations); + + var entities = request.UserNos.Select(x => new GainfoGroupRelationshipEntity + { + GroupCode = request.GroupCode, + UserNo = x + + }).ToList(); + + await _dbContext.InsertAsync(entities); + } + + //******************************************************* help methods *********************************************************** + + /// + /// 检查重名 + /// + /// + /// + private async Task CheckDuplicateNameAsync(GainfoGroupSaveRequest request) + { + var exists = await _dbContext.Queryable() + .Where(x => x.Name == request.Name) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id) + .AnyAsync(); + + exists.ThrowIfTrue($"重复组名{request.Name}"); + } +} diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 16c3c30a..bb7fb4eb 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -87,7 +87,7 @@ public class GainfoService : IGainfoService /// /// [Transactional] - public async Task DimissionAsync(GainfoDImissionRequest request) + public async Task DimissionAsync(GainfoDimissionRequest request) { var gainfo = await _gainfoStore.Queryable(GainfoStatusEnumType.Working) .Where(x => x.No == request.UserNo) @@ -107,7 +107,7 @@ public class GainfoService : IGainfoService /// /// /// - public async Task OnboardingAsync(GainfoDImissionRequest request) + public async Task OnboardingAsync(GainfoDimissionRequest request) { var gainfo = await _gainfoStore.Queryable(GainfoStatusEnumType.External) .Where(x => x.No == request.UserNo)