修改审计字段

Uat_Study
hang 2022-08-24 10:26:15 +08:00
parent cbb6e9662a
commit 96a0a7c7b9
5 changed files with 200 additions and 191 deletions

View File

@ -33,6 +33,6 @@
US=1,
USAndCN
USAndCN=2,
}
}

View File

@ -89,7 +89,7 @@ namespace IRaCIS.Core.Infra.EFCore
//modelBuilder.HasDbFunction(typeof(DbContext).GetMethod(nameof(GetTableList)));
modelBuilder.Entity<User>().HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false);
@ -104,11 +104,11 @@ namespace IRaCIS.Core.Infra.EFCore
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId);
modelBuilder.Entity<VisitTask>().HasOne(t => t.Subject).WithMany(s=>s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
modelBuilder.Entity<VisitTask>().HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
@ -450,15 +450,16 @@ namespace IRaCIS.Core.Infra.EFCore
public override int SaveChanges()
{
//UpdateAuditInfo().GetAwaiter();
SetCommonEntityAuditInfo();
AddAudit().GetAwaiter();
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
//await UpdateAuditInfo();
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
SetCommonEntityAuditInfo();
await AddAudit();
return await base.SaveChangesAsync(cancellationToken);
}
@ -472,7 +473,7 @@ namespace IRaCIS.Core.Infra.EFCore
var inspectionGeneralIdList = ChangeTracker.Entries().Where(t => typeof(DataInspection).IsAssignableFrom(t.Entity.GetType())).Select(t => ((DataInspection)t.Entity).GeneralId).ToList();
var entities = ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added))
.Where(t => ! typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity) t.Entity).Id ))
.Where(t => !typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity)t.Entity).Id))
.ToList();
AuditingData auditingData = new AuditingData(this, _userInfo);
@ -487,81 +488,88 @@ namespace IRaCIS.Core.Infra.EFCore
}
/// <summary>
/// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime UpdateUserId 可用事件绑定的方式UpdateAuitUser
/// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime Update UserId
/// </summary>
//private async Task UpdateAuditInfo()
//{
private void SetCommonEntityAuditInfo()
{
ChangeTracker.DetectChanges(); // Important!
// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环)
var entities = ChangeTracker.Entries()
.Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x => !typeof(DataInspection).IsAssignableFrom(x.Entity.GetType())).ToList();
foreach (var t in entities)
{
switch (t.State)
{
case EntityState.Deleted:
break;
case EntityState.Modified:
if (t.Entity is IAuditUpdate updateEntity1)
{
updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8);
updateEntity1.UpdateUserId = _userInfo.Id;
}
if (t.Entity is ISoftDelete softDelete)
{
if (softDelete.IsDeleted)
{
softDelete.DeleteUserId = _userInfo.Id;
softDelete.DeletedTime = DateTime.UtcNow.AddHours(8);
}
else
{
softDelete.DeletedTime = null;
}
}
break;
//添加的时候,更新审计字段也赋值
case EntityState.Added:
if (t.Entity is IAuditAdd addEntity)
{
if (addEntity.CreateTime == default(DateTime))
{
addEntity.CreateTime = DateTime.UtcNow.AddHours(8);
}
addEntity.CreateUserId = _userInfo.Id;
}
if (t.Entity is IAuditUpdate updateEntity)
{
updateEntity.UpdateTime = DateTime.UtcNow.AddHours(8);
updateEntity.UpdateUserId = _userInfo.Id;
}
if (t.Entity is IAuditAddWithUserName addEntity3)
{
if (addEntity3.CreateTime == default(DateTime))
{
addEntity3.CreateTime = DateTime.UtcNow.AddHours(8);
}
addEntity3.CreateUserId = _userInfo.Id;
addEntity3.CreateUser = _userInfo.RealName;
}
break;
}
}
}
//ChangeTracker.DetectChanges(); // Important!
//// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环)
//var entities = ChangeTracker.Entries()
// .Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x=>x.Entity.GetType()!=typeof(data)).ToList();
//AuditingData auditingData = new AuditingData(this, _userInfo);
//await auditingData.IncomingEntitys(entities);
//var items = entities.SelectMany(x => x.Entity.GetType().ToString());
//foreach (var t in entities)
//{
// switch (t.State)
// {
// case EntityState.Deleted:
// break;
// case EntityState.Modified:
// if (t.Entity is IAuditUpdate updateEntity1)
// {
// updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8);
// updateEntity1.UpdateUserId = _userInfo.Id;
// }
// break;
// //添加的时候,更新审计字段也赋值
// case EntityState.Added:
// ////// 仓储添加时 就有id了
// //if (t.Entity is Entity entity && entity.Id == Guid.Empty)
// //{
// // entity.Id = NewId.NextGuid();
// //}
// if (t.Entity is IAuditAdd addEntity)
// {
// if (addEntity.CreateTime == default(DateTime))
// {
// addEntity.CreateTime = DateTime.UtcNow.AddHours(8);
// }
// addEntity.CreateUserId = _userInfo.Id;
// }
// if (t.Entity is IAuditUpdate updateEntity)
// {
// updateEntity.UpdateTime = DateTime.UtcNow.AddHours(8);
// updateEntity.UpdateUserId = _userInfo.Id;
// }
// if (t.Entity is IAuditAddWithUserName addEntity3)
// {
// addEntity3.CreateTime = DateTime.UtcNow.AddHours(8);
// addEntity3.CreateUserId = _userInfo.Id;
// addEntity3.CreateUser = _userInfo.RealName;
// }
// break;
// }
//}
//}
#region 更新审计信息 废弃
/// <summary>
/// 事件绑定的方式 更新审计信息 废弃
@ -618,6 +626,8 @@ namespace IRaCIS.Core.Infra.EFCore
}
}
#endregion
#endregion

View File

@ -1,67 +1,66 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers
{
public class AuditAddTrigger: IBeforeSaveTrigger<IAuditAdd>
{
private readonly IUserInfo _userInfo;
//namespace IRaCIS.Core.Application.Triggers
//{
// public class AuditAddTrigger: IBeforeSaveTrigger<IAuditAdd>
// {
// private readonly IUserInfo _userInfo;
public AuditAddTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
// public AuditAddTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
public Task BeforeSave(ITriggerContext<IAuditAdd> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Added)
{
context.Entity.CreateUserId = _userInfo.Id;
// public Task BeforeSave(ITriggerContext<IAuditAdd> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Added)
// {
// context.Entity.CreateUserId = _userInfo.Id;
if (context.Entity.CreateTime == default(DateTime))
{
context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
}
// }
}
// }
return Task.CompletedTask;
// return Task.CompletedTask;
}
}
// }
// }
public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger<IAuditAddWithUserName>
{
private readonly IUserInfo _userInfo;
// public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger<IAuditAddWithUserName>
// {
// private readonly IUserInfo _userInfo;
public AuditAddWithUsernameTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
// public AuditAddWithUsernameTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
public Task BeforeSave(ITriggerContext<IAuditAddWithUserName> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Added)
{
context.Entity.CreateUserId = _userInfo.Id;
context.Entity.CreateUser = _userInfo.UserName;
// public Task BeforeSave(ITriggerContext<IAuditAddWithUserName> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Added)
// {
// context.Entity.CreateUserId = _userInfo.Id;
// context.Entity.CreateUser = _userInfo.UserName;
if (context.Entity.CreateTime == default(DateTime))
{
context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
}
}
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
// }
// }
return Task.CompletedTask;
// return Task.CompletedTask;
}
}
}
// }
// }
//}

View File

@ -1,33 +1,33 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers
{
public class AuditUpdateTrigger : IBeforeSaveTrigger<IAuditUpdate>
{
private readonly IUserInfo _userInfo;
//namespace IRaCIS.Core.Application.Triggers
//{
// public class AuditUpdateTrigger : IBeforeSaveTrigger<IAuditUpdate>
// {
// private readonly IUserInfo _userInfo;
public AuditUpdateTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
// public AuditUpdateTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
public Task BeforeSave(ITriggerContext<IAuditUpdate> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Modified || context.ChangeType == ChangeType.Added)
{
context.Entity.UpdateTime = DateTime.UtcNow.AddHours(8);
// public Task BeforeSave(ITriggerContext<IAuditUpdate> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Modified || context.ChangeType == ChangeType.Added)
// {
// context.Entity.UpdateTime = DateTime.UtcNow.AddHours(8);
context.Entity.UpdateUserId = _userInfo.Id;
// context.Entity.UpdateUserId = _userInfo.Id;
}
// }
return Task.CompletedTask;
// return Task.CompletedTask;
}
}
}
// }
// }
//}

View File

@ -1,41 +1,41 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers
{
//namespace IRaCIS.Core.Application.Triggers
//{
public class SoftDeleteTrigger : IBeforeSaveTrigger<ISoftDelete>
{
private readonly IUserInfo _userInfo;
// public class SoftDeleteTrigger : IBeforeSaveTrigger<ISoftDelete>
// {
// private readonly IUserInfo _userInfo;
public SoftDeleteTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
// public SoftDeleteTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
//Generator Detached 状态才会进去 误用
//modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator<DeleteTimeGenerator>().ValueGeneratedOnAddOrUpdate();
public Task BeforeSave(ITriggerContext<ISoftDelete> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Modified)
{
if (context.Entity.IsDeleted)
{
context.Entity.DeleteUserId = _userInfo.Id;
context.Entity.DeletedTime = DateTime.UtcNow.AddHours(8);
}
else
{
context.Entity.DeletedTime = null;
}
}
// //Generator Detached 状态才会进去 误用
// //modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator<DeleteTimeGenerator>().ValueGeneratedOnAddOrUpdate();
// public Task BeforeSave(ITriggerContext<ISoftDelete> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Modified)
// {
// if (context.Entity.IsDeleted)
// {
// context.Entity.DeleteUserId = _userInfo.Id;
// context.Entity.DeletedTime = DateTime.UtcNow.AddHours(8);
// }
// else
// {
// context.Entity.DeletedTime = null;
// }
// }
return Task.CompletedTask;
// return Task.CompletedTask;
}
}
}
// }
// }
//}