From 440a3f05542ba2e25285ff9e14fbdf5e5433d778 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Wed, 13 Apr 2022 10:50:14 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E8=A7=86=E8=AE=A1=E5=88=92=E5=BA=9F?=
=?UTF-8?q?=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Service/Visit/DTO/VisitPlanViewModel.cs | 5 ++
.../Service/Visit/VisitPlanService.cs | 29 +++++-------
IRaCIS.Core.Domain/Visit/VisitStage.cs | 10 +++-
.../Context/IRaCISDBContext.cs | 47 +++++++++++++++++--
4 files changed, 68 insertions(+), 23 deletions(-)
diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPlanViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPlanViewModel.cs
index 72582e0d..ac2ee53a 100644
--- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPlanViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPlanViewModel.cs
@@ -23,6 +23,9 @@ namespace IRaCIS.Application.Contracts
public class VisitStageDTO : VisitPlanCommand
{
public DateTime CreateTime { get; set; }
+
+ public bool IsHaveFirstConfirmed { get; set; }
+
}
public class VisitPlanView
@@ -60,6 +63,8 @@ namespace IRaCIS.Application.Contracts
public int VisitWindowLeft { get; set; }
public int VisitWindowRight { get; set; }
+
+ public bool IsDeleted { get; set; }
}
diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs
index 6f141e8c..1227e424 100644
--- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs
+++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs
@@ -43,7 +43,7 @@ namespace IRaCIS.Application.Services
/// 获取项目访视计划
public async Task> GetTrialVisitStageList(VisitPlanQueryDTO param)
{
- var visitStageQuery = _visitStageRepository.Where(u => u.TrialId == param.TrialId)
+ var visitStageQuery = _visitStageRepository.AsQueryable(true).Where(u => u.TrialId == param.TrialId)
.WhereIf(!string.IsNullOrWhiteSpace(param.Keyword), t => t.VisitName.Contains(param.Keyword))
.ProjectTo(_mapper.ConfigurationProvider);
@@ -93,12 +93,12 @@ namespace IRaCIS.Application.Services
{
DateTime createtime = DateTime.Now;
List datas = new List();
- if (!await _repository.Where(t => t.Id == visitPlan.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialOngoing || t.TrialStatusStr == StaticData.TrialInitializing))
+ if (!await _trialRepository.Where(t => t.Id == visitPlan.TrialId).IgnoreQueryFilters().AnyAsync(t => t.TrialStatusStr == StaticData.TrialOngoing || t.TrialStatusStr == StaticData.TrialInitializing))
{
return ResponseOutput.NotOk(" only in Initializing or Ongoing State can operate ");
}
- var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == visitPlan.TrialId)
+ var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == visitPlan.TrialId,ignoreQueryFilters:true)
.Select(t => new { t.Id, t.VisitNum, t.VisitDay }).OrderBy(t => t.VisitNum).ToListAsync();
//更新的时候,需要排除自己
@@ -127,20 +127,20 @@ namespace IRaCIS.Application.Services
if (visitPlan.Id == Guid.Empty || visitPlan.Id == null)//add
{
- if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum)))
+ if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum), true))
{
return ResponseOutput.NotOk("A visit with the same VisitName/VisitNum already existed in the current visit plan.");
}
- if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine) && visitPlan.IsBaseLine)
+ if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine, true) && visitPlan.IsBaseLine)
{
return ResponseOutput.NotOk("A visit already is baseline in the current visit plan.");
}
//已添加受试者 都不存在该新增的计划名称 那么该项目所有受试者都增加一个访视记录
- if (!await _repository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId))
+ if (!await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId))
{
- var subjectSVS = await _repository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId,t.IsFinalVisit }).Distinct().ToListAsync();
+ var subjectSVS = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId,t.IsFinalVisit }).Distinct().ToListAsync();
var subjects = subjectSVS.Select(t => new { t.SubjectId, t.SiteId }).Distinct().ToList();
@@ -198,7 +198,7 @@ namespace IRaCIS.Application.Services
visitPlan.Id = result.Id;
//更新项目访视计划状态为未确认
- await _repository.UpdateFromQueryAsync(u => u.Id == visitPlan.TrialId, t => new Trial() { VisitPlanConfirmed = false });
+ await _trialRepository.UpdateFromQueryAsync(u => u.Id == visitPlan.TrialId, t => new Trial() { VisitPlanConfirmed = false });
await _repository.SaveChangesAsync();
@@ -211,19 +211,19 @@ namespace IRaCIS.Application.Services
{
- if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum) && t.Id != visitPlan.Id))
+ if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum) && t.Id != visitPlan.Id,true))
{
return ResponseOutput.NotOk("A visit with the same VisitName/VisitNum already existed in the current visit plan.");
}
- if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine && t.Id != visitPlan.Id) && visitPlan.IsBaseLine)
+ if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && t.IsBaseLine && t.Id != visitPlan.Id,true) && visitPlan.IsBaseLine)
{
return ResponseOutput.NotOk("A visit already is baseline in the current visit plan.");
}
- var stage = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == visitPlan.Id);
+ var stage = await _visitStageRepository.FirstOrDefaultAsync(t => t.Id == visitPlan.Id,true);
if (stage == null) return ResponseOutput.NotOk("None");
//修改是否是基线
@@ -240,7 +240,7 @@ namespace IRaCIS.Application.Services
stage.BlindName = "B" + ((int)visitPlan.VisitNum * 10).ToString("D3");
//更新项目访视计划状态为未确认
- await _repository.UpdateFromQueryAsync(u => u.Id == visitPlan.TrialId, t => new Trial() { VisitPlanConfirmed = false });
+ //await _trialRepository.UpdateFromQueryAsync(u => u.Id == visitPlan.TrialId, t => new Trial() { VisitPlanConfirmed = false });
await _repository.SaveChangesAsync();
@@ -296,11 +296,8 @@ namespace IRaCIS.Application.Services
await _inspectionService.AddListInspectionRecordAsync(datas);
await _repository.DeleteFromQueryAsync(t => t.TrialId == visitPlan.TrialId && t.VisitName == visitPlan.VisitName);
-
-
var result = await _visitStageRepository.DeleteFromQueryAsync(u => u.Id == id);
-
return ResponseOutput.Result(result);
}
@@ -363,7 +360,7 @@ namespace IRaCIS.Application.Services
//访视计划 整体状态变更为 确认
- await _visitStageRepository.UpdateFromQueryAsync(u => u.TrialId == trialId, t => new VisitStage() { IsConfirmed = true });
+ await _visitStageRepository.UpdateFromQueryAsync(u => u.TrialId == trialId, t => new VisitStage() { IsConfirmed = true ,IsHaveFirstConfirmed = true});
var stat = new VisitPlanInfluenceStat() { TrialId = trialId };
diff --git a/IRaCIS.Core.Domain/Visit/VisitStage.cs b/IRaCIS.Core.Domain/Visit/VisitStage.cs
index d8688cf5..37943243 100644
--- a/IRaCIS.Core.Domain/Visit/VisitStage.cs
+++ b/IRaCIS.Core.Domain/Visit/VisitStage.cs
@@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace IRaCIS.Core.Domain.Models
{
[Table("VisitStage")]
- public class VisitStage : Entity, IAuditUpdate, IAuditAdd
+ public class VisitStage : Entity, IAuditUpdate, IAuditAdd,ISoftDelete
{
public Trial Trial { get; set; }
public Guid TrialId { get; set; }
@@ -23,7 +23,6 @@ namespace IRaCIS.Core.Domain.Models
public bool IsBaseLine { get; set; } = false;
- //public string AnonymousVisitName { get; set; } = string.Empty;
public int VisitWindowLeft { get; set; }
public int VisitWindowRight { get; set; }
@@ -33,5 +32,12 @@ namespace IRaCIS.Core.Domain.Models
public DateTime CreateTime { get; set; }
public Guid UpdateUserId { get; set; }
public DateTime UpdateTime { get; set; }
+
+ public bool IsDeleted { get; set; }
+ public bool IsHaveFirstConfirmed { get; set; }
+
+
+ public DateTime? DeletedTime { get; set; }
+
}
}
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index cb4c5ae9..812eeefb 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Reflection;
using IRaCIS.Core.Domain.Share;
+using Microsoft.EntityFrameworkCore.Infrastructure;
using UserTypeGroup = IRaCIS.Core.Domain.Models.UserTypeGroup;
namespace IRaCIS.Core.Infra.EFCore
@@ -32,7 +33,8 @@ namespace IRaCIS.Core.Infra.EFCore
//比数据库上下文构造函数先执行 不能构造函数注入的方式使用配置文件
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
- optionsBuilder.UseLoggerFactory(MyLoggerFactory);
+ optionsBuilder.UseLoggerFactory(MyLoggerFactory)
+ .ReplaceService();
//var config = new ConfigurationBuilder()
// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
@@ -40,10 +42,47 @@ namespace IRaCIS.Core.Infra.EFCore
//optionsBuilder.AddInterceptors(new AuditingInterceptor(connectionString));
}
+ #region IModelCacheKeyFactory
+
+ //public class DynamicModelCacheKeyFactory : IModelCacheKeyFactory
+ //{
+ // public object Create(DbContext context)
+ // => context is IRaCISDBContext dynamicContext
+ // ? (context.GetType(), dynamicContext._userInfo.IsEn_Us)
+ // : (object)context.GetType();
+ //}
+
+ public class DynamicModelCacheKeyFactoryDesignTimeSupport : IModelCacheKeyFactory
+ {
+ public object Create(DbContext context, bool designTime)
+ => context is IRaCISDBContext dynamicContext
+ ? (context.GetType(), dynamicContext._userInfo.IsEn_Us, designTime)
+ : (object)context.GetType();
+
+ public object Create(DbContext context)
+ => Create(context, false);
+ }
+
+ #endregion
+
+
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//modelBuilder.Entity().HasMany(s => s.TrialSiteUserSurveyList).WithOne(sv => sv.TrialSiteSurvey);
//modelBuilder.Entity().HasMany(s => s.TrialSiteEquipmentSurveyList).WithOne(sv => sv.TrialSiteSurvey);
+ //modelBuilder.Entity().Ignore(t => t.MappedValue);
+ //modelBuilder.Entity().Property(t => t.MappedValue).HasComputedColumnSql(_userInfo.IsEn_Us? "[Value]":"[ValueCN]");
+ //modelBuilder.Entity()// .HasQueryFilter(t => t.IsDeleted == false);
+
+
+ if (_userInfo.IsEn_Us)
+ {
+ modelBuilder.Entity().Property(t => t.MappedValue).HasColumnName( "Value" );
+ }
+ else
+ {
+ modelBuilder.Entity().Property(t => t.MappedValue).HasColumnName( "ValueCN");
+ }
//遍历实体模型手动配置
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);
@@ -56,13 +95,11 @@ namespace IRaCIS.Core.Infra.EFCore
base.OnModelCreating(modelBuilder);
- //modelBuilder.Entity().Ignore(t => t.MappedValue);
- //modelBuilder.Entity().Property(t => t.MappedValue).HasComputedColumnSql(_userInfo.IsEn_Us? "[Value]":"[ValueCN]");
+
//modelBuilder.Entity().Property(t => t.MappedValue).HasColumnName(_userInfo.IsEn_Us ? "Value" : "ValueCN").UsePropertyAccessMode(PropertyAccessMode.Property);
- //modelBuilder.Entity()
- // .HasQueryFilter(t => t.IsDeleted == false);
+
// 软删除配置
foreach (var entityType in modelBuilder.Model.GetEntityTypes())