From 92338ab006f0e23f286a0914e4456c4f3a1c1b7b Mon Sep 17 00:00:00 2001 From: hwh <332078369@qq.com> Date: 星期五, 06 九月 2024 10:48:50 +0800 Subject: [PATCH] 日志 --- Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs | 86 ++++++++++ Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs | 84 ++++++++++ Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs | 68 ++++++++ Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs | 58 +++++++ Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs | 72 +++++++++ Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs | 35 ++++ Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs | 73 +++++++++ 7 files changed, 476 insertions(+), 0 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs new file mode 100644 index 0000000..bd99c03 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/ExportLogDto.cs @@ -0,0 +1,68 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core; + +/// <summary> +/// 瀵煎嚭鏃ュ織鏁版嵁 +/// </summary> +[ExcelExporter(Name = "鏃ュ織鏁版嵁", TableStyle = OfficeOpenXml.Table.TableStyles.None, AutoFitAllColumn = true)] +public class ExportLogDto +{ + /// <summary> + /// 璁板綍鍣ㄧ被鍒悕绉� + /// </summary> + [ExporterHeader(DisplayName = "璁板綍鍣ㄧ被鍒悕绉�", IsBold = true)] + public string LogName { get; set; } + + /// <summary> + /// 鏃ュ織绾у埆 + /// </summary> + [ExporterHeader(DisplayName = "鏃ュ織绾у埆", IsBold = true)] + public string LogLevel { get; set; } + + /// <summary> + /// 浜嬩欢Id + /// </summary> + [ExporterHeader(DisplayName = "浜嬩欢Id", IsBold = true)] + public string EventId { get; set; } + + /// <summary> + /// 鏃ュ織娑堟伅 + /// </summary> + [ExporterHeader(DisplayName = "鏃ュ織娑堟伅", IsBold = true)] + public string Message { get; set; } + + /// <summary> + /// 寮傚父瀵硅薄 + /// </summary> + [ExporterHeader(DisplayName = "寮傚父瀵硅薄", IsBold = true)] + public string Exception { get; set; } + + /// <summary> + /// 褰撳墠鐘舵�佸�� + /// </summary> + [ExporterHeader(DisplayName = "褰撳墠鐘舵�佸��", IsBold = true)] + public string State { get; set; } + + /// <summary> + /// 鏃ュ織璁板綍鏃堕棿 + /// </summary> + [ExporterHeader(DisplayName = "鏃ュ織璁板綍鏃堕棿", IsBold = true)] + public DateTime LogDateTime { get; set; } + + /// <summary> + /// 绾跨▼Id + /// </summary> + [ExporterHeader(DisplayName = "绾跨▼Id", IsBold = true)] + public int ThreadId { get; set; } + + /// <summary> + /// 璇锋眰璺熻釜Id + /// </summary> + [ExporterHeader(DisplayName = "璇锋眰璺熻釜Id", IsBold = true)] + public string TraceId { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs new file mode 100644 index 0000000..c342f4b --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogInput.cs @@ -0,0 +1,73 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +public class PageOpLogInput : PageVisLogInput +{ + /// <summary> + /// 妯″潡鍚嶇О + /// </summary> + public string? ControllerName { get; set; } +} + +public class PageExLogInput : PageOpLogInput +{ +} + +public class PageVisLogInput : PageLogInput +{ + /// <summary> + /// 鏂规硶鍚嶇О + ///</summary> + public string? ActionName { get; set; } +} + +public class PageLogInput : BasePageInput +{ + /// <summary> + /// 寮�濮嬫椂闂� + /// </summary> + public DateTime? StartTime { get; set; } + + /// <summary> + /// 缁撴潫鏃堕棿 + /// </summary> + public DateTime? EndTime { get; set; } + + /// <summary> + /// 璐﹀彿 + /// </summary> + public string? Account { get; set; } + + /// <summary> + /// 鎿嶄綔鐢ㄦ椂 + /// </summary> + public long? Elapsed { get; set; } + + /// <summary> + /// 鐘舵�� + /// </summary> + public string Status { get; set; } + + /// <summary> + /// IP鍦板潃 + /// </summary> + public string? RemoteIp { get; set; } +} + +public class LogInput +{ + /// <summary> + /// 寮�濮嬫椂闂� + /// </summary> + public DateTime? StartTime { get; set; } + + /// <summary> + /// 缁撴潫鏃堕棿 + /// </summary> + public DateTime? EndTime { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs new file mode 100644 index 0000000..8e69aaf --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/Dto/LogVisOutput.cs @@ -0,0 +1,35 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +public class LogVisOutput +{ + /// <summary> + /// 鐧诲綍鍦扮偣 + /// </summary> + public string Location { get; set; } + + /// <summary> + /// 缁忓害 + /// </summary> + public double? Longitude { get; set; } + + /// <summary> + /// 缁村害 + /// </summary> + public double? Latitude { get; set; } + + /// <summary> + /// 鐪熷疄濮撳悕 + /// </summary> + public string RealName { get; set; } + + /// <summary> + /// 鏃ュ織鏃堕棿 + /// </summary> + public DateTime? LogDateTime { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs new file mode 100644 index 0000000..8db3141 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogDiffService.cs @@ -0,0 +1,58 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +/// <summary> +/// 绯荤粺宸紓鏃ュ織鏈嶅姟 馃З +/// </summary> +[ApiDescriptionSettings(Order = 330)] +public class SysLogDiffService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<SysLogDiff> _sysLogDiffRep; + + public SysLogDiffService(SqlSugarRepository<SysLogDiff> sysLogDiffRep) + { + _sysLogDiffRep = sysLogDiffRep; + } + + /// <summary> + /// 鑾峰彇宸紓鏃ュ織鍒嗛〉鍒楄〃 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇宸紓鏃ュ織鍒嗛〉鍒楄〃")] + public async Task<SqlSugarPagedList<SysLogDiff>> Page(PageLogInput input) + { + return await _sysLogDiffRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime) + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 鑾峰彇宸紓鏃ュ織璇︽儏 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇宸紓鏃ュ織璇︽儏")] + public async Task<SysLogDiff> GetDetail(long id) + { + return await _sysLogDiffRep.GetFirstAsync(u => u.Id == id); + } + + /// <summary> + /// 娓呯┖宸紓鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Clear"), HttpPost] + [DisplayName("娓呯┖宸紓鏃ュ織")] + public void Clear() + { + _sysLogDiffRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogDiff>(); + } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs new file mode 100644 index 0000000..2519a26 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogExService.cs @@ -0,0 +1,86 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +/// <summary> +/// 绯荤粺寮傚父鏃ュ織鏈嶅姟 馃З +/// </summary> +[ApiDescriptionSettings(Order = 350)] +public class SysLogExService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<SysLogEx> _sysLogExRep; + + public SysLogExService(SqlSugarRepository<SysLogEx> sysLogExRep) + { + _sysLogExRep = sysLogExRep; + } + + /// <summary> + /// 鑾峰彇寮傚父鏃ュ織鍒嗛〉鍒楄〃 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇寮傚父鏃ュ織鍒嗛〉鍒楄〃")] + public async Task<SqlSugarPagedList<SysLogEx>> Page(PageExLogInput input) + { + return await _sysLogExRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account) + .WhereIF(!string.IsNullOrWhiteSpace(input.ControllerName), u => u.ControllerName == input.ControllerName) + .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName) + .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp) + .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed) + .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status == "200", u => u.Status == input.Status) + .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status != "200", u => u.Status != input.Status) + //.OrderBy(u => u.CreateTime, OrderByType.Desc) + .IgnoreColumns(u => new { u.RequestParam, u.ReturnResult, u.Message }) + .OrderBuilder(input) + .ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 鑾峰彇寮傚父鏃ュ織璇︽儏 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇寮傚父鏃ュ織璇︽儏")] + public async Task<SysLogEx> GetDetail(long id) + { + return await _sysLogExRep.GetFirstAsync(u => u.Id == id); + } + + /// <summary> + /// 娓呯┖寮傚父鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Clear"), HttpPost] + [DisplayName("娓呯┖寮傚父鏃ュ織")] + public void Clear() + { + _sysLogExRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogEx>(); + } + + /// <summary> + /// 瀵煎嚭寮傚父鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Export"), NonUnify] + [DisplayName("瀵煎嚭寮傚父鏃ュ織")] + public async Task<IActionResult> ExportLogEx(LogInput input) + { + var logExList = await _sysLogExRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), + u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .Select<ExportLogDto>().ToListAsync(); + + IExcelExporter excelExporter = new ExcelExporter(); + var res = await excelExporter.ExportAsByteArray(logExList); + return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "寮傚父鏃ュ織.xlsx" }; + } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs new file mode 100644 index 0000000..7d3d2d2 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogOpService.cs @@ -0,0 +1,84 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +/// <summary> +/// 绯荤粺鎿嶄綔鏃ュ織鏈嶅姟 馃З +/// </summary> +[ApiDescriptionSettings(Order = 360)] +public class SysLogOpService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<SysLogOp> _sysLogOpRep; + + public SysLogOpService(SqlSugarRepository<SysLogOp> sysLogOpRep) + { + _sysLogOpRep = sysLogOpRep; + } + + /// <summary> + /// 鑾峰彇鎿嶄綔鏃ュ織鍒嗛〉鍒楄〃 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇鎿嶄綔鏃ュ織鍒嗛〉鍒楄〃")] + public async Task<SqlSugarPagedList<SysLogOp>> Page(PageOpLogInput input) + { + return await _sysLogOpRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account) + .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp) + .WhereIF(!string.IsNullOrWhiteSpace(input.ControllerName), u => u.ControllerName == input.ControllerName) + .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName) + .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed) + //.OrderBy(u => u.CreateTime, OrderByType.Desc) + .IgnoreColumns(u => new { u.RequestParam, u.ReturnResult, u.Message }) + .OrderBuilder(input) + .ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 鑾峰彇鎿嶄綔鏃ュ織璇︽儏 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇鎿嶄綔鏃ュ織璇︽儏")] + public async Task<SysLogOp> GetDetail(long id) + { + return await _sysLogOpRep.GetFirstAsync(u => u.Id == id); + } + + /// <summary> + /// 娓呯┖鎿嶄綔鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Clear"), HttpPost] + [DisplayName("娓呯┖鎿嶄綔鏃ュ織")] + public void Clear() + { + _sysLogOpRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogOp>(); + } + + /// <summary> + /// 瀵煎嚭鎿嶄綔鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Export"), NonUnify] + [DisplayName("瀵煎嚭鎿嶄綔鏃ュ織")] + public async Task<IActionResult> ExportLogOp(LogInput input) + { + var logOpList = await _sysLogOpRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), + u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .Select<ExportLogDto>().ToListAsync(); + + IExcelExporter excelExporter = new ExcelExporter(); + var res = await excelExporter.ExportAsByteArray(logOpList); + return new FileStreamResult(new MemoryStream(res), "application/octet-stream") { FileDownloadName = DateTime.Now.ToString("yyyyMMddHHmm") + "鎿嶄綔鏃ュ織.xlsx" }; + } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs b/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs new file mode 100644 index 0000000..9c681fd --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/Log/SysLogVisService.cs @@ -0,0 +1,72 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace Admin.NET.Core.Service; + +/// <summary> +/// 绯荤粺璁块棶鏃ュ織鏈嶅姟 馃З +/// </summary> +[ApiDescriptionSettings(Order = 340)] +public class SysLogVisService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<SysLogVis> _sysLogVisRep; + + public SysLogVisService(SqlSugarRepository<SysLogVis> sysLogVisRep) + { + _sysLogVisRep = sysLogVisRep; + } + + /// <summary> + /// 鑾峰彇璁块棶鏃ュ織鍒嗛〉鍒楄〃 馃敄 + /// </summary> + /// <returns></returns> + [SuppressMonitor] + [DisplayName("鑾峰彇璁块棶鏃ュ織鍒嗛〉鍒楄〃")] + public async Task<SqlSugarPagedList<SysLogVis>> Page(PageVisLogInput input) + { + return await _sysLogVisRep.AsQueryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()), u => u.CreateTime >= input.StartTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime <= input.EndTime) + .WhereIF(!string.IsNullOrWhiteSpace(input.Account), u => u.Account == input.Account) + .WhereIF(!string.IsNullOrWhiteSpace(input.ActionName), u => u.ActionName == input.ActionName) + .WhereIF(!string.IsNullOrWhiteSpace(input.RemoteIp), u => u.RemoteIp == input.RemoteIp) + .WhereIF(!string.IsNullOrWhiteSpace(input.Elapsed.ToString()), u => u.Elapsed >= input.Elapsed) + .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status == "200", u => u.Status == input.Status) + .WhereIF(!string.IsNullOrWhiteSpace(input.Status) && input.Status != "200", u => u.Status != input.Status) + .OrderBy(u => u.CreateTime, OrderByType.Desc) + .ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 娓呯┖璁块棶鏃ュ織 馃敄 + /// </summary> + /// <returns></returns> + [ApiDescriptionSettings(Name = "Clear"), HttpPost] + [DisplayName("娓呯┖璁块棶鏃ュ織")] + public void Clear() + { + _sysLogVisRep.AsSugarClient().DbMaintenance.TruncateTable<SysLogVis>(); + } + + /// <summary> + /// 鑾峰彇璁块棶鏃ュ織鍒楄〃 馃敄 + /// </summary> + /// <returns></returns> + [DisplayName("鑾峰彇璁块棶鏃ュ織鍒楄〃")] + public async Task<List<LogVisOutput>> GetList() + { + return await _sysLogVisRep.AsQueryable() + .Where(u => u.Longitude > 0 && u.Longitude > 0) + .Select(u => new LogVisOutput + { + Location = u.Location, + Longitude = u.Longitude, + Latitude = u.Latitude, + RealName = u.RealName, + LogDateTime = u.LogDateTime + }).ToListAsync(); + } +} \ No newline at end of file -- Gitblit v1.8.0