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.
		
		
		
		
		
			
		
			
				
					
					
						
							1183 lines
						
					
					
						
							56 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							1183 lines
						
					
					
						
							56 KiB
						
					
					
				
								using JetBrains.Annotations;
							 | 
						|
								using Microsoft.AspNetCore.Authorization;
							 | 
						|
								using Microsoft.AspNetCore.Mvc;
							 | 
						|
								using NPOI.SS.Formula.Functions;
							 | 
						|
								using Shentun.Peis.Charges;
							 | 
						|
								using Shentun.Peis.Enums;
							 | 
						|
								using Shentun.Peis.ItemTypes;
							 | 
						|
								using Shentun.Peis.Models;
							 | 
						|
								using Shentun.Peis.Patients;
							 | 
						|
								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.OpenIddict.Applications;
							 | 
						|
								using Volo.Abp.Users;
							 | 
						|
								
							 | 
						|
								namespace Shentun.Peis.ChargeReports
							 | 
						|
								{
							 | 
						|
								    /// <summary>
							 | 
						|
								    /// 收费统计报表
							 | 
						|
								    /// </summary>
							 | 
						|
								    [Authorize]
							 | 
						|
								    [ApiExplorerSettings(GroupName = "Work")]
							 | 
						|
								    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 IRepository<Patient, Guid> _patientRepository;
							 | 
						|
								        private readonly IRepository<Sex> _sexRepository;
							 | 
						|
								        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<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
							 | 
						|
								,
							 | 
						|
								            IRepository<Patient, Guid> patientRepository,
							 | 
						|
								            IRepository<Sex> sexRepository)
							 | 
						|
								        {
							 | 
						|
								            _chargeRepository = chargeRepository;
							 | 
						|
								            _chargeBackRepository = chargeBackRepository;
							 | 
						|
								            _chargePayRepository = chargePayRepository;
							 | 
						|
								            _payModeRepository = payModeRepository;
							 | 
						|
								            _chargeBackPayRepository = chargeBackPayRepository;
							 | 
						|
								            _userRepository = userRepository;
							 | 
						|
								            _chargeAsbitemRepository = chargeAsbitemRepository;
							 | 
						|
								            _asbitemRepository = asbitemRepository;
							 | 
						|
								            _invoiceItemTypeRepository = invoiceItemTypeRepository;
							 | 
						|
								            _patientRegisterRepository = patientRegisterRepository;
							 | 
						|
								            _registerAsbitemRepository = registerAsbitemRepository;
							 | 
						|
								            _customerOrgRegisterRepository = customerOrgRegisterRepository;
							 | 
						|
								            _customerOrgRepository = customerOrgRepository;
							 | 
						|
								            _itemTypeRepository = itemTypeRepository;
							 | 
						|
								            _itemTypeManager = itemTypeManager;
							 | 
						|
								            _patientRepository = patientRepository;
							 | 
						|
								            _sexRepository = sexRepository;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <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 = DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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() ? DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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() ? DataHelper.DecimalRetainDecimals(chargeDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0;
							 | 
						|
								
							 | 
						|
								            //退费合计
							 | 
						|
								            decimal chargeBackTotalMoney = chargeBackDetails.Any() ? DataHelper.DecimalRetainDecimals(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-toll-collector-fee-report-in-asbitem")]
							 | 
						|
								        public async Task<List<GetTollCollectorFeeReportInAsbitemDto>> GetTollCollectorFeeReportInAsbitemAsync(GetTollCollectorFeeReportInAsbitemRequestDto input)
							 | 
						|
								        {
							 | 
						|
								            var query = 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 d in await _itemTypeRepository.GetQueryableAsync() on ac.ItemTypeId equals d.Id into dd
							 | 
						|
								                        from ad in dd.DefaultIfEmpty()
							 | 
						|
								                        select new
							 | 
						|
								                        {
							 | 
						|
								                            a,
							 | 
						|
								                            b,
							 | 
						|
								                            AsbitemName = ac != null ? ac.DisplayName : "",
							 | 
						|
								                            ItemTypeName = ad != null ? ad.DisplayName : ""
							 | 
						|
								                        };
							 | 
						|
								
							 | 
						|
								            if (input.UserIds.Any())
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => input.UserIds.Contains(m.a.CreatorId.Value));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            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 asbitemGroup = query.GroupBy(g => g.b.AsbitemId).Select(s => new GetTollCollectorFeeReportInAsbitem_Detail
							 | 
						|
								            {
							 | 
						|
								                AsbitemName = s.FirstOrDefault().AsbitemName,
							 | 
						|
								                ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.ChargePrice * ss.b.Amount), 2),
							 | 
						|
								                ItemTypeName = s.FirstOrDefault().ItemTypeName
							 | 
						|
								            }).ToList();
							 | 
						|
								
							 | 
						|
								            var tollCollectorFeeReportInAsbitemDtos = asbitemGroup.GroupBy(g => g.ItemTypeName).Select(s => new GetTollCollectorFeeReportInAsbitemDto
							 | 
						|
								            {
							 | 
						|
								                Details = s.ToList(),
							 | 
						|
								                ItemTypeName = s.FirstOrDefault().ItemTypeName,
							 | 
						|
								                TotalMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.ChargeMoney), 2)
							 | 
						|
								
							 | 
						|
								            }).ToList();
							 | 
						|
								
							 | 
						|
								            return tollCollectorFeeReportInAsbitemDtos;
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <summary>
							 | 
						|
								        /// 个人收费明细报表  按收费明细
							 | 
						|
								        /// </summary>
							 | 
						|
								        /// <param name="input"></param>
							 | 
						|
								        /// <returns></returns>
							 | 
						|
								        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-fee-details")]
							 | 
						|
								        public async Task<List<GetPersonalFeeDetailsReportInFeeDetailsDto>> GetPersonalFeeDetailsReportInFeeDetailsAsync(GetPersonalFeeDetailsReportInFeeDetailsRequestDto input)
							 | 
						|
								        {
							 | 
						|
								            var query = from a in await _chargeRepository.GetQueryableAsync()
							 | 
						|
								                        join b in await _chargeAsbitemRepository.GetQueryableAsync() on a.Id equals b.ChargeId
							 | 
						|
								                        join c in await _patientRegisterRepository.GetQueryableAsync() on a.PatientRegisterId equals c.Id
							 | 
						|
								                        join d in await _patientRepository.GetQueryableAsync() on c.PatientId equals d.Id into dd
							 | 
						|
								                        from ad in dd.DefaultIfEmpty()
							 | 
						|
								                        join e in await _sexRepository.GetQueryableAsync() on c.SexId equals e.Id into ee
							 | 
						|
								                        from ae in ee.DefaultIfEmpty()
							 | 
						|
								                        join f in await _registerAsbitemRepository.GetQueryableAsync() on c.Id equals f.PatientRegisterId
							 | 
						|
								                        join g in await _asbitemRepository.GetQueryableAsync() on f.AsbitemId equals g.Id into gg
							 | 
						|
								                        from ag in gg.DefaultIfEmpty()
							 | 
						|
								                        join h in await _userRepository.GetQueryableAsync() on a.CreatorId equals h.Id into hh
							 | 
						|
								                        from ah in hh.DefaultIfEmpty()
							 | 
						|
								                        where c.CustomerOrgId == GuidFlag.PersonCustomerOrgId && a.ChargeFlag == ChargeFlag.Charge
							 | 
						|
								                        select new
							 | 
						|
								                        {
							 | 
						|
								                            a,
							 | 
						|
								                            b,
							 | 
						|
								                            c,
							 | 
						|
								                            f,
							 | 
						|
								                            PatientNo = ad != null ? ad.PatientNo : "",
							 | 
						|
								                            SexName = ae != null ? ae.DisplayName : "",
							 | 
						|
								                            AsbitemName = ag != null ? ag.DisplayName : "",
							 | 
						|
								                            BookKeepingName = ah != null ? ah.UserName : ""
							 | 
						|
								                        };
							 | 
						|
								
							 | 
						|
								            if (input.UserIds.Any())
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => input.UserIds.Contains(m.a.CreatorId.Value));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            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));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientName))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.c.PatientName == input.PatientName);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientNo))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.PatientNo == input.PatientNo);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            var patientRegisterGroup = query.Select(s => new GetPersonalFeeDetailsReportInFeeDetailsDto
							 | 
						|
								            {
							 | 
						|
								                Age = s.c.Age,
							 | 
						|
								                AsbitemName = s.AsbitemName,
							 | 
						|
								                BookKeepingName = s.BookKeepingName,
							 | 
						|
								                BookkeepingTiem = s.a.CreationTime.ToString("yyyy-MM-dd HH:mm"),
							 | 
						|
								                CharePrice = DataHelper.DecimalRetainDecimals(s.b.ChargePrice * s.b.Amount, 2),
							 | 
						|
								                MedicalTimes = s.c.MedicalTimes,
							 | 
						|
								                PatientName = s.c.PatientName,
							 | 
						|
								                PatientNo = s.PatientNo,
							 | 
						|
								                SexName = s.SexName,
							 | 
						|
								                StandardPrice = DataHelper.DecimalRetainDecimals(s.f.StandardPrice * s.f.Amount, 2),
							 | 
						|
								                Discount = Math.Floor((s.b.ChargePrice * s.b.Amount) / (s.f.StandardPrice.Value * s.f.Amount.Value)) + "%"
							 | 
						|
								            }).ToList();
							 | 
						|
								
							 | 
						|
								            return patientRegisterGroup;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <summary>
							 | 
						|
								        /// 个人收费明细报表  按退费明细  
							 | 
						|
								        /// </summary>
							 | 
						|
								        /// <param name="input"></param>
							 | 
						|
								        /// <returns></returns>
							 | 
						|
								        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-refund-details")]
							 | 
						|
								        public async Task<List<GetPersonalFeeDetailsReportInRefundDetailsDto>> GetPersonalFeeDetailsReportInRefundDetailsAsync(GetPersonalFeeDetailsReportInRefundDetailsRequestDto input)
							 | 
						|
								        {
							 | 
						|
								            var query = from a in await _chargeRepository.GetQueryableAsync()
							 | 
						|
								                        join b in await _chargeAsbitemRepository.GetQueryableAsync() on a.Id equals b.ChargeId
							 | 
						|
								                        join c in await _patientRegisterRepository.GetQueryableAsync() on a.PatientRegisterId equals c.Id
							 | 
						|
								                        join d in await _patientRepository.GetQueryableAsync() on c.PatientId equals d.Id into dd
							 | 
						|
								                        from ad in dd.DefaultIfEmpty()
							 | 
						|
								                        join e in await _sexRepository.GetQueryableAsync() on c.SexId equals e.Id into ee
							 | 
						|
								                        from ae in ee.DefaultIfEmpty()
							 | 
						|
								                        join f in await _registerAsbitemRepository.GetQueryableAsync() on c.Id equals f.PatientRegisterId
							 | 
						|
								                        join g in await _asbitemRepository.GetQueryableAsync() on f.AsbitemId equals g.Id into gg
							 | 
						|
								                        from ag in gg.DefaultIfEmpty()
							 | 
						|
								                        join h in await _userRepository.GetQueryableAsync() on a.CreatorId equals h.Id into hh
							 | 
						|
								                        from ah in hh.DefaultIfEmpty()
							 | 
						|
								                        where c.CustomerOrgId == GuidFlag.PersonCustomerOrgId && a.ChargeFlag == ChargeFlag.ChargeBack
							 | 
						|
								                        select new
							 | 
						|
								                        {
							 | 
						|
								                            a,
							 | 
						|
								                            b,
							 | 
						|
								                            c,
							 | 
						|
								                            f,
							 | 
						|
								                            PatientNo = ad != null ? ad.PatientNo : "",
							 | 
						|
								                            SexName = ae != null ? ae.DisplayName : "",
							 | 
						|
								                            AsbitemName = ag != null ? ag.DisplayName : "",
							 | 
						|
								                            BookKeepingName = ah != null ? ah.UserName : ""
							 | 
						|
								                        };
							 | 
						|
								
							 | 
						|
								            if (input.UserIds.Any())
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => input.UserIds.Contains(m.a.CreatorId.Value));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            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));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientName))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.c.PatientName == input.PatientName);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientNo))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.PatientNo == input.PatientNo);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            var patientRegisterGroup = query.Select(s => new GetPersonalFeeDetailsReportInRefundDetailsDto
							 | 
						|
								            {
							 | 
						|
								                Age = s.c.Age,
							 | 
						|
								                AsbitemName = s.AsbitemName,
							 | 
						|
								                BookKeepingName = s.BookKeepingName,
							 | 
						|
								                BookkeepingTiem = s.a.CreationTime.ToString("yyyy-MM-dd HH:mm"),
							 | 
						|
								                CharePrice = DataHelper.DecimalRetainDecimals(s.b.ChargePrice * s.b.Amount, 2),
							 | 
						|
								                MedicalTimes = s.c.MedicalTimes,
							 | 
						|
								                PatientName = s.c.PatientName,
							 | 
						|
								                PatientNo = s.PatientNo,
							 | 
						|
								                SexName = s.SexName,
							 | 
						|
								                StandardPrice = DataHelper.DecimalRetainDecimals(s.f.StandardPrice * s.f.Amount, 2),
							 | 
						|
								                Discount = Math.Floor((s.b.ChargePrice * s.b.Amount) / (s.f.StandardPrice.Value * s.f.Amount.Value)) + "%"
							 | 
						|
								            }).ToList();
							 | 
						|
								
							 | 
						|
								            return patientRegisterGroup;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <summary>
							 | 
						|
								        /// 个人收费明细报表  按收费汇总
							 | 
						|
								        /// </summary>
							 | 
						|
								        /// <param name="input"></param>
							 | 
						|
								        /// <returns></returns>
							 | 
						|
								        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-fee-summary")]
							 | 
						|
								        public async Task<GetPersonalFeeDetailsReportInFeeSummaryDto> GetPersonalFeeDetailsReportInFeeSummaryAsync(GetPersonalFeeDetailsReportInFeeSummaryRequestDto input)
							 | 
						|
								        {
							 | 
						|
								
							 | 
						|
								            var query = from a in await _patientRegisterRepository.GetQueryableAsync()
							 | 
						|
								                        join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
							 | 
						|
								                        from ab in bb.DefaultIfEmpty()
							 | 
						|
								                        join c in await _sexRepository.GetQueryableAsync() on a.SexId equals c.Id into cc
							 | 
						|
								                        from ac in cc.DefaultIfEmpty()
							 | 
						|
								                        join d in (await _registerAsbitemRepository.GetQueryableAsync()).Where(m => m.IsCharge == 'Y')
							 | 
						|
								                        .GroupBy(g => g.PatientRegisterId)
							 | 
						|
								                        .Select(s => new
							 | 
						|
								                        {
							 | 
						|
								                            PatientRegisterId = s.Key,
							 | 
						|
								                            AsbitemChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.ChargePrice.Value * ss.Amount.Value), 2)
							 | 
						|
								                        }) on a.Id equals d.PatientRegisterId
							 | 
						|
								                        join e in await _chargeRepository.GetQueryableAsync() on a.Id equals e.PatientRegisterId
							 | 
						|
								                        join f in await _chargePayRepository.GetQueryableAsync() on e.Id equals f.ChargeId
							 | 
						|
								                        join g in await _payModeRepository.GetQueryableAsync() on f.PayModeId equals g.Id into gg
							 | 
						|
								                        from ag in gg.DefaultIfEmpty()
							 | 
						|
								                        join h in await _userRepository.GetQueryableAsync() on e.CreatorId equals h.Id into hh
							 | 
						|
								                        from ah in hh.DefaultIfEmpty()
							 | 
						|
								                        where a.CustomerOrgGroupId == GuidFlag.PersonCustomerOrgId
							 | 
						|
								                        select new
							 | 
						|
								                        {
							 | 
						|
								                            a,
							 | 
						|
								                            e,
							 | 
						|
								                            f,
							 | 
						|
								                            PatientName = a.PatientName,
							 | 
						|
								                            Age = a.Age,
							 | 
						|
								                            PatientNo = ab != null ? ab.PatientNo : "",
							 | 
						|
								                            SexName = ac != null ? ac.DisplayName : "",
							 | 
						|
								                            AsbitemChargeMoney = d.AsbitemChargeMoney,
							 | 
						|
								                            BookKeepingName = ah != null ? ah.UserName : "",
							 | 
						|
								                            PayModeName = ag != null ? ag.DisplayName : ""
							 | 
						|
								                        };
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            if (input.UserIds.Any())
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => input.UserIds.Contains(m.e.CreatorId.Value));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.e.CreationTime >= Convert.ToDateTime(input.StartDate)
							 | 
						|
								                && m.e.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientName))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.PatientName == input.PatientName);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            if (!string.IsNullOrWhiteSpace(input.PatientNo))
							 | 
						|
								            {
							 | 
						|
								                query = query.Where(m => m.PatientNo == input.PatientNo);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            var personalFeeDetailsReportInFeeSummary_Details = query.GroupBy(g => g.e.Id).Select(s => new GetPersonalFeeDetailsReportInFeeSummary_Detail
							 | 
						|
								            {
							 | 
						|
								                Age = s.FirstOrDefault().Age,
							 | 
						|
								                BookKeepingName = s.FirstOrDefault().BookKeepingName,
							 | 
						|
								                BookkeepingTiem = s.FirstOrDefault().e.CreationTime.ToString("yyyy-MM-dd HH:mm"),
							 | 
						|
								                ChargeFlagName = s.FirstOrDefault().e.ChargeFlag == ChargeFlag.Charge ? "收费" : "退费",
							 | 
						|
								                ChargeMoney = s.FirstOrDefault().AsbitemChargeMoney,
							 | 
						|
								                PatientName = s.FirstOrDefault().PatientName,
							 | 
						|
								                PatientNo = s.FirstOrDefault().PatientNo,
							 | 
						|
								                ReceivedChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.f.ChargeMoney), 2),
							 | 
						|
								                SexName = s.FirstOrDefault().SexName,
							 | 
						|
								                DiscountMoney = s.FirstOrDefault().AsbitemChargeMoney - DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.f.ChargeMoney), 2),
							 | 
						|
								                PayModes = s.Select(ss => new GetPersonalFeeDetailsReportInFeeSummary_PayMode
							 | 
						|
								                {
							 | 
						|
								                    PayModeName = ss.PayModeName,
							 | 
						|
								                    ReceivedChargeMoney = ss.f.ChargeMoney
							 | 
						|
								                }).ToList()
							 | 
						|
								            }).ToList();
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            decimal sumChargeMoney = personalFeeDetailsReportInFeeSummary_Details.Any() ? DataHelper.DecimalRetainDecimals(personalFeeDetailsReportInFeeSummary_Details.Sum(s => s.ChargeMoney), 2) : 0;
							 | 
						|
								            decimal sumDiscountMoney = personalFeeDetailsReportInFeeSummary_Details.Any() ? DataHelper.DecimalRetainDecimals(personalFeeDetailsReportInFeeSummary_Details.Sum(s => s.DiscountMoney), 2) : 0;
							 | 
						|
								            decimal sumReceivedChargeMoney = personalFeeDetailsReportInFeeSummary_Details.Any() ? DataHelper.DecimalRetainDecimals(personalFeeDetailsReportInFeeSummary_Details.Sum(s => s.ReceivedChargeMoney), 2) : 0;
							 | 
						|
								
							 | 
						|
								            var personalFeeDetailsReportInFeeSummaryDto = new GetPersonalFeeDetailsReportInFeeSummaryDto
							 | 
						|
								            {
							 | 
						|
								                ChargeCount = personalFeeDetailsReportInFeeSummary_Details.Count,
							 | 
						|
								                Details = personalFeeDetailsReportInFeeSummary_Details,
							 | 
						|
								                SumChargeMoney = sumChargeMoney,
							 | 
						|
								                SumDiscountMoney = sumDiscountMoney,
							 | 
						|
								                SumReceivedChargeMoney = sumReceivedChargeMoney
							 | 
						|
								            };
							 | 
						|
								
							 | 
						|
								            return personalFeeDetailsReportInFeeSummaryDto;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <summary>
							 | 
						|
								        /// 收费人收费汇总报表
							 | 
						|
								        /// </summary>
							 | 
						|
								        /// <param name="input"></param>
							 | 
						|
								        /// <returns></returns>
							 | 
						|
								        [HttpPost("api/app/charge-report/get-toll-collector-fee-summary-report")]
							 | 
						|
								        public async Task<GetTollcollectorFeeSummaryReportDto> GetTollcollectorFeeSummaryReportAsync(GetTollcollectorFeeSummaryReportRequestDto input)
							 | 
						|
								        {
							 | 
						|
								            #region 收费
							 | 
						|
								            var chargeQuery = from a in await _chargeRepository.GetQueryableAsync()
							 | 
						|
								                              join b in await _chargePayRepository.GetQueryableAsync() on a.Id equals b.ChargeId
							 | 
						|
								                              join d in await _userRepository.GetQueryableAsync() on a.CreatorId equals d.Id into dd
							 | 
						|
								                              from ad in dd.DefaultIfEmpty()
							 | 
						|
								                              select new
							 | 
						|
								                              {
							 | 
						|
								                                  a,
							 | 
						|
								                                  b,
							 | 
						|
								                                  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 GetTollcollectorFeeSummaryReport_Detail
							 | 
						|
								            {
							 | 
						|
								                ChargeBackMoney = 0,
							 | 
						|
								                ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.ChargeMoney), 2),
							 | 
						|
								                ChargeName = s.FirstOrDefault().UserName,
							 | 
						|
								                TotalMoney = 0
							 | 
						|
								            }).ToList();
							 | 
						|
								            #endregion
							 | 
						|
								
							 | 
						|
								            #region 退费
							 | 
						|
								
							 | 
						|
								            var chargeBackQuery = from a in await _chargeBackRepository.GetQueryableAsync()
							 | 
						|
								                                  join b in await _chargeBackPayRepository.GetQueryableAsync() on a.Id equals b.ChargeBackId
							 | 
						|
								                                  join d in await _userRepository.GetQueryableAsync() on a.CreatorId equals d.Id into dd
							 | 
						|
								                                  from ad in dd.DefaultIfEmpty()
							 | 
						|
								                                  select new
							 | 
						|
								                                  {
							 | 
						|
								                                      a,
							 | 
						|
								                                      b,
							 | 
						|
								                                      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 GetTollcollectorFeeSummaryReport_Detail
							 | 
						|
								            {
							 | 
						|
								                ChargeBackMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.BackMoeny), 2),
							 | 
						|
								                ChargeMoney = 0,
							 | 
						|
								                ChargeName = s.FirstOrDefault().UserName,
							 | 
						|
								                TotalMoney = 0
							 | 
						|
								            }).ToList();
							 | 
						|
								            #endregion
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            #region 拼接收费数据
							 | 
						|
								
							 | 
						|
								            List<GetTollcollectorFeeSummaryReport_Detail> tollcollectorFeeSummaryReport_Detail = new List<GetTollcollectorFeeSummaryReport_Detail>();
							 | 
						|
								
							 | 
						|
								            //去重科室Id
							 | 
						|
								            var ChargeNameList = chargeDetails.Select(s => s.ChargeName).Union(chargeBackDetails.Select(s => s.ChargeName));
							 | 
						|
								
							 | 
						|
								            foreach (var item in ChargeNameList)
							 | 
						|
								            {
							 | 
						|
								
							 | 
						|
								                var tempData = chargeDetails.Where(m => m.ChargeName == item).FirstOrDefault();
							 | 
						|
								
							 | 
						|
								                if (tempData != null)
							 | 
						|
								                {
							 | 
						|
								                    var chargeBackDetail = chargeBackDetails.Where(m => m.ChargeName == item).FirstOrDefault();
							 | 
						|
								                    if (chargeBackDetail != null)
							 | 
						|
								                    {
							 | 
						|
								                        tempData.ChargeBackMoney = chargeBackDetail.ChargeBackMoney;
							 | 
						|
								                    }
							 | 
						|
								                }
							 | 
						|
								                else
							 | 
						|
								                {
							 | 
						|
								                    tempData = chargeBackDetails.Where(m => m.ChargeName == item).FirstOrDefault();
							 | 
						|
								                }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								                tempData.TotalMoney = tempData.ChargeMoney - tempData.ChargeBackMoney;
							 | 
						|
								
							 | 
						|
								                tollcollectorFeeSummaryReport_Detail.Add(tempData);
							 | 
						|
								            }
							 | 
						|
								
							 | 
						|
								            #endregion
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								            decimal sumChargeMoney = tollcollectorFeeSummaryReport_Detail.Any() ? DataHelper.DecimalRetainDecimals(tollcollectorFeeSummaryReport_Detail.Sum(s => s.ChargeMoney), 2) : 0;
							 | 
						|
								            decimal sumChargeBackMoney = tollcollectorFeeSummaryReport_Detail.Any() ? DataHelper.DecimalRetainDecimals(tollcollectorFeeSummaryReport_Detail.Sum(s => s.ChargeBackMoney), 2) : 0;
							 | 
						|
								            decimal sumTotalMoney = tollcollectorFeeSummaryReport_Detail.Any() ? DataHelper.DecimalRetainDecimals(tollcollectorFeeSummaryReport_Detail.Sum(s => s.TotalMoney), 2) : 0;
							 | 
						|
								
							 | 
						|
								            var tollcollectorFeeSummaryReportDto = new GetTollcollectorFeeSummaryReportDto
							 | 
						|
								            {
							 | 
						|
								                Details = tollcollectorFeeSummaryReport_Detail,
							 | 
						|
								                SumChargeMoney = sumChargeMoney,
							 | 
						|
								                SumChargeBackMoney = sumChargeBackMoney,
							 | 
						|
								                SumTotalMoney = sumTotalMoney
							 | 
						|
								            };
							 | 
						|
								
							 | 
						|
								            return tollcollectorFeeSummaryReportDto;
							 | 
						|
								
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /// <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 = DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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() ? DataHelper.DecimalRetainDecimals(projectFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0;
							 | 
						|
								            decimal sumDiscountMoney = projectFeesReport_Details.Any() ? DataHelper.DecimalRetainDecimals(projectFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0;
							 | 
						|
								            decimal sumReceivedChargeMoney = projectFeesReport_Details.Any() ? DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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 = DataHelper.DecimalRetainDecimals(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() ? DataHelper.DecimalRetainDecimals(summaryOfDepartmentalFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0;
							 | 
						|
								            decimal sumDiscountMoney = summaryOfDepartmentalFeesReport_Details.Any() ? DataHelper.DecimalRetainDecimals(summaryOfDepartmentalFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0;
							 | 
						|
								            decimal sumReceivedChargeMoney = summaryOfDepartmentalFeesReport_Details.Any() ? DataHelper.DecimalRetainDecimals(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-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 = DataHelper.DecimalRetainDecimals(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;
							 | 
						|
								
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    }
							 | 
						|
								}
							 |