diff --git a/Src/Dlhis.Basic/Appointment/Request/AppointmentAreaAssignRequest.cs b/Src/Dlhis.Basic/Appointment/Request/AppointmentAreaAssignRequest.cs
index 112cf6b8..299f9370 100644
--- a/Src/Dlhis.Basic/Appointment/Request/AppointmentAreaAssignRequest.cs
+++ b/Src/Dlhis.Basic/Appointment/Request/AppointmentAreaAssignRequest.cs
@@ -13,5 +13,5 @@ public class AppointmentAreaAssignRequest
///
/// 设备分组
///
- public List DeviceGroupCodes { get; set; }
+ public IEnumerable DeviceGroupCodes { get; set; }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs
index d6778125..85ba8e54 100644
--- a/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs
+++ b/Src/Dlhis.Basic/Appointment/Services/Implements/AppointmentAreaService.cs
@@ -51,8 +51,10 @@ public class AppointmentAreaService : IAppointmentAreaService
public async Task AssignAsync(AppointmentAreaAssignRequest request)
{
- (await _dbContext.Queryable().Where(x => x.CustomCode == request.CustomCode).AnyAsync())
- .ThrowIfFalse("区域不存在");
+ (await _dbContext.Queryable()
+ .Where(x => x.CustomCode == request.CustomCode)
+ .AnyAsync()
+ ).ThrowIfFalse("区域不存在");
(await _dbContext.Queryable()
.Where(x => request.DeviceGroupCodes.Contains(x.Code))
diff --git a/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs b/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs
index 117ec9fa..61b77490 100644
--- a/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs
+++ b/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs
@@ -75,7 +75,7 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc
{
dict.Add(deviceGroupCodeProperty.Name, deviceGroupCodes);
}
-
+
if (deviceCodeProperty != null)
{
var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device).Select(x => x.UniqueValue).ToList();
@@ -88,13 +88,13 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc
}
}
-public interface IMyDataPermissionService : IScopeDependency
+public interface IDataPermissionService : IScopeDependency
{
(bool, List) GetMyDeviceCodes();
(bool, List) GetMyDeviceGroupCodes();
}
-public class MyDataPermissionService : IMyDataPermissionService
+public class MyDataPermissionService : IDataPermissionService
{
private readonly IGetDataPermissions _getDataPermissions;
private readonly ICurrentUser _currentUser;
@@ -110,13 +110,14 @@ public class MyDataPermissionService : IMyDataPermissionService
{
var codes = new List();
- var disableFilter = _currentUser.GetRole() is "admin" or "tenant-admin";
- if (!disableFilter)
+ var hasAllPermission = _currentUser.GetRole() is "admin" or "tenant-admin";
+
+ if (!hasAllPermission)
{
codes = _getDataPermissions.GetData().FirstOrDefault().Value ?? new List();
}
- return (!disableFilter, codes);
+ return (!hasAllPermission, codes);
}
///
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
index ec9335ce..9ef0df5a 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs
@@ -40,6 +40,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService
await CheckWhetherAssignToTopDeviceGroupAsync(request);
await CheckAssignedToTenantAsync(request);
+ await CheckAssignAppointmentAndBusinessTripGroupAsync(request);
var dps = await _devicePermissionAnalyzeService.GetDevicePermissionsAsync(request);
@@ -204,6 +205,19 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService
}
}
+ private async Task CheckAssignAppointmentAndBusinessTripGroupAsync(DevicePermissionSaveRequest request)
+ {
+ if (request.UniqueType == DeviceAssignmentTypeEnumType.Group && request.AssignType != AssignTypeEnumType.User)
+ {
+ if (await DbContext.Queryable().Where(x => request.Codes.Contains(x.Code))
+ .Where(x => x.AsAppointment || x.IsBusinessTrip)
+ .AnyAsync())
+ {
+ true.ThrowIfTrue("不可分配出差组和预约组");
+ }
+ }
+ }
+
///
/// 持久化数据
///
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
index dab25556..fd7737a7 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs
@@ -7,6 +7,7 @@ using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Sys.Entities;
using Dlhis.Entity.Sys.Enums;
+using Dlhis.Entity.Visitor.Entity;
using Dlhis.Sys.Api;
using Kurisu.AspNetCore.Authentication.Abstractions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
@@ -79,6 +80,14 @@ public class DeviceGroupService : IDeviceGroupService
entity.ThrowIfNull("设备分组不存在,无法更新");
entity.Editable.ThrowIfFalse("不可编辑当前分组");
+ if (entity.AsAppointment && request.AsAppointment == false)
+ {
+ (await _dbContext.Queryable()
+ .Where(x => x.DeviceGroupCode == entity.Code)
+ .AnyAsync()
+ ).ThrowIfTrue("该访客组已被分配,无法取消");
+ }
+
if (request.Type != entity.Type)
{
//检查下级分组type不一致
@@ -106,7 +115,7 @@ public class DeviceGroupService : IDeviceGroupService
await CheckNoNextGroupAsync(group.Code);
await CheckGroupTypeMatchAsync(request, group);
- await CheckAssignToTenantAsync(group.Code, request.DeviceCodes);
+ await CheckAssignToTenantAsync(group, request.DeviceCodes);
var relationships = await _dbContext.Queryable().Where(x => x.GroupCode == request.GroupCode).ToListAsync();
@@ -126,19 +135,46 @@ public class DeviceGroupService : IDeviceGroupService
return r;
}
- private async Task CheckAssignToTenantAsync(Guid groupCode, List deviceCodes)
+ private async Task CheckAssignToTenantAsync(DeviceGroupEntity group, List deviceCodes)
{
if (await _dbContext.Queryable()
.Where(x => x.AssignType == AssignTypeEnumType.Tenant)
.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
- .Where(x => x.UniqueValue == groupCode)
+ .Where(x => x.UniqueValue == group.Code)
.AnyAsync())
{
(await _dbContext.Queryable()
.Where(x => x.AssignType != AssignTypeEnumType.Tenant)
.Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Device)
.Where(x => deviceCodes.Contains(x.UniqueValue))
- .AnyAsync()).ThrowIfTrue("无法分配设备到该设备组:设备组已分配到厂区");
+ .AnyAsync()).ThrowIfTrue("无法分配设备到该设备组:设备组已分配到厂区并且存在设备已分配到其他类型");
+ }
+ else
+ {
+ //当前组没有tenant级别
+
+ var currentAssignedToOthers = await _dbContext.Queryable()
+ .Where(x => x.AssignType != AssignTypeEnumType.Tenant)
+ .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
+ .Where(x => x.UniqueValue == group.Code)
+ .AnyAsync();
+
+ var groupCodes = await _dbContext.Queryable()
+ .Where(x => deviceCodes.Contains(x.DeviceCode))
+ .Select(x => x.GroupCode).Distinct()
+ .ToListAsync();
+
+ if (groupCodes.Any())
+ {
+ if (await _dbContext.Queryable()
+ .Where(x => x.AssignType == AssignTypeEnumType.Tenant)
+ .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
+ .Where(x => groupCodes.Contains(x.UniqueValue))
+ .AnyAsync() && currentAssignedToOthers)
+ {
+ true.ThrowIfTrue("存在设备所在的分组已分配到厂区级别,但当前分组存在其他级别的分配");
+ }
+ }
}
}
@@ -212,7 +248,7 @@ public class DeviceGroupService : IDeviceGroupService
return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode;
}).ToList();
}
-
+
var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).ToList();
var currentDevicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList();
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
index d5317e74..4bb29219 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs
@@ -21,32 +21,39 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
{
private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
- private readonly IMyDataPermissionService _myDataPermissionService;
+ private readonly IDataPermissionService _myDataPermissionService;
public DevicePermissionAnalyzeService(IDbContext dbContext,
ICurrentUser currentUser,
- IMyDataPermissionService myDataPermissionService)
+ IDataPermissionService myDataPermissionService)
{
_dbContext = dbContext;
_currentUser = currentUser;
_myDataPermissionService = myDataPermissionService;
}
-
public async Task> GetDevicePermissionsAsync(DevicePermissionSaveRequest request)
{
var currentTenantId = await GetCurrentFactoryAsync(request);
- (bool enableDeviceFilter, List deviceCodes) = _myDataPermissionService.GetMyDeviceCodes();
- (bool enableDeviceGroupFilter, List deviceGroupCodes) = _myDataPermissionService.GetMyDeviceGroupCodes();
- return await _dbContext.Queryable().Where(x => x.AssignType == request.AssignType
- && x.AssignValue == request.GetActualAssignValue()
- && x.UniqueType == request.UniqueType
- && x.Type == request.Type
- && x.TenantId == currentTenantId)
- .WhereIF(enableDeviceFilter && request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue))
- .WhereIF(enableDeviceGroupFilter && request.UniqueType == DeviceAssignmentTypeEnumType.Group, x => deviceGroupCodes.Contains(x.UniqueValue))
- .ToListAsync();
+ var setting = _dbContext.GetQueryableSetting();
+
+ var query = _dbContext.Queryable().Where(x => x.AssignType == request.AssignType
+ && x.AssignValue == request.GetActualAssignValue()
+ && x.UniqueType == request.UniqueType
+ && x.Type == request.Type
+ && x.TenantId == currentTenantId);
+ if (setting.GetEnableDataPermission())
+ {
+ (bool enableDeviceFilter, List deviceCodes) = _myDataPermissionService.GetMyDeviceCodes();
+ (bool enableDeviceGroupFilter, List deviceGroupCodes) = _myDataPermissionService.GetMyDeviceGroupCodes();
+
+ query = query
+ .WhereIF(enableDeviceFilter && request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue))
+ .WhereIF(enableDeviceGroupFilter && request.UniqueType == DeviceAssignmentTypeEnumType.Group, x => deviceGroupCodes.Contains(x.UniqueValue));
+ }
+
+ return await query.ToListAsync();
}
private async Task GetCurrentFactoryAsync(DevicePermissionSaveRequest request)
@@ -179,7 +186,8 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
if (ignoreAssignType.HasValue)
internalIgnoreAssignTypes.Add(ignoreAssignType.Value);
- if (gainfo.Type == GainfoUserTypeEnumType.Outsource && (enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableOutsourceDown ?? true) == false)
+ if (gainfo.Type == GainfoUserTypeEnumType.External ||
+ (gainfo.Type == GainfoUserTypeEnumType.Outsource && (enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableOutsourceDown ?? true) == false))
{
internalIgnoreAssignTypes.Add(AssignTypeEnumType.Tenant);
}
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index caf30660..ae034a9a 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -549,7 +549,7 @@ public class OrderService : IOrderService
var current = await _dbContext.Queryable()
.Where(x => x.No == no && x.IdNo == idNo)
- .Select(x => new { x.Start, x.End })
+ .Select(x => new { x.Name, x.Start, x.End })
.SingleAsync();
(now >= current.Start && now <= current.End).ThrowIfFalse("餐券已过期");
@@ -587,6 +587,7 @@ public class OrderService : IOrderService
//写入记录
var balanceRecord = order.Adapt();
+ balanceRecord.Remark = $"({no})"+current.Name;
await _dbContext.InsertAsync(balanceRecord);
}, 5);
});
diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs
index babfb4db..7aa96cba 100644
--- a/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs
+++ b/Src/Dlhis.Entity/Device/Entities/DeviceGroupEntity.cs
@@ -2,6 +2,7 @@
using Dlhis.Entity.Device.Enums;
using Kurisu.AspNetCore.DataAccess.Entity;
using Kurisu.AspNetCore.DataAccess.SqlSugar;
+using Mapster;
using SqlSugar;
using SqlSugar.DbConvert;
@@ -29,6 +30,7 @@ public class DeviceGroupEntity : SugarBaseEntity, ITenantId, ISoftDeleted
/// 设备组code
///
[DeviceGroupCode]
+ [AdaptIgnore(MemberSide.Destination)]
[SugarColumn(ColumnDescription = "设备组code")]
public Guid Code { get; set; }
diff --git a/Src/Dlhis.Entity/Dlhis.Entity.csproj b/Src/Dlhis.Entity/Dlhis.Entity.csproj
index c3f003b9..730fa9df 100644
--- a/Src/Dlhis.Entity/Dlhis.Entity.csproj
+++ b/Src/Dlhis.Entity/Dlhis.Entity.csproj
@@ -11,7 +11,7 @@
-
+