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.Infra.Data.ExpressionExtend; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace IRaCIS.Application.Services { public class SponsorService : ISponsorService { private readonly ISponsorRepository _sponsorRepository; private readonly ITrialRepository _trialRepository; private readonly IMapper _mapper; private readonly IUserRepository _userRepository; public SponsorService(ISponsorRepository sponsorRepository, ITrialRepository trialRepository, IUserRepository userRepository, IMapper mapper) { _sponsorRepository = sponsorRepository; _trialRepository = trialRepository; _userRepository = userRepository; _mapper = mapper; } /// 分页获取申办方列表 public PageOutput GetSponsorList(SponsorQueryDTO sponsorSearchModel) { Expression> sponsorLambda = x => true; if (!string.IsNullOrWhiteSpace(sponsorSearchModel.SponsorName)) { sponsorLambda = sponsorLambda.And(t => t.SponsorName.Contains(sponsorSearchModel.SponsorName.Trim())); } var sponsorQueryable = _sponsorRepository.GetAll().Where(sponsorLambda).ProjectTo(_mapper.ConfigurationProvider); var count = sponsorQueryable.Count(); //处理排序字段 var propName = string.IsNullOrWhiteSpace(sponsorSearchModel.SortField) ? "Id" : sponsorSearchModel.SortField; //处理升序和降序 sponsorQueryable = sponsorSearchModel.Asc ? sponsorQueryable.OrderBy(propName) : sponsorQueryable.OrderByDescending(propName); //分页 sponsorQueryable = sponsorQueryable .Skip(((sponsorSearchModel.PageIndex - 1) * sponsorSearchModel.PageSize)) .Take(sponsorSearchModel.PageSize); //数据库查询 var sponsorList = sponsorQueryable.ToList(); return new PageOutput(sponsorSearchModel.PageIndex, sponsorSearchModel.PageSize, count, sponsorList); } /// 分页获取申办方列表 public IEnumerable GetSponsorSearchList() { //Expression> sponsorLambda = x => true; //if (!string.IsNullOrWhiteSpace(sponsorSearchModel.SponsorName)) //{ // sponsorLambda = sponsorLambda.And(t => t.SponsorName.Contains(sponsorSearchModel.SponsorName.Trim())); //} var sponsorQueryable = _sponsorRepository.GetAll().ProjectTo(_mapper.ConfigurationProvider); return sponsorQueryable.ToList(); } /// 添加申办方 public IResponseOutput AddOrUpdateSponsor(SponsorCommand addSponsorViewModel) { if (addSponsorViewModel.Id==Guid.Empty|| addSponsorViewModel.Id == null) { if (_sponsorRepository.FindSingleOrDefault(t => t.SponsorName == addSponsorViewModel.SponsorName) != null) { return ResponseOutput.NotOk("Name repetition. "); } var sponsor = _sponsorRepository.Add(_mapper.Map(addSponsorViewModel)); var success = _sponsorRepository.SaveChanges(); return ResponseOutput.Result(success, sponsor.Id.ToString()); } else { var updateSponsorViewModel = addSponsorViewModel; if (_sponsorRepository.FindSingleOrDefault(t => t.SponsorName == updateSponsorViewModel.SponsorName && t.Id != updateSponsorViewModel.Id) != null) { return ResponseOutput.NotOk("Name repetition. "); } var success = _sponsorRepository.Update(t => t.Id == updateSponsorViewModel.Id, u => new Sponsor() { SponsorName = updateSponsorViewModel.SponsorName }); return ResponseOutput.Result(success); } } /// 删除申办方 public IResponseOutput DeleteSponsor(Guid sponsorId) { if (_trialRepository.GetAll().Any(t => t.CROId == sponsorId)) { return ResponseOutput.NotOk("在项目表中已关联此项"); } if (_userRepository.Find().Any(t => t.OrganizationId == sponsorId)) { return ResponseOutput.NotOk("该申办方下存在用户,暂时无法删除。"); } var success = _sponsorRepository.Delete(t => t.Id == sponsorId); return ResponseOutput.Result(success); } } }