diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
index 0e26e4f6..1770f26f 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
@@ -39,7 +39,7 @@ public class DevicePermissionsController : ControllerBase
}
///
- /// 分配权限到设备/设备组/营业点
+ /// 分配权限到设备
///
///
[HttpPost("assign-unique")]
diff --git a/Src/Dlhis.Basic/Device/Dtos/DevicePermissionSourceDto.cs b/Src/Dlhis.Basic/Device/Dtos/DevicePermissionSourceDto.cs
new file mode 100644
index 00000000..518cf49d
--- /dev/null
+++ b/Src/Dlhis.Basic/Device/Dtos/DevicePermissionSourceDto.cs
@@ -0,0 +1,27 @@
+using Dlhis.Entity.Sys.Enums;
+
+namespace Dlhis.Basic.Device.Dtos;
+
+public class DevicePermissionSourceDto
+{
+ public string Factory { get; set; }
+
+ public IEnumerable Types { get; set; }
+}
+
+public class DevicePermissionSourceTypeDto
+{
+ ///
+ /// 分配类型
+ ///
+ public AssignTypeEnumType AssignType { get; init; }
+
+ ///
+ /// 分配值
+ ///
+ public string AssignValue { get; init; }
+
+ public DeviceAssignmentTypeEnumType UniqueType { get; set; }
+
+ public IEnumerable Codes { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs b/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs
index 9e511afc..8876e200 100644
--- a/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs
+++ b/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs
@@ -37,7 +37,6 @@ public class AssignTypeDeviceCode
///
public List Codes { get; set; }
-
public List OriginalCodes { get; set; }
}
diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionsAssignToDeviceRequest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionsAssignToDeviceRequest.cs
index aca6ea05..fec467ac 100644
--- a/Src/Dlhis.Basic/Device/Request/DevicePermissionsAssignToDeviceRequest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionsAssignToDeviceRequest.cs
@@ -1,45 +1,14 @@
-using System.ComponentModel.DataAnnotations;
-using Dlhis.Entity.Device.Enums;
-using Dlhis.Entity.Sys.Enums;
+namespace Dlhis.Basic.Device.Request;
-namespace Dlhis.Basic.Device.Request;
-
-public class DevicePermissionsAssignToDeviceRequest : IValidatableObject
+public class DevicePermissionsAssignToDeviceRequest
{
- ///
- /// 分配类型
- ///
- public DeviceAssignmentTypeEnumType UniqueType { get; set; }
-
///
/// 分配值
///
public Guid UniqueValue { get; set; }
- ///
- /// 来源
- ///
- public AssignTypeEnumType AssignType { get; set; }
-
///
/// 来源值
///
public List Values { get; set; }
-
-
- [EnumDataType(typeof(DeviceTypeEnumType))]
- public DeviceTypeEnumType Type { get; set; }
-
- ///
- /// 只删除权限
- ///
- public bool IsDelete { get; set; }
-
- public IEnumerable Validate(ValidationContext validationContext)
- {
- if (AssignType != AssignTypeEnumType.User)
- {
- yield return new ValidationResult("仅支持导入档案人员", new[] { nameof(AssignType) });
- }
- }
}
\ 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 b28664d4..77dec70b 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs
@@ -12,19 +12,25 @@ namespace Dlhis.Basic.Device.Services;
///
public interface IDevicePermissionAnalyzeService : IScopeDependency
{
- Task> GetDevicePermissions(DevicePermissionSaveRequest request);
+ Task> GetDevicePermissionsAsync(DevicePermissionSaveRequest request);
Task GenerateDeviceTasksAsync(Func func, List userNos);
- Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
- List userNos,
- DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
- string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null
- );
-
Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request);
Task> GetAssignmentUniqueAsync(DeviceGetAssignmentUniquesRequest request);
Task> GetAssignDeviceCodesAsync(string userCode);
+
+
+ Task>> GetUserAssignDeviceCodesInTenantAsync(
+ List userNos,
+ DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
+ string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null);
+
+ Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
+ List userNos,
+ DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
+ string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null
+ );
}
\ 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 17b9d049..b3f56470 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
@@ -21,7 +21,7 @@ public interface IDevicePermissionService : IScopeDependency
///
///
///
- Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request);
+ Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request);
Task AssignToUniqueImportAsync(IFormFile file);
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
index e05dded8..a45c8391 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
@@ -41,7 +41,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService
await CheckWhetherAssignToTopDeviceGroupAsync(request);
await CheckAssignedToTenantAsync(request);
- var dps = await _devicePermissionAnalyzeService.GetDevicePermissions(request);
+ var dps = await _devicePermissionAnalyzeService.GetDevicePermissionsAsync(request);
try
{
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
index 5f3695a4..56f6ed32 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
@@ -106,6 +106,7 @@ public class DeviceGroupService : IDeviceGroupService
await CheckNoNextGroupAsync(group.Code);
await CheckGroupTypeMatchAsync(request, group);
+ await CheckAssignToTenantAsync(group.Code, request.DeviceCodes);
var relationships = await _dbContext.Queryable().Where(x => x.GroupCode == request.GroupCode).ToListAsync();
@@ -125,6 +126,23 @@ public class DeviceGroupService : IDeviceGroupService
return r;
}
+ private async Task CheckAssignToTenantAsync(Guid groupCode, List deviceCodes)
+ {
+ if (await _dbContext.Queryable()
+ .Where(x => x.AssignType == AssignTypeEnumType.Tenant)
+ .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
+ .Where(x => x.UniqueValue == groupCode)
+ .AnyAsync())
+ {
+ (await _dbContext.Queryable()
+ .Where(x => x.AssignType != AssignTypeEnumType.Tenant)
+ .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device)
+ .Where(x => deviceCodes.Contains(x.UniqueValue))
+ .AnyAsync()).ThrowIfTrue("无法分配设备到该设备组:设备组已分配到厂区");
+ }
+ }
+
+
private async Task PermissionResetAsync(Guid groupCode, List beforeDeviceCodes, List presentDeviceCodes)
{
var codesToAdd = presentDeviceCodes.Except(beforeDeviceCodes).ToList();
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
index 27d135c6..6756c347 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
@@ -33,7 +33,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
}
- public async Task> GetDevicePermissions(DevicePermissionSaveRequest request)
+ public async Task> GetDevicePermissionsAsync(DevicePermissionSaveRequest request)
{
var currentTenantId = await GetCurrentFactoryAsync(request);
(bool enableDeviceFilter, List deviceCodes) = _myDataPermissionService.GetMyDeviceCodes();
@@ -196,7 +196,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
IgnoreUniqueType = ignoreUniqueType
};
- var codes = GetAssignDeviceCodesInternal(analyzePack,
+ var codes = GetAssignDeviceCodesPermissions(analyzePack,
gainfoGroups,
devicePermissions,
deviceGroups,
@@ -210,7 +210,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
}
- private static IEnumerable GetAssignDeviceCodesInternal(
+ private static IEnumerable GetAssignDeviceCodesPermissions(
AnalyzePackDto analyzePack,
List gainfoGroups,
List devicePermissions,
@@ -366,18 +366,17 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
public async Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request)
{
- var currentAssignValue = request.AssignType == AssignTypeEnumType.Department ? request.TenantId + ":" + request.AssignValue : request.AssignValue;
+ var r = await GetDevicePermissionsAsync(new DevicePermissionSaveRequest
+ {
+ AssignType = request.AssignType,
+ AssignValue = request.AssignValue,
+ UniqueType = request.UniqueType,
+ Codes = null,
+ TenantId = request.TenantId,
+ Type = request.Type
+ });
- (bool enableFilter, List deviceCodes) = _myDataPermissionService.GetMyDeviceCodes();
-
- return await _dbContext.Queryable()
- .Where(x => x.AssignType == request.AssignType)
- .Where(x => x.AssignValue == currentAssignValue)
- .Where(x => x.UniqueType == request.UniqueType)
- .WhereIF(enableFilter && request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue))
- .Where(x => x.Type == request.Type)
- .Select(x => x.UniqueValue)
- .ToListAsync();
+ return r.Select(x => x.UniqueValue).ToList();
}
public async Task> GetAssignmentUniqueAsync(DeviceGetAssignmentUniquesRequest request)
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
index e6288e04..316c2eaf 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -46,29 +46,30 @@ public class DevicePermissionService : IDevicePermissionService
.AnalyzeAsync(request);
}
- public async Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request)
+ public async Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request)
{
var currentTenantId = _currentUser.GetStringTenantId();
- var today = DateTime.Today;
- var factories = _currentUser.GetUserClaim("tenants").Split(",").ToList();
var device = await _dbContext.Queryable().Where(x => x.Code == request.UniqueValue).SingleAsync();
device.ThrowIfNull("设备不存在");
- //删除当前匹配的基地权限
- var p = await _dbContext.Queryable()
- .Where(x => x.UniqueType == request.UniqueType)
+ //当前匹配的基地权限
+ var dps = await _dbContext.Queryable()
+ .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device)
.Where(x => x.UniqueValue == request.UniqueValue)
- .Where(x => x.AssignType == request.AssignType)
- .Where(x => x.Type == request.Type)
+ .Where(x => x.AssignType == AssignTypeEnumType.User)
+ .Where(x => x.Type == device.Type)
.Where(x => x.TenantId == currentTenantId)
.ToListAsync();
- var beforeNos = p.Select(x => x.AssignValue).ToList();
- var presentNos = new List();
+ var beforeUserNos = dps.Select(x => x.AssignValue).ToList();
+ var presentUserNos = new List();
+
if (request.Values.IsPresent())
{
- presentNos = await _dbContext.Client.Queryable()
+ var today = DateTime.Today;
+ var factories = _currentUser.GetUserClaim("tenants").Split(",").ToList();
+ presentUserNos = await _dbContext.Client.Queryable()
.Where(gainfo => factories.Contains(gainfo.Factory) || SqlFunc.Subqueryable()
.Where(x => factories.Contains(x.Destination) && SqlFunc.DateIsSame(x.BeginDate, today))
.Any()
@@ -76,57 +77,83 @@ public class DevicePermissionService : IDevicePermissionService
.Where(gainfo => request.Values.Contains(gainfo.Code) || request.Values.Contains(gainfo.No) || request.Values.Contains(gainfo.IdNo))
.Select(gainfo => gainfo.No)
.ToListAsync();
-
- //gainfoNos = gainfoNos.Concat(nos).Distinct().ToList();
}
- var adds = presentNos.Except(beforeNos);
- var deletes = beforeNos.Except(presentNos);
+ var tasksToAdd = new List();
+ var tasksToDelete = new List();
- await _dbContext.DeleteAsync(p);
- var devicePermissions = presentNos.Select(v => new DevicePermissionEntity
+ try
{
- UniqueType = request.UniqueType,
- UniqueValue = request.UniqueValue,
- AssignType = request.AssignType,
- AssignValue = v,
- TenantId = currentTenantId,
- Type = request.Type
- }).ToList();
+ var usersToAdd = presentUserNos.Except(beforeUserNos);
+ var usersToDelete = beforeUserNos.Except(presentUserNos).ToList();
- await _dbContext.InsertAsync(devicePermissions);
+ var userTenantDeviceCodes = usersToDelete.IsPresent()
+ ? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(beforeUserNos.Union(presentUserNos).ToList())
+ : new Dictionary>();
- await _dbContext.InsertAsync(adds.Select(x => new DeviceTaskEntity
+ tasksToAdd.AddRange(usersToAdd.Select(userNo => new DeviceTaskEntity
+ {
+ Type = DeviceTaskEnumType.Add,
+ DeviceType = device.Type,
+ UserId = null,
+ UserNo = userNo,
+ DeviceUniqueNo = device.UniqueNo,
+ Status = DeviceTaskStatusEnumType.Wait,
+ Version = 0,
+ ResultMessage = null,
+ CancellationId = 20,
+ Source = DeviceTaskSourceEnumType.Manually,
+ Priority = 0,
+ TenantId = currentTenantId,
+ }));
+
+ foreach (var item in usersToDelete)
+ {
+ var permissions = userTenantDeviceCodes[item].ToList();
+ foreach (var permission in permissions)
+ {
+ permission.AssignTypes = permission.AssignTypes.Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device).ToList();
+ }
+
+ var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList();
+ if (myDeviceCodes.All(x => x != device.Code))
+ {
+ tasksToDelete.Add(new DeviceTaskEntity
+ {
+ Type = DeviceTaskEnumType.Delete,
+ DeviceType = device.Type,
+ UserId = null,
+ UserNo = item,
+ DeviceUniqueNo = device.UniqueNo,
+ Status = DeviceTaskStatusEnumType.Wait,
+ Version = 0,
+ ResultMessage = null,
+ CancellationId = 20,
+ Source = DeviceTaskSourceEnumType.Manually,
+ Priority = 0,
+ TenantId = currentTenantId
+ });
+ }
+ }
+ }
+ finally
{
- Type = DeviceTaskEnumType.Add,
- DeviceType = device.Type,
- UserId = null,
- UserNo = x,
- DeviceUniqueNo = device.UniqueNo,
- Status = DeviceTaskStatusEnumType.Wait,
- Version = 0,
- ResultMessage = null,
- CancellationId = 0,
- Source = DeviceTaskSourceEnumType.Manually,
- Priority = 0,
- TenantId = currentTenantId,
- }).ToList());
+ await _dbContext.InsertAsync(tasksToAdd);
+ await _dbContext.InsertAsync(tasksToDelete);
- await _dbContext.InsertAsync(deletes.Select(x => new DeviceTaskEntity
- {
- Type = DeviceTaskEnumType.Delete,
- DeviceType = device.Type,
- UserId = null,
- UserNo = x,
- DeviceUniqueNo = device.UniqueNo,
- Status = DeviceTaskStatusEnumType.Wait,
- Version = 0,
- ResultMessage = null,
- CancellationId = 0,
- Source = DeviceTaskSourceEnumType.Manually,
- Priority = 0,
- TenantId = currentTenantId
- }).ToList());
+ await _dbContext.DeleteAsync(dps);
+ await _dbContext.InsertAsync(presentUserNos.Select(v => new DevicePermissionEntity
+ {
+ UniqueType = DeviceAssignmentTypeEnumType.Device,
+ UniqueValue = request.UniqueValue,
+ AssignType = AssignTypeEnumType.User,
+ AssignValue = v,
+ TenantId = currentTenantId,
+ Type = device.Type
+ }).ToList());
+ }
+
+ return new DevicePermissionAssignResponse(tasksToAdd.Count, tasksToDelete.Count);
}
///
diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs
index 1b3cb8fd..f740694f 100644
--- a/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs
+++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoPermissionsController.cs
@@ -51,7 +51,7 @@ public class GainfoPermissionsController : ControllerBase
///
///
[HttpGet("assignDeviceCodes")]
- public async Task> GetAssignDeviceCodesAsync([FromQuery] DeviceAssRequest request)
+ public async Task> GetAssignDeviceCodesAsync([FromQuery] DeviceAssRequest request)
{
return await _gainfoPermissions.GetAssignDeviceCodesAsync(request);
}
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDevicePermissionResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDevicePermissionResponse.cs
new file mode 100644
index 00000000..0a49cbd3
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoDevicePermissionResponse.cs
@@ -0,0 +1,69 @@
+using Dlhis.Basic.Device.Dtos;
+using Dlhis.Entity.Device.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+
+namespace Dlhis.Basic.Organization.Response;
+
+public class GainfoDevicePermissionResponse
+{
+ public long Id { get; set; }
+
+ ///
+ /// 设备code
+ ///
+ public Guid Code { get; set; }
+
+ ///
+ /// 设备码,IP/MAC/SNO
+ ///
+ public string UniqueNo { get; set; }
+
+ ///
+ /// 心跳间隔
+ ///
+ public int HeartbeatInterval { get; set; }
+
+ ///
+ /// 设备机功能类型
+ ///
+ public DeviceTypeEnumType Type { get; set; }
+
+ public string TypeDescription => Type.GetDescription();
+
+ ///
+ /// 是否启用
+ ///
+ public bool Enable { get; set; }
+
+ ///
+ /// 厂区
+ ///
+ public string Factory { get; set; }
+
+ ///
+ /// 最后心跳时间
+ ///
+ public DateTime? LastHeartbeatTime { get; set; }
+
+ ///
+ /// 是否在线
+ ///
+ public bool IsOnline
+ {
+ get
+ {
+ if (!LastHeartbeatTime.HasValue)
+ return false;
+
+ if (HeartbeatInterval <= 0)
+ return true;
+
+ return LastHeartbeatTime.Value.AddSeconds(HeartbeatInterval) >= DateTime.Now;
+ }
+ }
+
+ ///
+ /// 分配来源
+ ///
+ public DevicePermissionSourceDto Source { get; set; }
+}
\ 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 a5b7caed..544479bb 100644
--- a/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/IGainfoPermissionService.cs
@@ -13,7 +13,7 @@ public interface IGainfoPermissionService : IScopeDependency
Task> GetDevicesUnderGroupByUserNoAsync(string userNo, Guid deviceGroupCode);
- Task> GetAssignDeviceCodesAsync(DeviceAssRequest request);
+ Task> GetAssignDeviceCodesAsync(DeviceAssRequest request);
Task> GetAssignGroupAsync(string userNo);
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs
index 49609e4b..f0e15b8c 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs
@@ -93,8 +93,7 @@ public class GainfoGroupService : IGainfoGroupService
var relations = await _dbContext.Queryable()
.Where(x => x.GroupCode == request.GroupCode)
.ToListAsync();
-
-
+
var presentUserNos = await _dbContext.Queryable()
.Where(x => request.UserNos.Contains(x.No) || request.UserNos.Contains(x.Code)) //NO和工号匹配
.Select(x => x.No)
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
index 5889d5ef..69691702 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
@@ -1,4 +1,5 @@
-using Dlhis.Basic.Device.Request;
+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;
@@ -118,27 +119,39 @@ public class GainfoPermissionService : IGainfoPermissionService
}).ToList();
}
- public async Task> GetAssignDeviceCodesAsync(DeviceAssRequest request)
+ public async Task> GetAssignDeviceCodesAsync(DeviceAssRequest request)
{
- var ids = await _devicePermissionAnalyzeService.GetAssignDeviceCodesAsync(request.UserNo);
+ var result = await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(new List { request.UserNo });
+ var permissions = result[request.UserNo].ToList();
+
+ var codes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList();
var page = await _dbContext.Queryable()
- .LeftJoin((d, dt) => d.TemplateCode == dt.Code)
- .LeftJoin((d, dt, dr) => d.UniqueNo == dr.DeviceUniqueNo)
- .LeftJoin((d, dt, dr, bp) => dr.BusinessPlaceCode == bp.Code)
+ .LeftJoin((d, dr) => d.UniqueNo == dr.DeviceUniqueNo)
.WhereIF(request.DeviceType.HasValue, d => d.Type == request.DeviceType)
- .Where(d => ids.Contains(d.Code))
- .Select((d, dt, dr, bp) => new DevicePageResponse
- {
- FuncsStr = d.Funcs.ToString(),
- Brand = dt.Brand,
- Type = d.Type,
- BusinessPlaceCode = bp.Code,
- BusinessPlaceName = bp.Name,
- LastHeartbeatTime = dr.LastHeartbeatTime
- }, true)
+ .Where(d => codes.Contains(d.Code))
+ .Select((d, dr) => new GainfoDevicePermissionResponse { Factory = d.TenantId }, true)
.ToPageListAsync(request);
+ page.Data.ForEach(item =>
+ {
+ var permission = permissions.First(x => x.Tenant == item.Factory);
+
+ item.Source = new DevicePermissionSourceDto
+ {
+ Factory = item.Factory,
+ Types = permission.AssignTypes.Where(x => x.Codes.Any(p => p == item.Code)).Select(x => new DevicePermissionSourceTypeDto
+ {
+ AssignType = x.AssignType,
+ AssignValue = x.AssignValue,
+ UniqueType = x.UniqueType,
+ Codes = x.UniqueType == DeviceAssignmentTypeEnumType.Device
+ ? x.Codes.Where(p => p == item.Code)
+ : x.Codes.Take(1)
+ })
+ };
+ });
+
return page;
}