126 lines
5.5 KiB
C#
126 lines
5.5 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 HospitalService : IHospitalService
|
|
{
|
|
private readonly IHospitalRepository _hospitalRepository;
|
|
private readonly IDoctorRepository _doctorRepository;
|
|
private readonly IUserRepository _userRepository;
|
|
private readonly IMapper _mapper;
|
|
|
|
public HospitalService(IHospitalRepository hospitalRepository, IDoctorRepository doctorRepository,
|
|
IUserRepository userRepository, IMapper mapper)
|
|
{
|
|
_hospitalRepository = hospitalRepository;
|
|
_doctorRepository = doctorRepository;
|
|
_userRepository = userRepository;
|
|
_mapper = mapper;
|
|
}
|
|
|
|
/// <summary> 获取所有医院列表 </summary>
|
|
public IEnumerable<HospitalDTO> GetHospitalList()
|
|
{
|
|
return _hospitalRepository.GetAll().ProjectTo<HospitalDTO>(_mapper.ConfigurationProvider);
|
|
}
|
|
|
|
/// <summary> 添加医院 </summary>
|
|
public IResponseOutput AddOrUpdateHospital(HospitalCommand addViewModel)
|
|
{
|
|
if (addViewModel.Id == Guid.Empty || addViewModel.Id == null)
|
|
{
|
|
if (_hospitalRepository.GetAll().FirstOrDefault(t => t.HospitalName == addViewModel.HospitalName) != null)
|
|
{
|
|
return ResponseOutput.NotOk("Same hospital name already exist.");
|
|
}
|
|
var hospital = _hospitalRepository.Add(_mapper.Map<Hospital>(addViewModel));
|
|
var success = _hospitalRepository.SaveChanges();
|
|
|
|
return ResponseOutput.Result(success, hospital.Id.ToString());
|
|
}
|
|
else
|
|
{
|
|
var updateViewModel = addViewModel;
|
|
if (_hospitalRepository.FindSingleOrDefault(t => t.HospitalName == updateViewModel.HospitalName && t.Id != updateViewModel.Id) != null)
|
|
{
|
|
return ResponseOutput.NotOk("Same hospital name already exist.");
|
|
}
|
|
var success = _hospitalRepository.Update(t => t.Id == updateViewModel.Id, u => new Hospital()
|
|
{
|
|
City = updateViewModel.City,
|
|
Country = updateViewModel.Country,
|
|
HospitalName = updateViewModel.HospitalName,
|
|
Province = updateViewModel.Province,
|
|
UniversityAffiliated = updateViewModel.UniversityAffiliated
|
|
});
|
|
|
|
return ResponseOutput.Result(success, success ? string.Empty : StaticData.UpdateFailed);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary> 删除医院信息 </summary>
|
|
public IResponseOutput DeleteHospital(Guid hospitalId)
|
|
{
|
|
if (_doctorRepository.GetAll().FirstOrDefault(t => t.Id == hospitalId) != null)
|
|
{
|
|
return ResponseOutput.NotOk("医生信息表已关联此医院");
|
|
}
|
|
if (_userRepository.Find().Any(t => t.OrganizationId == hospitalId))
|
|
{
|
|
return ResponseOutput.NotOk("该医院下存在用户,暂时无法删除。");
|
|
}
|
|
|
|
var success = _hospitalRepository.Delete(t => t.Id == hospitalId);
|
|
|
|
return ResponseOutput.Result(success, success ? string.Empty : StaticData.DeleteFailed);
|
|
}
|
|
|
|
/// <summary> 分页获取医院列表 </summary>
|
|
public PageOutput<HospitalDTO> GetHospitalPageList(HospitalQueryDTO hospitalSearchModel)
|
|
{
|
|
Expression<Func<Hospital, bool>> hospitalLambda = x => true;
|
|
|
|
if (hospitalSearchModel.HospitalName.Trim() != string.Empty)
|
|
{
|
|
hospitalLambda = hospitalLambda.And(t => t.HospitalName.Contains(hospitalSearchModel.HospitalName.Trim()));
|
|
}
|
|
if (hospitalSearchModel.City.Trim() != string.Empty)
|
|
{
|
|
hospitalLambda = hospitalLambda.And(t => t.City.Contains(hospitalSearchModel.City.Trim()));
|
|
}
|
|
if (hospitalSearchModel.Province.Trim() != string.Empty)
|
|
{
|
|
hospitalLambda = hospitalLambda.And(t => t.Province.Contains(hospitalSearchModel.Province.Trim()));
|
|
}
|
|
|
|
var hospitalQueryable =
|
|
_hospitalRepository.GetAll().Where(hospitalLambda).ProjectTo<HospitalDTO>(_mapper.ConfigurationProvider);
|
|
var count = hospitalQueryable.Count();
|
|
var propName = string.IsNullOrWhiteSpace(hospitalSearchModel.SortField) ? "HospitalName" : hospitalSearchModel.SortField;
|
|
hospitalQueryable = hospitalSearchModel.Asc
|
|
? hospitalQueryable.OrderBy(propName)
|
|
: hospitalQueryable.OrderByDescending(propName);
|
|
|
|
hospitalQueryable = hospitalQueryable
|
|
.Skip((hospitalSearchModel.PageIndex - 1) * hospitalSearchModel.PageSize)
|
|
.Take(hospitalSearchModel.PageSize);
|
|
var userList = hospitalQueryable.ToList();
|
|
return new PageOutput<HospitalDTO>(hospitalSearchModel.PageIndex, hospitalSearchModel.PageSize, count, userList);
|
|
}
|
|
}
|
|
} |