using IRaCIS.Application.Interfaces; using IRaCIS.Application.Contracts; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Application.Services { [ApiExplorerSettings(GroupName = "Reviewer")] public class TrialExperienceService : BaseService, ITrialExperienceService { private readonly IRepository _trialExperienceRepository; private readonly IRepository _doctorRepository; private readonly IRepository _attachmentRepository; private readonly IRepository _trialExperienceCriteriaRepository; public TrialExperienceService(IRepository trialExperienceRepository, IRepository doctorRepository, IRepository attachmentRepository, IRepository trialExperienceCriteriaRepository) { _trialExperienceRepository = trialExperienceRepository; _doctorRepository = doctorRepository; _attachmentRepository = attachmentRepository; _trialExperienceCriteriaRepository = trialExperienceCriteriaRepository; } /// /// 根据医生Id,获取临床试验经历 界面所有数据 /// [HttpGet("{doctorId:guid}")] public async Task GetTrialExperience(Guid doctorId) { var trialExperience = new TrialExperienceModel(); var doctor = await _doctorRepository.Where(o => o.Id == doctorId) .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); trialExperience.ClinicalTrialExperienceList = await GetTrialExperienceList(doctorId); if (doctor != null) { trialExperience.GCP = doctor.GCP; trialExperience.Id = doctor.Id; trialExperience.OtherClinicalExperience = doctor.OtherClinicalExperience ?? ""; trialExperience.OtherClinicalExperienceCN = doctor.OtherClinicalExperienceCN ?? ""; var attachment = await _attachmentRepository.FirstOrDefaultAsync(t => t.Id == doctor.GCPId); if (attachment != null) { trialExperience.ExpiryDateStr = attachment.ExpiryDate == null ? "" : attachment.ExpiryDate.Value.ToString("yyyy-MM-dd HH:mm"); trialExperience.Path = attachment.Path; trialExperience.GCPFullPath = attachment.Path + "?access_token=" + _userInfo.UserToken; trialExperience.Type = attachment.Type; trialExperience.FileName = attachment.FileName; trialExperience.GCPId = attachment.Id; } } return trialExperience; } private async Task> GetTrialExperienceList(Guid doctorId) { var doctorClinicalTrialExperienceList = await _trialExperienceRepository.Where(o => o.DoctorId == doctorId).OrderBy(t => t.CreateTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return doctorClinicalTrialExperienceList; } /// 添加或更新医生临床经验列表项 [HttpPost] public async Task AddOrUpdateTrialExperience(TrialExperienceCommand trialExperienceViewModel) { if (trialExperienceViewModel.Id == Guid.Empty || trialExperienceViewModel.Id == null) { var trialExperience = _mapper.Map(trialExperienceViewModel); trialExperience = await _repository.AddAsync(trialExperience); List criteriaList = new List(); trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria() { DoctorId = trialExperienceViewModel.DoctorId, //EvaluationCriteria = t.EvaluationCriteria, EvaluationCriteriaId = t, TrialExperienceId = trialExperience.Id })); await _repository.AddRangeAsync(criteriaList); var success = await _repository.SaveChangesAsync(); return ResponseOutput.Result(success, trialExperience.Id); } else { var needUpdate = await _trialExperienceRepository.FirstOrDefaultAsync(t => t.Id == trialExperienceViewModel.Id); if (needUpdate == null) return Null404NotFound(needUpdate); _mapper.Map(trialExperienceViewModel, needUpdate); await _repository.UpdateAsync(needUpdate); await _repository.BatchDeleteAsync(t => t.TrialExperienceId == needUpdate.Id); List criteriaList = new List(); trialExperienceViewModel.EvaluationCriteriaIdList.ForEach(t => criteriaList.Add(new TrialExperienceCriteria() { DoctorId = trialExperienceViewModel.DoctorId, EvaluationCriteriaId = t, TrialExperienceId = needUpdate.Id })); await _repository.AddRangeAsync(criteriaList); var success = await _repository.SaveChangesAsync(); return ResponseOutput.Result(success, trialExperienceViewModel.Id); } } /// /// 删除临床经验 /// [HttpDelete, Route("{doctorId:guid}")] public async Task DeleteTrialExperience(Guid doctorId) { var success = await _repository.BatchDeleteAsync(o => o.Id == doctorId); return ResponseOutput.Result(success); } /// /// 更新-GCP和其他临床经验 /// /// /// [HttpPost] public async Task UpdateGcpExperience(GCPExperienceCommand updateGCPExperienceParam) { //_attachmentRepository.Delete(t => t.DoctorId == updateGCPExperienceParam.Id && t.Type == StaticData.GCP); var successs = await _repository.BatchUpdateAsync(o => o.Id == updateGCPExperienceParam.Id, u => new Doctor() { GCP = updateGCPExperienceParam.GCP, GCPId = updateGCPExperienceParam.GCP==0&&updateGCPExperienceParam.GCPId==null?Guid.Empty: updateGCPExperienceParam.GCPId!.Value }); if (updateGCPExperienceParam.GCP == 0 && updateGCPExperienceParam.GCPId != null) { await _repository.BatchDeleteAsync(a => a.Id == updateGCPExperienceParam.GCPId); } return ResponseOutput.Result(successs, updateGCPExperienceParam.GCPId.ToString()); } /// /// 更新其他技能经验 /// [HttpPost] public async Task UpdateOtherExperience(ClinicalExperienceCommand updateOtherClinicalExperience) { var success = await _repository.BatchUpdateAsync(o => o.Id == updateOtherClinicalExperience.DoctorId, u => new Doctor() { OtherClinicalExperience = updateOtherClinicalExperience.OtherClinicalExperience ?? string.Empty, OtherClinicalExperienceCN = updateOtherClinicalExperience.OtherClinicalExperienceCN ?? string.Empty }); return ResponseOutput.Result(success); } } }