diff --git a/IRaCIS.Core.Application/Service/Doctor/DTO/TrialExperienceModel.cs b/IRaCIS.Core.Application/Service/Doctor/DTO/TrialExperienceModel.cs
index 61ee612a0..61ac9d5f3 100644
--- a/IRaCIS.Core.Application/Service/Doctor/DTO/TrialExperienceModel.cs
+++ b/IRaCIS.Core.Application/Service/Doctor/DTO/TrialExperienceModel.cs
@@ -2,6 +2,22 @@
{
public class TrialExperienceCommand
{
+
+ ///
+ /// 数据类型
+ ///
+ public ExperienceDataType ExperienceDataType { get; set; }
+
+ ///
+ /// 项目Id
+ ///
+ public Guid? TrialId { get; set; }
+
+ ///
+ /// 适应症的枚举
+ ///
+ public int IndicationEnum { get; set; } = -1;
+
public Guid? Id { get; set; }
public Guid DoctorId { get; set; }
@@ -35,10 +51,23 @@
}
+ public class GetTrialExperienceListInDto
+ {
+ public Guid DoctorId { get; set; }
+ public Guid? TrialId { get; set; }
+ }
+
public class TrialExperienceListDTO : TrialExperienceCommand
{
public string Phase { get; set; } = String.Empty;
+
+
+ ///
+ /// 阅片标准
+ ///
+ public CriterionType? CriterionType { get; set; }
+
public List EvaluationCriteriaList { get; set; } = new List();
}
diff --git a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs
index 3414753c6..8ba4740f2 100644
--- a/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs
+++ b/IRaCIS.Core.Application/Service/Doctor/TrialExperienceService.cs
@@ -24,7 +24,11 @@ namespace IRaCIS.Core.Application.Service
var doctor = await _doctorRepository.Where(o => o.Id == indto.DoctorId)
.ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
- trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(indto.DoctorId);
+ trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(new GetTrialExperienceListInDto()
+ {
+ DoctorId = indto.DoctorId,
+ TrialId = indto.TrialId,
+ });
if (doctor != null)
{
@@ -90,12 +94,41 @@ namespace IRaCIS.Core.Application.Service
return doctorInfo;
}
- private async Task> GetTrialExperienceList(Guid doctorId)
+ private async Task> GetTrialExperienceList(GetTrialExperienceListInDto inDto)
{
- var doctorClinicalTrialExperienceList = await _trialExperienceRepository.Where(o => o.DoctorId == doctorId).OrderBy(t => t.CreateTime)
- .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ if (inDto.TrialId == null)
+ {
+ var doctorClinicalTrialExperienceList = await _trialExperienceRepository
+ .Where(o => o.DoctorId == inDto.DoctorId)
+ .Where(x => x.ExperienceDataType == ExperienceDataType.System)
+ .OrderBy(t => t.CreateTime)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ return doctorClinicalTrialExperienceList;
+ }
+ else
+ {
+ // 当前项目没有则复制
+ if (!(await _trialExperienceRepository.AnyAsync(x => x.TrialId == inDto.TrialId)))
+ {
+ var trialExperienceList = await _trialExperienceRepository.Where(o => o.DoctorId == inDto.DoctorId)
+ .Where(x => x.ExperienceDataType == ExperienceDataType.System || x.ExperienceDataType == ExperienceDataType.SystemAuto).ToListAsync();
+ foreach (var item in trialExperienceList)
+ {
+ item.Trial = null;
+ item.TrialId = inDto.TrialId;
+ item.ExperienceDataType = ExperienceDataType.Trial;
+ }
+ }
- return doctorClinicalTrialExperienceList;
+ var doctorClinicalTrialExperienceList = await _trialExperienceRepository
+ .Where(o => o.DoctorId == inDto.DoctorId)
+ .Where(x => x.ExperienceDataType == ExperienceDataType.Trial|| x.ExperienceDataType == ExperienceDataType.TrialAuto)
+ .Where(x => x.TrialId == inDto.TrialId.Value)
+ .OrderBy(t => t.CreateTime)
+ .ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
+ return doctorClinicalTrialExperienceList;
+ }
+
}
/// 添加或更新医生临床经验列表项
diff --git a/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs b/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs
index 2a72750f1..0fbb4c2e1 100644
--- a/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Doctor/_MapConfig.cs
@@ -95,6 +95,12 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.RealName, u => u.MapFrom(user => string.IsNullOrEmpty(user.FirstName) ? user.LastName : user.LastName + " / " + user.FirstName));
CreateMap()
+ .ForMember(x=>x.VisitReadingCount, u => u.MapFrom(t => (t.ExperienceDataType==ExperienceDataType.TrialAuto||t.ExperienceDataType==ExperienceDataType.SystemAuto)?
+
+ // 统计数量
+ t.Trial.VisitTaskList.Where(x=>x.ReadingTaskState==ReadingTaskState.HaveSigned&&x.TaskState== TaskState.Effect&&x.DoctorUser.DoctorId==t.DoctorId &&x.TrialReadingCriterion.CriterionType==t.CriterionType).Count():
+ t.VisitReadingCount
+ ))
.ForMember(d => d.Phase, u => u.MapFrom(t => t.Phase.Value))
.ForMember(d => d.EvaluationCriteriaList, u => u.MapFrom(t => t.ExperienceCriteriaList.Select(t => t.EvaluationCriteria.Value)))
.ForMember(d => d.EvaluationCriteriaIdList, u => u.MapFrom(t => t.ExperienceCriteriaList.Select(t => t.EvaluationCriteriaId)));
diff --git a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
index 3d52be552..0d529950e 100644
--- a/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
+++ b/IRaCIS.Core.Application/Service/WorkLoad/EnrollService.cs
@@ -1,6 +1,8 @@
-using IRaCIS.Core.Application.Filter;
+using DocumentFormat.OpenXml.Vml.Spreadsheet;
+using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.WorkLoad.DTO;
using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Infra.EFCore.Common;
using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions;
@@ -16,6 +18,13 @@ namespace IRaCIS.Core.Application.Service
IRepository _workloadRepository,
IRepository _userRepository,
IRepository _trialUserRepository,
+ IRepository _ReadingQuestionCriterionTrialRepository,
+
+ IRepository _trialExperienceRepository,
+
+ IRepository _dictionaryRepository,
+
+ IRepository _trialExperienceCriteriaRepository,
IMailVerificationService _mailVerificationService, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEnrollService
{
@@ -377,6 +386,16 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.NotOk(string.Join(',', _localizer["Enroll_EmailFormat"], errorList.Select(c => c.LastName + " / " + c.FirstName)));
}
+
+
+ var readingQuestionCriterionTrial = await _ReadingQuestionCriterionTrialRepository.Where(x => x.TrialId == confirmReviewerCommand.TrialId && x.IsConfirm).ToListAsync();
+
+
+ List trialExperienceList = new List();
+ // 获取标准字典
+
+ var criterionTypeList = await _dictionaryRepository.Where(x => x.Parent.Code == "CriterionType").ToListAsync();
+
if (confirmReviewerCommand.ConfirmState == 1) //确认入组
{
foreach (var intoGroupItem in intoGroupList)
@@ -412,6 +431,9 @@ namespace IRaCIS.Core.Application.Service
intoGroupItem.EnrollStatus = EnrollStatus.ConfirmIntoGroup;
intoGroupItem.EnrollTime = DateTime.Now;
+
+
+
}
catch (Exception)
{
@@ -422,6 +444,50 @@ namespace IRaCIS.Core.Application.Service
}
}
+
+ List dataTypes = new List()
+ {
+ ExperienceDataType.TrialAuto,
+ ExperienceDataType.SystemAuto,
+
+
+ };
+
+ // 添加临床试验经历
+ if (trial.TrialType == TrialType.OfficialTrial)
+ {
+ foreach (var doctorId in confirmReviewerCommand.DoctorIdArray)
+ {
+ foreach (var item in readingQuestionCriterionTrial)
+ {
+ foreach (var dataType in dataTypes)
+ {
+ trialExperienceList.Add(new TrialExperience()
+ {
+ CriterionType = item.CriterionType,
+ DoctorId = doctorId,
+ PhaseId = trial.PhaseId,
+ StartTime = DateTime.Now,
+ IndicationEnum = trial.IndicationEnum,
+ ExperienceDataType = dataType,
+ TrialId = trial.Id,
+ VisitReadingCount = 0,
+ ExperienceCriteriaList = new List() {
+
+ new TrialExperienceCriteria()
+ {
+ EvaluationCriteriaId=criterionTypeList.Where(x=>x.Code==item.CriterionType.GetEnumInt()).Select(x=>x.Id).FirstOrDefault()
+ }
+ }
+ });
+ }
+ }
+ }
+ await _trialExperienceRepository.AddRangeAsync(trialExperienceList);
+ await _trialExperienceRepository.SaveChangesAsync();
+
+ }
+
}
else if (confirmReviewerCommand.ConfirmState == 0)//回退上一步
{
@@ -443,6 +509,9 @@ namespace IRaCIS.Core.Application.Service
}
+
+
+
await _enrollRepository.SaveChangesAsync();
return ResponseOutput.Ok();
diff --git a/IRaCIS.Core.Domain/Dcotor/TrialExperience.cs b/IRaCIS.Core.Domain/Dcotor/TrialExperience.cs
index af769eefd..331c4915c 100644
--- a/IRaCIS.Core.Domain/Dcotor/TrialExperience.cs
+++ b/IRaCIS.Core.Domain/Dcotor/TrialExperience.cs
@@ -6,8 +6,16 @@ namespace IRaCIS.Core.Domain.Models;
[Table("TrialExperience")]
public partial class TrialExperience : BaseFullAuditEntity
{
+
+
+
+
#region
+ [JsonIgnore]
+ [ForeignKey("TrialId")]
+ public Trial? Trial { get; set; }
+
[JsonIgnore]
public List ExperienceCriteriaList { get; set; }
#endregion
@@ -59,17 +67,22 @@ public partial class TrialExperience : BaseFullAuditEntity
public enum ExperienceDataType
{
///
- /// ϵͳ
+ /// ϵͳֶ
///
System = 0,
///
- /// Ŀ
+ /// Ŀֶӻͬϵͳƹ
///
Trial=1,
///
- /// Զ
+ /// ĿԶ
///
- Auto = 2,
+ TrialAuto = 2,
+
+ ///
+ /// ϵͳԶ
+ ///
+ SystemAuto = 3,
}
\ No newline at end of file