From 0931d0bf531310802b189d01f740cfa0e9bd265b Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 23 Feb 2024 17:43:57 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96face?= =?UTF-8?q?=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Response/MealShiftResponse.cs | 2 ++ .../Implements/BusinessPlaceShiftService.cs | 1 + .../Services/Implements/DeviceService.cs | 1 - .../Services/Implements/GainfoService.cs | 19 +++++++++-- Src/Dlhis.Basic/Packs/DataProtectionJob.cs | 19 +++++++++++ Src/Dlhis.Basic/Program.cs | 10 ++---- Src/Dlhis.Basic/appsettings.json | 3 ++ .../Order/Controllers/BalancesController.cs | 1 + .../Order/Controllers/OrdersController.cs | 1 + .../Services/Implements/BalanceService.cs | 3 -- .../Order/Services/Implements/OrderService.cs | 33 ++++--------------- .../Properties/launchSettings.json | 8 ----- .../Packs/DataProtectionJob.cs | 19 +++++++++++ Src/Dlhis.ScheduledTask/Program.cs | 12 ++----- Src/Dlhis.ScheduledTask/appsettings.json | 3 ++ 15 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 Src/Dlhis.Basic/Packs/DataProtectionJob.cs create mode 100644 Src/Dlhis.ScheduledTask/Packs/DataProtectionJob.cs diff --git a/Src/Dlhis.Basic/BusinessShift/Response/MealShiftResponse.cs b/Src/Dlhis.Basic/BusinessShift/Response/MealShiftResponse.cs index 04290aff..be466ccc 100644 --- a/Src/Dlhis.Basic/BusinessShift/Response/MealShiftResponse.cs +++ b/Src/Dlhis.Basic/BusinessShift/Response/MealShiftResponse.cs @@ -4,6 +4,8 @@ { public Guid ShiftCode { get; set; } + public string ShiftType { get; set; } + public string Name { get; set; } public TimeOnly Start { get; set; } diff --git a/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs b/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs index 13169a48..69b4a0dd 100644 --- a/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs +++ b/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs @@ -40,6 +40,7 @@ public class BusinessPlaceShiftService : IBusinessPlaceShiftService .Select((x, bt) => new MealShiftResponse { ShiftCode = x.ShiftCode, + ShiftType = bt.Code, Name = bt.Display, Start = x.Start, End = x.End, diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index aeafde5a..474d1343 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -9,7 +9,6 @@ using Kurisu.AspNetCore.Scope; using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; -using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index d4cbc434..61a8dc16 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -6,10 +6,10 @@ using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.Scope; using Kurisu.AspNetCore.UnifyResultAndValidation; +using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.User.Abstractions; -using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Options; using Kurisu.SqlSugar.Services; @@ -26,18 +26,21 @@ public class GainfoService : IGainfoService private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; private readonly IDevicePermissionService _devicePermissionService; + private readonly RedisCache _redisCache; private readonly ILogger _logger; public GainfoService(IGainfoStore gainfoStore, IDbContext dbContext, ICurrentUser currentUser, IDevicePermissionService devicePermissionService, + RedisCache redisCache, ILogger logger) { _gainfoStore = gainfoStore; _dbContext = dbContext; _currentUser = currentUser; _devicePermissionService = devicePermissionService; + _redisCache = redisCache; _logger = logger; } @@ -176,6 +179,12 @@ public class GainfoService : IGainfoService var password = timeLimitedDataProtector.Unprotect(token); var userCode = password.Split(':')[1]; + var faceCache = await _redisCache.HashGetAsync("faces", userCode); + if (faceCache.HasValue) + { + return new FileContentResult(Convert.FromBase64String(faceCache), "image/png"); + } + var configuration = sp.GetService(); var faceConnectionString = configuration.GetSection("SqlSugarOptions:FaceConnectionString").Value; if (faceConnectionString.IsEmpty()) @@ -195,6 +204,8 @@ public class GainfoService : IGainfoService return new NotFoundResult(); } + var limit = configuration.GetSection("FaceUrlOptions:Limit").Get(); + await _redisCache.HashSetAsync("faces", userCode, face.Face); return new FileContentResult(Convert.FromBase64String(face.Face), "image/png"); } catch (Exception ex) @@ -227,6 +238,8 @@ public class GainfoService : IGainfoService var face = await dbContext.Queryable().Where(x => x.UserCode == gainfo.Code).SingleAsync(); var taskType = face == null ? DeviceTaskEnumType.Add : DeviceTaskEnumType.Update; + + await _redisCache.HashSetAsync("faces", gainfo.Code, request.Face); if (face == null) { face = new GainfoFaceEntity @@ -274,6 +287,8 @@ public class GainfoService : IGainfoService var face = await dbContext.Queryable().Where(x => x.UserCode == gainfo.Code).SingleAsync(); var taskType = face == null ? DeviceTaskEnumType.Add : DeviceTaskEnumType.Update; + + await _redisCache.HashSetAsync("faces", gainfo.Code, request.Face); if (face == null) { face = new GainfoFaceEntity @@ -302,8 +317,6 @@ public class GainfoService : IGainfoService } } - - public async Task GetFaceByUserCodeAsync(string userCode) { var gainfo = await _dbContext.Queryable().Where(x => x.Code == userCode).SingleAsync(); diff --git a/Src/Dlhis.Basic/Packs/DataProtectionJob.cs b/Src/Dlhis.Basic/Packs/DataProtectionJob.cs new file mode 100644 index 00000000..0e78ff97 --- /dev/null +++ b/Src/Dlhis.Basic/Packs/DataProtectionJob.cs @@ -0,0 +1,19 @@ +using Kurisu.AspNetCore.Startup; +using Kurisu.AspNetCore.Utils; +using Microsoft.AspNetCore.DataProtection; +using StackExchange.Redis; + +namespace Dlhis.Basic.Packs; + +public class DataProtectionJobPack : BaseAppPack +{ + public override bool IsBeforeUseRouting { get; } + + public override void ConfigureServices(IServiceCollection services) + { + var redisConnection = ConnectionMultiplexer.Connect(Configuration.GetSection($"{nameof(RedisOptions)}:{nameof(RedisOptions.ConnectionString)}").Value); + services.AddDataProtection() + .SetApplicationName("basic") + .PersistKeysToStackExchangeRedis(redisConnection, "DataProtection-Keys"); + } +} diff --git a/Src/Dlhis.Basic/Program.cs b/Src/Dlhis.Basic/Program.cs index 966be9f0..953eea17 100644 --- a/Src/Dlhis.Basic/Program.cs +++ b/Src/Dlhis.Basic/Program.cs @@ -1,8 +1,7 @@ using Kurisu.AspNetCore.Startup; +using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Startup; -using Microsoft.AspNetCore.DataProtection; using Microsoft.IdentityModel.Logging; -using StackExchange.Redis; class Program { @@ -22,11 +21,6 @@ public class Startup : DefaultStartup public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); - - //todo - var redis = ConnectionMultiplexer.Connect($"192.168.199.30:30115,defaultDatabase:1,password=dlhis123"); - services.AddDataProtection() - .SetApplicationName("basic") - .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); + services.AddRedis(); } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/appsettings.json b/Src/Dlhis.Basic/appsettings.json index f40f7fef..307752e9 100644 --- a/Src/Dlhis.Basic/appsettings.json +++ b/Src/Dlhis.Basic/appsettings.json @@ -34,6 +34,9 @@ "yikatong": "yikatong" } }, + "RedisOptions": { + "ConnectionString": "192.168.199.30:30115,defaultDatabase:1,password=dlhis123" + }, "IdentityServerOptions": { "Authority": "http://identity.oauth.svc.cluster.local", "RequireHttpsMetadata": false, diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index e9757cc8..f75a4927 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -74,6 +74,7 @@ public class BalancesController : ControllerBase /// /// [HttpPost("obsoluteOutRecord")] + [Transactional] public async Task ObsoluteAsync(BalanceRecordObsoluteRequest request) { await _balanceService.ObsoluteAsync(request); diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs index 86e9a5c6..da3d8d38 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs @@ -39,6 +39,7 @@ public class OrdersController : ControllerBase /// /// [HttpPost] + [IgnoreTenant] public async Task AddAsync(OrderAddRequest request) { return await _orderService.AddAsync(request); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index bde9dda2..c6f5104a 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -516,7 +516,6 @@ public class BalanceService : IBalanceService return page; } - [Transactional] public async Task ObsoluteAsync(BalanceRecordObsoluteRequest request) { var balanceRecord = await _dbContext.Queryable().Where(x => x.Id == request.Id).SingleAsync(); @@ -731,10 +730,8 @@ public class BalanceService : IBalanceService throw new UserFriendlyException("操作失败,请重试"); } - [IgnoreTenant] public async Task> GetShiftCode() { - _dbContext.Client.QueryFilter.ClearAndBackup(); try { diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index c16de272..0ecfee6e 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -11,7 +11,6 @@ using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.CustomClass; using Kurisu.Core.DataAccess.Dto; -using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; @@ -54,35 +53,15 @@ public class OrderService : IOrderService uniqueNos.Contains(deviceUniqueNo).ThrowIfFalse("无消费权限"); } - [IgnoreTenant] public async Task AddAsync(OrderAddRequest request) { - var card = string.Empty; - long userId = 0; - if (request.Source == BalanceRecordSourceEnumType.Card) - { - card = request.UserUniqueNo; - } - else - { - _ = long.TryParse(request.UserUniqueNo, out userId); - } + //尝试匹配userId + _ = long.TryParse(request.UserUniqueNo, out var userId); + + //根据档案号 var gainfo = await _dbContext.Queryable() - .Where(x => x.No == request.UserUniqueNo || x.Code == request.UserUniqueNo || x.Id == userId || x.CardNo == card) - .FirstAsync(); - - - // .... - { - ////尝试匹配userId - //_ = long.TryParse(request.UserUniqueNo, out var userId); - - ////根据档案号 - //var gainfo = await _dbContext.Queryable() - // .Where(x => x.No == request.UserUniqueNo || x.Code == request.UserUniqueNo || x.Id == userId) - // .FirstAsync(); - } - + .Where(x => x.No == request.UserUniqueNo || x.Code == request.UserUniqueNo || x.Id == userId || x.CardNo == request.UserUniqueNo) + .FirstAsync(); gainfo.ThrowIfNull($"用户{request.UserUniqueNo}不存在,无法操作"); diff --git a/Src/Dlhis.Canteen/Properties/launchSettings.json b/Src/Dlhis.Canteen/Properties/launchSettings.json index f13e2beb..706bb9bb 100644 --- a/Src/Dlhis.Canteen/Properties/launchSettings.json +++ b/Src/Dlhis.Canteen/Properties/launchSettings.json @@ -7,14 +7,6 @@ }, "dotnetRunMessages": true, "applicationUrl": "http://localhost:5008" - }, - "Docker": { - "commandName": "Docker", - "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", - "environmentVariables": { - "ASPNETCORE_URLS": "http://+:80" - }, - "publishAllPorts": true } }, "$schema": "https://json.schemastore.org/launchsettings.json" diff --git a/Src/Dlhis.ScheduledTask/Packs/DataProtectionJob.cs b/Src/Dlhis.ScheduledTask/Packs/DataProtectionJob.cs new file mode 100644 index 00000000..03d87356 --- /dev/null +++ b/Src/Dlhis.ScheduledTask/Packs/DataProtectionJob.cs @@ -0,0 +1,19 @@ +using Kurisu.AspNetCore.Startup; +using Kurisu.AspNetCore.Utils; +using Microsoft.AspNetCore.DataProtection; +using StackExchange.Redis; + +namespace Dlhis.ScheduledTask.Packs; + +public class DataProtectionJobPack : BaseAppPack +{ + public override bool IsBeforeUseRouting { get; } + + public override void ConfigureServices(IServiceCollection services) + { + var redisConnection = ConnectionMultiplexer.Connect(Configuration.GetSection($"{nameof(RedisOptions)}:{nameof(RedisOptions.ConnectionString)}").Value); + services.AddDataProtection() + .SetApplicationName("scheduled") + .PersistKeysToStackExchangeRedis(redisConnection, "DataProtection-Keys"); + } +} diff --git a/Src/Dlhis.ScheduledTask/Program.cs b/Src/Dlhis.ScheduledTask/Program.cs index aad2b382..4c81132c 100644 --- a/Src/Dlhis.ScheduledTask/Program.cs +++ b/Src/Dlhis.ScheduledTask/Program.cs @@ -1,10 +1,8 @@ -using System.Net.NetworkInformation; using Kurisu.AspNetCore.Startup; +using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Startup; using Microsoft.AspNetCore.DataProtection; -using Microsoft.Extensions.Options; using StackExchange.Redis; -using static StackExchange.Redis.Role; class Program { @@ -23,16 +21,12 @@ public class Startup : DefaultStartup public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); - - services.AddSingleton(sp => - { - return ConnectionMultiplexer.Connect("192.168.199.30:30115,defaultDatabase:1,password=dlhis123"); - }); + services.AddRedis(); //todo var redis = ConnectionMultiplexer.Connect($"192.168.199.30:30115,defaultDatabase:1,password=dlhis123"); services.AddDataProtection() - .SetApplicationName("basic") + .SetApplicationName("scheduled") .PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); } } \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/appsettings.json b/Src/Dlhis.ScheduledTask/appsettings.json index 28bddadf..8c70547a 100644 --- a/Src/Dlhis.ScheduledTask/appsettings.json +++ b/Src/Dlhis.ScheduledTask/appsettings.json @@ -54,6 +54,9 @@ "AttendanceUploadInterval": "30", "BeginSyncDate": "2020-5-1" }, + "RedisOptions": { + "ConnectionString": "192.168.199.30:30115,defaultDatabase:1,password=dlhis123" + }, "AllowedHosts": "*", "Serilog": { "MinimumLevel": {