CostCalculationItem/IRaCIS.Core.Application/Institution/SponsorService.cs

118 lines
5.1 KiB
C#

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;
}
/// <summary> 分页获取申办方列表 </summary>
public PageOutput<SponsorDTO> GetSponsorList(SponsorQueryDTO sponsorSearchModel)
{
Expression<Func<Sponsor, bool>> 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<SponsorDTO>(_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<SponsorDTO>(sponsorSearchModel.PageIndex,
sponsorSearchModel.PageSize, count, sponsorList);
}
/// <summary> 分页获取申办方列表 </summary>
public IEnumerable<SponsorSelectDTO> GetSponsorSearchList()
{
//Expression<Func<Sponsor, bool>> sponsorLambda = x => true;
//if (!string.IsNullOrWhiteSpace(sponsorSearchModel.SponsorName))
//{
// sponsorLambda = sponsorLambda.And(t => t.SponsorName.Contains(sponsorSearchModel.SponsorName.Trim()));
//}
var sponsorQueryable = _sponsorRepository.GetAll().ProjectTo<SponsorSelectDTO>(_mapper.ConfigurationProvider);
return sponsorQueryable.ToList();
}
/// <summary> 添加申办方 </summary>
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<Sponsor>(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);
}
}
/// <summary> 删除申办方 </summary>
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);
}
}
}