Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-10-29 15:57:29 +08:00
commit 4fb018eaa6
5 changed files with 160 additions and 10 deletions

View File

@ -2,6 +2,22 @@
{ {
public class TrialExperienceCommand public class TrialExperienceCommand
{ {
/// <summary>
/// 数据类型
/// </summary>
public ExperienceDataType ExperienceDataType { get; set; }
/// <summary>
/// 项目Id
/// </summary>
public Guid? TrialId { get; set; }
/// <summary>
/// 适应症的枚举
/// </summary>
public int IndicationEnum { get; set; } = -1;
public Guid? Id { get; set; } public Guid? Id { get; set; }
public Guid DoctorId { 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 class TrialExperienceListDTO : TrialExperienceCommand
{ {
public string Phase { get; set; } = String.Empty; public string Phase { get; set; } = String.Empty;
/// <summary>
/// 阅片标准
/// </summary>
public CriterionType? CriterionType { get; set; }
public List<string> EvaluationCriteriaList { get; set; } = new List<string>(); public List<string> EvaluationCriteriaList { get; set; } = new List<string>();
} }

View File

@ -24,7 +24,11 @@ namespace IRaCIS.Core.Application.Service
var doctor = await _doctorRepository.Where(o => o.Id == indto.DoctorId) var doctor = await _doctorRepository.Where(o => o.Id == indto.DoctorId)
.ProjectTo<TrialExperienceModel>(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); .ProjectTo<TrialExperienceModel>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(indto.DoctorId); trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(new GetTrialExperienceListInDto()
{
DoctorId = indto.DoctorId,
TrialId = indto.TrialId,
});
if (doctor != null) if (doctor != null)
{ {
@ -90,12 +94,41 @@ namespace IRaCIS.Core.Application.Service
return doctorInfo; return doctorInfo;
} }
private async Task<List<TrialExperienceListDTO>> GetTrialExperienceList(Guid doctorId) private async Task<List<TrialExperienceListDTO>> GetTrialExperienceList(GetTrialExperienceListInDto inDto)
{ {
var doctorClinicalTrialExperienceList = await _trialExperienceRepository.Where(o => o.DoctorId == doctorId).OrderBy(t => t.CreateTime) if (inDto.TrialId == null)
.ProjectTo<TrialExperienceListDTO>(_mapper.ConfigurationProvider).ToListAsync(); {
var doctorClinicalTrialExperienceList = await _trialExperienceRepository
.Where(o => o.DoctorId == inDto.DoctorId)
.Where(x => x.ExperienceDataType == ExperienceDataType.System)
.OrderBy(t => t.CreateTime)
.ProjectTo<TrialExperienceListDTO>(_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<TrialExperienceListDTO>(_mapper.ConfigurationProvider).ToListAsync();
return doctorClinicalTrialExperienceList;
}
} }
/// <summary> 添加或更新医生临床经验列表项</summary> /// <summary> 添加或更新医生临床经验列表项</summary>

View File

@ -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)); .ForMember(d => d.RealName, u => u.MapFrom(user => string.IsNullOrEmpty(user.FirstName) ? user.LastName : user.LastName + " / " + user.FirstName));
CreateMap<TrialExperience, TrialExperienceListDTO>() CreateMap<TrialExperience, TrialExperienceListDTO>()
.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.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.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))); .ForMember(d => d.EvaluationCriteriaIdList, u => u.MapFrom(t => t.ExperienceCriteriaList.Select(t => t.EvaluationCriteriaId)));

View File

@ -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.Application.Service.WorkLoad.DTO;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Common;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -16,6 +18,13 @@ namespace IRaCIS.Core.Application.Service
IRepository<Workload> _workloadRepository, IRepository<Workload> _workloadRepository,
IRepository<User> _userRepository, IRepository<User> _userRepository,
IRepository<TrialUser> _trialUserRepository, IRepository<TrialUser> _trialUserRepository,
IRepository<ReadingQuestionCriterionTrial> _ReadingQuestionCriterionTrialRepository,
IRepository<TrialExperience> _trialExperienceRepository,
IRepository<Dictionary> _dictionaryRepository,
IRepository<TrialExperienceCriteria> _trialExperienceCriteriaRepository,
IMailVerificationService _mailVerificationService, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IEnrollService 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))); 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<TrialExperience> trialExperienceList = new List<TrialExperience>();
// 获取标准字典
var criterionTypeList = await _dictionaryRepository.Where(x => x.Parent.Code == "CriterionType").ToListAsync();
if (confirmReviewerCommand.ConfirmState == 1) //确认入组 if (confirmReviewerCommand.ConfirmState == 1) //确认入组
{ {
foreach (var intoGroupItem in intoGroupList) foreach (var intoGroupItem in intoGroupList)
@ -412,6 +431,9 @@ namespace IRaCIS.Core.Application.Service
intoGroupItem.EnrollStatus = EnrollStatus.ConfirmIntoGroup; intoGroupItem.EnrollStatus = EnrollStatus.ConfirmIntoGroup;
intoGroupItem.EnrollTime = DateTime.Now; intoGroupItem.EnrollTime = DateTime.Now;
} }
catch (Exception) catch (Exception)
{ {
@ -422,6 +444,50 @@ namespace IRaCIS.Core.Application.Service
} }
} }
List<ExperienceDataType> dataTypes = new List<ExperienceDataType>()
{
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<TrialExperienceCriteria>() {
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)//回退上一步 else if (confirmReviewerCommand.ConfirmState == 0)//回退上一步
{ {
@ -443,6 +509,9 @@ namespace IRaCIS.Core.Application.Service
} }
await _enrollRepository.SaveChangesAsync(); await _enrollRepository.SaveChangesAsync();
return ResponseOutput.Ok(); return ResponseOutput.Ok();

View File

@ -6,8 +6,16 @@ namespace IRaCIS.Core.Domain.Models;
[Table("TrialExperience")] [Table("TrialExperience")]
public partial class TrialExperience : BaseFullAuditEntity public partial class TrialExperience : BaseFullAuditEntity
{ {
#region µ¼º½ÊôÐÔ #region µ¼º½ÊôÐÔ
[JsonIgnore]
[ForeignKey("TrialId")]
public Trial? Trial { get; set; }
[JsonIgnore] [JsonIgnore]
public List<TrialExperienceCriteria> ExperienceCriteriaList { get; set; } public List<TrialExperienceCriteria> ExperienceCriteriaList { get; set; }
#endregion #endregion
@ -59,17 +67,22 @@ public partial class TrialExperience : BaseFullAuditEntity
public enum ExperienceDataType public enum ExperienceDataType
{ {
/// <summary> /// <summary>
/// 系统 /// 系统手动添加
/// </summary> /// </summary>
System = 0, System = 0,
/// <summary> /// <summary>
/// 项目 /// 项目手动添加或者同系统复制过来的
/// </summary> /// </summary>
Trial=1, Trial=1,
/// <summary> /// <summary>
/// 自动添加 /// 项目自动添加
/// </summary> /// </summary>
Auto = 2, TrialAuto = 2,
/// <summary>
/// 系统自动添加
/// </summary>
SystemAuto = 3,
} }