修改审计字段

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, US=1,
USAndCN USAndCN=2,
} }
} }

View File

@ -89,7 +89,7 @@ namespace IRaCIS.Core.Infra.EFCore
//modelBuilder.HasDbFunction(typeof(DbContext).GetMethod(nameof(GetTableList))); //modelBuilder.HasDbFunction(typeof(DbContext).GetMethod(nameof(GetTableList)));
modelBuilder.Entity<User>().HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false); 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>().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<VisitTask>().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent); modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
@ -450,15 +450,16 @@ namespace IRaCIS.Core.Infra.EFCore
public override int SaveChanges() public override int SaveChanges()
{ {
//UpdateAuditInfo().GetAwaiter();
SetCommonEntityAuditInfo();
AddAudit().GetAwaiter(); AddAudit().GetAwaiter();
return base.SaveChanges(); return base.SaveChanges();
} }
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{ {
//await UpdateAuditInfo(); // 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
SetCommonEntityAuditInfo();
await AddAudit(); await AddAudit();
return await base.SaveChangesAsync(cancellationToken); 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 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)) 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(); .ToList();
AuditingData auditingData = new AuditingData(this, _userInfo); AuditingData auditingData = new AuditingData(this, _userInfo);
@ -487,81 +488,88 @@ namespace IRaCIS.Core.Infra.EFCore
} }
/// <summary> /// <summary>
/// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime UpdateUserId 可用事件绑定的方式UpdateAuitUser /// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime Update UserId
/// </summary> /// </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;
}
}
}
#region 更新审计信息 废弃
//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;
// }
//}
//}
/// <summary> /// <summary>
/// 事件绑定的方式 更新审计信息 废弃 /// 事件绑定的方式 更新审计信息 废弃
@ -618,6 +626,8 @@ namespace IRaCIS.Core.Infra.EFCore
} }
} }
#endregion
#endregion #endregion

View File

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

View File

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