You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
316 lines
15 KiB
316 lines
15 KiB
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Org.BouncyCastle.Asn1.Ocsp;
|
|
using Shentun.Peis.ChargeRequestAsbitems;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.LisRequests;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.PatientRegisters;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.Domain.Repositories;
|
|
using Volo.Abp.Uow;
|
|
|
|
namespace Shentun.Peis.ChargeRequests
|
|
{
|
|
[ApiExplorerSettings(GroupName = "Work")]
|
|
[Authorize]
|
|
public class ChargeRequestAppService : ApplicationService
|
|
{
|
|
private readonly IRepository<ChargeRequest, Guid> _chargeRequestRepository;
|
|
private readonly IRepository<ChargeRequestAsbitem, Guid> _chargeRequestAsbitemRepository;
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
|
|
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
|
|
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
|
|
private readonly ChargeRequestManager _chargeRequestManager;
|
|
private readonly ChargeRequestAsbitemManager _chargeRequestAsbitemManager;
|
|
private readonly IUnitOfWorkManager _unitOfWorkManager;
|
|
private readonly IRepository<ThirdInterface, Guid> _thirdInterfaceRepository;
|
|
|
|
public ChargeRequestAppService(
|
|
IRepository<ChargeRequest, Guid> chargeRequestRepository,
|
|
IRepository<ChargeRequestAsbitem, Guid> chargeRequestAsbitemRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
|
|
IRepository<Asbitem, Guid> asbitemRepository,
|
|
ChargeRequestManager chargeRequestManager,
|
|
ChargeRequestAsbitemManager chargeRequestAsbitemManager,
|
|
IUnitOfWorkManager unitOfWorkManager,
|
|
IRepository<ThirdInterface, Guid> thirdInterfaceRepository)
|
|
{
|
|
_chargeRequestRepository = chargeRequestRepository;
|
|
_chargeRequestAsbitemRepository = chargeRequestAsbitemRepository;
|
|
_patientRegisterRepository = patientRegisterRepository;
|
|
_registerCheckRepository = registerCheckRepository;
|
|
_registerCheckAsbitemRepository = registerCheckAsbitemRepository;
|
|
_chargeRequestManager = chargeRequestManager;
|
|
_chargeRequestAsbitemManager = chargeRequestAsbitemManager;
|
|
_unitOfWorkManager = unitOfWorkManager;
|
|
_asbitemRepository = asbitemRepository;
|
|
_thirdInterfaceRepository = thirdInterfaceRepository;
|
|
}
|
|
/// <summary>
|
|
/// 创建申请单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/ChargeRequest/Create")]
|
|
public async Task<ChargeRequestDto> CreateAsync(CreateChargeRequestDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
|
|
var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
|
|
if (patientRegisterEnt == null)
|
|
throw new UserFriendlyException("人员不存在");
|
|
|
|
var isThirdInterface = await _thirdInterfaceRepository.CountAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest
|
|
&& o.MedicalCenterId == patientRegisterEnt.MedicalCenterId && o.IsActive == 'Y');
|
|
|
|
if (isThirdInterface == 0)
|
|
return null;
|
|
|
|
var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
|
|
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
|
|
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync()
|
|
on registerCheckAsbitem.AsbitemId equals asbitem.Id
|
|
where registerCheck.PatientRegisterId == input.PatientRegisterId &&
|
|
input.RegisterCheckAsbitems.Select(o => o.RegisterCheckAsbitemId)
|
|
.Contains(registerCheckAsbitem.Id)
|
|
select new
|
|
{
|
|
registerCheckAsbitem,
|
|
asbitem
|
|
}).ToList();
|
|
var chargeRequestSource = new ChargeRequest()
|
|
{
|
|
PatientRegisterId = input.PatientRegisterId
|
|
};
|
|
var chargeRequest = await _chargeRequestManager.CreateAsync(chargeRequestSource);
|
|
//更新登记组合项目
|
|
foreach (var item in list)
|
|
{
|
|
if (item.registerCheckAsbitem.ChargeRequestId != null)
|
|
{
|
|
var haveChargeRequest = await _chargeRequestRepository.GetAsync((Guid)item.registerCheckAsbitem.ChargeRequestId);
|
|
if (haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.ChargeRequest ||
|
|
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.CancelChargeRequest ||
|
|
haveChargeRequest.ChargeRequestFlag == ChargeRequestFlag.RefundRequest)
|
|
{
|
|
throw new UserFriendlyException($"{item.asbitem.DisplayName}已经处于收费、作废、退费申请状态");
|
|
}
|
|
}
|
|
item.registerCheckAsbitem.ChargeRequestId = chargeRequest.Id;
|
|
await _registerCheckAsbitemRepository.UpdateAsync(item.registerCheckAsbitem);
|
|
}
|
|
//插入申请单信息
|
|
chargeRequest = await _chargeRequestRepository.InsertAsync(chargeRequest);
|
|
foreach (var item in list)
|
|
{
|
|
var chargeRequestAsbitemSource = new ChargeRequestAsbitem()
|
|
{
|
|
ChargeRequestId = chargeRequest.Id,
|
|
AsbitemId = item.registerCheckAsbitem.AsbitemId,
|
|
RegisterCheckAsbitemId = item.registerCheckAsbitem.Id,
|
|
Amount = item.registerCheckAsbitem.Amount,
|
|
ChargePrice = item.registerCheckAsbitem.ChargePrice,
|
|
IsCharge = 'N'
|
|
};
|
|
var chargeRequestAsbitem = await _chargeRequestAsbitemManager.CreateAsync(chargeRequestAsbitemSource);
|
|
await _chargeRequestAsbitemRepository.InsertAsync(chargeRequestAsbitem);
|
|
}
|
|
await _unitOfWorkManager.Current.SaveChangesAsync();
|
|
await _unitOfWorkManager.Current.CompleteAsync();
|
|
//await UnitOfWorkManager.Current.SaveChangesAsync();
|
|
//await UnitOfWorkManager.Current.CompleteAsync();
|
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
|
|
{
|
|
await _chargeRequestManager.SendThirChargeRequestAsync(chargeRequest.Id, "SendChargeRequestAsync");
|
|
await unitOfWork.CompleteAsync();
|
|
}
|
|
|
|
|
|
ChargeRequestDto result = new ChargeRequestDto();
|
|
result.Id = chargeRequest.Id;
|
|
result.ChargeRequestNo = chargeRequest.ChargeRequestNo;
|
|
return result;
|
|
}
|
|
/// <summary>
|
|
/// 作废申请单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/ChargeRequest/CancelChargeRequest")]
|
|
public async Task<ChargeRequestDto> CancelChargeRequestAsync(ChargeRequestIdInputDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
var chargeRequest = await _chargeRequestRepository.GetAsync(input.ChargeRequestId);
|
|
if (chargeRequest.ChargeRequestFlag != ChargeRequestFlag.ChargeRequest)
|
|
{
|
|
throw new UserFriendlyException("状态不是收费申请,不允许作废申请");
|
|
}
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
|
|
{
|
|
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "CancelChargeRequestAsync");
|
|
await unitOfWork.CompleteAsync();
|
|
}
|
|
|
|
|
|
|
|
ChargeRequestDto result = new ChargeRequestDto();
|
|
|
|
return result;
|
|
}
|
|
/// <summary>
|
|
/// 退费申请单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/ChargeRequest/RefundChargeRequest")]
|
|
public async Task<ChargeRequestDto> ReundChargeRequestAsync(ChargeRequestIdInputDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
var chargeRequest = await _chargeRequestRepository.GetAsync(input.ChargeRequestId);
|
|
if (chargeRequest.ChargeRequestFlag != ChargeRequestFlag.AlreadyCharge)
|
|
{
|
|
throw new UserFriendlyException("状态不是已收费,不允许退费申请");
|
|
}
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
|
|
{
|
|
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "RefundRequestAsync");
|
|
await unitOfWork.CompleteAsync();
|
|
}
|
|
|
|
|
|
|
|
ChargeRequestDto result = new ChargeRequestDto();
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 同步收费状态
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/ChargeRequest/SyncChargeRequestFlagFromInterface")]
|
|
public async Task<ChargeRequestDto> SyncChargeRequestFlagFromInterfaceAsync(ChargeRequestIdInputDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
var chargeRequest = await _chargeRequestRepository.GetAsync(input.ChargeRequestId);
|
|
|
|
if (chargeRequest.ChargeRequestFlag != ChargeRequestFlag.RefundRequest)
|
|
{
|
|
throw new UserFriendlyException("状态不是退费申请,不允许同步");
|
|
}
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
|
|
{
|
|
await _chargeRequestManager.SendThirChargeRequestAsync(input.ChargeRequestId, "SyncChargeRequestFlagFromInterfaceAsync");
|
|
await unitOfWork.CompleteAsync();
|
|
}
|
|
|
|
|
|
|
|
ChargeRequestDto result = new ChargeRequestDto();
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/ChargeRequest/GetChargeRequestsByPatientRegisterId")]
|
|
public async Task<List<ChargeRequestDto>> GetChargeRequestsByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
|
|
//var patientRegister = _patientRegisterRepository.GetAsync(input.PatientRegisterId);
|
|
var list = (from chargeRequest in await _chargeRequestRepository.GetQueryableAsync()
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
on chargeRequest.PatientRegisterId equals patientRegister.Id
|
|
join chargeRequestAsbitem in await _chargeRequestAsbitemRepository.GetQueryableAsync()
|
|
on chargeRequest.Id equals chargeRequestAsbitem.ChargeRequestId
|
|
where patientRegister.Id == input.PatientRegisterId
|
|
select new
|
|
{
|
|
chargeRequest,
|
|
chargeRequestAsbitem
|
|
}).ToList();
|
|
var result = list.GroupBy(o => o.chargeRequest).Select(o => new ChargeRequestDto()
|
|
{
|
|
Id = o.First().chargeRequest.Id,
|
|
ChargeRequestNo = o.First().chargeRequest.ChargeRequestNo,
|
|
ChargeRequestFlag = o.First().chargeRequest.ChargeRequestFlag,
|
|
HisChargeNo = o.First().chargeRequest.HisChargeNo,
|
|
Charges = o.Sum(o => o.chargeRequestAsbitem.Amount * o.chargeRequestAsbitem.ChargePrice),
|
|
CreationTime = o.First().chargeRequest.CreationTime,
|
|
|
|
}).OrderByDescending(o => o.CreationTime).ToList();
|
|
return result;
|
|
}
|
|
|
|
[HttpPost("api/app/ChargeRequest/GetChargeRequestAsbitemsByChargeRequestId")]
|
|
public async Task<List<ChargeRequestAsbitemDto>> GetChargeRequestAsbitemsByChargeRequestIdAsync(ChargeRequestIdInputDto input)
|
|
{
|
|
if (input == null)
|
|
{
|
|
throw new UserFriendlyException("input参数不能为空");
|
|
}
|
|
|
|
//var patientRegister = _patientRegisterRepository.GetAsync(input.PatientRegisterId);
|
|
var list = (from chargeRequest in await _chargeRequestRepository.GetQueryableAsync()
|
|
join chargeRequestAsbitem in await _chargeRequestAsbitemRepository.GetQueryableAsync()
|
|
on chargeRequest.Id equals chargeRequestAsbitem.ChargeRequestId
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync()
|
|
on chargeRequestAsbitem.AsbitemId equals asbitem.Id
|
|
where chargeRequest.Id == input.ChargeRequestId
|
|
select new
|
|
{
|
|
chargeRequest,
|
|
chargeRequestAsbitem,
|
|
asbitem
|
|
}).ToList();
|
|
var result = list.Select(o => new ChargeRequestAsbitemDto()
|
|
{
|
|
AsbitemId = o.chargeRequest.Id,
|
|
AsbitemName = o.asbitem.DisplayName,
|
|
ChargePrice = o.chargeRequestAsbitem.ChargePrice,
|
|
Amount = o.chargeRequestAsbitem.Amount
|
|
|
|
|
|
}).ToList();
|
|
return result;
|
|
}
|
|
|
|
|
|
}
|
|
}
|