diff --git a/IRaCIS.Core.Application/Service/Institution/HospitalService.cs b/IRaCIS.Core.Application/Service/Institution/HospitalService.cs index 6ce0a8f22..e315983ed 100644 --- a/IRaCIS.Core.Application/Service/Institution/HospitalService.cs +++ b/IRaCIS.Core.Application/Service/Institution/HospitalService.cs @@ -3,19 +3,22 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Infrastructure; +using Microsoft.Data.Sqlite; namespace IRaCIS.Application.Services { - [ ApiExplorerSettings(GroupName = "Institution")] + [ApiExplorerSettings(GroupName = "Institution")] public class HospitalService : BaseService, IHospitalService { private readonly IRepository _hospitalRepository; private readonly IRepository _doctorRepository; + private readonly IRepository _siteRepository; - public HospitalService(IRepository hospitalRepository, IRepository doctorRepository) + public HospitalService(IRepository hospitalRepository, IRepository doctorRepository, IRepository siteRepository) { _hospitalRepository = hospitalRepository; - this._doctorRepository = doctorRepository; + _doctorRepository = doctorRepository; + _siteRepository = siteRepository; } /// 获取所有医院列表 @@ -38,15 +41,26 @@ namespace IRaCIS.Application.Services var exp1 = new EntityVerifyExp() { VerifyExp = x => x.SiteId == hospitalCommand.SiteId && hospitalCommand.SiteId != null, - //---已经存在同名的医院,请确认。 + //---当前中心已经添加到其他医院了。 VerifyMsg = _localizer["Hospital_SiteAdded"] }; - - var hospital = await _hospitalRepository.InsertOrUpdateAsync(hospitalCommand, true, exp,exp1); - + + var hospital = await _hospitalRepository.InsertOrUpdateAsync(hospitalCommand, true, exp, exp1); + + //手动解绑医院与site的关系 + if (hospitalCommand.SiteId == null && hospital.SiteId != null) + { + await _siteRepository.BatchUpdateNoTrackingAsync(t => t.Id == hospital.SiteId, u => new Site() { HospitalId = null }); + } + + //手动绑 + if (hospitalCommand.SiteId != null) + { + await _siteRepository.BatchUpdateNoTrackingAsync(t => t.Id == hospitalCommand.SiteId, u => new Site() { HospitalId = hospital.Id}); + } return ResponseOutput.Ok(hospital.Id.ToString()); - + } @@ -69,12 +83,12 @@ namespace IRaCIS.Application.Services /// 分页获取医院列表 [HttpPost] - public async Task> GetHospitalPageList(HospitalQueryDTO hospitalSearchModel) + public async Task> GetHospitalPageList(HospitalQueryDTO hospitalSearchModel) { var hospitalQueryable = _hospitalRepository - .WhereIf(hospitalSearchModel.HospitalName!=null, t => t.HospitalName.Contains(hospitalSearchModel.HospitalName!) || t.HospitalNameCN.Contains(hospitalSearchModel.HospitalName!)) + .WhereIf(hospitalSearchModel.HospitalName != null, t => t.HospitalName.Contains(hospitalSearchModel.HospitalName!) || t.HospitalNameCN.Contains(hospitalSearchModel.HospitalName!)) .WhereIf(hospitalSearchModel.City != null, t => t.City.Contains(hospitalSearchModel.City!) || t.HospitalNameCN.Contains(hospitalSearchModel.City!)) .WhereIf(hospitalSearchModel.Province != null, t => t.Province.Contains(hospitalSearchModel.Province!) || t.HospitalNameCN.Contains(hospitalSearchModel.Province!)) .ProjectTo(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Institution/SiteService.cs b/IRaCIS.Core.Application/Service/Institution/SiteService.cs index 9d77f48ed..79c43f703 100644 --- a/IRaCIS.Core.Application/Service/Institution/SiteService.cs +++ b/IRaCIS.Core.Application/Service/Institution/SiteService.cs @@ -4,6 +4,7 @@ using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; using Medallion.Threading; +using IRaCIS.Core.Domain.Models; namespace IRaCIS.Application.Services { @@ -13,12 +14,14 @@ namespace IRaCIS.Application.Services private readonly IRepository _siteRepository; private readonly IRepository _trialSiteUserRepository; private readonly IDistributedLockProvider _distributedLockProvider; + private readonly IRepository _hospitalRepository; - public SiteService(IRepository siteRepository, IRepository trialSiteUserRepository, IDistributedLockProvider distributedLockProvider) + public SiteService(IRepository siteRepository, IRepository trialSiteUserRepository, IDistributedLockProvider distributedLockProvider, IRepository hospitalRepository) { _siteRepository = siteRepository; _trialSiteUserRepository = trialSiteUserRepository; _distributedLockProvider = distributedLockProvider; + _hospitalRepository= hospitalRepository; } /// 分页获取研究中心列表 @@ -72,6 +75,18 @@ namespace IRaCIS.Application.Services var site = await _siteRepository.InsertOrUpdateAsync(siteCommand, true, exp); + //手动解绑医院与site的关系 + if (siteCommand.HospitalId == null && site.HospitalId != null) + { + await _hospitalRepository.BatchUpdateNoTrackingAsync(t => t.Id == site.HospitalId, u => new Hospital() { SiteId = null }); + } + + //手动绑 + if(siteCommand.HospitalId != null) + { + await _hospitalRepository.BatchUpdateNoTrackingAsync(t => t.Id == siteCommand.HospitalId, u => new Hospital() { SiteId = site.Id }); + } + return ResponseOutput.Ok(site.Id.ToString()); } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs index e65a83799..622018b28 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -441,8 +441,8 @@ namespace IRaCIS.Core.Application.Contracts #endregion public int? TotalCount => TrialWaitSignDocCount + SysWaitSignDocCount - + PM_SiteSurveryCount + PM_CheckCount + PM_ReviewerSelectCount + PM_ReReadingApprovalCount + PM_ClinicalDataCount - + CRC_ImageSubmitCount + CRC_ImageQuestionCount + CRC_CheckQuestionCount + CRC_ImageReUploadCount + CRC_ClinicalDataTobeDoneCount + CRC_ClinialDataTobeConfirmCount + + PM_SiteSurveryCount + PM_CheckCount + PM_ReviewerSelectCount + PM_ReReadingApprovalCount /*+ PM_ClinicalDataCount*/ + + CRC_ImageSubmitCount + CRC_ImageQuestionCount + CRC_CheckQuestionCount + CRC_ImageReUploadCount /*+ CRC_ClinicalDataTobeDoneCount + CRC_ClinialDataTobeConfirmCount*/ + SPM_SiteSurveryCount + SPM_ReviewerApprovalCount + SPM_ReReadingApprovalCount + IQC_IamgeQCCount + IQC_QCQuestionCount + IR_IamgeWaitReadingCount + IR_MedicalReviewCount