From 405acce916fa5e4ff72e37cf36038a741fe07527 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 22 Nov 2024 15:20:49 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BA=8C=E7=BB=B4=E7=A0=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E8=AE=BE=E5=A4=87=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/DishesMenuDetailDto.cs | 20 --- Src/Dlhis.Basic.Api/IDeviceGroupApi.cs | 20 --- Src/Dlhis.Basic.Api/IDevicePermissionApi.cs | 25 --- Src/Dlhis.Basic.Api/IDishesMenuApi.cs | 21 --- Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs | 4 + .../Request/GeneratePermissionIdRequest.cs | 7 - .../Response/DeviceUnderGroupResponse.cs | 21 --- .../DevicePermissionsController.cs | 23 +-- .../Services/IDevicePermissionService.cs | 8 +- .../Implements/DevicePermissionService.cs | 135 +--------------- .../Services/ISapBusinessTripService.cs | 2 +- .../Implements/GainfoPermissionService.cs | 4 +- .../Services/Implements/GainfoService.cs | 2 +- .../Implements/SapBusinessTripService.cs | 139 +++++++++++++++++ Src/Dlhis.Canteen/Dlhis.Canteen.csproj | 4 + Src/Dlhis.Canteen/Dockerfile | 16 +- .../Order/Services/Implements/OrderService.cs | 20 ++- .../Properties/launchSettings.json | 9 ++ .../Implements/SapBusinessTripService.cs | 144 ------------------ 19 files changed, 201 insertions(+), 423 deletions(-) delete mode 100644 Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs delete mode 100644 Src/Dlhis.Basic.Api/IDeviceGroupApi.cs delete mode 100644 Src/Dlhis.Basic.Api/IDevicePermissionApi.cs delete mode 100644 Src/Dlhis.Basic.Api/IDishesMenuApi.cs delete mode 100644 Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs delete mode 100644 Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs rename Src/{Dlhis.ScheduledTask/Common => Dlhis.Basic/Organization}/Services/ISapBusinessTripService.cs (72%) create mode 100644 Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs delete mode 100644 Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs diff --git a/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs b/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs deleted file mode 100644 index 4e5addef..00000000 --- a/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Dlhis.Basic.Api.Dto; - -public class DishesMenuDetailDto -{ - public DateTime Date { get; set; } - - public long MenuId { get; set; } - - public long DishesId { get; set; } - - public string DishesCode { get; set; } - - public string DishesName { get; set; } - - public decimal Price { get; set; } - - public int Number { get; set; } - - public int Version { get; set; } -} diff --git a/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs b/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs deleted file mode 100644 index cd23e83d..00000000 --- a/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Dlhis.Basic.Api.Response; -using Kurisu.RemoteCall.Attributes; -using Kurisu.RemoteCall.Default; - -namespace Dlhis.Basic.Api; - - -[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")] -public interface IDeviceGroupApi -{ - - /// - /// 获取分组下的设备 - /// - /// - /// - [Auth] - [Get("/api/deviceGroups/devices")] - Task>> GetDevicesByCodeAsync(Guid code); -} diff --git a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs b/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs deleted file mode 100644 index 09b76de1..00000000 --- a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Dlhis.Basic.Api.Dto; -using Dlhis.Basic.Api.Request; -using Kurisu.RemoteCall.Attributes; -using Kurisu.RemoteCall.Default; - -namespace Dlhis.Basic.Api; - -[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")] -public interface IDevicePermissionApi -{ - /// - /// 获取所有人的权限信息 - /// - /// - [Post("/api/devicepermissions/all-permission")] - Task> GetPermissionUsersInfoAsync(List userNos); - - /// - /// 重新生成权限 - /// - /// - /// - [Post("/api/devicepermissions/re-permission")] - Task> RePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto); -} \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/IDishesMenuApi.cs b/Src/Dlhis.Basic.Api/IDishesMenuApi.cs deleted file mode 100644 index 66cdecb3..00000000 --- a/Src/Dlhis.Basic.Api/IDishesMenuApi.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Dlhis.Basic.Api.Dto; -using Kurisu.RemoteCall.Attributes; -using Kurisu.RemoteCall.Default; - -namespace Dlhis.Basic.Api; - -[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")] -public interface IDishesMenuApi -{ - /// - /// - /// - /// - /// - /// - /// - /// - [Auth] - [Get("/api/dishesMenus/checkdetail")] - Task> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, int shiftType, string dishesCode); -} \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs b/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs index 686ca839..e3ff75cb 100644 --- a/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs +++ b/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs @@ -9,4 +9,8 @@ public interface IGainfoPermissionApi { [Post("/api/gainfoPermissions/reset")] Task ResetAsync(GainfoPermissionResetRequest request); + + [Auth] + [Get("/api/devicePermissions/userPermissionCodes")] + Task>> GetPermissionsDeviceCodesAsync(string userCode); } \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs b/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs deleted file mode 100644 index b507e53c..00000000 --- a/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Dlhis.Basic.Api.Request -{ - public class GeneratePermissionIdRequest - { - public long Id { get; set; } - } -} \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs b/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs deleted file mode 100644 index a2e8a5ea..00000000 --- a/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Dlhis.Basic.Api.Response; - -public class DeviceUnderGroupResponse -{ - public Guid Code { get; set; } - - /// - /// 设备唯一码,IP/MAC/SNO - /// - public string UniqueNo { get; set; } - - /// - /// 品牌 - /// - public string Brand { get; set; } - - /// - /// 是否启用 - /// - public bool Enable { get; set; } -} diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 7418fafc..834c46c9 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -84,29 +84,12 @@ public class DevicePermissionsController : ControllerBase return await _devicePermissionService.GetGainfoPageByDeviceAsync(request); } - /// - /// 获取当前所有人的权限code - /// - /// - [AllowAnonymous] - [HttpPost("all-permission")] - [IgnoreTenant] - public async Task GetPermissionUsersInfoAsync(List userNos) - { - return await _devicePermissionService.GetPermissionUsersInfoAsync(userNos); - } - /// - /// 根据权限code生成下发任务 - /// - /// - /// - [AllowAnonymous] + [HttpGet("userPermissionCodes")] [IgnoreTenant] - [HttpPost("re-permission")] - public async Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto) + public async Task> GetAssignDeviceCodesAsync(string userCode) { - return await _devicePermissionService.ReGeneratePermissionUsersInfoAsync(beforeDto); + return await _devicePermissionService.GetAssignDeviceCodesAsync(userCode); } [AllowAnonymous] diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs index 612d4c2e..deb9d1d5 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs @@ -56,13 +56,9 @@ public interface IDevicePermissionService : IScopeDependency /// /// 获取用户所有设备权限 /// - /// + /// /// - Task> GetAssignDeviceCodesAsync(string userNo); - - Task GetPermissionUsersInfoAsync(List userNos); - - Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto); + Task> GetAssignDeviceCodesAsync(string userCode); Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 333e1507..c9bb65d8 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -300,100 +300,6 @@ public class DevicePermissionService : IDevicePermissionService } } - public async Task GetPermissionUsersInfoAsync(List userNos) - { - if (userNos.IsEmpty()) - userNos = await GetPermissionUserNosAsync(); - - var permissions = await GetAssignDeviceCodesInternalAsync(userNos); - - return new PermissionUsersInfoDto - { - UserNos = userNos, - PermissionInfos = permissions - }; - } - - - public async Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto) - { - var userNos = beforeDto.UserNos; - var before = beforeDto.PermissionInfos.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase); - - var current = await GetAssignDeviceCodesInternalAsync(userNos); - - 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 List(); - current.TryGetValue(userNo, out var currentTenantDeviceCodes); - currentTenantDeviceCodes ??= new List(); - - 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) - { - var currentCodes = currentTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List(); - var beforeCodes = beforeTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List(); - - //被删除 - var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList(); - //新增 - var addItems = currentCodes.Where(x => !beforeCodes.Contains(x)).ToList(); - - if (!deletedItems.Any() && !addItems.Any()) - { - continue; - } - - 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(); - - //下发任务创建 - deletedItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity - { - DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, - Status = DeviceTaskStatusEnumType.Wait, - Type = DeviceTaskEnumType.Delete, - CancellationId = 0, - DeviceType = devices.First(item => item.Code == x).Type, - UserNo = userNo, - Version = 0, - TenantId = tenant, - Source = DeviceTaskSourceEnumType.Schedule - })); - - addItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity - { - DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, - Status = DeviceTaskStatusEnumType.Wait, - Type = DeviceTaskEnumType.Add, - DeviceType = devices.First(item => item.Code == x).Type, - UserNo = userNo, - Version = 0, - TenantId = tenant, - Source = DeviceTaskSourceEnumType.Schedule - })); - } - } - - if (waitTasks.Any()) - { - await _dbContext.InsertAsync(waitTasks); - } - - return waitTasks.Count; - } - - public async Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request) { var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync(); @@ -536,44 +442,13 @@ public class DevicePermissionService : IDevicePermissionService /// /// 获取用户所有设备权限 /// - /// + /// /// - public async Task> GetAssignDeviceCodesAsync(string userNo) + public async Task> GetAssignDeviceCodesAsync(string userCode) { - var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); - var deviceRegistries = await _dbContext.Queryable().Where(x => !SqlFunc.IsNullOrEmpty(x.BusinessPlaceCode)).ToListAsync(); - - var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync() - ?? await _dbContext.Queryable().AS("GainfoLeave").Where(x => x.No == userNo).SingleAsync(); - - var gainfoGroups = await _dbContext.Queryable().ToListAsync(); - - var devicePermissions = await _dbContext.Queryable().ToListAsync(); - var deviceGroups = await _dbContext.Queryable().ToListAsync(); - var deviceGroupCodes = deviceGroups.Select(x => x.Code).ToList(); - var deviceRelationships = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).ToListAsync(); - var departments = await _dbContext.Queryable().ToListAsync(); - - - var isOutsource = await _dbContext.Queryable().AnyAsync(x => x.Code == gainfo.Code); - - var enableFactoryPermissions = await _dbContext.Queryable().ToListAsync(); - - var gainfoDto = new GainfoDto - { - Id = gainfo.Id, - No = gainfo.No, - Code = gainfo.Code, - Name = gainfo.Name, - Workplace = gainfo.Workplace, - Factory = gainfo.Factory, - DepartmentNo = gainfo.DepartmentNo, - IsOutsource = isOutsource, - EnableFactoryPermission = enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableOutsourceDown ?? true - }; - - var result = GetAssignDeviceCodesInternal(gainfoDto, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices, departments); - return result.SelectMany(x => x.Codes).ToList(); + var userNo = await _dbContext.Queryable().Where(x => x.Code == userCode || x.No == userCode).Select(x => x.No).SingleAsync(); + var result = await GetAssignDeviceCodesInternalAsync(new List { userNo }); + return result.First().Value.SelectMany(x => x.Codes).ToList(); } //************************************************ help methods ******************************************************* diff --git a/Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs similarity index 72% rename from Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs rename to Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs index 183f3278..c2d24a10 100644 --- a/Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs +++ b/Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs @@ -1,4 +1,4 @@ -namespace Dlhis.ScheduledTask.Common.Services; +namespace Dlhis.Basic.Organization.Services; public interface ISapBusinessTripService : IScopeDependency { diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs index bd76cf19..89cec74a 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs @@ -40,7 +40,7 @@ public class GainfoPermissionService : IGainfoPermissionService } //用户所有deviceCode权限 - var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.No); + var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.Code); return await _dbContext.Queryable() .LeftJoin((x, dr) => x.UniqueNo == dr.DeviceUniqueNo) @@ -164,7 +164,7 @@ public class GainfoPermissionService : IGainfoPermissionService gainfo.ThrowIfNull("档案数据不存在"); //获取人员的设备权限 - var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(request.UserNo); + var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo!.Code); var devices = await _dbContext.Queryable().Where(x => deviceCodes.Contains(x.Code)).ToListAsync(); var tasks = devices.Select(x => new DeviceTaskEntity diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index ad8f6cfa..addbeae6 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -292,7 +292,7 @@ public class GainfoService : IGainfoService await _dbContext.UpdateAsync(gainfo); - var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.No); + var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.Code); var dhDevices = await _dbContext.Queryable().LeftJoin((x, xt) => x.TemplateCode == xt.Code) .Where((x, xt) => xt.Name == "大华人脸机") diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs new file mode 100644 index 00000000..c587e8ac --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs @@ -0,0 +1,139 @@ +// using Dlhis.Entity.Basic.Entity; +// 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.Entity.Visitor.Enums; +// using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; +// using SqlSugar; +// +// namespace Dlhis.Basic.Organization.Services.Implements; +// +// public class SapBusinessTripService : ISapBusinessTripService +// { +// private readonly IJinkoJipService _jinkoJipService; +// private readonly IDbContext _dbContext; +// private readonly ILogger _logger; +// +// public SapBusinessTripService(IJinkoJipService jinkoJipService, IDbContext dbContext , ILogger logger) +// { +// _jinkoJipService = jinkoJipService; +// _dbContext = dbContext; +// _logger = logger; +// } +// +// /// +// public async Task HandlerBusinessTripsByFactoryAsync(string factory) +// { +// var today = DateTime.Today; +// var yesterday = today.AddDays(-1); +// +// try +// { +// var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory); +// if (!tripResponse.Items.Any()) +// { +// return; +// } +// +// foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent())) +// { +// if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code +// && x.BeginDate == tripInfoItem.BeginDate +// && x.EndDate == tripInfoItem.EndDate +// && x.Destination == factory).AnyAsync()) +// { +// continue; +// } +// +// var entity = tripInfoItem.Adapt(); +// entity.Status = BusinessTripStatusEnumType.Wait; +// await _dbContext.InsertAsync(entity); +// } +// +// //获取今天和昨天的出差数据 +// var tripInfos = await _dbContext.Queryable() +// .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today)) +// || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday))) +// .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) +// .Where(x => x.Destination == factory) +// .ToListAsync(); +// +// //获取分组信息 +// var tripGroup = await _dbContext.Queryable() +// .Where(x => x.Type == DeviceTypeEnumType.Door) +// .Where(x => x.TenantId == factory) +// .Where(x => x.IsBusinessTrip) +// .SingleAsync(); +// +// var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList(); +// var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync(); +// +// foreach (var gainfo in gainfos) +// { +// try +// { +// var myTripInfos = tripInfos.Where(x => x.Code == gainfo.Code).ToList(); +// +// var yesterdayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == yesterday && x.EndDate == yesterday); //昨天出差数据 +// var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); //今天出差数据 +// +// //都为空不处理 +// if (yesterdayTripInfo == null && todayTripInfo == null) continue; +// +// //都不为空则更新数据状态 +// if (yesterdayTripInfo != null && todayTripInfo != null) +// { +// todayTripInfo.Status = BusinessTripStatusEnumType.Generated; +// await _dbContext.UpdateAsync(todayTripInfo); +// continue; +// } +// +// var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code }); +// +// if (yesterdayTripInfo != null) +// { +// yesterdayTripInfo.Status = BusinessTripStatusEnumType.Deleted; +// await _dbContext.Updateable() +// .SetColumns(x => x.IsDeleted == true) +// .Where(x => x.AssignType == AssignTypeEnumType.User) +// .Where(x => x.AssignValue == gainfo.No) +// .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group) +// .Where(x => x.UniqueValue == tripGroup.Code) +// .Where(x => x.Type == tripGroup.Type) +// .Where(x => x.TenantId == factory) +// .ExecuteCommandAsync(); +// await _dbContext.UpdateAsync(yesterdayTripInfo); +// } +// +// if (yesterdayTripInfo == null) +// { +// todayTripInfo.Status = BusinessTripStatusEnumType.Generated; +// await _dbContext.InsertAsync(new DevicePermissionEntity +// { +// AssignType = AssignTypeEnumType.User, +// AssignValue = gainfo.No, +// UniqueType = DeviceAssignmentTypeEnumType.Group, +// UniqueValue = tripGroup.Code, +// TenantId = factory, +// Type = tripGroup.Type, +// IsDeleted = false +// }); +// await _dbContext.UpdateAsync(todayTripInfo); +// } +// +// await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data); +// } +// catch (Exception e) +// { +// _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message); +// } +// } +// } +// catch (Exception e) +// { +// _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message); +// } +// } +// } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Dlhis.Canteen.csproj b/Src/Dlhis.Canteen/Dlhis.Canteen.csproj index 0c6bb0f3..f893a588 100644 --- a/Src/Dlhis.Canteen/Dlhis.Canteen.csproj +++ b/Src/Dlhis.Canteen/Dlhis.Canteen.csproj @@ -16,6 +16,10 @@ + + + + diff --git a/Src/Dlhis.Canteen/Dockerfile b/Src/Dlhis.Canteen/Dockerfile index f9585740..dcac8e9d 100644 --- a/Src/Dlhis.Canteen/Dockerfile +++ b/Src/Dlhis.Canteen/Dockerfile @@ -1,23 +1,31 @@ -#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. +# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。 +# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 + +# 此阶段用于生成服务项目 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["Src/Dlhis.Canteen/Dlhis.Canteen.csproj", "Src/Dlhis.Canteen/"] COPY ["Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj", "Src/Dlhis.Basic.Api/"] COPY ["Src/Dlhis.Entity/Dlhis.Entity.csproj", "Src/Dlhis.Entity/"] +COPY ["Src/Dlhis.DataPermission.Model/Dlhis.DataPermission.Model.csproj", "Src/Dlhis.DataPermission.Model/"] COPY ["Src/Dlhis.Sys.Api/Dlhis.Sys.Api.csproj", "Src/Dlhis.Sys.Api/"] -RUN dotnet restore "Src/Dlhis.Canteen/Dlhis.Canteen.csproj" +RUN dotnet restore "./Src/Dlhis.Canteen/Dlhis.Canteen.csproj" COPY . . WORKDIR "/src/Src/Dlhis.Canteen" -RUN dotnet build "Dlhis.Canteen.csproj" -c Release -o /app/build +RUN dotnet build "./Dlhis.Canteen.csproj" -c $BUILD_CONFIGURATION -o /app/build +# 此阶段用于发布要复制到最终阶段的服务项目 FROM build AS publish -RUN dotnet publish "Dlhis.Canteen.csproj" -c Release -o /app/publish /p:UseAppHost=false +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./Dlhis.Canteen.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false +# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值) FROM base AS final WORKDIR /app COPY --from=publish /app/publish . diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index ec9917de..6ba97b8f 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -1,4 +1,5 @@ -using Dlhis.Canteen.Order.Dto; +using Dlhis.Basic.Api; +using Dlhis.Canteen.Order.Dto; using Dlhis.Canteen.Order.Repository; using Dlhis.Canteen.Setting.Services; using Dlhis.Entity.Basic.Entity; @@ -31,6 +32,7 @@ public class OrderService : IOrderService private readonly IBalanceRepository _balanceRepository; private readonly IOrderRepository _orderRepository; private readonly RedisCache _redisCache; + private readonly IGainfoPermissionApi _gainfoPermissionApi; private readonly ILogger _logger; public OrderService(ICanteenSettingService canteenSettingService, @@ -40,6 +42,7 @@ public class OrderService : IOrderService IBalanceRepository balanceRepository, IOrderRepository orderRepository, RedisCache redisCache, + IGainfoPermissionApi gainfoPermissionApi, ILogger logger) { _canteenSettingService = canteenSettingService; @@ -49,6 +52,7 @@ public class OrderService : IOrderService _balanceRepository = balanceRepository; _orderRepository = orderRepository; _redisCache = redisCache; + _gainfoPermissionApi = gainfoPermissionApi; _logger = logger; } @@ -126,6 +130,19 @@ public class OrderService : IOrderService //******************************************************* help methods ************************************************************/ + private async Task CheckPermissionAsync(string userCode, string deviceUniqueNo) + { + var r = await _gainfoPermissionApi.GetPermissionsDeviceCodesAsync(userCode); + if (r.Code != Kurisu.RemoteCall.Default.ApiStateCode.Success) + { + true.ThrowIfTrue(r.Msg); + } + + var code = await _dbContext.Queryable().Where(x => x.UniqueNo == deviceUniqueNo).Select(x => x.Code).SingleAsync(); + r.Data.Contains(code).ThrowIfFalse("无权消费"); + } + + /// /// 获取当前消费人员 /// @@ -142,6 +159,7 @@ public class OrderService : IOrderService if (request.UserUniqueNo.StartsWith("01")) { gainfo = await GetUserByQrCodeAsync(request.UserUniqueNo); + await CheckPermissionAsync(gainfo.Code, request.DeviceUniqueNo); } else if (request.UserUniqueNo.StartsWith("02")) { diff --git a/Src/Dlhis.Canteen/Properties/launchSettings.json b/Src/Dlhis.Canteen/Properties/launchSettings.json index 706bb9bb..44a2ded1 100644 --- a/Src/Dlhis.Canteen/Properties/launchSettings.json +++ b/Src/Dlhis.Canteen/Properties/launchSettings.json @@ -7,6 +7,15 @@ }, "dotnetRunMessages": true, "applicationUrl": "http://localhost:5008" + }, + "Container (Dockerfile)": { + "commandName": "Docker", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "environmentVariables": { + "ASPNETCORE_URLS": "http://+:80" + }, + "publishAllPorts": true, + "useSSL": false } }, "$schema": "https://json.schemastore.org/launchsettings.json" diff --git a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs deleted file mode 100644 index e3ec2c19..00000000 --- a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs +++ /dev/null @@ -1,144 +0,0 @@ -using Dlhis.Basic.Api; -using Dlhis.Entity.Basic.Entity; -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.Entity.Visitor.Enums; -using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; -using Kurisu.AspNetCore.Utils.Extensions; -using Mapster; -using SqlSugar; - -namespace Dlhis.ScheduledTask.Common.Services.Implements; - -public class SapBusinessTripService : ISapBusinessTripService -{ - private readonly IJinkoJipService _jinkoJipService; - private readonly IDbContext _dbContext; - private readonly IDevicePermissionApi _devicePermissionApi; - private readonly ILogger _logger; - - public SapBusinessTripService(IJinkoJipService jinkoJipService, IDbContext dbContext, IDevicePermissionApi devicePermissionApi, ILogger logger) - { - _jinkoJipService = jinkoJipService; - _dbContext = dbContext; - _devicePermissionApi = devicePermissionApi; - _logger = logger; - } - - /// - public async Task HandlerBusinessTripsByFactoryAsync(string factory) - { - var today = DateTime.Today; - var yesterday = today.AddDays(-1); - - try - { - var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory); - if (!tripResponse.Items.Any()) - { - return; - } - - foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent())) - { - if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code - && x.BeginDate == tripInfoItem.BeginDate - && x.EndDate == tripInfoItem.EndDate - && x.Destination == factory).AnyAsync()) - { - continue; - } - - var entity = tripInfoItem.Adapt(); - entity.Status = BusinessTripStatusEnumType.Wait; - await _dbContext.InsertAsync(entity); - } - - //获取今天和昨天的出差数据 - var tripInfos = await _dbContext.Queryable() - .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today)) - || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday))) - .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination)) - .Where(x => x.Destination == factory) - .ToListAsync(); - - //获取分组信息 - var tripGroup = await _dbContext.Queryable() - .Where(x => x.Type == DeviceTypeEnumType.Door) - .Where(x => x.TenantId == factory) - .Where(x => x.IsBusinessTrip) - .SingleAsync(); - - var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList(); - var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync(); - - foreach (var gainfo in gainfos) - { - try - { - var myTripInfos = tripInfos.Where(x => x.Code == gainfo.Code).ToList(); - - var yesterdayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == yesterday && x.EndDate == yesterday); //昨天出差数据 - var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); //今天出差数据 - - //都为空不处理 - if (yesterdayTripInfo == null && todayTripInfo == null) continue; - - //都不为空则更新数据状态 - if (yesterdayTripInfo != null && todayTripInfo != null) - { - todayTripInfo.Status = BusinessTripStatusEnumType.Generated; - await _dbContext.UpdateAsync(todayTripInfo); - continue; - } - - var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code }); - - if (yesterdayTripInfo != null) - { - yesterdayTripInfo.Status = BusinessTripStatusEnumType.Deleted; - await _dbContext.Updateable() - .SetColumns(x => x.IsDeleted == true) - .Where(x => x.AssignType == AssignTypeEnumType.User) - .Where(x => x.AssignValue == gainfo.No) - .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group) - .Where(x => x.UniqueValue == tripGroup.Code) - .Where(x => x.Type == tripGroup.Type) - .Where(x => x.TenantId == factory) - .ExecuteCommandAsync(); - await _dbContext.UpdateAsync(yesterdayTripInfo); - } - - if (yesterdayTripInfo == null) - { - todayTripInfo.Status = BusinessTripStatusEnumType.Generated; - await _dbContext.InsertAsync(new DevicePermissionEntity - { - AssignType = AssignTypeEnumType.User, - AssignValue = gainfo.No, - UniqueType = DeviceAssignmentTypeEnumType.Group, - UniqueValue = tripGroup.Code, - TenantId = factory, - Type = tripGroup.Type, - IsDeleted = false - }); - await _dbContext.UpdateAsync(todayTripInfo); - } - - await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data); - } - catch (Exception e) - { - _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message); - } - } - } - catch (Exception e) - { - _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message); - } - } -} \ No newline at end of file