117 lines
4.9 KiB
C#
117 lines
4.9 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.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);
|
||
}
|
||
}
|
||
} |