|
|
|
@ -1,11 +1,17 @@ |
|
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Shentun.Peis.Charges; |
|
|
|
using Shentun.Peis.Enums; |
|
|
|
using Shentun.Peis.ItemTypes; |
|
|
|
using Shentun.Peis.Models; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using TencentCloud.Faceid.V20180301.Models; |
|
|
|
using TencentCloud.Mrs.V20200910.Models; |
|
|
|
using Volo.Abp.Application.Services; |
|
|
|
using Volo.Abp.Domain.Repositories; |
|
|
|
using Volo.Abp.Identity; |
|
|
|
using Volo.Abp.Users; |
|
|
|
@ -17,25 +23,40 @@ namespace Shentun.Peis.ChargeReports |
|
|
|
/// </summary>
|
|
|
|
[Authorize] |
|
|
|
[ApiExplorerSettings(GroupName = "Work")] |
|
|
|
public class ChargeReportAppService |
|
|
|
public class ChargeReportAppService : ApplicationService |
|
|
|
{ |
|
|
|
|
|
|
|
private readonly IRepository<Charge, Guid> _chargeRepository; |
|
|
|
private readonly IRepository<ChargePay> _chargePayRepository; |
|
|
|
private readonly IRepository<ChargeAsbitem, Guid> _chargeAsbitemRepository; |
|
|
|
private readonly IRepository<PayMode> _payModeRepository; |
|
|
|
private readonly IRepository<ChargeBack, Guid> _chargeBackRepository; |
|
|
|
private readonly IRepository<ChargeBackPay> _chargeBackPayRepository; |
|
|
|
private readonly IRepository<IdentityUser, Guid> _userRepository; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private readonly IRepository<Asbitem, Guid> _asbitemRepository; |
|
|
|
private readonly IRepository<InvoiceItemType, Guid> _invoiceItemTypeRepository; |
|
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository; |
|
|
|
private readonly IRepository<RegisterAsbitem, Guid> _registerAsbitemRepository; |
|
|
|
private readonly IRepository<CustomerOrgRegister, Guid> _customerOrgRegisterRepository; |
|
|
|
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository; |
|
|
|
private readonly IRepository<ItemType, Guid> _itemTypeRepository; |
|
|
|
private readonly ItemTypeManager _itemTypeManager; |
|
|
|
public ChargeReportAppService( |
|
|
|
IRepository<Charge, Guid> chargeRepository, |
|
|
|
IRepository<ChargeBack, Guid> chargeBackRepository, |
|
|
|
IRepository<ChargePay> chargePayRepository, |
|
|
|
IRepository<PayMode> payModeRepository, |
|
|
|
IRepository<ChargeBackPay> chargeBackPayRepository, |
|
|
|
IRepository<IdentityUser, Guid> userRepository |
|
|
|
IRepository<IdentityUser, Guid> userRepository, |
|
|
|
IRepository<ChargeAsbitem, Guid> chargeAsbitemRepository, |
|
|
|
IRepository<Asbitem, Guid> asbitemRepository, |
|
|
|
IRepository<InvoiceItemType, Guid> invoiceItemTypeRepository, |
|
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository, |
|
|
|
IRepository<RegisterAsbitem, Guid> registerAsbitemRepository, |
|
|
|
IRepository<CustomerOrgRegister, Guid> customerOrgRegisterRepository, |
|
|
|
IRepository<CustomerOrg, Guid> customerOrgRepository, |
|
|
|
IRepository<ItemType, Guid> itemTypeRepository, |
|
|
|
ItemTypeManager itemTypeManager |
|
|
|
) |
|
|
|
{ |
|
|
|
_chargeRepository = chargeRepository; |
|
|
|
@ -44,20 +65,677 @@ namespace Shentun.Peis.ChargeReports |
|
|
|
_payModeRepository = payModeRepository; |
|
|
|
_chargeBackPayRepository = chargeBackPayRepository; |
|
|
|
_userRepository = userRepository; |
|
|
|
_chargeAsbitemRepository = chargeAsbitemRepository; |
|
|
|
_asbitemRepository = asbitemRepository; |
|
|
|
_invoiceItemTypeRepository = invoiceItemTypeRepository; |
|
|
|
_patientRegisterRepository = patientRegisterRepository; |
|
|
|
_registerAsbitemRepository = registerAsbitemRepository; |
|
|
|
_customerOrgRegisterRepository = customerOrgRegisterRepository; |
|
|
|
_customerOrgRepository = customerOrgRepository; |
|
|
|
_itemTypeRepository = itemTypeRepository; |
|
|
|
_itemTypeManager = itemTypeManager; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 收费员收费报表 按支付方式
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/charge-report/get-toll-collector-fee-report-in-pay-mode")] |
|
|
|
public async Task<GetTollCollectorFeeReportInPayModeDto> GetTollCollectorFeeReportInPayModeAsync(GetTollCollectorFeeReportInPayModeRequestDto input) |
|
|
|
{ |
|
|
|
#region 收费
|
|
|
|
var chargeQuery = from a in await _chargeRepository.GetQueryableAsync() |
|
|
|
join b in await _chargePayRepository.GetQueryableAsync() on a.Id equals b.ChargeId |
|
|
|
join c in await _payModeRepository.GetQueryableAsync() on b.PayModeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
join d in await _userRepository.GetQueryableAsync() on a.CreatorId equals d.Id into dd |
|
|
|
from ad in dd.DefaultIfEmpty() |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
b, |
|
|
|
PayModeName = ac != null ? ac.DisplayName : "", |
|
|
|
UserName = ad != null ? ad.UserName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (input.UserIds.Any()) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => input.UserIds.Contains(m.a.CreatorId.Value)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
//收费归总
|
|
|
|
var chargeDetails = chargeQuery.GroupBy(g => g.a.CreatorId).Select(s => new GetChargeAndChargeBackSummary_ChargeDetail |
|
|
|
{ |
|
|
|
UserName = s.FirstOrDefault().UserName, |
|
|
|
PayModeDetails = s.GroupBy(gg => gg.b.PayModeId).Select(ss => new GetChargeAndChargeBackSummary_PayModeDetail |
|
|
|
{ |
|
|
|
PayModeName = ss.FirstOrDefault().PayModeName, |
|
|
|
Money = Math.Round(ss.Sum(sss => sss.b.ChargeMoney), 2) |
|
|
|
}).ToList() |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 退费
|
|
|
|
|
|
|
|
var chargeBackQuery = from a in await _chargeBackRepository.GetQueryableAsync() |
|
|
|
join b in await _chargeBackPayRepository.GetQueryableAsync() on a.Id equals b.ChargeBackId |
|
|
|
join c in await _payModeRepository.GetQueryableAsync() on b.PayModeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
join d in await _userRepository.GetQueryableAsync() on a.CreatorId equals d.Id into dd |
|
|
|
from ad in dd.DefaultIfEmpty() |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
b, |
|
|
|
PayModeName = ac != null ? ac.DisplayName : "", |
|
|
|
UserName = ad != null ? ad.UserName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (input.UserIds.Any()) |
|
|
|
{ |
|
|
|
chargeBackQuery = chargeBackQuery.Where(m => input.UserIds.Contains(m.a.CreatorId.Value)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeBackQuery = chargeBackQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
//收费归总
|
|
|
|
var chargeBackDetails = chargeBackQuery.GroupBy(g => g.a.CreatorId).Select(s => new GetChargeAndChargeBackSummary_ChargeBackDetail |
|
|
|
{ |
|
|
|
UserName = s.FirstOrDefault().UserName, |
|
|
|
PayModeDetails = s.GroupBy(gg => gg.b.PayModeId).Select(ss => new GetChargeAndChargeBackSummary_PayModeDetail |
|
|
|
{ |
|
|
|
PayModeName = ss.FirstOrDefault().PayModeName, |
|
|
|
Money = Math.Round(ss.Sum(sss => sss.b.BackMoeny), 2) |
|
|
|
}).ToList() |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 拼接收费数据
|
|
|
|
|
|
|
|
List<GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail> chargeAndChargeBackDetails = new List<GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail>(); |
|
|
|
|
|
|
|
//去重所有收费员
|
|
|
|
var userNameList = chargeDetails.ToList().Select(s => s.UserName).Union(chargeBackDetails.ToList().Select(s => s.UserName)); |
|
|
|
|
|
|
|
foreach (var userName in userNameList) |
|
|
|
{ |
|
|
|
//添加收费数据
|
|
|
|
foreach (var payMode in chargeDetails.Where(m => m.UserName == userName).FirstOrDefault().PayModeDetails) |
|
|
|
{ |
|
|
|
chargeAndChargeBackDetails.Add(new GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail |
|
|
|
{ |
|
|
|
ChargeName = userName, |
|
|
|
PayModeName = payMode.PayModeName, |
|
|
|
ChargeMoney = payMode.Money, |
|
|
|
ChargeBackMoney = 0 |
|
|
|
}); |
|
|
|
} |
|
|
|
//添加退费数据
|
|
|
|
foreach (var payMode in chargeBackDetails.Where(m => m.UserName == userName).FirstOrDefault().PayModeDetails) |
|
|
|
{ |
|
|
|
//支付方式是否已存在
|
|
|
|
var isPayModeName = chargeAndChargeBackDetails.Where(m => m.ChargeName == userName && m.PayModeName == payMode.PayModeName).FirstOrDefault(); |
|
|
|
if (isPayModeName != null) |
|
|
|
{ |
|
|
|
//收费处已存在
|
|
|
|
|
|
|
|
chargeAndChargeBackDetails.ForEach(m => |
|
|
|
{ |
|
|
|
if (m.PayModeName == payMode.PayModeName && m.ChargeName == userName) |
|
|
|
{ |
|
|
|
m.ChargeBackMoney = payMode.Money; |
|
|
|
m.TotalMoney = m.ChargeMoney - payMode.Money; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
chargeAndChargeBackDetails.Add(new GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail |
|
|
|
{ |
|
|
|
ChargeName = userName, |
|
|
|
PayModeName = payMode.PayModeName, |
|
|
|
ChargeMoney = 0, |
|
|
|
ChargeBackMoney = payMode.Money, |
|
|
|
TotalMoney = 0 - payMode.Money |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
string chargeDate = Convert.ToDateTime(input.StartDate).ToString("yyyy年MM月dd日") + "到" + Convert.ToDateTime(input.EndDate).ToString("yyyy年MM月dd日"); |
|
|
|
|
|
|
|
var tollCollectorFeeReportInPayModeDto = new GetTollCollectorFeeReportInPayModeDto |
|
|
|
{ |
|
|
|
ChargeDate = chargeDate, |
|
|
|
ChargeCount = chargeQuery.GroupBy(g => g.a.Id).Count(), |
|
|
|
ChargeBackCount = chargeBackQuery.GroupBy(g => g.a.Id).Count(), |
|
|
|
ChargeDetails = chargeAndChargeBackDetails, |
|
|
|
SumTotalMoney = chargeAndChargeBackDetails.Any() ? Math.Round(chargeAndChargeBackDetails.Sum(s => s.TotalMoney), 2) : 0 |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return tollCollectorFeeReportInPayModeDto; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 收费员收费报表 按发票类型
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/charge-report/get-toll-collector-fee-report-in-invoice-type")] |
|
|
|
public async Task<GetTollCollectorFeeReportInInvoiceTypeDto> GetTollCollectorFeeReportInInvoiceTypeAsync(GetTollCollectorFeeReportInInvoiceTypeRequestDto input) |
|
|
|
{ |
|
|
|
#region 收费
|
|
|
|
var chargeQuery = from a in await _chargeRepository.GetQueryableAsync() |
|
|
|
join b in await _chargeAsbitemRepository.GetQueryableAsync() on a.Id equals b.ChargeId |
|
|
|
join c in await _asbitemRepository.GetQueryableAsync() on b.AsbitemId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
join e in await _invoiceItemTypeRepository.GetQueryableAsync() on ac.InvoiceItemTypeId equals e.Id into ee |
|
|
|
from ae in ee.DefaultIfEmpty() |
|
|
|
join d in await _userRepository.GetQueryableAsync() on a.CreatorId equals d.Id into dd |
|
|
|
from ad in dd.DefaultIfEmpty() |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
b, |
|
|
|
ac, |
|
|
|
InvoiceItemTypeName = ae != null ? ae.DisplayName : "", |
|
|
|
UserName = ad != null ? ad.UserName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (input.UserIds.Any()) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => input.UserIds.Contains(m.a.CreatorId.Value)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
//收费归总
|
|
|
|
var chargeDetails = chargeQuery.GroupBy(g => g.ac.InvoiceItemTypeId).Select(s => new GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail |
|
|
|
{ |
|
|
|
InvoiceTypeName = s.FirstOrDefault().InvoiceItemTypeName, |
|
|
|
InvoiceTypeMoney = Math.Round(s.Sum(ss => ss.b.Amount * ss.b.ChargePrice), 2) |
|
|
|
}).ToList(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 退费
|
|
|
|
|
|
|
|
var chargeBackQuery = from a in await _chargeBackRepository.GetQueryableAsync() |
|
|
|
join b in await _chargeRepository.GetQueryableAsync() on a.ChargeId equals b.Id |
|
|
|
join c in await _chargeAsbitemRepository.GetQueryableAsync() on b.Id equals c.ChargeId |
|
|
|
join d in await _asbitemRepository.GetQueryableAsync() on c.AsbitemId equals d.Id into dd |
|
|
|
from ad in dd.DefaultIfEmpty() |
|
|
|
join e in await _invoiceItemTypeRepository.GetQueryableAsync() on ad.InvoiceItemTypeId equals e.Id into ee |
|
|
|
from ae in ee.DefaultIfEmpty() |
|
|
|
join f in await _userRepository.GetQueryableAsync() on a.CreatorId equals f.Id into ff |
|
|
|
from af in ff.DefaultIfEmpty() |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
c, |
|
|
|
ad, |
|
|
|
InvoiceItemTypeName = ae != null ? ae.DisplayName : "", |
|
|
|
UserName = af != null ? af.UserName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (input.UserIds.Any()) |
|
|
|
{ |
|
|
|
chargeBackQuery = chargeBackQuery.Where(m => input.UserIds.Contains(m.a.CreatorId.Value)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeBackQuery = chargeBackQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
//收费归总
|
|
|
|
var chargeBackDetails = chargeBackQuery.GroupBy(g => g.ad.InvoiceItemTypeId).Select(s => new GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail |
|
|
|
{ |
|
|
|
InvoiceTypeName = s.FirstOrDefault().InvoiceItemTypeName, |
|
|
|
InvoiceTypeMoney = Math.Round(s.Sum(ss => ss.c.Amount * ss.c.ChargePrice), 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
string chargeDate = Convert.ToDateTime(input.StartDate).ToString("yyyy年MM月dd日") + "到" + Convert.ToDateTime(input.EndDate).ToString("yyyy年MM月dd日"); |
|
|
|
|
|
|
|
//收款合计
|
|
|
|
decimal chargeTotalMoney = chargeDetails.Any() ? Math.Round(chargeDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0; |
|
|
|
|
|
|
|
//退费合计
|
|
|
|
decimal chargeBackTotalMoney = chargeBackDetails.Any() ? Math.Round(chargeBackDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0; |
|
|
|
|
|
|
|
var tollCollectorFeeReportInInvoiceTypeDto = new GetTollCollectorFeeReportInInvoiceTypeDto |
|
|
|
{ |
|
|
|
ChargeDate = chargeDate, |
|
|
|
ChargeCount = chargeQuery.GroupBy(g => g.a.Id).Count(), |
|
|
|
ChargeBackCount = chargeBackQuery.GroupBy(g => g.a.Id).Count(), |
|
|
|
ChargeDetails = new GetTollCollectorFeeReportInInvoiceType_ChargeDetail |
|
|
|
{ |
|
|
|
InvoiceTypeDetails = chargeDetails, |
|
|
|
TotalMoney = chargeTotalMoney |
|
|
|
}, |
|
|
|
ChargeBackDetails = new GetTollCollectorFeeReportInInvoiceType_ChargeBackDetail |
|
|
|
{ |
|
|
|
InvoiceTypeDetails = chargeBackDetails, |
|
|
|
TotalMoney = chargeBackTotalMoney |
|
|
|
}, |
|
|
|
SumTotalMoney = chargeTotalMoney - chargeBackTotalMoney |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
return tollCollectorFeeReportInInvoiceTypeDto; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 项目收费报表
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/charge-report/get-project-fees-report")] |
|
|
|
public async Task<GetProjectFeesReportDto> GetProjectFeesReportAsync(GetProjectFeesReportRequestDto input) |
|
|
|
{ |
|
|
|
|
|
|
|
#region 查询项目类别ID
|
|
|
|
List<Guid> itmeTypeIds = new List<Guid>(); |
|
|
|
|
|
|
|
if (input.ItemTypeId != null) |
|
|
|
{ |
|
|
|
itmeTypeIds = await _itemTypeManager.GetChildItemTypeIdsAsync(input.ItemTypeId.Value); |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 登记
|
|
|
|
var query = from a in await _registerAsbitemRepository.GetQueryableAsync() |
|
|
|
join b in await _asbitemRepository.GetQueryableAsync() on a.AsbitemId equals b.Id into bb |
|
|
|
from ab in bb.DefaultIfEmpty() |
|
|
|
join c in await _itemTypeRepository.GetQueryableAsync() on ab.ItemTypeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
where a.IsCharge == 'Y' |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
ab, |
|
|
|
ac, |
|
|
|
AsbitemName = ab != null ? ab.DisplayName : "", |
|
|
|
ItemTypeName = ac != null ? ac.DisplayName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (itmeTypeIds.Any()) |
|
|
|
{ |
|
|
|
query = query.Where(m => itmeTypeIds.Contains(m.ab.ItemTypeId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (input.Asbitems.Any()) |
|
|
|
{ |
|
|
|
query = query.Where(m => input.Asbitems.Contains(m.a.AsbitemId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
query = query.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//按项目类别分组
|
|
|
|
var itemTypeGroups = query.GroupBy(g => new { g.ab.ItemTypeId, g.a.AsbitemId }).Select(s => new GetProjectFeesReport_Detail |
|
|
|
{ |
|
|
|
ItemTypeId = s.Key.ItemTypeId, |
|
|
|
AsbitemId = s.Key.AsbitemId, |
|
|
|
ItemTypeName = s.FirstOrDefault().ItemTypeName, |
|
|
|
AsbitemName = s.FirstOrDefault().AsbitemName, |
|
|
|
ChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2), |
|
|
|
ReceivedChargeMoney = 0 |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 收费金额统计
|
|
|
|
|
|
|
|
|
|
|
|
var chargeQuery = from a in await _chargeAsbitemRepository.GetQueryableAsync() |
|
|
|
join d in await _chargeRepository.GetQueryableAsync() on a.ChargeId equals d.Id |
|
|
|
join b in await _asbitemRepository.GetQueryableAsync() on a.AsbitemId equals b.Id into bb |
|
|
|
from ab in bb.DefaultIfEmpty() |
|
|
|
join c in await _itemTypeRepository.GetQueryableAsync() on ab.ItemTypeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
where d.ChargeFlag == ChargeFlag.Charge |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
ab, |
|
|
|
AsbitemName = ab != null ? ab.DisplayName : "", |
|
|
|
ItemTypeName = ac != null ? ac.DisplayName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (itmeTypeIds.Any()) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => itmeTypeIds.Contains(m.ab.ItemTypeId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (input.Asbitems.Any()) |
|
|
|
{ |
|
|
|
query = query.Where(m => input.Asbitems.Contains(m.a.AsbitemId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//按项目类别分组 收费
|
|
|
|
var itemTypeGroupCharges = chargeQuery.GroupBy(g => new { g.ab.ItemTypeId, g.a.AsbitemId }).Select(s => new GetProjectFeesReport_Detail |
|
|
|
{ |
|
|
|
ItemTypeId = s.Key.ItemTypeId, |
|
|
|
AsbitemId = s.Key.AsbitemId, |
|
|
|
ItemTypeName = s.FirstOrDefault().ItemTypeName, |
|
|
|
AsbitemName = s.FirstOrDefault().AsbitemName, |
|
|
|
ReceivedChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2), |
|
|
|
ChargeMoney = 0 |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 拼接收费数据
|
|
|
|
|
|
|
|
List<GetProjectFeesReport_Detail> projectFeesReport_Details = new List<GetProjectFeesReport_Detail>(); |
|
|
|
|
|
|
|
//去重科室Id
|
|
|
|
var itemTypeIdList = itemTypeGroups.Select(s => new { s.ItemTypeId, s.AsbitemId }).Union(itemTypeGroupCharges.Select(s => new { s.ItemTypeId, s.AsbitemId })); |
|
|
|
|
|
|
|
foreach (var item in itemTypeIdList) |
|
|
|
{ |
|
|
|
|
|
|
|
var tempData = itemTypeGroups.Where(m => m.ItemTypeId == item.ItemTypeId && m.AsbitemId == item.AsbitemId).FirstOrDefault(); |
|
|
|
|
|
|
|
if (tempData != null) |
|
|
|
{ |
|
|
|
var itemTypeGroupCharge = itemTypeGroupCharges.Where(m => m.ItemTypeId == item.ItemTypeId && m.AsbitemId == item.AsbitemId).FirstOrDefault(); |
|
|
|
if (itemTypeGroupCharge != null) |
|
|
|
{ |
|
|
|
tempData.ReceivedChargeMoney = itemTypeGroupCharge.ReceivedChargeMoney; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
tempData = itemTypeGroupCharges.Where(m => m.ItemTypeId == item.ItemTypeId && m.AsbitemId == item.AsbitemId).FirstOrDefault(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tempData.DiscountMoney = tempData.ChargeMoney - tempData.ReceivedChargeMoney; |
|
|
|
|
|
|
|
projectFeesReport_Details.Add(tempData); |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
decimal sumChargeMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0; |
|
|
|
decimal sumDiscountMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0; |
|
|
|
decimal sumReceivedChargeMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.ReceivedChargeMoney), 2) : 0; |
|
|
|
|
|
|
|
|
|
|
|
var projectFeesReportDto = new GetProjectFeesReportDto |
|
|
|
{ |
|
|
|
Details = projectFeesReport_Details, |
|
|
|
SumChargeMoney = sumChargeMoney, |
|
|
|
SumDiscountMoney = sumDiscountMoney, |
|
|
|
SumReceivedChargeMoney = sumReceivedChargeMoney |
|
|
|
}; |
|
|
|
|
|
|
|
return projectFeesReportDto; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 科室收费汇总表
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/charge-report/get-summary-of-departmental-fees-report")] |
|
|
|
public async Task<GetSummaryOfDepartmentalFeesReportDto> GetSummaryOfDepartmentalFeesReportAsync(GetSummaryOfDepartmentalFeesReportRequestDto input) |
|
|
|
{ |
|
|
|
|
|
|
|
#region 查询项目类别ID
|
|
|
|
List<Guid> itmeTypeIds = new List<Guid>(); |
|
|
|
|
|
|
|
if (input.ItemTypeId != null) |
|
|
|
{ |
|
|
|
itmeTypeIds = await _itemTypeManager.GetChildItemTypeIdsAsync(input.ItemTypeId.Value); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 登记
|
|
|
|
var query = from a in await _registerAsbitemRepository.GetQueryableAsync() |
|
|
|
join b in await _asbitemRepository.GetQueryableAsync() on a.AsbitemId equals b.Id into bb |
|
|
|
from ab in bb.DefaultIfEmpty() |
|
|
|
join c in await _itemTypeRepository.GetQueryableAsync() on ab.ItemTypeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
where a.IsCharge == 'Y' |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
ab, |
|
|
|
ac, |
|
|
|
ItemTypeName = ac != null ? ac.DisplayName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (itmeTypeIds.Any()) |
|
|
|
{ |
|
|
|
query = query.Where(m => itmeTypeIds.Contains(m.ab.ItemTypeId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
query = query.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//按项目类别分组
|
|
|
|
var itemTypeGroups = query.GroupBy(g => g.ab.ItemTypeId).Select(s => new GetSummaryOfDepartmentalFeesReport_Detail |
|
|
|
{ |
|
|
|
ItemTypeId = s.Key, |
|
|
|
ItemTypeName = s.FirstOrDefault().ItemTypeName, |
|
|
|
ChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2), |
|
|
|
ReceivedChargeMoney = 0 |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 收费金额统计
|
|
|
|
|
|
|
|
|
|
|
|
var chargeQuery = from a in await _chargeAsbitemRepository.GetQueryableAsync() |
|
|
|
join d in await _chargeRepository.GetQueryableAsync() on a.ChargeId equals d.Id |
|
|
|
join b in await _asbitemRepository.GetQueryableAsync() on a.AsbitemId equals b.Id into bb |
|
|
|
from ab in bb.DefaultIfEmpty() |
|
|
|
join c in await _itemTypeRepository.GetQueryableAsync() on ab.ItemTypeId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
where d.ChargeFlag == ChargeFlag.Charge |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
ab, |
|
|
|
ItemTypeName = ac != null ? ac.DisplayName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (itmeTypeIds.Any()) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => itmeTypeIds.Contains(m.ab.ItemTypeId)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
chargeQuery = chargeQuery.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//按项目类别分组 收费
|
|
|
|
var itemTypeGroupCharges = chargeQuery.GroupBy(g => g.ab.ItemTypeId).Select(s => new GetSummaryOfDepartmentalFeesReport_Detail |
|
|
|
{ |
|
|
|
ItemTypeId = s.Key, |
|
|
|
ItemTypeName = s.FirstOrDefault().ItemTypeName, |
|
|
|
ReceivedChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2), |
|
|
|
ChargeMoney = 0 |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 拼接收费数据
|
|
|
|
|
|
|
|
List<GetSummaryOfDepartmentalFeesReport_Detail> summaryOfDepartmentalFeesReport_Details = new List<GetSummaryOfDepartmentalFeesReport_Detail>(); |
|
|
|
|
|
|
|
//去重科室Id
|
|
|
|
var itemTypeIdList = itemTypeGroups.Select(s => s.ItemTypeId).Union(itemTypeGroupCharges.Select(s => s.ItemTypeId)); |
|
|
|
|
|
|
|
foreach (var itemTypeId in itemTypeIdList) |
|
|
|
{ |
|
|
|
|
|
|
|
var tempData = itemTypeGroups.Where(m => m.ItemTypeId == itemTypeId).FirstOrDefault(); |
|
|
|
|
|
|
|
if (tempData != null) |
|
|
|
{ |
|
|
|
var itemTypeGroupCharge = itemTypeGroupCharges.Where(m => m.ItemTypeId == itemTypeId).FirstOrDefault(); |
|
|
|
if (itemTypeGroupCharge != null) |
|
|
|
{ |
|
|
|
tempData.ReceivedChargeMoney = itemTypeGroupCharge.ReceivedChargeMoney; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
tempData = itemTypeGroupCharges.Where(m => m.ItemTypeId == itemTypeId).FirstOrDefault(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tempData.DiscountMoney = tempData.ChargeMoney - tempData.ReceivedChargeMoney; |
|
|
|
|
|
|
|
summaryOfDepartmentalFeesReport_Details.Add(tempData); |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
decimal sumChargeMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0; |
|
|
|
decimal sumDiscountMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0; |
|
|
|
decimal sumReceivedChargeMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.ReceivedChargeMoney), 2) : 0; |
|
|
|
|
|
|
|
|
|
|
|
var summaryOfDepartmentalFeesReportDto = new GetSummaryOfDepartmentalFeesReportDto |
|
|
|
{ |
|
|
|
Details = summaryOfDepartmentalFeesReport_Details, |
|
|
|
SumChargeMoney = sumChargeMoney, |
|
|
|
SumDiscountMoney = sumDiscountMoney, |
|
|
|
SumReceivedChargeMoney = sumReceivedChargeMoney |
|
|
|
}; |
|
|
|
|
|
|
|
return summaryOfDepartmentalFeesReportDto; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
///// 收费员收费报表 按支付方式
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="input"></param>
|
|
|
|
///// <returns></returns>
|
|
|
|
//[HttpPost("api/app/charge-report/get-toll-collector-fee-report-in-pay-mode")]
|
|
|
|
//public async Task<GetTollCollectorFeeReportInPayModeDto> GetTollCollectorFeeReportInPayModeAsync(GetTollCollectorFeeReportInPayModeRequestDto input)
|
|
|
|
//{
|
|
|
|
|
|
|
|
//}
|
|
|
|
/// <summary>
|
|
|
|
/// 体检人次汇总
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/charge-report/get-summary-of-physical-examination-personnel-report")] |
|
|
|
public async Task<GetSummaryOfPhysicalExaminationPersonnelReportDto> GetSummaryOfPhysicalExaminationPersonnelReportAsync(GetSummaryOfPhysicalExaminationPersonnelReportRequestDto input) |
|
|
|
{ |
|
|
|
var query = from a in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join b in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals b.PatientRegisterId |
|
|
|
join c in await _customerOrgRegisterRepository.GetQueryableAsync() on a.CustomerOrgRegisterId equals c.Id into cc |
|
|
|
from ac in cc.DefaultIfEmpty() |
|
|
|
join d in await _customerOrgRepository.GetQueryableAsync() on ac.CustomerOrgId equals d.Id into dd |
|
|
|
from ad in dd.DefaultIfEmpty() |
|
|
|
where a.CompleteFlag == PatientRegisterCompleteFlag.GeneralInspected |
|
|
|
select new |
|
|
|
{ |
|
|
|
a, |
|
|
|
b, |
|
|
|
ac, |
|
|
|
CustomerOrgName = ad != null ? ad.DisplayName : "" |
|
|
|
}; |
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) |
|
|
|
{ |
|
|
|
query = query.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate) |
|
|
|
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
|
|
|
|
//按单位分组
|
|
|
|
var customerOrgGroup = query.GroupBy(g => g.ac.CustomerOrgId).Select(s => new GetSummaryOfPhysicalExaminationPersonnelReport_Detail |
|
|
|
{ |
|
|
|
CustomerOrgName = s.FirstOrDefault().CustomerOrgName, |
|
|
|
SummaryCount = s.Count(), |
|
|
|
ChargeMoney = Math.Round(s.Sum(ss => ss.b.Amount.Value * ss.b.ChargePrice.Value), 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//个人次数
|
|
|
|
int personalCount = customerOrgGroup.Where(m => m.CustomerOrgId == GuidFlag.PersonCustomerOrgId).Count(); |
|
|
|
//单位次数
|
|
|
|
int customerOrgCount = customerOrgGroup.Count - personalCount; |
|
|
|
|
|
|
|
var summaryOfPhysicalExaminationPersonnelReportDto = new GetSummaryOfPhysicalExaminationPersonnelReportDto |
|
|
|
{ |
|
|
|
CustomerOrgCount = customerOrgCount, |
|
|
|
PersonalCount = personalCount, |
|
|
|
Details = customerOrgGroup, |
|
|
|
SumCount = customerOrgCount + personalCount |
|
|
|
}; |
|
|
|
|
|
|
|
return summaryOfPhysicalExaminationPersonnelReportDto; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|