Browse Source

收费报表、收费类型常量

bjmzak
wxd 2 years ago
parent
commit
8a28646a4f
  1. 72
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetProjectFeesReportDto.cs
  2. 32
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetProjectFeesReportRequestDto.cs
  3. 60
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfDepartmentalFeesReportDto.cs
  4. 27
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfDepartmentalFeesReportRequestDto.cs
  5. 54
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfPhysicalExaminationPersonnelReportDto.cs
  6. 22
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfPhysicalExaminationPersonnelReportRequestDto.cs
  7. 84
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeDto.cs
  8. 10
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs
  9. 53
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInPayModeDto.cs
  10. 17
      src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInPayModeRequestDto.cs
  11. 2
      src/Shentun.Peis.Application.Contracts/Charges/ChargeAndChargeBackSettlementRequestDto.cs
  12. 2
      src/Shentun.Peis.Application.Contracts/Charges/GetChargeAndChargeBackSummaryDto.cs
  13. 708
      src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
  14. 4
      src/Shentun.Peis.Application/Charges/ChargeAppService.cs
  15. 24
      src/Shentun.Peis.Domain.Shared/Enums/ChargeFlag.cs
  16. 24
      src/Shentun.Peis.Domain/ItemTypes/ItemTypeManager.cs

72
src/Shentun.Peis.Application.Contracts/ChargeReports/GetProjectFeesReportDto.cs

@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetProjectFeesReportDto
{
/// <summary>
/// 应收总金额
/// </summary>
public decimal SumChargeMoney { get; set; }
/// <summary>
/// 折扣金额
/// </summary>
public decimal SumDiscountMoney { get; set; }
/// <summary>
/// 实收总金额
/// </summary>
public decimal SumReceivedChargeMoney { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<GetProjectFeesReport_Detail> Details { get; set; }
}
public class GetProjectFeesReport_Detail
{
/// <summary>
/// 项目类别Id 前端不需要
/// </summary>
public Guid ItemTypeId { get; set; }
/// <summary>
/// 项目类别名称==科室
/// </summary>
public string ItemTypeName { get; set; }
/// <summary>
/// 组合项目Id 前端不需要
/// </summary>
public Guid AsbitemId { get; set; }
/// <summary>
/// 组合项目名称
/// </summary>
public string AsbitemName { get; set; }
/// <summary>
/// 应收金额
/// </summary>
public decimal ChargeMoney { get; set; }
/// <summary>
/// 折扣金额
/// </summary>
public decimal DiscountMoney { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal ReceivedChargeMoney { get; set; }
}
}

32
src/Shentun.Peis.Application.Contracts/ChargeReports/GetProjectFeesReportRequestDto.cs

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetProjectFeesReportRequestDto
{
/// <summary>
/// 项目类别ID
/// </summary>
public Guid? ItemTypeId { get; set; }
/// <summary>
/// 组合项目 可以多个
/// </summary>
public List<Guid> Asbitems { get; set; } = new List<Guid>();
/// <summary>
/// 开始日期
/// </summary>
[Required(ErrorMessage = "开始日期不能为空")]
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
[Required(ErrorMessage = "结束日期不能为空")]
public string EndDate { get; set; }
}
}

60
src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfDepartmentalFeesReportDto.cs

@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetSummaryOfDepartmentalFeesReportDto
{
/// <summary>
/// 应收总金额
/// </summary>
public decimal SumChargeMoney { get; set; }
/// <summary>
/// 折扣金额
/// </summary>
public decimal SumDiscountMoney { get; set; }
/// <summary>
/// 实收总金额
/// </summary>
public decimal SumReceivedChargeMoney { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<GetSummaryOfDepartmentalFeesReport_Detail> Details { get; set; }
}
public class GetSummaryOfDepartmentalFeesReport_Detail
{
/// <summary>
/// 项目类别Id 前端不需要
/// </summary>
public Guid ItemTypeId { get; set; }
/// <summary>
/// 项目类别名称==科室
/// </summary>
public string ItemTypeName { get; set; }
/// <summary>
/// 应收金额
/// </summary>
public decimal ChargeMoney { get; set; }
/// <summary>
/// 折扣金额
/// </summary>
public decimal DiscountMoney { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal ReceivedChargeMoney { get; set; }
}
}

27
src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfDepartmentalFeesReportRequestDto.cs

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetSummaryOfDepartmentalFeesReportRequestDto
{
/// <summary>
/// 项目类别ID
/// </summary>
public Guid? ItemTypeId { get; set; }
/// <summary>
/// 开始日期
/// </summary>
[Required(ErrorMessage = "开始日期不能为空")]
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
[Required(ErrorMessage = "结束日期不能为空")]
public string EndDate { get; set; }
}
}

54
src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfPhysicalExaminationPersonnelReportDto.cs

@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetSummaryOfPhysicalExaminationPersonnelReportDto
{
/// <summary>
/// 体检总人次
/// </summary>
public int SumCount { get; set; }
/// <summary>
/// 个人次数
/// </summary>
public int PersonalCount { get; set; }
/// <summary>
/// 单位次数
/// </summary>
public int CustomerOrgCount { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<GetSummaryOfPhysicalExaminationPersonnelReport_Detail> Details { get; set; }
}
public class GetSummaryOfPhysicalExaminationPersonnelReport_Detail
{
/// <summary>
/// 单位ID
/// </summary>
public Guid CustomerOrgId { get; set; }
/// <summary>
/// 单位名称
/// </summary>
public string CustomerOrgName { get; set; }
/// <summary>
/// 总检人数
/// </summary>
public int SummaryCount { get; set; }
/// <summary>
/// 应收总金额 ChargePrice*Amout
/// </summary>
public decimal ChargeMoney { get; set; }
}
}

22
src/Shentun.Peis.Application.Contracts/ChargeReports/GetSummaryOfPhysicalExaminationPersonnelReportRequestDto.cs

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetSummaryOfPhysicalExaminationPersonnelReportRequestDto
{
/// <summary>
/// 开始日期
/// </summary>
[Required(ErrorMessage = "开始日期不能为空")]
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
[Required(ErrorMessage = "结束日期不能为空")]
public string EndDate { get; set; }
}
}

84
src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeDto.cs

@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetTollCollectorFeeReportInInvoiceTypeDto
{
/// <summary>
/// 收费票据数量
/// </summary>
public int ChargeCount { get; set; }
/// <summary>
/// 退费票据数量
/// </summary>
public int ChargeBackCount { get; set; }
/// <summary>
/// 收费日期
/// </summary>
public string ChargeDate { get; set; }
/// <summary>
/// 收费明细
/// </summary>
public GetTollCollectorFeeReportInInvoiceType_ChargeDetail ChargeDetails { get; set; }
/// <summary>
/// 退费明细
/// </summary>
public GetTollCollectorFeeReportInInvoiceType_ChargeBackDetail ChargeBackDetails { get; set; }
/// <summary>
/// 总合计金额
/// </summary>
public decimal SumTotalMoney { get; set; }
}
/// <summary>
/// 收费
/// </summary>
public class GetTollCollectorFeeReportInInvoiceType_ChargeDetail
{
/// <summary>
/// 小计金额
/// </summary>
public decimal TotalMoney { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail> InvoiceTypeDetails { get; set; }
}
/// <summary>
/// 退费
/// </summary>
public class GetTollCollectorFeeReportInInvoiceType_ChargeBackDetail
{
/// <summary>
/// 小计金额
/// </summary>
public decimal TotalMoney { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail> InvoiceTypeDetails { get; set; }
}
public class GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail
{
/// <summary>
/// 发票类型
/// </summary>
public string InvoiceTypeName { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal InvoiceTypeMoney { get; set; }
}
}

10
src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs

@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetTollCollectorFeeReportInInvoiceTypeRequestDto: GetTollCollectorFeeReportInPayModeRequestDto
{
}
}

53
src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInPayModeDto.cs

@ -1,10 +1,63 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetTollCollectorFeeReportInPayModeDto
{
/// <summary>
/// 收费票据数量
/// </summary>
public int ChargeCount { get; set; }
/// <summary>
/// 退费票据数量
/// </summary>
public int ChargeBackCount { get; set; }
/// <summary>
/// 收费日期
/// </summary>
public string ChargeDate { get; set;}
/// <summary>
/// 收费明细
/// </summary>
public List<GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail> ChargeDetails { get; set; }
/// <summary>
/// 总合计金额
/// </summary>
public decimal SumTotalMoney { get; set; }
}
public class GetTollCollectorFeeReportInPayMode_ChargeAndChargeBackDetail
{
/// <summary>
/// 收费员
/// </summary>
public string ChargeName { get; set; }
/// <summary>
/// 支付方式名称
/// </summary>
public string PayModeName { get; set; }
/// <summary>
/// 收费金额
/// </summary>
public decimal ChargeMoney { get; set; }
/// <summary>
/// 退费金额
/// </summary>
public decimal ChargeBackMoney { get; set; }
/// <summary>
/// 合计金额
/// </summary>
public decimal TotalMoney { get; set; }
}
}

17
src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInPayModeRequestDto.cs

@ -1,10 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.ChargeReports
{
public class GetTollCollectorFeeReportInPayModeRequestDto
{
/// <summary>
/// 收费员ID 集合
/// </summary>
public List<Guid> UserIds { get; set; } = new List<Guid>();
/// <summary>
/// 开始日期
/// </summary>
[Required(ErrorMessage = "开始日期不能为空")]
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
[Required(ErrorMessage = "结束日期不能为空")]
public string EndDate { get; set; }
}
}

2
src/Shentun.Peis.Application.Contracts/Charges/ChargeAndChargeBackSettlementRequestDto.cs

@ -21,5 +21,5 @@ namespace Shentun.Peis.Charges
/// </summary>
public string EndDate { get; set; }
}
}
}

2
src/Shentun.Peis.Application.Contracts/Charges/GetChargeAndChargeBackSummaryDto.cs

@ -53,6 +53,6 @@ namespace Shentun.Peis.Charges
/// <summary>
/// 收费或退费金额
/// </summary>
public string Money { get; set; }
public decimal Money { get; set; }
}
}

708
src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs

@ -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;
}
}

4
src/Shentun.Peis.Application/Charges/ChargeAppService.cs

@ -92,7 +92,7 @@ namespace Shentun.Peis.Charges
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).ToString()
Money = Math.Round(ss.Sum(sss => sss.b.ChargeMoney), 2)
}).ToList()
});
#endregion
@ -131,7 +131,7 @@ namespace Shentun.Peis.Charges
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).ToString()
Money = Math.Round(ss.Sum(sss => sss.b.BackMoeny), 2)
}).ToList()
});
#endregion

24
src/Shentun.Peis.Domain.Shared/Enums/ChargeFlag.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace Shentun.Peis.Enums
{
public static class ChargeFlag
{
/// <summary>
/// 收费
/// </summary>
[Description("收费")]
public const char Charge = '0';
/// <summary>
/// 退费
/// </summary>
[Description("退费")]
public const char ChargeBack = '1';
}
}

24
src/Shentun.Peis.Domain/ItemTypes/ItemTypeManager.cs

@ -200,5 +200,29 @@ namespace Shentun.Peis.ItemTypes
}
/// <summary>
/// 获取项目类别下级ID
/// </summary>
/// <param name="itemTypeId"></param>
/// <returns></returns>
public async Task<List<Guid>> GetChildItemTypeIdsAsync(Guid itemTypeId)
{
List<Guid> itmeTypeIds = new List<Guid>();
if (itemTypeId != Guid.Empty)
{
var itemTypeParent = await _repository.FirstOrDefaultAsync(m => m.Id == itemTypeId);
itmeTypeIds = (await _repository.GetListAsync(m => !string.IsNullOrEmpty(m.PathCode)
&& !string.IsNullOrEmpty(itemTypeParent.PathCode)
&& m.PathCode.Contains(itemTypeParent.PathCode))).Select(s => s.Id).ToList();
itmeTypeIds.Add(itemTypeId);
}
return itmeTypeIds;
}
}
}
Loading…
Cancel
Save