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;