From 1d78dac768a3a45c5a223fd58d2f9461bc9d2935 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Mon, 3 Mar 2025 18:22:54 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/ApiLog/Services/ApiLogService.cs | 3 +-- .../Common/ApiLog/Services/IOperateLog.cs | 9 +++++++ .../Services/Implements/OperateLogService.cs | 25 +++++++++++++++++++ .../Services/Implements/FileVersionService.cs | 2 +- .../Implements/WorkGridScheduleService.cs | 15 ++++++++++- .../Services/Implements/WorkGridService.cs | 21 +++++++++++++++- .../Implements/WorkGridTimePeriodService.cs | 12 ++++++--- .../Basic/Entity/WorkGridEntity.cs | 1 + .../Basic/Entity/WorkGridTimePeriodEntity.cs | 4 +-- .../Common/{ => Entities}/ApiLogEntity.cs | 4 +-- .../{ => Entities}/FileVersionEntity.cs | 2 +- .../Common/Entities/OperateLogEntity.cs | 21 ++++++++++++++++ .../Common/Enums/OperateLogType.cs | 10 ++++++++ .../Jobs/DeleteApiLogTaskJob.cs | 2 +- 14 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs create mode 100644 Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs rename Src/Dlhis.Entity/Common/{ => Entities}/ApiLogEntity.cs (97%) rename Src/Dlhis.Entity/Common/{ => Entities}/FileVersionEntity.cs (96%) create mode 100644 Src/Dlhis.Entity/Common/Entities/OperateLogEntity.cs create mode 100644 Src/Dlhis.Entity/Common/Enums/OperateLogType.cs diff --git a/Src/Dlhis.Basic/Common/ApiLog/Services/ApiLogService.cs b/Src/Dlhis.Basic/Common/ApiLog/Services/ApiLogService.cs index 8474b220..d03cfb02 100644 --- a/Src/Dlhis.Basic/Common/ApiLog/Services/ApiLogService.cs +++ b/Src/Dlhis.Basic/Common/ApiLog/Services/ApiLogService.cs @@ -1,10 +1,9 @@ using Dlhis.Basic.Common.ApiLog.Request; using Dlhis.Basic.Common.ApiLog.Response; using Dlhis.Basic.Common.ApiLog.Services.Implements; -using Dlhis.Entity.Common; +using Dlhis.Entity.Common.Entities; using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; -using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; using SqlSugar; diff --git a/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs b/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs new file mode 100644 index 00000000..1b572870 --- /dev/null +++ b/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs @@ -0,0 +1,9 @@ +using Dlhis.Entity.Common.Enums; + +namespace Dlhis.Basic.Common.ApiLog.Services; + +public interface IOperateLog : IScopeDependency +{ + Task LogAsync(OperateLogType type, string content); +} + diff --git a/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs b/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs new file mode 100644 index 00000000..68b91673 --- /dev/null +++ b/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs @@ -0,0 +1,25 @@ +using Dlhis.Entity.Common.Entities; +using Dlhis.Entity.Common.Enums; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; + +namespace Dlhis.Basic.Common.ApiLog.Services.Implements; + +public class OperateLogService : IOperateLog +{ + private readonly IDbContext _dbContext; + + public OperateLogService(IDbContext dbContext) + { + _dbContext = dbContext.ChangeDb("log"); + } + + /// + public async Task LogAsync(OperateLogType type, string content) + { + await _dbContext.InsertAsync(new OperateLogEntity + { + Type = type, + Content = content + }); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/FileOperation/Services/Implements/FileVersionService.cs b/Src/Dlhis.Basic/Common/FileOperation/Services/Implements/FileVersionService.cs index 9c896eef..9dfa8c20 100644 --- a/Src/Dlhis.Basic/Common/FileOperation/Services/Implements/FileVersionService.cs +++ b/Src/Dlhis.Basic/Common/FileOperation/Services/Implements/FileVersionService.cs @@ -1,6 +1,6 @@ using Dlhis.Basic.Common.FileOperation.Request; using Dlhis.Basic.Common.FileOperation.Response; -using Dlhis.Entity.Common; +using Dlhis.Entity.Common.Entities; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index b42ba1f4..ebf66e67 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -1,7 +1,9 @@ +using Dlhis.Basic.Common.ApiLog.Services; using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; +using Dlhis.Entity.Common.Enums; using Dlhis.Entity.Device.Entities; using Dlhis.Jip.Api; using Dlhis.Jip.Api.Requests; @@ -17,15 +19,20 @@ public class WorkGridScheduleService : IWorkGridScheduleService { private readonly IDbContext _dbContext; private readonly IJinkoJipApi _jinkoJipApi; + private readonly IOperateLog _operateLog; - public WorkGridScheduleService(IDbContext dbContext, IJinkoJipApi jinkoJipApi) + public WorkGridScheduleService(IDbContext dbContext, IJinkoJipApi jinkoJipApi, IOperateLog operateLog) { _dbContext = dbContext; _jinkoJipApi = jinkoJipApi; + _operateLog = operateLog; } public async Task SaveAsync(WorkGridScheduleSaveRequest request) { + var workGrid = await _dbContext.Queryable().SingleAsync(x => x.Code == request.WorkGridCode); + workGrid.ThrowIfNull("工作网格不存在"); + var exists = await _dbContext.Queryable() .Where(x => x.WorkGridCode == request.WorkGridCode && x.PeriodType == request.PeriodType @@ -45,11 +52,16 @@ public class WorkGridScheduleService : IWorkGridScheduleService }).ToList(); await _dbContext.InsertAsync(toInserts); + + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"新增网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}"); } /// public async Task RemoveAsync(WorkGridScheduleSaveRequest request) { + var workGrid = await _dbContext.Queryable().SingleAsync(x => x.Code == request.WorkGridCode); + workGrid.ThrowIfNull("工作网格不存在"); + var data = await _dbContext.Queryable() .Where(x => x.WorkGridCode == request.WorkGridCode) .Where(x => x.Date == request.Date) @@ -58,6 +70,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService .ToListAsync(); await _dbContext.DeleteReallyAsync(data); + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"移除网格({workGrid.Name}){request.Date.ToString("yyyy-M-d")}的{request.PeriodType.GetDescription()}人员:{request.UserCodes.Join(",")}"); } /// diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs index c01d8c73..9a7c27de 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs @@ -1,7 +1,9 @@ +using Dlhis.Basic.Common.ApiLog.Services; using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Response; using Dlhis.Constants; using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Common.Enums; using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; @@ -16,16 +18,21 @@ public class WorkGridService : IWorkGridService { private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; + private readonly IOperateLog _operateLog; - public WorkGridService(IDbContext dbContext, ICurrentUser currentUser) + public WorkGridService(IDbContext dbContext, ICurrentUser currentUser, IOperateLog operateLog) { _dbContext = dbContext; _currentUser = currentUser; + _operateLog = operateLog; } /// public async Task SaveAsync(List requests) { + var insertGrids = new List(); + var updateGrids = new List(); + foreach (var request in requests) { var exists = await _dbContext.Queryable() @@ -53,15 +60,22 @@ public class WorkGridService : IWorkGridService entity.Code = Guid.NewGuid(); await _dbContext.InsertAsync(entity); + insertGrids.Add($"{entity.Name}({entity.LeaderUserCode})"); } else { var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).SingleAsync(); + entity.ThrowIfNull("网格不存在"); + + updateGrids.Add($"{entity.Name}->{request.Name}"); request.Adapt(entity); await _dbContext.UpdateAsync(entity); } } + + await _operateLog.LogAsync(OperateLogType.WorkGrid, "创建网格:" + insertGrids.Join("\r\n")); + await _operateLog.LogAsync(OperateLogType.WorkGrid, "修改网格:" + updateGrids.Join("\r\n")); } /// @@ -99,6 +113,8 @@ public class WorkGridService : IWorkGridService workGrid.LeaderUserCode = to; await _dbContext.UpdateAsync(workGrid); + + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"网格({workGrid.Name})修改负责人{from}->{to}"); } /// @@ -158,6 +174,7 @@ public class WorkGridService : IWorkGridService }).ToList(); await _dbContext.InsertAsync(dataToInserts); + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"分配人员到网格({myWorkGrid.Name}),人员:{dataToInserts.Select(x => x.UserCode).Join(",")}"); } /// @@ -177,5 +194,7 @@ public class WorkGridService : IWorkGridService await _dbContext.DeleteReallyAsync(workGridUsers); await _dbContext.DeleteReallyAsync(workGridSchedules); + + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"从网格({myWorkGrid.Name})移除人员:{request.UserCodes.Join(",")}"); } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs index 01d4dcc6..e59c4ac0 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs @@ -1,8 +1,9 @@ +using Dlhis.Basic.Common.ApiLog.Services; using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; -using Kurisu.AspNetCore.CustomClass; +using Dlhis.Entity.Common.Enums; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; @@ -14,10 +15,12 @@ namespace Dlhis.Basic.WorkGrids.Services.Implements; public class WorkGridTimePeriodService : IWorkGridTimePeriodService { private readonly IDbContext _dbContext; + private readonly IOperateLog _operateLog; - public WorkGridTimePeriodService(IDbContext dbContext) + public WorkGridTimePeriodService(IDbContext dbContext, IOperateLog operateLog) { _dbContext = dbContext; + _operateLog = operateLog; } /// @@ -37,13 +40,16 @@ public class WorkGridTimePeriodService : IWorkGridTimePeriodService var data = request.Adapt(); data.Type = request.Type; await _dbContext.InsertAsync(data); + + await _operateLog.LogAsync(OperateLogType.WorkGrid, $"创建网格时间配置:{request.ToJson()}"); } else { var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).SingleAsync(); + var log = $"修改网格时间配置:{entity.ToJson()}->{request.ToJson()}"; request.Adapt(entity); - await _dbContext.UpdateAsync(entity); + await _operateLog.LogAsync(OperateLogType.WorkGrid, log); } } diff --git a/Src/Dlhis.Entity/Basic/Entity/WorkGridEntity.cs b/Src/Dlhis.Entity/Basic/Entity/WorkGridEntity.cs index f616edcf..d1ff88ff 100644 --- a/Src/Dlhis.Entity/Basic/Entity/WorkGridEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/WorkGridEntity.cs @@ -26,6 +26,7 @@ public class WorkGridEntity : SugarBaseEntity /// /// 负责人工号 /// + [AdaptIgnore(MemberSide.Destination)] [SugarColumn(IsNullable = false, ColumnDescription = "负责人工号", UniqueGroupNameList = new[] { "idx_WorkGrid_LeaderUserCode" })] public string LeaderUserCode { get; set; } diff --git a/Src/Dlhis.Entity/Basic/Entity/WorkGridTimePeriodEntity.cs b/Src/Dlhis.Entity/Basic/Entity/WorkGridTimePeriodEntity.cs index 721823da..b13e0512 100644 --- a/Src/Dlhis.Entity/Basic/Entity/WorkGridTimePeriodEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/WorkGridTimePeriodEntity.cs @@ -41,8 +41,6 @@ public class WorkGridTimePeriodEntity : SugarBaseEntity, ITenantId /// [SugarColumn(IsNullable = false, ColumnDataType = "date")] public TimeOnly End { get; set; } - - - [SugarColumn(UniqueGroupNameList = new[] { "idx_workGridTimePeriod_type_tenantId" })] + public string TenantId { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Entity/Common/ApiLogEntity.cs b/Src/Dlhis.Entity/Common/Entities/ApiLogEntity.cs similarity index 97% rename from Src/Dlhis.Entity/Common/ApiLogEntity.cs rename to Src/Dlhis.Entity/Common/Entities/ApiLogEntity.cs index 6b5132d7..5d40e0dd 100644 --- a/Src/Dlhis.Entity/Common/ApiLogEntity.cs +++ b/Src/Dlhis.Entity/Common/Entities/ApiLogEntity.cs @@ -1,9 +1,9 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar; +using Microsoft.Extensions.Logging; using SqlSugar; using SqlSugar.DbConvert; -using Microsoft.Extensions.Logging; -namespace Dlhis.Entity.Common; +namespace Dlhis.Entity.Common.Entities; /// /// api日志表 diff --git a/Src/Dlhis.Entity/Common/FileVersionEntity.cs b/Src/Dlhis.Entity/Common/Entities/FileVersionEntity.cs similarity index 96% rename from Src/Dlhis.Entity/Common/FileVersionEntity.cs rename to Src/Dlhis.Entity/Common/Entities/FileVersionEntity.cs index 006656ca..50819373 100644 --- a/Src/Dlhis.Entity/Common/FileVersionEntity.cs +++ b/Src/Dlhis.Entity/Common/Entities/FileVersionEntity.cs @@ -1,7 +1,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar; using SqlSugar; -namespace Dlhis.Entity.Common; +namespace Dlhis.Entity.Common.Entities; /// /// 文件版本信息 diff --git a/Src/Dlhis.Entity/Common/Entities/OperateLogEntity.cs b/Src/Dlhis.Entity/Common/Entities/OperateLogEntity.cs new file mode 100644 index 00000000..2f9f724e --- /dev/null +++ b/Src/Dlhis.Entity/Common/Entities/OperateLogEntity.cs @@ -0,0 +1,21 @@ +using Dlhis.Entity.Common.Enums; +using Kurisu.AspNetCore.DataAccess.SqlSugar; +using SqlSugar; +using SqlSugar.DbConvert; + +namespace Dlhis.Entity.Common.Entities; + +[SugarTable(TableName = "OperateLogs")] +public class OperateLogEntity : SugarBaseEntity +{ + [SugarColumn(IsNullable = false, SqlParameterDbType = typeof(EnumToStringConvert))] + public OperateLogType Type { get; set; } + + + [SugarColumn(IsNullable = true, ColumnDataType = "text")] + public string Request { get; set; } + + + [SugarColumn(IsNullable = false)] + public string Content { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Entity/Common/Enums/OperateLogType.cs b/Src/Dlhis.Entity/Common/Enums/OperateLogType.cs new file mode 100644 index 00000000..ee72d243 --- /dev/null +++ b/Src/Dlhis.Entity/Common/Enums/OperateLogType.cs @@ -0,0 +1,10 @@ +using System.ComponentModel; + +namespace Dlhis.Entity.Common.Enums; + +[Description("操作日志类型")] +public enum OperateLogType +{ + [Description("工作网格")] + WorkGrid +} \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/Jobs/DeleteApiLogTaskJob.cs b/Src/Dlhis.ScheduledTask/Jobs/DeleteApiLogTaskJob.cs index 3a4652b3..094e3954 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/DeleteApiLogTaskJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/DeleteApiLogTaskJob.cs @@ -1,4 +1,4 @@ -using Dlhis.Entity.Common; +using Dlhis.Entity.Common.Entities; using Dlhis.ScheduledTask.Attributes; namespace Dlhis.ScheduledTask.Jobs;