irc-netcore-api/IRaCIS.Core.Application/Service/Financial/ReviewerPayInfoService.cs

145 lines
7.4 KiB
C#
Raw 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 IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using System.Linq.Expressions;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Application.Services
{
[ ApiExplorerSettings(GroupName = "Financial")]
public class ReviewerPayInfoService : BaseService, IReviewerPayInfoService
{
private readonly IRepository<ReviewerPayInformation> _doctorPayInfoRepository;
private readonly IRepository<Doctor> _doctorRepository;
private readonly IRepository<RankPrice> _rankPriceRepository;
private readonly IRepository<Hospital> _hospitalRepository;
public ReviewerPayInfoService(IRepository<Doctor> doctorRepository, IRepository<ReviewerPayInformation> doctorPayInfoRepository,
IRepository<RankPrice> rankPriceRepository, IRepository<Hospital> hospitalRepository, IMapper mapper)
{
_doctorPayInfoRepository = doctorPayInfoRepository;
_doctorRepository = doctorRepository;
_rankPriceRepository = rankPriceRepository;
_hospitalRepository = hospitalRepository;
}
[NonDynamicMethod]
public async Task<IResponseOutput> AddOrUpdateReviewerPayInfo(ReviewerPayInfoCommand addOrUpdateModel, Guid userId)
{
var success = false;
var doctorPayInfoExistedItem = await _doctorPayInfoRepository.FirstOrDefaultAsync(u => u.DoctorId == addOrUpdateModel.DoctorId);
if (doctorPayInfoExistedItem == null)//insert
{
await _doctorPayInfoRepository.InsertFromDTOAsync(addOrUpdateModel);
}
else//update
{
await _doctorPayInfoRepository.UpdateFromDTOAsync(addOrUpdateModel);
}
success = await _doctorPayInfoRepository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
/// <summary>
/// 获取医生支付信息列表
/// </summary>
[HttpPost]
public async Task<PageOutput<DoctorPayInfoQueryListDTO>> GetReviewerPayInfoList(DoctorPaymentInfoQueryDTO queryParam)
{
var doctorQueryable = from doctor in _doctorRepository.AsQueryable()
.WhereIf(queryParam.HospitalId != null, o => o.HospitalId == queryParam.HospitalId)
.WhereIf(!string.IsNullOrEmpty(queryParam.SearchName),
u => u.ChineseName.Contains(queryParam.SearchName)|| (u.LastName+ u.FirstName).Contains(queryParam.SearchName))
join hospitalItem in _hospitalRepository.AsQueryable() on doctor.HospitalId equals hospitalItem.Id into gt
from hospital in gt.DefaultIfEmpty()
join trialPayInfo in _doctorPayInfoRepository.Where()
on doctor.Id equals trialPayInfo.DoctorId into payInfo
from doctorPayInfo in payInfo.DefaultIfEmpty()
join rankPrice in _rankPriceRepository.Where()
on doctorPayInfo.RankId equals rankPrice.Id into rankPriceInfo
from rankPrice in rankPriceInfo.DefaultIfEmpty()
select new DoctorPayInfoQueryListDTO
{
//Id = doctorPayInfo.Id,
DoctorId = doctor.Id,
Code = doctor.ReviewerCode,
LastName = doctor.LastName,
FirstName = doctor.FirstName,
ChineseName = doctor.ChineseName,
Phone = doctor.Phone,
DoctorNameInBank = doctorPayInfo.DoctorNameInBank,
IDCard = doctorPayInfo.IDCard,
BankCardNumber = doctorPayInfo.BankCardNumber,
BankName = doctorPayInfo.BankName,
RankId = doctorPayInfo.RankId,
RankName = rankPrice.RankName,
Additional = doctorPayInfo.Additional,
Hospital = hospital.HospitalName,
CreateTime = doctor.CreateTime
};
return await doctorQueryable.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, "Code", queryParam.Asc);
}
/// <summary>
/// 根据医生Id获取支付信息
/// </summary>
/// <param name="doctorId">医生Id</param>
/// <returns></returns>
[HttpGet("{doctorId:guid}")]
public async Task<DoctorPayInfoQueryListDTO> GetReviewerPayInfo(Guid doctorId)
{
var doctorQueryable = from doctor in _doctorRepository.Where(u => u.Id == doctorId)
join trialPayInfo in _doctorPayInfoRepository.Where()
on doctor.Id equals trialPayInfo.DoctorId into payInfo
from doctorPayInfo in payInfo.DefaultIfEmpty()
join rankPrice in _rankPriceRepository.Where()
on doctorPayInfo.RankId equals rankPrice.Id into rankPriceInfo
from rankPrice in rankPriceInfo.DefaultIfEmpty()
select new DoctorPayInfoQueryListDTO
{
//Id = doctorPayInfo.Id,
DoctorId = doctor.Id,
Code = doctor.ReviewerCode,
LastName = doctor.LastName,
FirstName = doctor.FirstName,
ChineseName = doctor.ChineseName,
Phone = doctor.Phone,
DoctorNameInBank = doctorPayInfo.DoctorNameInBank,
IDCard = doctorPayInfo.IDCard,
BankCardNumber = doctorPayInfo.BankCardNumber,
BankName = doctorPayInfo.BankName,
RankId = doctorPayInfo.RankId,
RankName = rankPrice.RankName,
Additional = doctorPayInfo.Additional,
CreateTime = doctor.CreateTime
};
return (await doctorQueryable.FirstOrDefaultAsync()).IfNullThrowException();
}
/// <summary>
/// 根据rankId 获取ReviewerId用于当Rank的单价信息改变时触发费用计算
/// </summary>
/// <param name="rankId"></param>
/// <returns></returns>
public async Task<List<Guid>> GetReviewerIdByRankId(Guid rankId)
{
return await _doctorPayInfoRepository.Where(u => u.RankId == rankId).Select(u => u.DoctorId).ToListAsync();
}
}
}