using IRaCIS.Application.Interfaces; using IRaCIS.Application.Contracts; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Application.Services { [ApiExplorerSettings(GroupName = "Institution")] public class CroService : BaseService, ICroService { private readonly IRepository<CRO> _croRepository; private readonly IRepository<Trial> _trialRepository; public CroService(IRepository<CRO> croRepository, IRepository<Trial> trialRepository) { _croRepository = croRepository; this._trialRepository = trialRepository; } /// <summary> 分页获取CRO列表 </summary> [HttpPost] public async Task<PageOutput<CROCompanyDTO>> GetCroList(CROCompanyQueryDTO croCompanySearchModel) { var croQueryable = _croRepository .WhereIf(!string.IsNullOrEmpty(croCompanySearchModel.CROName), t => t.CROName.Contains(croCompanySearchModel.CROName) || t.CRONameCN.Contains(croCompanySearchModel.CROName)) .WhereIf(!string.IsNullOrEmpty(croCompanySearchModel.CROCode), t => t.CROCode.Contains(croCompanySearchModel.CROCode)) .ProjectTo<CROCompanyDTO>(_mapper.ConfigurationProvider); return await croQueryable.ToPagedListAsync(croCompanySearchModel.PageIndex, croCompanySearchModel.PageSize, string.IsNullOrWhiteSpace(croCompanySearchModel.SortField) ? "CROName" : croCompanySearchModel.SortField, croCompanySearchModel.Asc); } /// <summary> 根据CRO 名称查询所有CRO 列表 </summary> public async Task<IEnumerable<CroSelectDTO>> GetAllCROList(Guid? trialId) { return await _croRepository .WhereIf(trialId == null, t => t.IsTrialLevel == false) .WhereIf(trialId != null, t => t.IsTrialLevel == false || t.TrialId == trialId) .ProjectTo<CroSelectDTO>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).ToListAsync(); } /// <summary> 添加CRO信息 </summary> public async Task<IResponseOutput> AddOrUpdateCro(CROCompanyDTO addCroCompanyCommand) { var exp = new EntityVerifyExp<CRO>() { VerifyExp = cro => (cro.CROName.Equals(addCroCompanyCommand.CROName) || cro.CRONameCN.Equals(addCroCompanyCommand.CRONameCN)) && cro.IsTrialLevel == false, //---已经存在同名的CRO,请确认。 VerifyMsg = _localizer["CRO_DupName"] }; var cro = await _croRepository.InsertOrUpdateAsync(addCroCompanyCommand, true, exp); return ResponseOutput.Ok(cro.Id.ToString()); } /// <summary> 删除CRO信息 </summary> [HttpDelete("{croCompanyId:guid}")] public async Task<IResponseOutput> DeleteCro(Guid cROCompanyId) { if (await _trialRepository.AnyAsync(t => t.CROId == cROCompanyId)) { //---该CRO已经参与项目,不能被删除。 return ResponseOutput.NotOk(_localizer["CRO_InProject"]); } //if (_userRepository.Find().Any(t => t.OrganizationId == cROCompanyId)) //{ // return ResponseOutput.NotOk("该CRO下存在用户,暂时无法删除。"); //} var success = await _croRepository.BatchDeleteNoTrackingAsync(x => x.Id == cROCompanyId); return ResponseOutput.Result(success); } } }