From cae9035e4a08be712d57de3f67946a32eca6c11b Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 4 Jul 2024 17:53:53 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=87=BA=E5=B7=AE=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E7=AD=9B=E9=80=89,=E7=A7=BB=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/Dlhis.Basic.Api/IDevicePermissionApi.cs | 4 -- .../DevicePermissionsController.cs | 26 +++--------- .../Services/IDevicePermissionService.cs | 10 ----- .../Implements/DevicePermissionService.cs | 42 +++++++------------ .../Organization/Request/GainfoPageRequest.cs | 6 +-- .../Services/Implements/GainfoService.cs | 16 ++++--- .../Order/Services/BaseOrderService.cs | 20 +-------- .../Implements/BookingOrderService.cs | 4 +- .../Order/Services/Implements/OrderService.cs | 6 +-- .../Visitor/Entity/BusinessTripEntity.cs | 4 +- .../Response/SapBusinessTripInfoResponse.cs | 4 +- Src/Dlhis.ScheduledTask/Jobs/SyncPersonJob.cs | 14 ++++--- 12 files changed, 52 insertions(+), 104 deletions(-) diff --git a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs b/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs index f0121db1..5fcb07cf 100644 --- a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs +++ b/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs @@ -8,10 +8,6 @@ namespace Dlhis.Basic.Api; [EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")] public interface IDevicePermissionApi { - [Auth] - [Get("/api/devicepermissions/canteen/uniqueNos")] - Task>> GetCanteenDeviceUniqueNosByUserNoAsync(string userNo); - /// /// 获取所有人的权限信息 /// diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 5daf8d28..89874b8b 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -82,19 +82,16 @@ public class DevicePermissionsController : ControllerBase { return await _devicePermissionService.GetAssignmentUniqueAsync(request); } - - + /// - /// 获取就餐设备唯一号权限 + /// 获取设备下人员分页 /// - /// + /// /// - [AllowAnonymous] - [HttpGet("canteen/uniqueNos")] - [IgnoreTenant] - public async Task> GetCanteenDeviceUniqueNosByUserNoAsync(string userNo) + [HttpGet("gainfos/page")] + public async Task> GetGainfoPageByDeviceAsync([FromQuery] DeviceWithGainfoRequest request) { - return await _devicePermissionService.GetCanteenDeviceUniqueNosByUserNoAsync(userNo); + return await _devicePermissionService.GetGainfoPageByDeviceAsync(request); } /// @@ -121,15 +118,4 @@ public class DevicePermissionsController : ControllerBase { return await _devicePermissionService.ReGeneratePermissionUsersInfoAsync(beforeDto); } - - /// - /// 获取设备下人员分页 - /// - /// - /// - [HttpGet("gainfos/page")] - public async Task> GetGainfoPageByDeviceAsync([FromQuery] DeviceWithGainfoRequest request) - { - return await _devicePermissionService.GetGainfoPageByDeviceAsync(request); - } } \ 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 78616140..2b63bb2c 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -58,18 +58,8 @@ public interface IDevicePermissionService : IScopeDependency /// Task> GetAssignDeviceCodesAsync(string userNo); - - /// - /// 获取就餐权限唯一号 - /// - /// - /// - Task> GetCanteenDeviceUniqueNosByUserNoAsync(string userNo); - - Task GetPermissionUsersInfoAsync(List userNos); - Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto); Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request); diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 39bbebd2..de19423b 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -335,18 +335,21 @@ public class DevicePermissionService : IDevicePermissionService var current = await GetAssignDeviceCodesInternalAsync(userNos); - var deivces = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); + var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); var waitTasks = new List(); foreach (var userNo in userNos) { before.TryGetValue(userNo, out var beforeTenantDeviceCodes); beforeTenantDeviceCodes ??= new(); - current.TryGetValue(userNo, out var currentTenantDeviceCodes); currentTenantDeviceCodes ??= new(); - var tenants = beforeTenantDeviceCodes.Select(x => x.Tenant).Concat(currentTenantDeviceCodes.Select(x => x.Tenant)).Distinct().ToList(); + var tenants = new HashSet(); + foreach (var item in beforeTenantDeviceCodes) + tenants.Add(item.Tenant); + foreach (var item in currentTenantDeviceCodes) + tenants.Add(item.Tenant); foreach (var tenant in tenants) { @@ -363,34 +366,33 @@ public class DevicePermissionService : IDevicePermissionService continue; } - var deviceCodes = deivces.Where(x => deletedItems.Contains(x.Code) || addItems.Contains(x.Code)).Select(x => x.Code).ToList(); + var deviceCodes = devices.Where(x => deletedItems.Contains(x.Code) || addItems.Contains(x.Code)).Select(x => x.Code).ToList(); deletedItems = deletedItems.Where(x => deviceCodes.Contains(x)).ToList(); addItems = addItems.Where(x => deviceCodes.Contains(x)).ToList(); //下发任务创建 - var toDeleted = deletedItems.Select(x => new DeviceTaskEntity + deletedItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity { - DeviceUniqueNo = deivces.First(item => item.Code == x).UniqueNo, + DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Type = DeviceTaskEnumType.Delete, - DeviceType = deivces.First(item => item.Code == x).Type, + CancellationId = 0, + DeviceType = devices.First(item => item.Code == x).Type, UserNo = userNo, Version = 0, TenantId = tenant, - }).ToList(); + })); - var toAdd = addItems.Select(x => new DeviceTaskEntity + addItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity { - DeviceUniqueNo = deivces.First(item => item.Code == x).UniqueNo, + DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Type = DeviceTaskEnumType.Add, - DeviceType = deivces.First(item => item.Code == x).Type, + DeviceType = devices.First(item => item.Code == x).Type, UserNo = userNo, Version = 0, TenantId = tenant, - }).ToList(); - - waitTasks.AddRange(toDeleted.Concat(toAdd).ToList()); + })); } } @@ -481,18 +483,6 @@ public class DevicePermissionService : IDevicePermissionService await _dbContext.InsertAsync(tasks); } - public async Task> GetCanteenDeviceUniqueNosByUserNoAsync(string userNo) - { - var all = await GetAssignDeviceCodesAsync(userNo); - - return await _dbContext.Queryable() - .Where(x => x.Enable) - .Where(x => x.Type == DeviceTypeEnumType.Meal) - .Where(x => all.Contains(x.Code)) - .Select(x => x.UniqueNo) - .ToListAsync(); - } - /// /// 获取用户所有设备权限 diff --git a/Src/Dlhis.Basic/Organization/Request/GainfoPageRequest.cs b/Src/Dlhis.Basic/Organization/Request/GainfoPageRequest.cs index e99ce379..899a8369 100644 --- a/Src/Dlhis.Basic/Organization/Request/GainfoPageRequest.cs +++ b/Src/Dlhis.Basic/Organization/Request/GainfoPageRequest.cs @@ -18,11 +18,11 @@ public class GainfoPageRequest : PageDto, IValidatableObject /// public List DepartmentSelections { get; set; } = new(); - /// - /// 是否为外包 + /// 查询类型 GainfoSearchEnumType /// - public bool? IsOutsource { get; set; } + [EnumDataType(typeof(GainfoSearchEnumType))] + public GainfoSearchEnumType SearchType { get; set; } public IEnumerable Validate(ValidationContext validationContext) { diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index b8fb0e8a..4a61fb40 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -4,6 +4,7 @@ using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Enums; +using Dlhis.Entity.Visitor.Entity; using Dlhis.Scheduled.Api; using Dlhis.Scheduled.Api.Request; using Dlhis.Sys.Api; @@ -57,8 +58,6 @@ public class GainfoService : IGainfoService /// public async Task> GetPageAsync(GainfoPageRequest request) { - var currentTenantId = _currentUser.GetStringTenantId(); - //根据组织架构搜索档案 var where = LinqExpressionExtensions.False(); foreach (var item in request.DepartmentSelections) @@ -69,11 +68,16 @@ public class GainfoService : IGainfoService : where.Or(gainfo => gainfo.Factory == item.Tenant); } + //获取所有厂区 + var factories = request.DepartmentSelections.Select(x => x.Tenant); + var today = DateTime.Today; + var page = await _gainfoStore.Queryable(request.Status) - .WhereIF(request.DepartmentSelections?.Any() == true, where) - .WhereIF(request.DepartmentSelections?.Any() != true, gainfo => gainfo.Factory == currentTenantId) - .WhereIF(request.IsOutsource.HasValue && request.IsOutsource.Value, gainfo => SqlFunc.Subqueryable().Where(x => x.Code == gainfo.Code).Any()) - .WhereIF(request.IsOutsource.HasValue && !request.IsOutsource.Value, gainfo => SqlFunc.Subqueryable().Where(x => x.Code == gainfo.Code).NotAny()) + .WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == true, where) + .WhereIF(request.SearchType == GainfoSearchEnumType.Internal, gainfo => SqlFunc.Subqueryable().Where(x => x.Code == gainfo.Code).NotAny()) + .WhereIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo => SqlFunc.Subqueryable().Where(x => x.Code == gainfo.Code).Any()) + .WhereIF(request.SearchType == GainfoSearchEnumType.BusinessTrip, gainfo => + SqlFunc.Subqueryable().Where(x => x.Code == gainfo.Code && factories.Contains(x.Destination) && SqlFunc.DateIsSame(x.BeginDate, today)).Any()) .WhereIF(request.Search.IsPresent(), gainfo => gainfo.Name.Contains(request.Search) || gainfo.Code == request.Search diff --git a/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs b/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs index 46161d48..73c719d2 100644 --- a/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/BaseOrderService.cs @@ -1,5 +1,4 @@ -using Dlhis.Basic.Api; -using Dlhis.Canteen.Setting.Services; +using Dlhis.Canteen.Setting.Services; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Authentication.Abstractions; @@ -14,20 +13,17 @@ public abstract class BaseOrderService private readonly ICanteenSettingService _canteenSettingService; private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; - private readonly IDevicePermissionApi _devicePermissionApi; private readonly ILogger _logger; private Dictionary _settings; public BaseOrderService(ICanteenSettingService canteenSettingService, IDbContext dbContext, ICurrentUser currentUser, - IDevicePermissionApi devicePermissionApi, ILogger logger) { _canteenSettingService = canteenSettingService; _dbContext = dbContext; _currentUser = currentUser; - _devicePermissionApi = devicePermissionApi; _logger = logger; } @@ -37,20 +33,6 @@ public abstract class BaseOrderService protected ICurrentUser CurrentUser => _currentUser; - /// - /// 检查权限 - /// - /// - /// - /// - protected async Task CheckPermissionAsync(string userNo, string deviceUniqueNo) - { - var uniqueNosResult = await _devicePermissionApi.GetCanteenDeviceUniqueNosByUserNoAsync(userNo); - var uniqueNos = uniqueNosResult.Data; - - uniqueNos.Contains(deviceUniqueNo).ThrowIfFalse("无消费权限"); - } - /// /// 获取参数配置 /// diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs index 80c7590c..0c42aed6 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs @@ -25,8 +25,8 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService public BookingOrderService(ICanteenSettingService canteenSettingService, IDbContext dbContext, IDishesMenuApi dishesMenuApi, IBusinessPlacePermissionsApi businessPlacePermissionsApi, - ICurrentUser currentUser, IDevicePermissionApi devicePermissionApi, ILogger logger) - : base(canteenSettingService, dbContext, currentUser, devicePermissionApi, logger) + ICurrentUser currentUser, ILogger logger) + : base(canteenSettingService, dbContext, currentUser, logger) { _dishesMenuApi = dishesMenuApi; _businessPlacePermissionsApi = businessPlacePermissionsApi; diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index 7db4ffa0..2babc612 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -1,5 +1,4 @@ -using Dlhis.Basic.Api; -using Dlhis.Canteen.Setting.Services; +using Dlhis.Canteen.Setting.Services; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; @@ -27,10 +26,9 @@ public class OrderService : BaseOrderService, IOrderService public OrderService(ICanteenSettingService canteenSettingService, IDbContext dbContext, ICurrentUser currentUser, - IDevicePermissionApi devicePermissionApi, RedisCache redisCache, ILogger logger) - : base(canteenSettingService, dbContext, currentUser, devicePermissionApi, logger) + : base(canteenSettingService, dbContext, currentUser, logger) { _redisCache = redisCache; } diff --git a/Src/Dlhis.Entity/Visitor/Entity/BusinessTripEntity.cs b/Src/Dlhis.Entity/Visitor/Entity/BusinessTripEntity.cs index a288af24..156a0770 100644 --- a/Src/Dlhis.Entity/Visitor/Entity/BusinessTripEntity.cs +++ b/Src/Dlhis.Entity/Visitor/Entity/BusinessTripEntity.cs @@ -21,13 +21,13 @@ public class BusinessTripEntity : SugarBaseEntity /// 开始日期 /// [SugarColumn(IsNullable = false, UniqueGroupNameList = new[] { "unique_BusinessTrip_code_begin_end" })] - public string BeginDate { get; set; } + public DateTime BeginDate { get; set; } /// /// 结束日期 /// [SugarColumn(IsNullable = false, UniqueGroupNameList = new[] { "unique_BusinessTrip_code_begin_end" })] - public string EndDate { get; set; } + public DateTime EndDate { get; set; } /// /// 开始时间 diff --git a/Src/Dlhis.ScheduledTask/Common/Response/SapBusinessTripInfoResponse.cs b/Src/Dlhis.ScheduledTask/Common/Response/SapBusinessTripInfoResponse.cs index 34c88b79..d8a10d25 100644 --- a/Src/Dlhis.ScheduledTask/Common/Response/SapBusinessTripInfoResponse.cs +++ b/Src/Dlhis.ScheduledTask/Common/Response/SapBusinessTripInfoResponse.cs @@ -29,13 +29,13 @@ public class SapBusinessTripInfoItem /// 开始日期 /// [JsonProperty("OV_BEGDA")] - public string BeginDate { get; set; } + public DateTime BeginDate { get; set; } /// /// 结束日期 /// [JsonProperty("OV_ENDDA")] - public string EndDate { get; set; } + public DateTime EndDate { get; set; } /// /// 开始时间 diff --git a/Src/Dlhis.ScheduledTask/Jobs/SyncPersonJob.cs b/Src/Dlhis.ScheduledTask/Jobs/SyncPersonJob.cs index ddcc2f5c..30fcd6ef 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/SyncPersonJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/SyncPersonJob.cs @@ -24,14 +24,16 @@ public class SyncPersonJob : BaseJob foreach (var werk in werks) { - if (werk.BackgroundJobKey.IsEmpty()) + if (!werk.BackgroundJobKey.IsEmpty()) { - var jobKey = BackgroundJob.Enqueue(x => x.TodoByWerkAsync(werk.Werk)); - werk.BackgroundJobKey = jobKey; - await DbContext.UpdateAsync(werk); - - Logger.LogInformation("SAP创建人事范围{werk}后台调度任务", werk.Werk); + continue; } + + var jobKey = BackgroundJob.Enqueue(x => x.TodoByWerkAsync(werk.Werk)); + werk.BackgroundJobKey = jobKey; + await DbContext.UpdateAsync(werk); + + Logger.LogInformation("SAP创建人事范围{werk}后台调度任务", werk.Werk); } } } \ No newline at end of file