diff --git a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
index 66a5089f..723635c4 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs
@@ -43,6 +43,7 @@ public class DeviceGroupsController : ControllerBase
///
///
[HttpPost("save")]
+ [IgnoreTenant]
public async Task SaveAsync(DeviceGroupSaveRequest request)
{
await _deviceGroupService.SaveAsync(request);
diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
index f9efc594..ae282891 100644
--- a/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
+++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionSaveReuqest.cs
@@ -27,7 +27,7 @@ public class DevicePermissionSaveReuqest
public DeviceAssignmentTypeEnumType UniqueType { get; set; }
///
- /// 分配权限值不能为空
+ /// 分配权限值
///
- public List Codes { get; set; } = new List();
+ public List Codes { get; set; }
}
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
index 23cc9137..3bef9e57 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
@@ -43,11 +43,7 @@ public class DeviceGroupService : IDeviceGroupService
public async Task SaveAsync(DeviceGroupSaveRequest request)
{
//检查父级节点
- await CheckPCodeExistsDeviceAsync(request.PCode);
-
- var pGrp = await _dbContext.Queryable().Where(x => x.Code == request.PCode).FirstAsync();
- pGrp.AbleSetNext.ThrowIfFalse($"分组{pGrp.Name}不可添加下级");
- (pGrp != null && pGrp.Type != request.Type).ThrowIfTrue("分组类型必须与上级类型保持一致");
+ var pGrp = await CheckPCodeAsync(request);
if (!request.Id.HasValue)
{
@@ -59,8 +55,8 @@ public class DeviceGroupService : IDeviceGroupService
else
{
var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync();
- entity.ThrowIfNull("设备组不存在,无法更新");
- entity.Editable.ThrowIfFalse("不可编辑当前组");
+ entity.ThrowIfNull("设备分组不存在,无法更新");
+ entity.Editable.ThrowIfFalse("不可编辑当前分组");
if (request.Type != entity.Type)
{
@@ -84,7 +80,7 @@ public class DeviceGroupService : IDeviceGroupService
public async Task DeleteAsync(long id)
{
var deviceGroup = await _dbContext.Queryable().Where(x => x.Id == id).FirstAsync();
- deviceGroup.ThrowIfNull("设备组不存在,无需删除");
+ deviceGroup.ThrowIfNull("设备分组不存在,无需删除");
await _dbContext.DeleteAsync(deviceGroup);
}
@@ -131,28 +127,35 @@ public class DeviceGroupService : IDeviceGroupService
/****************************************************** help methods *********************************************************/
///
- /// 检查父级分组存在设备
+ /// 检查父级分组
///
- ///
+ ///
///
- private async Task CheckPCodeExistsDeviceAsync(Guid? pCode)
+ private async Task CheckPCodeAsync(DeviceGroupSaveRequest request)
{
- if (pCode.HasValue)
+
+ var pGrp = await _dbContext.Queryable().Where(x => x.Code == request.PCode).FirstAsync();
+ if (pGrp != null)
{
- var exists = await _dbContext.Queryable().Where(x => x.GroupCode == pCode).AnyAsync();
+ (!pGrp.AbleSetNext && !request.Id.HasValue).ThrowIfTrue($"{pGrp.Name}不可添加下级");
+ var exists = await _dbContext.Queryable().Where(x => x.GroupCode == request.PCode).AnyAsync();
exists.ThrowIfTrue("父级分组存在设备");
}
+
+ (pGrp != null && pGrp.Type != request.Type).ThrowIfTrue("分组类型必须与上级类型保持一致");
+
+ return pGrp;
}
///
- ///
+ /// 检查分组是否存在下级
///
///
///
private async Task CheckNoNextGroupAsync(Guid currentCode)
{
var exists = await _dbContext.Queryable().Where(x => x.PCode == currentCode).AnyAsync();
- exists.ThrowIfTrue("存在下级设备分组");
+ exists.ThrowIfTrue("存在下级设备分组,无法分配设备");
}
///
@@ -165,7 +168,7 @@ public class DeviceGroupService : IDeviceGroupService
{
var devices = await _dbContext.Queryable().Where(x => request.DeviceCodes.Contains(x.Code)).ToListAsync();
//检查分组的分类控制
- devices.Any(x => x.Type != group.Type).ThrowIfTrue("存在设备类型有误,无法分配到当前分组");
+ devices.Any(x => x.Type != group.Type).ThrowIfTrue($"存在设备类型不一致,无法分配到当前{group.Type.GetDescription()}分组");
//重新赋值到请求参数中
request.DeviceCodes = devices.Select(x => x.Code).ToList();
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs
index e28e3c0d..42fac162 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs
@@ -47,19 +47,25 @@ public class DeviceService : IDeviceService
var deviceUniqueNos = page.Data.Select(x => x.UniqueNo).ToList();
- var balanceRecords = await _dbContext.Queryable().Where(x => x.Type == BalanceRecordTypeEnumType.Out)
+ var balanceInfos = await _dbContext.Queryable().Where(x => x.Type == BalanceRecordTypeEnumType.Out)
.Where(x => deviceUniqueNos.Contains(x.DeviceInfo))
.Select(x => new
{
- x.Amount,
- x.UserCode
+ x.DeviceInfo,
+ Amount = SqlFunc.AggregateSum(x.Amount),
+ UserCount = SqlFunc.AggregateDistinctCount(x.UserCode)
})
+ .GroupBy(x => x.DeviceInfo)
.ToListAsync();
page.Data.ForEach(device =>
{
- device.Amount = balanceRecords.Sum(x => x.Amount);
- device.UserCount = balanceRecords.DistinctBy(x => x.UserCode).Count();
+ var info = balanceInfos.FirstOrDefault(x => x.DeviceInfo == device.UniqueNo);
+ if (info != null)
+ {
+ device.Amount = info.Amount;
+ device.UserCount = info.UserCount;
+ }
});
return page;
diff --git a/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs
index 8f2a3c09..39135b68 100644
--- a/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs
+++ b/Src/Dlhis.Entity/Sys/Entities/DevicePermissionEntity.cs
@@ -13,7 +13,7 @@ namespace Dlhis.Entity.Sys.Entities;
public class DevicePermissionEntity : SugarBaseEntity, ITenantId
{
///
- /// 分配权限类型
+ /// 分配权限类型(User,Role,Group...)
///
[SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "分配权限类型", SqlParameterDbType = typeof(EnumToStringConvert))]
public AssignTypeEnumType AssignType { get; set; }
@@ -25,7 +25,7 @@ public class DevicePermissionEntity : SugarBaseEntity, ITenantId
public string AssignValue { get; set; }
///
- /// 设备权限类型
+ /// 设备权限类型(Device/DeviceGroup)
///
[SugarColumn(ColumnDataType = "varchar(50)", ColumnDescription = "设备权限类型", SqlParameterDbType = typeof(EnumToStringConvert))]
public DeviceAssignmentTypeEnumType UniqueType { get; set; }
diff --git a/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs b/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs
index ed994038..bd7cdb19 100644
--- a/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs
+++ b/Src/Dlhis.ScheduledTask/CommonJobs/HeartbeatJob.cs
@@ -38,11 +38,11 @@ public class HeartbeatJob
await _dbContext.Updateable().SetColumns(x => x.LastHeartbeatTime == DateTime.Now)
.Where(x => x.DeviceUniqueNo == device.UniqueNo).ExecuteCommandAsync();
- _logger.LogInformation("心跳设备成功:{no}", device.UniqueNo);
+ // _logger.LogInformation("心跳设备成功:{no}", device.UniqueNo);
}
- catch (Exception ex)
+ catch (Exception)
{
- _logger.LogError(ex, "心跳设备失败:{no}. {message}", device.UniqueNo, ex.Message);
+ //_logger.LogError(ex, "心跳设备失败:{no}. {message}", device.UniqueNo, ex.Message);
}
}
}