Suject稽查bug trigger 两次事务

Uat_Study
hang 2022-08-19 10:20:22 +08:00
parent d4fdf74198
commit 4388dbd547
6 changed files with 29 additions and 14 deletions

View File

@ -140,18 +140,21 @@ namespace IRaCIS.Core.Application.Service.Inspection
};
query = query.WhereIf(dto.SiteId != null, x => x.SiteId == dto.SiteId)
.WhereIf(dto.RelationDeadlineTime != null, x => x.CreateTime <= dto.RelationDeadlineTime.Value.AddSeconds(1))
//.WhereIf(dto.RelationDeadlineTime != null, x => x.CreateTime <= dto.RelationDeadlineTime.Value.AddSeconds(1))
.WhereIf(dto.TrialId != null, t => (t.TrialId == dto.TrialId) || (t.CreateTime >= trialData.CreateTime && t.CreateTime <= trialData.TrialFinishTime))
.WhereIf(dto.BatchId != null && dto.ObjectRelationParentId == null && dto.GeneralId == null, x => x.BatchId == dto.BatchId)
.WhereIf(dto.BatchId != null && dto.GeneralId != null && dto.ObjectRelationParentId == null, x => x.BatchId == dto.BatchId || x.GeneralId == dto.GeneralId || x.ObjectRelationParentId== dto.GeneralId)
//父稽查 查看关联子记录 x.ObjectRelationParentId== dto.GeneralId
.WhereIf(dto.BatchId != null && dto.GeneralId != null && dto.ObjectRelationParentId == null, x => x.BatchId == dto.BatchId ||
((x.GeneralId == dto.GeneralId || x.ObjectRelationParentId == dto.GeneralId) && x.CreateTime <= dto.RelationDeadlineTime.Value.AddSeconds(1)))
.WhereIf(dto.ObjectRelationParentId != null && dto.BatchId != null && dto.GeneralId != null,
x => x.GeneralId == dto.ObjectRelationParentId || //子稽查 查询父记录
x.GeneralId == dto.GeneralId || //同一对象
x =>
x.BatchId == dto.BatchId || //同一事务批次
x.ObjectRelationParentId == dto.GeneralId || //父稽查 查询子记录
x.ObjectRelationParentId == dto.ObjectRelationParentId //不同对象 但是同一层级
)
x.ObjectRelationParentId == dto.ObjectRelationParentId || //不同对象 但是同一层级 适用于子对象
( ( x.GeneralId == dto.ObjectRelationParentId || //子稽查 查询父记录
x.GeneralId == dto.GeneralId || //同一对象
x.ObjectRelationParentId == dto.GeneralId //父稽查 查询子记录
)&& x.CreateTime <= dto.RelationDeadlineTime.Value.AddSeconds(1)))
.WhereIf(!dto.SubjectInfo.IsNullOrEmpty(), x => x.SubjectCode.Contains(dto.SubjectInfo))
//.WhereIf(dto.VisitPlanInfo != null&& dto.VisitPlanInfo!=(decimal) 1.11, x => x.VisitNum == dto.VisitPlanInfo)
//.WhereIf(dto.VisitPlanInfo != (decimal)1.11,x=>x.InPlan!=null&& x.InPlan==false)

View File

@ -65,7 +65,7 @@ namespace IRaCIS.Application.Services
await _repository.SaveChangesAsync();
await _subjectRepository.SaveChangesAsync();
return ResponseOutput.Ok(mapedSubject.Id.ToString());

View File

@ -52,7 +52,7 @@ namespace IRaCIS.Core.Application.Triggers
await _subjectVisitRepository.AddRangeAsync(svList);
await _subjectVisitRepository.SaveChangesAsync();
#region 在f访视计划确认的时候处理 给subject添加访视计划
////已添加受试者 都不存在该新增的计划名称 那么该项目所有受试者都增加一个访视记录

View File

@ -411,6 +411,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<Subject>(entity, type, x => new InspectionConvertDTO()
{
GeneralId=x.Id,
SubjectId = x.Id,
SubjectCode = x.Code,
}, new
@ -543,13 +544,14 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var subjectCode = entity.Subject?.Code;
await InsertInspection<SubjectVisit>(item.Entity as SubjectVisit, type, x => new InspectionConvertDTO()
{
GeneralId=x.Id,
SubjectCode = subjectCode,
SubjectId = x.SubjectId,
SubjectVisitId = x.Id,
SubjectVisitName = x.VisitName,
BlindName = x.BlindName,
Reason = reason,
}, null, item.OriginalValues);
});
}
// 既往手术史
@ -907,6 +909,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<ReadModule>(item.Entity as ReadModule, type, x => new InspectionConvertDTO()
{
GeneralId = x.Id,
ObjectRelationParentId = entity.ReadingPeriodSetId,
SubjectVisitId = x.SubjectVisitId,
IsDistinctionInterface = false,
}, new
@ -969,7 +972,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
/// <param name="expression">表达式</param>
/// <param name="otherItem">其他对象</param>
/// <returns></returns>
public async Task InsertInspection<T>(T entityObj, string type, Expression<Func<T, InspectionConvertDTO>> expression = null, object otherItem = null, object originaldata = null) where T : class
public async Task InsertInspection<T>(T entityObj, string type, Expression<Func<T, InspectionConvertDTO>> expression = null, object otherItem = null, object originaldata = null) where T : Entity
{
InspectionConvertDTO inspection = new InspectionConvertDTO();
@ -981,6 +984,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common
inspection = f(entityObj);
}
//避免重复赋值
inspection.GeneralId = entityObj.Id;
inspection.Identification = await GetInspectionRecordIdentificationAsync(entityObj, type, inspection.IsDistinctionInterface);

View File

@ -463,8 +463,14 @@ namespace IRaCIS.Core.Infra.EFCore
{
try
{
var entities = ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x => x.Entity.GetType() != typeof(DataInspection)).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))
.Where(t => ! typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity) t.Entity).Id ))
.ToList();
AuditingData auditingData = new AuditingData(this, _userInfo);
await auditingData.IncomingEntitys(entities);
}
catch (Exception)

View File

@ -394,6 +394,7 @@ namespace IRaCIS.Core.Infra.EFCore
public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default)
{
return await _dbContext.SaveChangesAsync(cancellationToken) > 0;
}