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

117 lines
4.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
/// <summary> 分页获取CRO列表 </summary>
public PageOutput<CROCompanyDTO> GetCroList(CROCompanyQueryDTO croCompanySearchModel)
{
Expression<Func<CRO, bool>> 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<CROCompanyDTO>(_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<CROCompanyDTO>(croCompanySearchModel.PageIndex,
croCompanySearchModel.PageSize, count, croList);
}
/// <summary> 根据CRO 名称查询所有CRO 列表 </summary>
public IEnumerable<CroSelectDTO> GetCroSearchList()
{
var croQueryable = _croRepository.GetAll().ProjectTo<CroSelectDTO>(_mapper.ConfigurationProvider);
return croQueryable.ToList();
}
/// <summary> 添加CRO信息 </summary>
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<CRO>(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);
}
}
/// <summary> 删除CRO信息 </summary>
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);
}
}
}