diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsDto.cs
new file mode 100644
index 0000000..3b6ec0f
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsDto.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.CustomerReports
+{
+ public class GetCustomerOrgPhysicalExaminationStatisticsDto
+ {
+ ///
+ /// 单位名称
+ ///
+ public string CustomerOrgName { get; set; }
+
+ ///
+ /// 单位Id
+ ///
+ public Guid CustomerOrgId { get; set; }
+
+ ///
+ /// 人次 登记人数
+ ///
+ public int RegisterCount { get; set; }
+
+ ///
+ /// 已检人次 总检
+ ///
+ public int CheckCount { get; set; }
+
+ ///
+ /// 标准均价
+ ///
+ public decimal AvgStandardPrice { get; set; }
+ ///
+ /// 实收均价
+ ///
+ public decimal AvgChargePrice { get; set; }
+
+
+ ///
+ /// 标准价格总金额
+ ///
+ public decimal SumStandardPrice { get; set; }
+ ///
+ /// 实收价格总金额
+ ///
+ public decimal SumChargePrice { get; set; }
+ }
+
+ public class GetCustomerOrgPhysicalExaminationStatisticsPatientRegisterGroupDto
+ {
+ public Guid PatientRegisterId { get; set; }
+
+ public char CompleteFlag { get; set; }
+
+ ///
+ /// 单位名称
+ ///
+ public string CustomerOrgName { get; set; }
+
+ ///
+ /// 单位Id
+ ///
+ public Guid CustomerOrgId { get; set; }
+
+ ///
+ /// 标准
+ ///
+ public decimal StandardPrice { get; set; }
+ ///
+ /// 实收
+ ///
+ public decimal ChargePrice { get; set; }
+
+
+
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsInputDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsInputDto.cs
new file mode 100644
index 0000000..547476a
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrgPhysicalExaminationStatisticsInputDto.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.CustomerReports
+{
+ public class GetCustomerOrgPhysicalExaminationStatisticsInputDto
+ {
+ public List CustomerOrgIds { get; set; }
+
+ ///
+ /// 日期类型(1、登记日期 2、体检日期 3、总检日期)
+ ///
+ [Required(ErrorMessage = "日期类型不能为空")]
+ public char DateType { get; set; }
+
+ ///
+ /// 开始日期
+ ///
+ [Required(ErrorMessage = "开始日期不能为空")]
+ public string StartDate { get; set; }
+
+
+ ///
+ /// 结束日期
+ ///
+ [Required(ErrorMessage = "结束日期不能为空")]
+ public string EndDate { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs b/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs
index 6ba7b8b..95c0dfb 100644
--- a/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs
+++ b/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs
@@ -293,7 +293,7 @@ namespace Shentun.Peis.CustomerOrgs
CustomerOrgCode = s.CustomerOrgCode,
ParentId = s.ParentId,
DisplayName = s.DisplayName,
- DisplayOrder = s.DisplayOrder,
+ DisplayOrder = s.Id == GuidFlag.PersonCustomerOrgId ? 99999 : s.DisplayOrder,
Id = s.Id,
ShortName = s.ShortName,
SimpleCode = s.SimpleCode,
@@ -357,7 +357,7 @@ namespace Shentun.Peis.CustomerOrgs
CustomerOrgCode = p.CustomerOrgCode,
TreeChildren = new List()
};
-
+
var customerOrgTreeChildList = GetTree(items.ToList(), null);
diff --git a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs
index b22ddc6..85c418b 100644
--- a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs
+++ b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs
@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using NPOI.HPSF;
+using NPOI.POIFS.Properties;
using NPOI.POIFS.Storage;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
@@ -11,6 +12,7 @@ using NPOI.XSSF.UserModel.Extensions;
using Org.BouncyCastle.Crypto.Tls;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
+using Shentun.Peis.InternalReports;
using Shentun.Peis.Models;
using Shentun.Peis.PeisReports;
using Shentun.Peis.ReportTemplates;
@@ -2292,6 +2294,91 @@ namespace Shentun.Peis.CustomerReports
}
+ ///
+ /// 单位体检数据统计
+ ///
+ ///
+ [HttpPost("api/app/CustomerReport/GetCustomerOrgPhysicalExaminationStatistics")]
+ public async Task> GetCustomerOrgPhysicalExaminationStatisticsAsync(GetCustomerOrgPhysicalExaminationStatisticsInputDto input)
+ {
+
+ var qeruy = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
+ join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
+ join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
+ join customerOrg in await _customerOrgRepository.GetQueryableAsync() on patientRegister.CustomerOrgId equals customerOrg.Id
+ join customerOrgParent in await _customerOrgRepository.GetQueryableAsync()
+ on customerOrg.PathCode.Substring(0, 5) equals customerOrgParent.PathCode
+ select new
+ {
+ patientRegister,
+ registerCheckAsbitem,
+ customerOrgParent
+ };
+
+
+
+ if (input.CustomerOrgIds.Any())
+ {
+ List CustomerOrgIds = new List();
+
+ foreach (var item in input.CustomerOrgIds)
+ {
+ CustomerOrgIds.AddRange(await _customerOrgManager.GetCustomerOrgChildrenId(item));
+ }
+
+ qeruy = qeruy.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
+ }
+
+ if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
+ {
+ if (input.DateType == '1')
+ {
+ qeruy = qeruy.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
+ m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
+ }
+ else if (input.DateType == '2')
+ {
+ qeruy = qeruy.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) &&
+ m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1));
+ }
+ else if (input.DateType == '3')
+ {
+ qeruy = qeruy.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate >= Convert.ToDateTime(input.StartDate) &&
+ m.patientRegister.SummaryDate < Convert.ToDateTime(input.EndDate).AddDays(1));
+ }
+ }
+
+
+ var patientRegisterGroup = qeruy.ToList().GroupBy(g => g.patientRegister.Id);
+ var patientRegisterGroupList = patientRegisterGroup.Select(s => new GetCustomerOrgPhysicalExaminationStatisticsPatientRegisterGroupDto
+ {
+ PatientRegisterId = s.First().patientRegister.Id,
+ CompleteFlag = s.First().patientRegister.CompleteFlag,
+ StandardPrice = s.Sum(ss => ss.registerCheckAsbitem.StandardPrice * ss.registerCheckAsbitem.Amount),
+ ChargePrice = s.Sum(ss => ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount),
+ CustomerOrgId = s.First().customerOrgParent.Id,
+ CustomerOrgName = s.First().customerOrgParent.DisplayName,
+ }).ToList();
+
+
+
+ var customerOrgGroup = patientRegisterGroupList.GroupBy(g => g.CustomerOrgId);
+
+ var customerOrgGrouplist = customerOrgGroup.Select(s => new GetCustomerOrgPhysicalExaminationStatisticsDto
+ {
+ CustomerOrgName = s.First().CustomerOrgName,
+ CustomerOrgId = s.First().CustomerOrgId,
+ CheckCount = s.Where(m => m.CompleteFlag == PatientRegisterCompleteFlag.SumCheck).Count(),
+ RegisterCount = s.Count(),
+ AvgChargePrice = Math.Round(s.Average(v => v.ChargePrice), 2),
+ AvgStandardPrice = Math.Round(s.Average(v => v.StandardPrice), 2),
+ SumChargePrice = Math.Round(s.Sum(v => v.ChargePrice), 2),
+ SumStandardPrice = Math.Round(s.Sum(v => v.StandardPrice), 2)
+ }).OrderByDescending(o => o.RegisterCount).ToList();
+
+ return customerOrgGrouplist;
+
+ }