using IRaCIS.Application.Contracts; using IRaCIS.Application.Interfaces; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Core.Application.Service { [ApiExplorerSettings(GroupName = "Institution")] public class CroService(IRepository _croRepository, IRepository _trialRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, ICroService { /// 分页获取CRO列表 [HttpPost] public async Task> GetCroList(CROCompanyQueryDTO inQuery) { var croQueryable = _croRepository .WhereIf(!string.IsNullOrEmpty(inQuery.CROName), t => t.CROName.Contains(inQuery.CROName) || t.CRONameCN.Contains(inQuery.CROName)) .WhereIf(!string.IsNullOrEmpty(inQuery.CROCode), t => t.CROCode.Contains(inQuery.CROCode)) .ProjectTo(_mapper.ConfigurationProvider); return await croQueryable.ToPagedListAsync(inQuery); } /// 根据CRO 名称查询所有CRO 列表 public async Task> GetAllCROList(Guid? trialId) { return await _croRepository .WhereIf(trialId == null, t => t.IsTrialLevel == false) .WhereIf(trialId != null, t => t.IsTrialLevel == false || t.TrialId == trialId) .ProjectTo(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).ToListAsync(); } /// 添加CRO信息 public async Task AddOrUpdateCro(CROCompanyDTO addCroCompanyCommand) { var exp = new EntityVerifyExp() { 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()); } /// 删除CRO信息 [HttpDelete("{croCompanyId:guid}")] public async Task DeleteCro(Guid cROCompanyId) { if (await _trialRepository.AnyAsync(t => t.CROId == cROCompanyId)) { //---该CRO已经参与项目,不能被删除。 return ResponseOutput.NotOk(_localizer["CRO_InProject"]); } //if (_userRoleRepository.Find().Any(t => t.OrganizationId == cROCompanyId)) //{ // return ResponseOutput.NotOk("该CRO下存在用户,暂时无法删除。"); //} var success = await _croRepository.BatchDeleteNoTrackingAsync(x => x.Id == cROCompanyId); return ResponseOutput.Result(success); } } }