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 _croRepository; private readonly IRepository _trialRepository; public CroService(IRepository croRepository, IRepository trialRepository) { _croRepository = croRepository; this._trialRepository = trialRepository; } /// 分页获取CRO列表 [HttpPost] public async Task> 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(_mapper.ConfigurationProvider); return await croQueryable.ToPagedListAsync(croCompanySearchModel.PageIndex, croCompanySearchModel.PageSize, string.IsNullOrWhiteSpace(croCompanySearchModel.SortField) ? "CROName": croCompanySearchModel.SortField, croCompanySearchModel.Asc); } /// 根据CRO 名称查询所有CRO 列表 public async Task> GetAllCROList() { return await _croRepository.ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } /// 添加CRO信息 public async Task AddOrUpdateCro(CROCompanyDTO addCroCompanyCommand) { var exp = new EntityVerifyExp() { VerifyExp = cro => cro.CROName.Equals(addCroCompanyCommand.CROName) , VerifyMsg = "已经存在同名的CRO,请确认。" }; 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)) { return ResponseOutput.NotOk("该CRO已经参与项目,不能被删除。"); } //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); } } }