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);