修改审计字段
parent
cbb6e9662a
commit
96a0a7c7b9
|
@ -33,6 +33,6 @@
|
||||||
|
|
||||||
US=1,
|
US=1,
|
||||||
|
|
||||||
USAndCN
|
USAndCN=2,
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
|
@ -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;
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
|
@ -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;
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
Loading…
Reference in New Issue