From 1de6bc6c0f94a01c756ee93b7771f1d890c5e5c9 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 7 Mar 2024 15:17:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E7=BB=84=E7=BB=87=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E6=A0=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevicePermissionsController.cs | 1 + .../Request/DevicePermissionSaveReuqest.cs | 19 ++++++++++- .../Implements/DevicePermissionService.cs | 28 ++++++++-------- .../Response/DepartmentTreeResponse.cs | 22 +++++++++++-- .../Services/Implements/DepartmentService.cs | 32 ++++++++++++++----- 5 files changed, 78 insertions(+), 24 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 0c61d995..736902c0 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -27,6 +27,7 @@ public class DevicePermissionsController : ControllerBase /// [HttpPost("assign")] [Transactional] + [IgnoreTenant] public async Task AssignAsync(DevicePermissionSaveReuqest request) { await _devicePermissionService.AssignAsync(request); diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs index ae282891..85c3a613 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs @@ -1,9 +1,10 @@ using System.ComponentModel.DataAnnotations; using Dlhis.Entity.Sys.Enums; +using Kurisu.AspNetCore.Utils.Extensions; namespace Dlhis.Basic.Device.Request; -public class DevicePermissionSaveReuqest +public class DevicePermissionSaveReuqest : IValidatableObject { /// /// 分配类型 AssignTypeEnumType @@ -30,4 +31,20 @@ public class DevicePermissionSaveReuqest /// 分配权限值 /// public List Codes { get; set; } + + /// + /// AssignType == AssignTypeEnumType.Department 需要传入 + /// + public string TenantId { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (AssignType == AssignTypeEnumType.Department) + { + if (TenantId.IsEmpty()) + { + yield return new ValidationResult("请明确具体的厂区", new[] { nameof(TenantId) }); + } + } + } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 7b0a9f2e..91019ab8 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -34,6 +34,7 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.AssignType == reuqest.AssignType) .Where(x => x.AssignValue == reuqest.AssignValue) .Where(x => x.UniqueType == reuqest.UniqueType) + .WhereIF(reuqest.AssignType == AssignTypeEnumType.Department, x => x.TenantId == reuqest.TenantId) .ToListAsync(); await _dbContext.DeleteReallyAsync(p); @@ -41,14 +42,17 @@ public class DevicePermissionService : IDevicePermissionService //保存配置的权限 if (reuqest.Codes.IsPresent()) { + var tenantId = reuqest.AssignType == AssignTypeEnumType.Department ? reuqest.TenantId : _currentUser.GetStringSubjectId(); + var devicePermissions = reuqest.Codes.Select(code => new DevicePermissionEntity { AssignType = reuqest.AssignType, AssignValue = reuqest.AssignValue, UniqueType = reuqest.UniqueType, UniqueValue = code, - - }).ToList(); + TenantId = tenantId + }) + .ToList(); await _dbContext.InsertAsync(devicePermissions); } @@ -75,7 +79,6 @@ public class DevicePermissionService : IDevicePermissionService if (userNos.IsEmpty()) userNos = await GetPermissionUserNosAsync(); - //var before = await GetAssignDeviceCodesInternalAsync(userNos); var before = await GetAssignDeviceCodesInternalAsync(userNos); _dbContext.Client.QueryFilter.Restore(); @@ -88,7 +91,6 @@ public class DevicePermissionService : IDevicePermissionService if (nextUserNos.Any()) userNos = userNos.Concat(nextUserNos).Distinct().ToList(); - //var current = await GetAssignDeviceCodesInternalAsync(userNos); var current = await GetAssignDeviceCodesInternalAsync(userNos); var deivces = await _dbContext.Queryable().ToListAsync(); @@ -409,13 +411,12 @@ public class DevicePermissionService : IDevicePermissionService return result; } - - - private static List GetAssignDeviceCodesInternal(GainfoEntity gainfo, - List gainfoGroupRelationships, - List devicePermissions, - List deviceGroups, - List deviceGroupRelationships) + private static List GetAssignDeviceCodesInternal( + GainfoEntity gainfo, + List gainfoGroupRelationships, + List devicePermissions, + List deviceGroups, + List deviceGroupRelationships) { var userNo = gainfo.No; var deviceCodes = new List(); @@ -438,8 +439,9 @@ public class DevicePermissionService : IDevicePermissionService deviceGroupCodes.AddRange(gg); } - var dd = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); - var gd = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); + var gainfoFactoryDevicePermissions = devicePermissions.Where(x => x.TenantId == gainfo.Factory).ToList(); + var dd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); + var gd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); deviceCodes.AddRange(dd); deviceGroupCodes.AddRange(gd); diff --git a/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs b/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs index 309e6d58..88aba019 100644 --- a/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/DepartmentTreeResponse.cs @@ -1,4 +1,6 @@ -namespace Dlhis.Basic.Organization.Response; +using Newtonsoft.Json; + +namespace Dlhis.Basic.Organization.Response; public class DepartmentTreeResponse { @@ -17,8 +19,24 @@ public class DepartmentTreeResponse /// public string Name { get; set; } + + public string Tenant { get; set; } + /// /// 下级部门 /// - public List Next { get; set; } = new List(); + [JsonIgnore] + public List _Next { get; set; } = new List(); + + /// + /// 下级部门 + /// + public List Next + { + get + { + _Next.ForEach(x => x.Tenant = Tenant); + return _Next; + } + } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs index 9800dc40..fd4f8e74 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/DepartmentService.cs @@ -1,25 +1,24 @@ using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Entity; -using Kurisu.Core.User.Abstractions; +using Dlhis.Sys.Api; using Kurisu.SqlSugar.Services; +using Mapster; namespace Dlhis.Basic.Organization.Services.Implements; public class DepartmentService : IDepartmentService { private readonly IDbContext _dbContext; - private readonly ICurrentUser _currentUser; + private readonly ITenantApi _tenantApi; - public DepartmentService(IDbContext dbContext, ICurrentUser currentUser) + public DepartmentService(IDbContext dbContext, ITenantApi tenantApi) { _dbContext = dbContext; - _currentUser = currentUser; + _tenantApi = tenantApi; } public async Task> GetTreeAsync() { - var myTenants = _currentUser.GetUserClaim("tenants").Split(',').ToList(); - var departments = await _dbContext.Queryable().Select().ToListAsync(); //00001000 一定是这个开头的 var tops = departments.Where(x => x.PNo == "00001000").ToList(); @@ -29,13 +28,30 @@ public class DepartmentService : IDepartmentService RecursionGetNext(x, departments); }); - return tops; + var myTenantResult = await _tenantApi.GetMyTenantsAsync(); + var tenants = myTenantResult.Data; + + return tenants.Select(x => new DepartmentTreeResponse + { + Name = x.Name, + No = x.Code, + PNo = x.PCode, + Tenant = x.Code, + _Next = tops.Select(item => + { + var i = item.Adapt(); + i.PNo = x.Code; + return i; + + }).ToList() + }) + .ToList(); } private void RecursionGetNext(DepartmentTreeResponse current, List data) { var next = data.Where(x => x.PNo == current.No).ToList(); - current.Next = next; + current._Next = next; foreach (var item in next) { RecursionGetNext(item, data); From 5b38f09a36a573dcdc3077a31a8ca6215d12a31f Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 7 Mar 2024 15:31:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=20unique=E4=B8=BAnull=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/Dlhis.Basic/Device/Request/DeviceSaveRequest.cs | 5 ----- Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs | 3 ++- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Request/DeviceSaveRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceSaveRequest.cs index 1308a9a2..f7e4a84c 100644 --- a/Src/Dlhis.Basic/Device/Request/DeviceSaveRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/DeviceSaveRequest.cs @@ -78,11 +78,6 @@ public class DeviceSaveRequest : IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { - if (Id.HasValue) - { - UniqueNo = null; - } - if (Type != DeviceTypeEnumType.Door && AsAttendance) { yield return new ValidationResult($"{DeviceTypeEnumType.Door.GetDescription()}才可设置作为考勤设备", new[] { nameof(AsAttendance) }); diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index f43f3c7a..41d82124 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -204,7 +204,8 @@ public class DeviceService : IDeviceService /// private async Task CheckUniqueNoExistsAsync(DeviceSaveRequest request) { - var exists = await _dbContext.Queryable().Where(x => x.UniqueNo == request.UniqueNo) + var exists = await _dbContext.Queryable() + .Where(x => x.UniqueNo == request.UniqueNo) .WhereIF(request.Id.HasValue, x => x.Id != request.Id) .AnyAsync();