diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
index 5bca130a..f9efc594 100644
--- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
@@ -12,9 +12,12 @@ public class DevicePermissionSaveReuqest
public AssignTypeEnumType AssignType { get; set; }
///
- /// 人员档案号
+ /// 分配值
///
- [Required(ErrorMessage = "人员档案号不能为空")]
+ ///
+ /// 如果为用户,那么AssignValue=UserNo
+ ///
+ [Required(ErrorMessage = "分配值不能为空")]
public string AssignValue { get; set; }
///
diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs
index 8af87410..b6ab81bf 100644
--- a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs
@@ -1,8 +1,6 @@
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response;
-using Dlhis.Entity.Basic.Entity;
using Kurisu.Core.DataAccess.Dto;
-using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Basic.Device.Services;
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
index 4c494bcc..7575648b 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -7,7 +7,6 @@ using Dlhis.Entity.Sys.Entities;
using Dlhis.Entity.Sys.Enums;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
-using Kurisu.SqlSugar.Attributes;
using Kurisu.SqlSugar.Services;
namespace Dlhis.Basic.Device.Services.Implements;
@@ -25,7 +24,6 @@ public class DevicePermissionService : IDevicePermissionService
{
await GenerateDeviceTasksAsync(async () =>
{
-
var p = await _dbContext.Queryable()
.Where(x => x.AssignType == reuqest.AssignType)
.Where(x => x.AssignValue == reuqest.AssignValue)
@@ -34,50 +32,27 @@ public class DevicePermissionService : IDevicePermissionService
await _dbContext.DeleteReallyAsync(p);
- var devicePermissions = reuqest.Codes.Select(x => new DevicePermissionEntity
+ var devicePermissions = reuqest.Codes.Select(grpOrDeviceCode => new DevicePermissionEntity
{
AssignType = reuqest.AssignType,
AssignValue = reuqest.AssignValue,
UniqueType = reuqest.UniqueType,
- UniqueValue = x,
+ UniqueValue = grpOrDeviceCode,
}).ToList();
- await _dbContext.InsertAsync(devicePermissions);
+ if (devicePermissions.Any())
+ await _dbContext.InsertAsync(devicePermissions);
}, null);
}
public async Task> GetAssignmentsAsync(DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue)
{
- 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();
+ var devicePermissions = await _dbContext.Queryable().ToListAsync();
+ var deviceGroups = await _dbContext.Queryable().ToListAsync();
- 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, devicePermissions, devicePermissions.Contains(x.Code));
- });
- }
-
- 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) result.Add(item.Code);
- RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code));
- }
- }
+ return GetAssignmentsInternal(devicePermissions, deviceGroups, uniqueType, assignType, assignValue);
}
@@ -88,20 +63,18 @@ public class DevicePermissionService : IDevicePermissionService
userNos = await GetPermissionUserNosAsync();
}
- var beforeDic = await GetAssignDeviceCodesAsync(userNos);
+ var beforeDic = await GetAssignDeviceCodesInternalAsync(userNos);
//获取处理
await func();
- //获取当前的权限code
-
var nextUserNos = await GetPermissionUserNosAsync();
if (nextUserNos.Any())
{
userNos = nextUserNos;
}
- var currentDic = await GetAssignDeviceCodesAsync(userNos);
+ var currentDic = await GetAssignDeviceCodesInternalAsync(userNos);
var deivces = await _dbContext.Queryable().ToListAsync();
foreach (var userNo in userNos)
@@ -181,7 +154,6 @@ public class DevicePermissionService : IDevicePermissionService
})
.SingleAsync();
-
var tasks = deviceCodes.Select(x => new DeviceTaskEntity
{
DeviceUniqueNo = deivces.First(item => item.Code == x).UniqueNo,
@@ -215,124 +187,58 @@ public class DevicePermissionService : IDevicePermissionService
public async Task> GetAssignDeviceCodesAsync(string userNo)
{
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 gainfoGroups = await _dbContext.Queryable().ToListAsync();
+ var devicePermissions = await _dbContext.Queryable().ToListAsync();
+ var deviceGroups = await _dbContext.Queryable().ToListAsync();
+ var deviceRelationships = await _dbContext.Queryable().ToListAsync();
+
+ return GetAssignDeviceCodesInternal(new List { gainfo }, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, userNo);
+ }
+
+ public List GetAssignDeviceCodesInternal(List gainfos,
+ List gainfoGroupRelationships,
+ List devicePermissions,
+ List deviceGroups,
+ List deviceGroupRelationships,
+ string userNo)
+ {
var deviceCodes = new List();
var deviceGroupCodes = new List();
- var du = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo);
- var gu = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo);
+ var gainfo = gainfos.Where(x => x.No == userNo).FirstOrDefault();
+ var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToList();
+
+ var du = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo);
+ var gu = GetAssignmentsInternal(devicePermissions, deviceGroups, 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());
+ var dg = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString());
+ var gg = GetAssignmentsInternal(devicePermissions, deviceGroups, 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);
+ var dd = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo);
+ var gd = GetAssignmentsInternal(devicePermissions, deviceGroups, 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);
+ var dt = GetAssignmentsInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks);
+ var gt = GetAssignmentsInternal(devicePermissions, deviceGroups, 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();
+ var deveiceCodesByGroup = deviceGroupRelationships.Where(x => deviceGroupCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList();
deviceCodes.AddRange(deveiceCodesByGroup);
return deviceCodes.Distinct().ToList();
}
- private async Task>> GetAssignDeviceCodesAsync(List userNos)
- {
- var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync();
- if (!gainfos.Any())
- {
- return new Dictionary>();
- }
- var gainfoGroupRelationships = await _dbContext.Queryable().ToListAsync();
- var devicePermissions = await _dbContext.Queryable().ToListAsync();
- var deviceGroups = await _dbContext.Queryable().ToListAsync();
- var result = new Dictionary>();
-
- foreach (var gainfo in gainfos)
- {
- var userNo = gainfo.No;
-
- var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).ToList();
-
- var deviceCodes = new List();
- var deviceGroupCodes = new List();
-
- var du = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo);
- var gu = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo);
- deviceCodes.AddRange(du);
- deviceGroupCodes.AddRange(gu);
-
- foreach (var group in gainfoGroups)
- {
- var dg = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, group.ToString());
- var gg = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, group.ToString());
- deviceCodes.AddRange(dg);
- deviceGroupCodes.AddRange(gg);
- }
-
- var dd = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo);
- var gd = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo);
- deviceCodes.AddRange(dd);
- deviceGroupCodes.AddRange(gd);
-
- var dt = GetAssignmentsInternal(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Werks);
- var gt = GetAssignmentsInternal(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);
-
- result.Add(userNo, deviceCodes.Distinct().ToList());
- }
-
- return result;
-
-
- List GetAssignmentsInternal(DeviceAssignmentTypeEnumType uniqueTypeInternal, AssignTypeEnumType assignTypeInternal, string assignValueInternal)
- {
- var devicePermissionsInternal = devicePermissions.Where(x => x.UniqueType == uniqueTypeInternal)
- .Where(x => x.AssignType == assignTypeInternal)
- .Where(x => x.AssignValue == assignValueInternal)
- .Select(x => x.UniqueValue)
- .ToList();
-
- if (uniqueTypeInternal == DeviceAssignmentTypeEnumType.Group)
- {
- var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList();
- tops.ForEach(x =>
- {
- RecursionGetNext(x, deviceGroups, devicePermissionsInternal, devicePermissionsInternal.Contains(x.Code));
- });
- }
-
- return devicePermissionsInternal.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) result.Add(item.Code);
- RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code));
- }
- }
- }
- }
///
/// 获取用户权限设备
@@ -412,8 +318,67 @@ public class DevicePermissionService : IDevicePermissionService
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();
+ return userNos.Concat(userNosByGroup).Concat(userNosByDepartment).Concat(userNosByWerk).Distinct().ToList();
}
+
+ private static List GetAssignmentsInternal(
+ List devicePermissions, List deviceGroups,
+ DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue)
+ {
+ var devicePermissionCodes = devicePermissions
+ .Where(x => x.UniqueType == uniqueType)
+ .Where(x => x.AssignType == assignType)
+ .Where(x => x.AssignValue == assignValue)
+ .Select(x => x.UniqueValue).ToList();
+
+ //处理获取设备组的情况,递归到最下级获取设备code
+ if (uniqueType == DeviceAssignmentTypeEnumType.Group)
+ {
+ var tops = deviceGroups.Where(x => !x.PCode.HasValue).ToList();
+ tops.ForEach(x =>
+ {
+ RecursionGetNext(x, deviceGroups, devicePermissionCodes, devicePermissionCodes.Contains(x.Code));
+ });
+ }
+
+ return devicePermissionCodes.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) result.Add(item.Code);
+ RecursionGetNext(item, deviceGroups, result, result.Contains(item.Code));
+ }
+ }
+ }
+
+
+ private async Task>> GetAssignDeviceCodesInternalAsync(List userNos)
+ {
+ var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync();
+ if (!gainfos.Any())
+ {
+ return new Dictionary>();
+ }
+
+ var gainfoGroupRelationships = await _dbContext.Queryable().ToListAsync();
+ var devicePermissions = await _dbContext.Queryable().ToListAsync();
+ var deviceGroups = await _dbContext.Queryable().ToListAsync();
+ var deviceRelationships = await _dbContext.Queryable().ToListAsync();
+
+ var result = new Dictionary>();
+
+ foreach (var gainfo in gainfos)
+ {
+ var userNo = gainfo.No;
+ var codes = GetAssignDeviceCodesInternal(gainfos, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, userNo);
+
+ result.Add(userNo, codes);
+ }
+
+ return result;
+ }
}
diff --git a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs b/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs
index c0ebc007..77a92955 100644
--- a/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs
+++ b/Src/Dlhis.Basic/Summary/Response/AttendanceDeviceSummary.cs
@@ -12,13 +12,18 @@ public class AttendanceDeviceSummary
///
/// 在线数
///
- public int OnlineCount { get; set; }
+ public int OnlineCount { get; set; }
///
/// 启用数
///
public int EnableCount { get; set; }
+ ///
+ /// 离线数
+ ///
+ public int OfflineCount => Total - OnlineCount;
+
///
/// 新增设备趋势 30天内
///
diff --git a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs
index 38e03872..d1c15b1c 100644
--- a/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs
+++ b/Src/Dlhis.Basic/Summary/Services/Implements/SummaryService.cs
@@ -53,7 +53,7 @@ public class SummaryService : ISummaryService
{
if (x.HeartbeatInterval <= 0)
{
- return false;
+ return true;
}
return x.LastHeartbeatTime.AddSeconds(x.HeartbeatInterval * 3) >= now;
diff --git a/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs
index f41385d5..c4dcdf1b 100644
--- a/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs
+++ b/Src/Dlhis.Entity/Sys/Enums/AssignTypeEnumType.cs
@@ -21,7 +21,7 @@ public enum AssignTypeEnumType
Role = 2,
///
- /// 组别
+ /// 用户组别
///
[Description("组别")]
Group = 3,
diff --git a/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs b/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs
index 2fc2c372..9e90db6e 100644
--- a/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs
+++ b/Src/Dlhis.ScheduledTask/Packs/HangfirePack.cs
@@ -48,7 +48,7 @@ public class HangfirePack : BaseAppPack
new BasicAuthAuthorizationUser
{
Login ="admin",
- PasswordClear = "admin"
+ PasswordClear = "dlhis123"
}
}
})