diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsDto.cs
new file mode 100644
index 0000000..39d5354
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsDto.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInFeeDetailsDto
+    {
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+        /// 
+        /// 体检次数
+        /// 
+        public short MedicalTimes { get; set; }
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 性别
+        /// 
+        public string SexName { get; set; }
+
+
+        /// 
+        /// 年龄
+        /// 
+        public short? Age { get; set; }
+
+        /// 
+        /// 组合项目名称
+        /// 
+        public string AsbitemName { get; set; }
+
+
+        /// 
+        /// 标准金额
+        /// 
+        public decimal StandardPrice { get; set; }
+
+        /// 
+        /// 实收金额
+        /// 
+        public decimal CharePrice { get; set; }
+
+        /// 
+        /// 折扣
+        /// 
+        public string Discount { get; set;}
+
+
+
+        /// 
+        /// 记账人
+        /// 
+        public string BookKeepingName { get; set; }
+
+        /// 
+        /// 记账时间
+        /// 
+        public string BookkeepingTiem { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsRequestDto.cs
new file mode 100644
index 0000000..fe1fd14
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeDetailsRequestDto.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInFeeDetailsRequestDto
+    {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryDto.cs
new file mode 100644
index 0000000..4dce734
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryDto.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInFeeSummaryDto
+    {
+        /// 
+        /// 应收总金额
+        /// 
+        public decimal SumChargeMoney { get; set; }
+
+        /// 
+        /// 折扣总金额
+        /// 
+        public decimal SumDiscountMoney { get; set; }
+
+        /// 
+        /// 实收总金额
+        /// 
+        public decimal SumReceivedChargeMoney { get; set; }
+
+
+        /// 
+        /// 收费人数
+        /// 
+        public int ChargeCount { get; set; }
+
+        /// 
+        /// 明细
+        /// 
+        public List Details { get; set; }
+    }
+
+    public class GetPersonalFeeDetailsReportInFeeSummary_Detail
+    {
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 性别
+        /// 
+        public string SexName { get; set; }
+
+
+        /// 
+        /// 年龄
+        /// 
+        public short? Age { get; set; }
+
+
+
+
+        /// 
+        /// 应收金额
+        /// 
+        public decimal ChargeMoney { get; set; }
+
+
+
+        /// 
+        /// 折扣金额
+        /// 
+        public decimal DiscountMoney { get; set; }
+
+        /// 
+        /// 实收金额
+        /// 
+        public decimal ReceivedChargeMoney { get; set; }
+
+        /// 
+        /// 收费人
+        /// 
+        public string BookKeepingName { get; set; }
+
+        /// 
+        /// 收费时间
+        /// 
+        public string BookkeepingTiem { get; set; }
+
+
+        /// 
+        /// 记账模式   收费/退费
+        /// 
+        public string ChargeFlagName { get; set; }
+
+        /// 
+        /// 支付方式明细
+        /// 
+        public List PayModes { get; set; }
+    }
+
+    public class GetPersonalFeeDetailsReportInFeeSummary_PayMode
+    {
+        /// 
+        /// 支付方式
+        /// 
+        public string PayModeName { get; set; }
+
+        /// 
+        /// 实收金额
+        /// 
+        public decimal ReceivedChargeMoney { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryRequestDto.cs
new file mode 100644
index 0000000..5171f14
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInFeeSummaryRequestDto.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInFeeSummaryRequestDto
+    {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsDto.cs
new file mode 100644
index 0000000..fab356a
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsDto.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInRefundDetailsDto
+    {
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+        /// 
+        /// 体检次数
+        /// 
+        public short MedicalTimes { get; set; }
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 性别
+        /// 
+        public string SexName { get; set; }
+
+
+        /// 
+        /// 年龄
+        /// 
+        public short? Age { get; set; }
+
+        /// 
+        /// 组合项目名称
+        /// 
+        public string AsbitemName { get; set; }
+
+
+        /// 
+        /// 标准金额
+        /// 
+        public decimal StandardPrice { get; set; }
+
+        /// 
+        /// 实收金额
+        /// 
+        public decimal CharePrice { get; set; }
+
+        /// 
+        /// 折扣
+        /// 
+        public string Discount { get; set; }
+
+
+
+        /// 
+        /// 记账人
+        /// 
+        public string BookKeepingName { get; set; }
+
+        /// 
+        /// 记账时间
+        /// 
+        public string BookkeepingTiem { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsRequestDto.cs
new file mode 100644
index 0000000..c70cca0
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetPersonalFeeDetailsReportInRefundDetailsRequestDto.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetPersonalFeeDetailsReportInRefundDetailsRequestDto
+    {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 档案号
+        /// 
+        public string PatientNo { get; set; }
+
+        /// 
+        /// 姓名
+        /// 
+        public string PatientName { get; set; }
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemDto.cs
new file mode 100644
index 0000000..14b8cc2
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemDto.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetTollCollectorFeeReportInAsbitemDto
+    {
+        /// 
+        /// 项目类别==科室名字
+        /// 
+        public string ItemTypeName { get; set; }
+
+        /// 
+        /// 小计
+        /// 
+        public decimal TotalMoney { get; set; }
+
+        /// 
+        /// 明细
+        /// 
+        public List Details { get; set; }
+    }
+
+    public class GetTollCollectorFeeReportInAsbitem_Detail
+    {
+        /// 
+        /// 项目类别==科室名字
+        /// 
+        public string ItemTypeName { get; set; }
+
+        /// 
+        /// 组合项目名称
+        /// 
+        public string AsbitemName { get; set; }
+
+        /// 
+        /// 收款金额
+        /// 
+        public decimal ChargeMoney { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemRequestDto.cs
new file mode 100644
index 0000000..c95aed7
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInAsbitemRequestDto.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetTollCollectorFeeReportInAsbitemRequestDto
+    {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs
index 6081cb1..bd6873d 100644
--- a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollCollectorFeeReportInInvoiceTypeRequestDto.cs
@@ -1,10 +1,27 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Text;
 
 namespace Shentun.Peis.ChargeReports
 {
-    public class GetTollCollectorFeeReportInInvoiceTypeRequestDto: GetTollCollectorFeeReportInPayModeRequestDto
+    public class GetTollCollectorFeeReportInInvoiceTypeRequestDto
     {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
     }
 }
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportDto.cs
new file mode 100644
index 0000000..f14d548
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportDto.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetTollcollectorFeeSummaryReportDto
+    {
+        /// 
+        /// 实收总金额
+        /// 
+        public decimal SumChargeMoney { get; set; }
+
+        /// 
+        /// 退费总金额
+        /// 
+        public decimal SumChargeBackMoney { get; set; }
+
+
+        /// 
+        /// 合计总金额
+        /// 
+        public decimal SumTotalMoney { get; set; }
+
+
+        /// 
+        /// 明细
+        /// 
+        public List Details { get; set; }
+    }
+
+
+    public class GetTollcollectorFeeSummaryReport_Detail
+    {
+        /// 
+        /// 收费员
+        /// 
+        public string ChargeName { get; set; }
+
+
+        /// 
+        /// 收费金额
+        /// 
+        public decimal ChargeMoney { get; set; }
+
+        /// 
+        /// 退费金额
+        /// 
+        public decimal ChargeBackMoney { get; set; }
+
+        /// 
+        /// 合计金额
+        /// 
+        public decimal TotalMoney { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportRequestDto.cs b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportRequestDto.cs
new file mode 100644
index 0000000..c4de0ab
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/ChargeReports/GetTollcollectorFeeSummaryReportRequestDto.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Shentun.Peis.ChargeReports
+{
+    public class GetTollcollectorFeeSummaryReportRequestDto
+    {
+        /// 
+        /// 收费员ID 集合
+        /// 
+        public List UserIds { get; set; } = new List();
+
+        /// 
+        /// 开始日期
+        /// 
+        [Required(ErrorMessage = "开始日期不能为空")]
+        public string StartDate { get; set; }
+
+        /// 
+        /// 结束日期
+        /// 
+        [Required(ErrorMessage = "结束日期不能为空")]
+        public string EndDate { get; set; }
+    }
+}
diff --git a/src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs b/src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
index 8c330c0..dc4cc99 100644
--- a/src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
+++ b/src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
@@ -1,9 +1,12 @@
-using Microsoft.AspNetCore.Authorization;
+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;
@@ -14,6 +17,7 @@ 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
@@ -40,6 +44,8 @@ namespace Shentun.Peis.ChargeReports
         private readonly IRepository _customerOrgRegisterRepository;
         private readonly IRepository _customerOrgRepository;
         private readonly IRepository _itemTypeRepository;
+        private readonly IRepository _patientRepository;
+        private readonly IRepository _sexRepository;
         private readonly ItemTypeManager _itemTypeManager;
         public ChargeReportAppService(
             IRepository chargeRepository,
@@ -57,7 +63,9 @@ namespace Shentun.Peis.ChargeReports
             IRepository customerOrgRepository,
             IRepository itemTypeRepository,
             ItemTypeManager itemTypeManager
-            )
+,
+            IRepository patientRepository,
+            IRepository sexRepository)
         {
             _chargeRepository = chargeRepository;
             _chargeBackRepository = chargeBackRepository;
@@ -74,6 +82,8 @@ namespace Shentun.Peis.ChargeReports
             _customerOrgRepository = customerOrgRepository;
             _itemTypeRepository = itemTypeRepository;
             _itemTypeManager = itemTypeManager;
+            _patientRepository = patientRepository;
+            _sexRepository = sexRepository;
         }
 
 
@@ -119,7 +129,7 @@ namespace Shentun.Peis.ChargeReports
                 PayModeDetails = s.GroupBy(gg => gg.b.PayModeId).Select(ss => new GetChargeAndChargeBackSummary_PayModeDetail
                 {
                     PayModeName = ss.FirstOrDefault().PayModeName,
-                    Money = Math.Round(ss.Sum(sss => sss.b.ChargeMoney), 2)
+                    Money = DataHelper.DecimalRetainDecimals(ss.Sum(sss => sss.b.ChargeMoney), 2)
                 }).ToList()
             });
             #endregion
@@ -158,7 +168,7 @@ namespace Shentun.Peis.ChargeReports
                 PayModeDetails = s.GroupBy(gg => gg.b.PayModeId).Select(ss => new GetChargeAndChargeBackSummary_PayModeDetail
                 {
                     PayModeName = ss.FirstOrDefault().PayModeName,
-                    Money = Math.Round(ss.Sum(sss => sss.b.BackMoeny), 2)
+                    Money = DataHelper.DecimalRetainDecimals(ss.Sum(sss => sss.b.BackMoeny), 2)
                 }).ToList()
             });
             #endregion
@@ -229,7 +239,7 @@ namespace Shentun.Peis.ChargeReports
                 ChargeCount = chargeQuery.GroupBy(g => g.a.Id).Count(),
                 ChargeBackCount = chargeBackQuery.GroupBy(g => g.a.Id).Count(),
                 ChargeDetails = chargeAndChargeBackDetails,
-                SumTotalMoney = chargeAndChargeBackDetails.Any() ? Math.Round(chargeAndChargeBackDetails.Sum(s => s.TotalMoney), 2) : 0
+                SumTotalMoney = chargeAndChargeBackDetails.Any() ? DataHelper.DecimalRetainDecimals(chargeAndChargeBackDetails.Sum(s => s.TotalMoney), 2) : 0
             };
 
 
@@ -280,7 +290,7 @@ namespace Shentun.Peis.ChargeReports
             var chargeDetails = chargeQuery.GroupBy(g => g.ac.InvoiceItemTypeId).Select(s => new GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail
             {
                 InvoiceTypeName = s.FirstOrDefault().InvoiceItemTypeName,
-                InvoiceTypeMoney = Math.Round(s.Sum(ss => ss.b.Amount * ss.b.ChargePrice), 2)
+                InvoiceTypeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.Amount * ss.b.ChargePrice), 2)
             }).ToList();
             #endregion
 
@@ -319,7 +329,7 @@ namespace Shentun.Peis.ChargeReports
             var chargeBackDetails = chargeBackQuery.GroupBy(g => g.ad.InvoiceItemTypeId).Select(s => new GetTollCollectorFeeReportInInvoiceType_InvoiceTypeDetail
             {
                 InvoiceTypeName = s.FirstOrDefault().InvoiceItemTypeName,
-                InvoiceTypeMoney = Math.Round(s.Sum(ss => ss.c.Amount * ss.c.ChargePrice), 2)
+                InvoiceTypeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.c.Amount * ss.c.ChargePrice), 2)
             }).ToList();
 
 
@@ -329,10 +339,10 @@ namespace Shentun.Peis.ChargeReports
             string chargeDate = Convert.ToDateTime(input.StartDate).ToString("yyyy年MM月dd日") + "到" + Convert.ToDateTime(input.EndDate).ToString("yyyy年MM月dd日");
 
             //收款合计
-            decimal chargeTotalMoney = chargeDetails.Any() ? Math.Round(chargeDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0;
+            decimal chargeTotalMoney = chargeDetails.Any() ? DataHelper.DecimalRetainDecimals(chargeDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0;
 
             //退费合计
-            decimal chargeBackTotalMoney = chargeBackDetails.Any() ? Math.Round(chargeBackDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0;
+            decimal chargeBackTotalMoney = chargeBackDetails.Any() ? DataHelper.DecimalRetainDecimals(chargeBackDetails.Sum(s => s.InvoiceTypeMoney), 2) : 0;
 
             var tollCollectorFeeReportInInvoiceTypeDto = new GetTollCollectorFeeReportInInvoiceTypeDto
             {
@@ -358,8 +368,439 @@ namespace Shentun.Peis.ChargeReports
 
         }
 
+        /// 
+        /// 收费员收费报表  按组合项目
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/charge-report/get-toll-collector-fee-report-in-asbitem")]
+        public async Task> 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;
+
+
+        }
+
+
+        /// 
+        /// 个人收费明细报表  按收费明细
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-fee-details")]
+        public async Task> 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;
+        }
+
+
+        /// 
+        /// 个人收费明细报表  按退费明细  
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-refund-details")]
+        public async Task> 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;
+        }
+
+
+
+        /// 
+        /// 个人收费明细报表  按收费汇总
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/charge-report/get-Personal-Fee-Details-report-in-fee-summary")]
+        public async Task 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;
+        }
+
+
+
+        /// 
+        /// 收费人收费汇总报表
+        /// 
+        /// 
+        /// 
+        [HttpPost("api/app/charge-report/get-toll-collector-fee-summary-report")]
+        public async Task 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 tollcollectorFeeSummaryReport_Detail = new List();
+
+            //去重科室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;
+
+        }
 
 
         /// 
@@ -421,7 +862,7 @@ namespace Shentun.Peis.ChargeReports
                 AsbitemId = s.Key.AsbitemId,
                 ItemTypeName = s.FirstOrDefault().ItemTypeName,
                 AsbitemName = s.FirstOrDefault().AsbitemName,
-                ChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2),
+                ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2),
                 ReceivedChargeMoney = 0
             }).ToList();
 
@@ -470,7 +911,7 @@ namespace Shentun.Peis.ChargeReports
                 AsbitemId = s.Key.AsbitemId,
                 ItemTypeName = s.FirstOrDefault().ItemTypeName,
                 AsbitemName = s.FirstOrDefault().AsbitemName,
-                ReceivedChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2),
+                ReceivedChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2),
                 ChargeMoney = 0
             }).ToList();
 
@@ -511,9 +952,9 @@ namespace Shentun.Peis.ChargeReports
             #endregion
 
 
-            decimal sumChargeMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0;
-            decimal sumDiscountMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0;
-            decimal sumReceivedChargeMoney = projectFeesReport_Details.Any() ? Math.Round(projectFeesReport_Details.Sum(s => s.ReceivedChargeMoney), 2) : 0;
+            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
@@ -579,7 +1020,7 @@ namespace Shentun.Peis.ChargeReports
             {
                 ItemTypeId = s.Key,
                 ItemTypeName = s.FirstOrDefault().ItemTypeName,
-                ChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2),
+                ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.a.Amount.Value * ss.a.ChargePrice.Value), 2),
                 ReceivedChargeMoney = 0
             }).ToList();
 
@@ -620,7 +1061,7 @@ namespace Shentun.Peis.ChargeReports
             {
                 ItemTypeId = s.Key,
                 ItemTypeName = s.FirstOrDefault().ItemTypeName,
-                ReceivedChargeMoney = Math.Round(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2),
+                ReceivedChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.a.Amount * ss.a.ChargePrice), 2),
                 ChargeMoney = 0
             }).ToList();
 
@@ -661,9 +1102,9 @@ namespace Shentun.Peis.ChargeReports
             #endregion
 
 
-            decimal sumChargeMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.ChargeMoney), 2) : 0;
-            decimal sumDiscountMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.DiscountMoney), 2) : 0;
-            decimal sumReceivedChargeMoney = summaryOfDepartmentalFeesReport_Details.Any() ? Math.Round(summaryOfDepartmentalFeesReport_Details.Sum(s => s.ReceivedChargeMoney), 2) : 0;
+            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
@@ -714,7 +1155,7 @@ namespace Shentun.Peis.ChargeReports
             {
                 CustomerOrgName = s.FirstOrDefault().CustomerOrgName,
                 SummaryCount = s.Count(),
-                ChargeMoney = Math.Round(s.Sum(ss => ss.b.Amount.Value * ss.b.ChargePrice.Value), 2)
+                ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.Amount.Value * ss.b.ChargePrice.Value), 2)
             }).ToList();
 
 
diff --git a/src/Shentun.Peis.Domain/DataHelper.cs b/src/Shentun.Peis.Domain/DataHelper.cs
index 717e61f..92f1cee 100644
--- a/src/Shentun.Peis.Domain/DataHelper.cs
+++ b/src/Shentun.Peis.Domain/DataHelper.cs
@@ -357,7 +357,21 @@ namespace Shentun.Peis
             return birthday;
 
         }
-
+        /// 
+        /// 保留小数 转换decimal
+        /// 
+        /// 
+        /// 
+        /// 
+        public static decimal DecimalRetainDecimals(decimal? value, int decimalLength)
+        {
+            decimal newValue = 0;
+            if (value != null)
+            {
+                Math.Round(value.Value, decimalLength);
+            }
+            return newValue;
+        }
 
         #region 数据检查
 
@@ -512,7 +526,7 @@ namespace Shentun.Peis
         /// 
         public static void CheckDecimalIsNull(decimal? value, string parameterName, string ExceptionMessage = "不能为空")
         {
-            if (value == null )
+            if (value == null)
             {
                 throw new UserFriendlyException($"{parameterName}{ExceptionMessage}");
             }