diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 35c4d5a1..d72d3f38 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -11,6 +11,7 @@ using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Entity; using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Services; +using SqlSugar; namespace Dlhis.Basic.Device.Services.Implements; @@ -302,6 +303,9 @@ public class DevicePermissionService : IDevicePermissionService /// public async Task> GetAssignDeviceCodesAsync(string userNo) { + var devices = await _dbContext.Queryable().ToListAsync(); + var deviceRegistries = await _dbContext.Queryable().ToListAsync(); + var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync(); var gainfoGroups = await _dbContext.Queryable().ToListAsync(); @@ -309,7 +313,7 @@ public class DevicePermissionService : IDevicePermissionService var deviceGroups = await _dbContext.Queryable().ToListAsync(); var deviceRelationships = await _dbContext.Queryable().ToListAsync(); - var result = GetAssignDeviceCodesInternal(gainfo, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships); + var result = GetAssignDeviceCodesInternal(gainfo, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices); return result.SelectMany(x => x.Codes).ToList(); } @@ -321,13 +325,22 @@ public class DevicePermissionService : IDevicePermissionService /// public async Task> GetAssigmentByCodeAsync(AssigmentByCodeRequest request) { + var lst1 = new List(); //所有设备guid var gds = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, request.No); + if (gds != null && gds.Count > 0) + { + lst1.AddRange(gds); + } //所有设备组guid var ggs = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, request.No); + //所有营业点guid + var gps = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.User, request.No); + var devices = await _dbContext.Queryable().ToListAsync(); + var regiss = await _dbContext.Queryable().ToListAsync(); if (ggs != null && ggs.Count > 0) { @@ -337,11 +350,23 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.GroupCode == gid) .Select(x => x.DeviceCode) .ToListAsync(); - gds.AddRange(ds); + lst1.AddRange(ds); + } + } + if (gps != null && gps.Count > 0) + { + foreach (var placeCode in gps) + { + var nos = regiss.Where(x => x.BusinessPlaceCode == placeCode) + .Select(x => x.DeviceUniqueNo).ToList(); + + var dcodes = devices.Where(d => nos.Contains(d.UniqueNo)) + .Select(d => d.Code).ToList(); + lst1.AddRange(dcodes); } } - var dds = gds.Distinct().ToList(); + var dds = lst1.Distinct().ToList(); var lst = devices.Where(x => dds.Contains(x.Code)) .Select(x => new AssigmentByCodeResponse { @@ -445,6 +470,9 @@ public class DevicePermissionService : IDevicePermissionService private async Task>> GetAssignDeviceCodesInternalAsync(List userNos) { + var devices = await _dbContext.Queryable().ToListAsync(); + var regiss = await _dbContext.Queryable().Where(x => !SqlFunc.IsNullOrEmpty(x.BusinessPlaceCode)).ToListAsync(); + var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); if (!gainfos.Any()) { @@ -460,23 +488,27 @@ public class DevicePermissionService : IDevicePermissionService foreach (var gainfo in gainfos) { - var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships); + var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, regiss, devices); result.Add(gainfo.No, codes); } return result; } - private static List GetAssignDeviceCodesInternal( + private static List GetAssignDeviceCodesInternal( GainfoEntity gainfo, List gainfoGroupRelationships, List devicePermissions, List deviceGroups, - List deviceGroupRelationships) + List deviceGroupRelationships, + List deviceRegistries, + List devices + ) { var userNo = gainfo.No; var deviceCodes = new List(); var deviceGroupCodes = new List(); + var placeCodes = new List(); //获取人员的分组,跨基地 var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToList(); @@ -484,32 +516,43 @@ public class DevicePermissionService : IDevicePermissionService //按用户 var du = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); var gu = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); + var pu = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.User, userNo); + deviceCodes.AddRange(du); deviceGroupCodes.AddRange(gu); + placeCodes.AddRange(pu); //按用户组 foreach (var groupCode in gainfoGroups) { var dg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, groupCode.ToString()); var gg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, groupCode.ToString()); + var pg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Group, groupCode.ToString()); deviceCodes.AddRange(dg); deviceGroupCodes.AddRange(gg); + placeCodes.AddRange(pg); } //按部门 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); + var pd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Department, gainfo.DepartmentNo); deviceCodes.AddRange(dd); deviceGroupCodes.AddRange(gd); + placeCodes.AddRange(pd); //按厂区 var dt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Factory); var gt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Factory); + var pt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Tenant, gainfo.Factory); + placeCodes.AddRange(pt); deviceCodes.AddRange(dt); deviceGroupCodes.AddRange(gt); var groupCodes = deviceGroupCodes.SelectMany(x => x.Codes).Distinct().ToList(); + var placecodes = placeCodes.SelectMany(x => x.Codes).Distinct().ToList(); + var deveiceCodesByGroup = deviceGroupRelationships.Where(x => groupCodes.Contains(x.GroupCode)).GroupBy(x => x.TenantId) .Select(x => new UserTenantDeviceCodeDto { @@ -517,7 +560,24 @@ public class DevicePermissionService : IDevicePermissionService Codes = x.Select(item => item.DeviceCode).Distinct().ToList() }); + var placeGroup = deviceRegistries.Where(x => placecodes.Contains((Guid)x.BusinessPlaceCode)).GroupBy(x => x.TenantId) + .Select(x => new UserTenantDeviceCodeDto + { + Tenant = x.Key, + }).ToList(); + + placeGroup.ForEach(t => + { + var nos = deviceRegistries.Where(x => placecodes.Contains((Guid)x.BusinessPlaceCode)) + .Where(x => x.TenantId == t.Tenant) + .Select(x => x.DeviceUniqueNo) + .ToList(); + + t.Codes = devices.Where(d => nos.Contains(d.UniqueNo)).Select(d => d.Code).ToList(); + }); + deviceCodes.AddRange(deveiceCodesByGroup); + deviceCodes.AddRange(placeGroup); return deviceCodes.GroupBy(x => x.Tenant).Select(x => new UserTenantDeviceCodeDto { diff --git a/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs index d5614214..5302ddf8 100644 --- a/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs @@ -18,5 +18,11 @@ public enum DeviceAssignmentTypeEnumType /// 设备组 /// [Description("设备组")] - Group = 2 + Group = 2, + + /// + /// 营业点 + /// + [Description("营业点")] + BusinessPlace = 3, }