using AutoMapper; using AutoMapper.QueryableExtensions; using IRaCIS.Application.ExpressionExtend; using IRaCIS.Application.Interfaces; using IRaCIS.Application.ViewModels; using IRaCIS.Core.Application.Contracts.RequestAndResponse; using IRaCIS.Core.Domain.Interfaces; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Infra.Data.ExpressionExtend; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace IRaCIS.Application.Services { public class CroService : ICroService { private readonly ICRORepository _croRepository; private readonly ITrialRepository _trialRepository; private readonly IUserRepository _userRepository; private readonly IMapper _mapper; public CroService(ICRORepository croCompanyRepository, ITrialRepository trialRepository, IUserRepository userRepository,IMapper mapper) { _croRepository = croCompanyRepository; _trialRepository = trialRepository; _userRepository = userRepository; _mapper = mapper; } /// 分页获取CRO列表 public PageOutput GetCroList(CROCompanyQueryDTO croCompanySearchModel) { Expression> croLambda = x => true; if (!string.IsNullOrWhiteSpace(croCompanySearchModel.CROName.Trim())) { croLambda = croLambda.And(t => t.CROName.Contains(croCompanySearchModel.CROName.Trim())); } var croQueryable = _croRepository.Find(croLambda).ProjectTo(_mapper.ConfigurationProvider); var count = croQueryable.Count(); var propName = string.IsNullOrWhiteSpace(croCompanySearchModel.SortField) ? "Id" : croCompanySearchModel.SortField; croQueryable = croCompanySearchModel.Asc ? croQueryable.OrderBy(propName) : croQueryable.OrderByDescending(propName); croQueryable = croQueryable .Skip(((croCompanySearchModel.PageIndex - 1) * croCompanySearchModel.PageSize)) .Take(croCompanySearchModel.PageSize); var croList = croQueryable.ToList(); return new PageOutput(croCompanySearchModel.PageIndex, croCompanySearchModel.PageSize, count, croList); } /// 根据CRO 名称查询所有CRO 列表 public IEnumerable GetCroSearchList() { var croQueryable = _croRepository.GetAll().ProjectTo(_mapper.ConfigurationProvider); return croQueryable.ToList(); } /// 添加CRO信息 public IResponseOutput AddOrUpdateCro(CROCompanyDTO addCroCompanyViewModel, Guid userId) { if (addCroCompanyViewModel.Id == Guid.Empty||addCroCompanyViewModel.Id==null) { if (_croRepository.FindSingleOrDefault(t => t.CROName == addCroCompanyViewModel.CROName) != null) { return ResponseOutput.NotOk("Name repetition. "); } var temp = _mapper.Map(addCroCompanyViewModel); var cro = _croRepository.Add(temp); var success = _croRepository.SaveChanges(); return ResponseOutput.Result(success, cro.Id.ToString()); } else { var updateCroCompanyViewModel = addCroCompanyViewModel; if (_croRepository.FindSingleOrDefault(t => t.CROName == updateCroCompanyViewModel.CROName && t.Id != updateCroCompanyViewModel.Id) != null) { return ResponseOutput.NotOk("Name repetition. "); } var success = _croRepository.Update(t => t.Id == updateCroCompanyViewModel.Id, u => new CRO() { CROName = updateCroCompanyViewModel.CROName, CROCode = updateCroCompanyViewModel.CROCode, UpdateTime = DateTime.Now, UpdateUserId = userId }); return ResponseOutput.Result(success, success ? string.Empty : StaticData.AddFailed); } } /// 删除CRO信息 public IResponseOutput DeleteCro(Guid cROCompanyId) { if (_trialRepository.Find().Any(t => t.CROId == cROCompanyId)) { return ResponseOutput.NotOk("存在该CRO的项目,暂时无法删除。"); } if (_userRepository.Find().Any(t => t.OrganizationId == cROCompanyId)) { return ResponseOutput.NotOk("该CRO下存在用户,暂时无法删除。"); } var success = _croRepository.Delete(t => t.Id == cROCompanyId); return ResponseOutput.Result(success, success ? string.Empty : StaticData.DeleteFailed); } } }