From 3bf049a51ebf2f8a809d2ce710fb3b6dc157015e Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 26 Feb 2024 16:17:59 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96apilog=E5=92=8C?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=B8=8A=E4=BC=A0log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Device/Request/ApiLogRequest.cs | 19 ++-- .../Device/Response/ApiLogResponse.cs | 88 ++++++++++-------- .../Services/Implements/DeviceService.cs | 30 +++---- Src/Dlhis.Basic/Packs/SqlSugarPack.cs | 55 +++++++++--- .../EnumSetting/EnumsController.cs | 24 ++++- Src/Dlhis.Entity/Basic/Entity/ApiLogEntity.cs | 90 +++++++++---------- .../Basic/Entity/GainfoFaceEntity.cs | 2 +- .../Basic/Enums/ApiLogEnumType.cs | 24 ----- Src/Dlhis.Entity/Dlhis.Entity.csproj | 2 +- .../Controllers/DeviceUploadLogsController.cs | 13 --- .../Response/DeviceUploadLogResponse.cs | 7 +- .../Services/IDeviceUploadLogService.cs | 5 +- .../Implements/DeviceUploadLogService.cs | 48 ++++------ 13 files changed, 207 insertions(+), 200 deletions(-) delete mode 100644 Src/Dlhis.Entity/Basic/Enums/ApiLogEnumType.cs diff --git a/Src/Dlhis.Basic/Device/Request/ApiLogRequest.cs b/Src/Dlhis.Basic/Device/Request/ApiLogRequest.cs index 484b5983..03278171 100644 --- a/Src/Dlhis.Basic/Device/Request/ApiLogRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/ApiLogRequest.cs @@ -1,14 +1,13 @@ -using Dlhis.Entity.Basic.Enums; -using Kurisu.Core.DataAccess.Dto; +using Kurisu.Core.DataAccess.Dto; using System.ComponentModel.DataAnnotations; -namespace Dlhis.Basic.Device.Request -{ - public class ApiLogRequest :PageDto - { - public string message { get; set; } +namespace Dlhis.Basic.Device.Request; - [EnumDataType(typeof(ApiLogEnumType)),] - public ApiLogEnumType? Type { get; set; } - } +public class ApiLogRequest : PageDto +{ + /// + /// 日志级别 LogLevel + /// + [EnumDataType(typeof(LogLevel))] + public LogLevel? Level { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Response/ApiLogResponse.cs b/Src/Dlhis.Basic/Device/Response/ApiLogResponse.cs index 3d51efae..38fca5e6 100644 --- a/Src/Dlhis.Basic/Device/Response/ApiLogResponse.cs +++ b/Src/Dlhis.Basic/Device/Response/ApiLogResponse.cs @@ -1,42 +1,56 @@ -using SqlSugar; +using Newtonsoft.Json; -namespace Dlhis.Basic.Device.Response +namespace Dlhis.Basic.Device.Response; + +public class ApiLogResponse { - public class ApiLogResponse + /// + /// 时间UTC + /// + [JsonIgnore] + public string Timestamp { get; set; } + + /// + /// 产生时间 + /// + public DateTime RaiseTime { - /// - /// 时间 - /// - public string Timestamp { get; set; } - - /// - /// 级别 - /// - public string Level { get; set; } - - /// - /// 模板 - /// - public string Template { get; set; } - - /// - /// 消息内容 - /// - public string Message { get; set; } - - /// - /// 异常内容 - /// - public string Exception { get; set; } - - /// - /// 属性 - /// - public string Properties { get; set; } - - /// - /// 时间 - /// - public DateTime _ts { get; set; } + get + { + return DateTime.Parse(Timestamp).ToLocalTime(); + } } + + /// + /// 级别 + /// + public string Level { get; set; } + + /// + /// 模板 + /// + [JsonIgnore] + public string Template { get; set; } + + /// + /// 消息内容 + /// + public string Message { get; set; } + + /// + /// 异常内容 + /// + public string Exception { get; set; } + + /// + /// 属性 + /// + [JsonIgnore] + public string Properties { get; set; } + + /// + /// 时间 + /// + [JsonIgnore] + public DateTime _TS { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index e044f11c..f0afeb56 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -14,6 +14,7 @@ using Kurisu.SqlSugar.Services; using Mapster; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using SqlSugar; namespace Dlhis.Basic.Device.Services.Implements; @@ -247,10 +248,10 @@ public class DeviceService : IDeviceService var offlineNumber = await GetOfflineDevicesCount(devices); var res = new DeviceNumberResponse - { + { OfflineNumber = offlineNumber.Count, TotalNumber = devices.Count, - OnlineNumber = devices.Count- offlineNumber.Count + OnlineNumber = devices.Count - offlineNumber.Count }; return res; } @@ -270,14 +271,14 @@ public class DeviceService : IDeviceService foreach (var device in devices) { var regis = deviceRegistrys.FirstOrDefault(x => x.DeviceUniqueNo == device.UniqueNo); - if (regis == null) + if (regis == null) { continue; } TimeSpan timeDifference = DateTime.Now - regis.LastHeartbeatTime; if (timeDifference.TotalSeconds > (device.HeartbeatInterval * 3)) { - list.Add(device); + list.Add(device); } } return list; @@ -307,7 +308,7 @@ public class DeviceService : IDeviceService .ToListAsync(); //离线 - var offDevices =await GetOfflineDevicesCount(devices); + var offDevices = await GetOfflineDevicesCount(devices); var offids = offDevices.Select(x => x.Id).ToList(); if (request.IsOnAndOff) @@ -372,28 +373,19 @@ public class DeviceService : IDeviceService }; list.Add(res); }); + return list; } public async Task> GetLogsAsync(ApiLogRequest request) { - var level = request.Type.ToString(); - return await Scoped.Request.Value.CreateAsync(async (sp) => - { - var configuration = sp.GetService(); - var logConnectionString = configuration.GetSection("SqlSugarOptions:LogConnectionString").Value; - - //todo 切换连接字符串 - var dbContext = sp.GetService(); - dbContext.Client.CurrentConnectionConfig.ConnectionString = logConnectionString; - var logs = await dbContext.Queryable() - .WhereIF(!request.message.IsEmpty(), x => x.Message.Contains(request.message)) - .WhereIF(!level.IsEmpty(), x => x.Level == level) + var logs = await _dbContext.ChangeDb("log").Queryable() + .WhereIF(request.Search.IsPresent(), x => x.Message.Contains(request.Search)) + .WhereIF(request.Level.HasValue, x => x.Level == request.Level) .Select() .ToPageListAsync(request); - return logs; - }); + return logs; } } diff --git a/Src/Dlhis.Basic/Packs/SqlSugarPack.cs b/Src/Dlhis.Basic/Packs/SqlSugarPack.cs index a54c45cf..b46e77d5 100644 --- a/Src/Dlhis.Basic/Packs/SqlSugarPack.cs +++ b/Src/Dlhis.Basic/Packs/SqlSugarPack.cs @@ -1,4 +1,5 @@ -using Kurisu.AspNetCore; +using Dlhis.Entity.Basic.Entity; +using Kurisu.AspNetCore; using Kurisu.AspNetCore.Startup; using Kurisu.Core.DataAccess.Entity; using Kurisu.SqlSugar.Extensions; @@ -14,26 +15,58 @@ public class SqlSugarPack : BaseAppPack public override void ConfigureServices(IServiceCollection services) { - services.AddSqlSugar(); + services.AddSqlSugar(sp => + { + var configuration = sp.GetService(); + + return new List + { + new ConnectionConfig + { + ConfigId = "face", + + ConnectionString = configuration.GetSection("SqlSugarOptions:FaceConnectionString").Value, + DbType = DbType.MySql, + InitKeyType = InitKeyType.Attribute, + IsAutoCloseConnection = true, + + MoreSettings = new ConnMoreSettings + { + DisableNvarchar = true, + } + }, + new ConnectionConfig + { + ConfigId = "log", + + ConnectionString = configuration.GetSection("SqlSugarOptions:LogConnectionString").Value, + DbType = DbType.MySql, + InitKeyType = InitKeyType.Attribute, + IsAutoCloseConnection = true, + + MoreSettings = new ConnMoreSettings + { + DisableNvarchar = true, + } + }, + }; + }); } public override void Configure(IApplicationBuilder app, IWebHostEnvironment env) { using var scope = app.ApplicationServices.CreateScope(); - var db = scope.ServiceProvider.GetService(); + var db = scope.ServiceProvider.GetService(); var tables = App.ActiveTyps.Where(x => x.IsDefined(typeof(SugarTable), false)) .Where(x => !x.IsDefined(typeof(SkipScanAttribute), false)) .ToArray(); - db.DbMaintenance.CreateDatabase(); - db.CodeFirst.InitTables(tables); + db.Client.DbMaintenance.CreateDatabase(); + db.Client.CodeFirst.InitTables(tables); - //using var scopeFace = app.ApplicationServices.CreateScope(); - //var dbFace = scopeFace.ServiceProvider.GetService(); - //var faceConnectionString = Configuration.GetSection("SqlSugarOptions:FaceConnectionString").Value; - //dbFace.CurrentConnectionConfig.ConnectionString = faceConnectionString; - //dbFace.DbMaintenance.CreateDatabase(); - //dbFace.CodeFirst.InitTables(); + var faceDb = db.ChangeDb("face"); + faceDb.DbMaintenance.CreateDatabase(); + faceDb.CodeFirst.InitTables(); } } diff --git a/Src/Dlhis.Common/EnumSetting/EnumsController.cs b/Src/Dlhis.Common/EnumSetting/EnumsController.cs index f930928c..fde3ebb5 100644 --- a/Src/Dlhis.Common/EnumSetting/EnumsController.cs +++ b/Src/Dlhis.Common/EnumSetting/EnumsController.cs @@ -57,7 +57,6 @@ public class EnumsController : ControllerBase }) .ToList(); - //todo cache 速度 var dbTypes = _dbContext.Queryable().OrderBy(x => x.Sequence).ToList(); var dbResult = dbTypes.GroupBy(x => x.Type).Select(g => { @@ -77,6 +76,29 @@ public class EnumsController : ControllerBase result.AddRange(dbResult); + result.Add(GetCurrentEnums("LogLevel", "日志级别", typeof(LogLevel))); + return result; } + + + private static CommonEnumResponse GetCurrentEnums(string code, string name, Type enumType) + { + return new CommonEnumResponse + { + Code = code, + Name = name, + Data = enumType.GetFields(BindingFlags.Public | BindingFlags.Static).Select(item => + { + var e = (Enum)Enum.Parse(item.FieldType, item.GetValue(null).ToString()); + var fd = e.GetDescription(); + return new KeyValueDto + { + Key = fd, + Value = (int)item.GetValue(null) + }; + }) + .ToList() + }; + } } diff --git a/Src/Dlhis.Entity/Basic/Entity/ApiLogEntity.cs b/Src/Dlhis.Entity/Basic/Entity/ApiLogEntity.cs index 889cbd8c..96ddaa22 100644 --- a/Src/Dlhis.Entity/Basic/Entity/ApiLogEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/ApiLogEntity.cs @@ -1,61 +1,55 @@ -using Kurisu.Core.DataAccess.Entity; -using Kurisu.SqlSugar; +using Microsoft.Extensions.Logging; using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using SqlSugar.DbConvert; -namespace Dlhis.Entity.Basic.Entity +namespace Dlhis.Entity.Basic.Entity; + +/// +/// api日志表 +/// +[SugarTable(TableName = "Logs", TableDescription = "api日志表")] +public class ApiLogEntity { /// - /// api日志表 + /// 时间 /// - [SugarTable(TableName = "Logs", TableDescription = "api日志表")] - public class ApiLogEntity - { - /// - /// 时间 - /// - [SugarColumn(ColumnDescription = "时间")] - public string Timestamp { get; set; } + [SugarColumn(ColumnDescription = "时间")] + public string Timestamp { get; set; } - /// - /// 级别 - /// - [SugarColumn(ColumnDescription = "级别")] - public string Level { get; set; } + /// + /// 级别 + /// + [SugarColumn(ColumnDescription = "级别", SqlParameterDbType = typeof(EnumToStringConvert))] + public LogLevel Level { get; set; } - /// - /// 模板 - /// - [SugarColumn(ColumnDescription = "模板")] - public string Template { get; set; } + /// + /// 模板 + /// + [SugarColumn(ColumnDescription = "模板")] + public string Template { get; set; } - /// - /// 消息内容 - /// - [SugarColumn(ColumnDescription = "消息内容")] - public string Message { get; set; } + /// + /// 消息内容 + /// + [SugarColumn(ColumnDescription = "消息内容")] + public string Message { get; set; } - /// - /// 异常内容 - /// - [SugarColumn(ColumnDescription = "异常内容")] - public string Exception { get; set; } + /// + /// 异常内容 + /// + [SugarColumn(ColumnDescription = "异常内容")] + public string Exception { get; set; } - /// - /// 属性 - /// - [SugarColumn(ColumnDescription = "属性")] - public string Properties { get; set; } + /// + /// 属性 + /// + [SugarColumn(ColumnDescription = "属性")] + public string Properties { get; set; } - /// - /// 时间 - /// - [SugarColumn(ColumnDescription = "时间")] - public DateTime _ts { get; set; } + /// + /// 时间 + /// + [SugarColumn(ColumnDescription = "时间")] + public DateTime _ts { get; set; } - } } diff --git a/Src/Dlhis.Entity/Basic/Entity/GainfoFaceEntity.cs b/Src/Dlhis.Entity/Basic/Entity/GainfoFaceEntity.cs index 8cd7d09c..967ce16f 100644 --- a/Src/Dlhis.Entity/Basic/Entity/GainfoFaceEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/GainfoFaceEntity.cs @@ -22,6 +22,6 @@ public class GainfoFaceEntity : SugarBaseEntity /// /// 人脸 /// - [SugarColumn(ColumnDataType = "text", IsNullable = false)] + [SugarColumn(ColumnDataType = "longtext", IsNullable = false)] public string Face { get; set; } } diff --git a/Src/Dlhis.Entity/Basic/Enums/ApiLogEnumType.cs b/Src/Dlhis.Entity/Basic/Enums/ApiLogEnumType.cs deleted file mode 100644 index a65befdd..00000000 --- a/Src/Dlhis.Entity/Basic/Enums/ApiLogEnumType.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dlhis.Entity.Basic.Enums -{ - /// - /// api日志状态 - /// - [Description("api日志状态")] - public enum ApiLogEnumType - { - Information = 1, - - Warning = 2, - - Error = 3, - - Fatal = 4, - } -} diff --git a/Src/Dlhis.Entity/Dlhis.Entity.csproj b/Src/Dlhis.Entity/Dlhis.Entity.csproj index 6aee2f83..7a8afcc3 100644 --- a/Src/Dlhis.Entity/Dlhis.Entity.csproj +++ b/Src/Dlhis.Entity/Dlhis.Entity.csproj @@ -11,7 +11,7 @@ - + diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUploadLogsController.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUploadLogsController.cs index ad8f44b7..edbbacb7 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUploadLogsController.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Controllers/DeviceUploadLogsController.cs @@ -34,18 +34,6 @@ public class DeviceUploadLogsController : ControllerBase return await _deviceUploadLogService.GetPageAsync(request); } - /// - /// 上传记录 - /// - /// - /// - [HttpPost("record")] - [IgnoreTenant] - public async Task UploadLogAsync(DeviceUploadLogUploadRequest request) - { - await _deviceUploadLogService.UploadLogAsync(request); - } - /// /// 批量上传记录 /// @@ -57,5 +45,4 @@ public class DeviceUploadLogsController : ControllerBase { await _deviceUploadLogService.UploadLogsAsync(requests); } - } diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Response/DeviceUploadLogResponse.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Response/DeviceUploadLogResponse.cs index c8de21fd..ca064b79 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Response/DeviceUploadLogResponse.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Response/DeviceUploadLogResponse.cs @@ -1,4 +1,6 @@ -namespace Dlhis.ScheduledTask.DeviceUploadLog.Response; +using Newtonsoft.Json; + +namespace Dlhis.ScheduledTask.DeviceUploadLog.Response; public class DeviceUploadLogResponse { @@ -29,4 +31,7 @@ public class DeviceUploadLogResponse /// 上传时间 /// public DateTime RaiseDateTime { get; set; } + + [JsonIgnore] + public string OriginUserUniqueNo { get; set; } } diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUploadLogService.cs index fa2fed08..cc4a6b3e 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/IDeviceUploadLogService.cs @@ -1,5 +1,4 @@ -using Dlhis.Entity.Basic.Entity; -using Dlhis.ScheduledTask.DeviceUploadLog.Request; +using Dlhis.ScheduledTask.DeviceUploadLog.Request; using Dlhis.ScheduledTask.DeviceUploadLog.Response; using Kurisu.Core.DataAccess.Dto; @@ -9,8 +8,6 @@ public interface IDeviceUploadLogService : IScopeDependency { Task> GetPageAsync(DeviceUploadLogPageRequest request); - Task UploadLogAsync(DeviceUploadLogUploadRequest request); - Task UploadLogsAsync(List requests); } diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs index de3f43fa..c06a159e 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs @@ -1,18 +1,12 @@ -using System.Configuration; -using System.Linq.Expressions; +using System.Linq.Expressions; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.ScheduledTask.DeviceUploadLog.Request; using Dlhis.ScheduledTask.DeviceUploadLog.Response; -using Kurisu.AspNetCore.Scope; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; -using Kurisu.SqlSugar.Attributes; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; -using Microsoft.AspNetCore.DataProtection; -using Microsoft.AspNetCore.Mvc; -using NetTaste; using SqlSugar; namespace Dlhis.ScheduledTask.DeviceUploadLog.Services.Implements; @@ -29,40 +23,34 @@ public class DeviceUploadLogService : IDeviceUploadLogService public async Task> GetPageAsync(DeviceUploadLogPageRequest request) { var page = await _dbContext.Queryable() - .LeftJoin((deviceUp, ga) => deviceUp.UserUniqueNo == ga.No) .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, deviceUp => deviceUp.RaiseDateTime >= request.SearchDateTimePeriod.Start) .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, deviceUp => deviceUp.RaiseDateTime <= request.SearchDateTimePeriod.End) - .Select((deviceUp, ga) => new DeviceUploadLogResponse + .Select((deviceUp) => new DeviceUploadLogResponse { + OriginUserUniqueNo = deviceUp.UserUniqueNo, DeviceUniqueNo = deviceUp.DeviceUniqueNo, Id = deviceUp.Id, RaiseDateTime = deviceUp.RaiseDateTime, - UserNo = ga.No, - UserCode = ga.Code, - UserName = ga.Name, + //UserNo = ga.No, + //UserCode = ga.Code, + //UserName = ga.Name, }) .ToPageListAsync(request); + var gainfos = await _dbContext.Queryable().ToListAsync(); + page.Data.ForEach(item => + { + _ = int.TryParse(item.OriginUserUniqueNo, out var userId); + + var gainfo = gainfos.FirstOrDefault(x => x.No == item.OriginUserUniqueNo || x.Id == userId || x.Code == item.OriginUserUniqueNo); + item.UserNo = gainfo?.No; + item.UserCode = gainfo?.Code; + item.UserName = gainfo?.Name; + }); + return page; } - public async Task UploadLogAsync(DeviceUploadLogUploadRequest request) - { - var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync(); - device.ThrowIfNull("设备信息不存在"); - - var entity = new DeviceUploadLogEntity - { - DeviceUniqueNo = request.DeviceUniqueNo, - // UploadTime = request.UploadTime, - UserUniqueNo = request.UserUniqueNo, - TenantId = device.TenantId, - }; - - await _dbContext.InsertAsync(entity); - } - - public async Task UploadLogsAsync(List requests) { //判断存在的记录 @@ -105,5 +93,5 @@ public class DeviceUploadLogService : IDeviceUploadLogService await _dbContext.InsertAsync(records); } - + }