From e08d70b9e610a2c176b88cb092d580754e009de5 Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期二, 01 四月 2025 15:41:04 +0800
Subject: [PATCH] 统计

---
 LifePayment/LifePayment.Domain/LifePay/LifePayConsumption.cs                |   72 ++++++++
 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml  |  115 ++++++++++++
 LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs          |   36 ++++
 LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs                |   19 ++
 LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs |    2 
 LifePayment/LifePayment.Application.Contracts/LifePay/IStatisticsService.cs |    3 
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs       |   21 ++
 LifePayment/LifePayment.Application/LifePay/StatisticsService.cs            |  127 +++++++++++++-
 LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs           |    2 
 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs      |  115 ++++++++++++
 LifePayment/LifePayment.Domain/LifePay/DallyStatistics.cs                   |    5 
 LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs           |   16 +
 LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml                 |    7 
 13 files changed, 527 insertions(+), 13 deletions(-)

diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/IStatisticsService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/IStatisticsService.cs
index 14477ef..4e37cda 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/IStatisticsService.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/IStatisticsService.cs
@@ -12,4 +12,7 @@
 {
     Task<TopStatisticsOutput> GetTopStatistics(List<string>? channleList = null);
 
+    Task<ReceiptsListOutPut> GetReceiptsList(List<string>? channleList = null);
+
+    Task<ChannelDataListOutPut> GetChannelDataList(List<string>? channleList = null);
 }
\ No newline at end of file
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
index 408752d..7190e9a 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs
@@ -593,7 +593,28 @@
     public decimal Profit { get; set; }
 
 }
+public class LifePayConsumptionPageInput : ChannelsBaseInput
+{
+    /// <summary>
+    /// 鏌ヨ鏉′欢
+    /// </summary>
+    public string? KeyWord { get; set; }
 
+    /// <summary>
+    /// 璧勯噾娴佸悜
+    /// </summary>
+    public ConsumptionFlowEnum? Flow { get; set; }
+
+    /// <summary>
+    /// 璁拌处寮�濮嬫椂闂�
+    /// </summary>
+    public DateTime? TimeBegin { get; set; }
+
+    /// <summary>
+    /// 璁拌处缁撴潫鏃堕棿
+    /// </summary>
+    public DateTime? TimeEnd { get; set; }
+}
 public class LifePayRechargeReceiptsPageInput : ChannelsBaseInput
 {
     /// <summary>
diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
index 1d624a9..4c1531b 100644
--- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
+++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -1096,6 +1096,7 @@
     /// </summary>
     public int YesterdayActiveUsers { get; set; }
 
+
 }
 
 public class ChannelRateOutput
@@ -1150,6 +1151,54 @@
     /// 璁拌处鏃堕棿
     /// </summary>
     public DateTime CreationTime { get; set; }
+}
+
+public class LifePayConsumptionListOutput
+{
+    /// <summary>
+    /// 缂栧彿
+    /// </summary>
+    public Guid Id { get; set; }
+
+    // <summary>
+    /// 骞冲彴璁㈠崟鍙�
+    /// </summary>
+    public string OrderNo { get; set; }
+
+    /// <summary>
+    /// 娓犻亾娴佹按鍙�
+    /// </summary>
+    public string OutOrderNo { get; set; }
+
+    /// <summary>
+    /// 浜ゆ槗閲戦
+    /// </summary>
+    public decimal Amount { get; set; }
+
+    /// <summary>
+    /// 璁拌处鏃堕棿
+    /// </summary>
+    public DateTime FinishTime { get; set; }
+
+    /// <summary>
+    /// 鍐荤粨鐘舵��
+    /// </summary>
+    public ConsumptionFrozenStatusEnum FrozenStatus { get; set; }
+
+    /// <summary>
+    /// 璧勯噾娴佸悜
+    /// </summary>
+    public ConsumptionFlowEnum Flow { get; set; }
+
+    /// <summary>
+    /// 鎵f閲戦
+    /// </summary>
+    public decimal DeductionAmount { get; set; }
+
+    /// <summary>
+    /// 鍐荤粨閲戦
+    /// </summary>
+    public decimal FrozenAmount { get; set; }
 }
 
 public class LifePayPhoneMesssageCodeLoginOutput
@@ -1260,13 +1309,77 @@
 public class ReceiptsListOutPut
 {
     /// <summary>
+    /// 30澶╂敹娆�
+    /// </summary>
+    public List<ReceiptsDetail> ReceiveList { get; set; } = new List<ReceiptsDetail>();
+
+    /// <summary>
+    /// 30澶╂敹鍏�
+    /// </summary>
+    public List<ReceiptsDetail> IncomeList { get; set; } = new List<ReceiptsDetail>();
+}
+
+public class ReceiptsDetail
+{
+    /// <summary>
     /// 鍒涘缓鏃堕棿
     /// </summary>
-    public DateTime CreationTime { get; set; }
+    public string CreationTime { get; set; }
 
+    /// <summary>
+    /// 閲戦
+    /// </summary>
     public decimal Amount { get; set; }
 }
 
+public class ChannelDataListOutPut
+{
+    /// <summary>
+    /// Top5娓犻亾鏀舵
+    /// </summary>
+    public List<ChannelDataReceive> ReceiveList { get; set; } = new List<ChannelDataReceive>();
+
+    /// <summary>
+    /// Top5娓犻亾鐢ㄦ埛
+    /// </summary>
+    public List<ChannelDataUserNumber> UserNumberList { get; set; } = new List<ChannelDataUserNumber>();
+
+}
+
+public class ChannelDataReceive
+{
+    /// <summary>
+    /// 娓犻亾缂栧彿
+    /// </summary>
+    public string ChannelId { get; set; }
+
+    /// <summary>
+    /// 鏀舵
+    /// </summary>
+    public decimal ReceivePrice { get; set; }
+
+    /// <summary>
+    /// 浣i噾
+    /// </summary>
+    public decimal ChannlesRakePrice { get; set; }
+
+}
+
+public class ChannelDataUserNumber
+{
+    /// <summary>
+    /// 娓犻亾缂栧彿
+    /// </summary>
+    public string ChannelId { get; set; }
+
+    /// <summary>
+    /// 鐢ㄦ埛鏁伴噺
+    /// </summary>
+    public int Number { get; set; }
+
+}
+
+
 public class LifePayChannlesRakeListOutput
 {
 
diff --git a/LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs b/LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs
index 19822f8..b111635 100644
--- a/LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs
+++ b/LifePayment/LifePayment.Application.Contracts/User/QrCodeLogin.cs
@@ -89,7 +89,7 @@
         public string[] RoleNames { get; set; }
 
         /// <summary>
-        /// 娓犻亾鍒楄〃
+        /// 娓犻亾缂栧彿
         /// </summary>
         public string[] ChannlesId { get; set; }
 
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
index 856e067..aa03716 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -23,6 +23,7 @@
     {
         private readonly IRepository<LifePayRechargeReceipts, Guid> _lifePayRechargeReceiptsRepository;
         private readonly IRepository<LifePayExpensesReceipts, Guid> _lifePayExpensesReceiptsRepository;
+        private readonly IRepository<LifePayConsumption, Guid> _lifePayConsumption;
         private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
         private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository;
         private readonly IAliPayApi _aliPayApi;
@@ -31,6 +32,7 @@
         public LifePayOrderService(
                               IRepository<LifePayRechargeReceipts, Guid> lifePayRechargeReceiptsRepository,
                               IRepository<LifePayExpensesReceipts, Guid> lifePayExpensesReceiptsRepository,
+                              IRepository<LifePayConsumption, Guid> lifePayConsumptionRepository,
                               IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
                               IRepository<LifePayOrder, Guid> lifePayOrderRepository,
                               IAliPayApi aliPayApi,
@@ -38,6 +40,7 @@
         {
             _lifePayRechargeReceiptsRepository = lifePayRechargeReceiptsRepository;
             _lifePayExpensesReceiptsRepository = lifePayExpensesReceiptsRepository;
+            _lifePayConsumption = lifePayConsumptionRepository;
             _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
             _lifePayOrderRepository = lifePayOrderRepository;
             _aliPayApi = aliPayApi;
@@ -45,6 +48,39 @@
         }
 
         #region 鏌ヨ
+
+        /// <summary>
+        /// 鑾峰彇娑堣垂娴佹按
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        public async Task<PageOutput<LifePayConsumptionListOutput>> GetLifePayConsumptionPage(LifePayConsumptionPageInput input)
+        {
+            var list = await _lifePayConsumption.Where(x => x.IsDeleted == false)
+                .WhereIf(input.KeyWord.IsNotNullOrEmpty(), x => x.OrderNo.Contains(input.KeyWord) || x.OutOrderNo.Contains(input.KeyWord) || x.ChannelId.Contains(input.KeyWord))
+                .WhereIf(input.Flow.HasValue,x => x.Flow == input.Flow)
+                .WhereIf(input.TimeBegin.HasValue, x => x.FinishTime >= input.TimeBegin)
+                .WhereIf(input.TimeEnd.HasValue, x => x.FinishTime <= input.TimeEnd)
+                .Select(x => new LifePayConsumptionListOutput()
+                {
+                    Id = x.Id,
+                    OrderNo = x.OrderNo,
+                    OutOrderNo = x.OutOrderNo,
+                    Amount = x.Amount,
+                    FinishTime = x.FinishTime,
+                    FrozenStatus = x.FrozenStatus,
+                    Flow = x.Flow,
+                    DeductionAmount = x.DeductionAmount,
+                })
+                .GetPageResult(input.PageModel);
+
+            var total = await _lifePayRechargeReceiptsRepository.Where(x => x.IsDeleted == false).SumAsync(x => x.RechargeAmount);
+            LifePayRechargeReceiptsStatistics objectData = new LifePayRechargeReceiptsStatistics();
+            objectData.TotalRechargeAmount = total;
+            list.ObjectData = objectData;
+            return list;
+        }
+
         /// <summary>
         /// 鑾峰彇鍏呭�兼祦姘�
         /// </summary>
diff --git a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
index 0ff2fb3..4998753 100644
--- a/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -18,6 +18,7 @@
 using Microsoft.EntityFrameworkCore;
 using System.Threading.Channels;
 using ZeroD.Util;
+using NPOI.SS.Formula.Functions;
 
 namespace LifePayment.Application.LifePay
 {
@@ -26,17 +27,20 @@
         private readonly IRepository<LifePayOrder, Guid> _lifePayOrderRepository;
         private readonly IRepository<LifePayUser, Guid> _lifePayUserRepository;
         private readonly IRepository<DallyStatistics, Guid> _dallyStatisticsRepository;
+        private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
         private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
 
         public StatisticsService(
                               IRepository<LifePayOrder, Guid> lifePayOrderRepository,
                               IRepository<LifePayUser, Guid> lifePayUserRepository,
                             IRepository<DallyStatistics, Guid> dallyStatisticsRepository,
+                            IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
                             IRepository<LifePayChannles, Guid> lifePayChannlesRep)
         {
             _lifePayOrderRepository = lifePayOrderRepository;
             _lifePayUserRepository = lifePayUserRepository;
             _dallyStatisticsRepository = dallyStatisticsRepository;
+            _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
             _lifePayChannlesRep = lifePayChannlesRep;
         }
 
@@ -72,8 +76,6 @@
                         topStatisticsOutput.YesterdayActiveUsers += entity.YesterdayActiveUsers;
                     }
                 }
-
-               
                 return topStatisticsOutput;
             }
             else
@@ -95,11 +97,114 @@
             }
         }
 
-        //public async Task<ReceiptsListOutPut> GetReceiptsList(List<string> channleList)
-        //{
-        //    var today = DateTime.Now.Date;
+        /// <summary>
+        /// 杩�30鏃ユ敹娆炬暟鎹�
+        /// </summary>
+        /// <param name="channleList"></param>
+        /// <returns></returns>
+        public async Task<ReceiptsListOutPut> GetReceiptsList(List<string> channleList)
+        {
+            var today = DateTime.Now.Date;
+            var statistics = await _dallyStatisticsRepository.Where(x => x.CreationTime.Date <= today && x.CreationTime.Date >= today.AddDays(-30))
+                .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
+                .OrderBy(o => o.CreationTime)
+                .ToListAsync();
 
-        //}
+            var groupedStatistics = statistics
+                .GroupBy(x => x.CreationTime)
+                .Select(g => new
+                {
+                    CreationTime = g.Key,
+                    TotalReceiptsYesterday = g.Sum(x => x.ReceiptsYesterday),
+                    TotalIncomeYesterday = g.Sum(x => x.IncomeYesterday)
+                })
+                .ToList();
+            ReceiptsListOutPut receiptsListOutPut = new ReceiptsListOutPut();
+
+            foreach (var item in groupedStatistics)
+            {
+                ReceiptsDetail receive = new ReceiptsDetail()
+                {
+                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    Amount = item.TotalReceiptsYesterday
+                };
+                ReceiptsDetail income = new ReceiptsDetail()
+                {
+                    CreationTime = item.CreationTime.ToString("yyyy-MM-dd"),
+                    Amount = item.TotalIncomeYesterday
+                };
+                receiptsListOutPut.ReceiveList.Add(receive);
+                receiptsListOutPut.IncomeList.Add(income);
+            }
+
+            return receiptsListOutPut;
+
+        }
+
+        public async Task<ChannelDataListOutPut> GetChannelDataList(List<string> channleList)
+        {
+
+            var statistics = await _lifePayChannlesRakeRepository.Where(x => x.IsDeleted == false)
+                            .WhereIf(channleList.Count() > 0, x => channleList.Contains(x.ChannelId))
+                            .ToListAsync();
+            var groupedStatistics = statistics
+               .GroupBy(x => x.ChannelId)
+               .Select(g => new
+               {
+                   ChannelId = g.Key,
+                   ReceivePrice = g.Sum(x => x.PayAmount),
+                   ChannlesRakePrice = g.Sum(x => x.ChannlesRakePrice),
+               })
+               .OrderByDescending(o => o.ReceivePrice)
+               .ToList();
+
+            ChannelDataListOutPut channelDataList = new ChannelDataListOutPut();
+
+            foreach (var item in groupedStatistics)
+            {
+                ChannelDataReceive receive = new ChannelDataReceive()
+                {
+                    ChannelId = item.ChannelId,
+                    ReceivePrice = item.ReceivePrice,
+                    ChannlesRakePrice = item.ChannlesRakePrice,
+                };
+                if (channelDataList.ReceiveList.Count() < 5)
+                {
+                    channelDataList.ReceiveList.Add(receive);
+                }
+            }
+
+            /// 绱鐢ㄦ埛
+            var users = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(channleList.Count() > 0, x => channleList.Contains(x.CreationChannleNum))
+                .ToListAsync();
+            var groupedUsers = users
+              .GroupBy(x => x.CreationChannleNum)
+              .Select(g => new
+              {
+                  ChannelId = g.Key,
+                  Number = g.Count(),
+              })
+              .OrderByDescending(o => o.Number)
+              .ToList();
+            foreach (var item in groupedUsers)
+            {
+                ChannelDataUserNumber usernumber = new ChannelDataUserNumber()
+                {
+                    ChannelId = item.ChannelId,
+                    Number = item.Number,
+                };
+                if (channelDataList.UserNumberList.Count() < 5)
+                {
+                    channelDataList.UserNumberList.Add(usernumber);
+                }
+            }
+
+
+
+            return channelDataList;
+
+        }
+
 
         private async Task<DallyStatistics> TopStatistics(string channleId, DateTime today)
         {
@@ -116,6 +221,9 @@
             /// 绱鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏀跺埌鐨勩�愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵f閲戦-閮ㄥ垎閫�娆鹃噾棰濄�戯紱
             var accumulatedIncome = await _lifePayOrderRepository.Where(x => x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
                 .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount - (x.PlatformDeductionAmount ?? 0) - (x.RefundPrice ?? 0));
+            /// 鏄ㄦ棩鏀跺叆锛氱粺璁″钩鍙拌处鎴蜂笅璁㈠崟鐘舵�佷负鈥滃凡瀹屾垚鈥濅笖璁㈠崟鍒涘缓鏃堕棿鍦ㄦ槰澶╂敹鍒扮殑銆愮敤鎴峰疄浠橀噾棰�-骞冲彴鎵f閲戦-閮ㄥ垎閫�娆鹃噾棰濄�戯紱
+            var yesterdayIncome = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+                .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).SumAsync(x => x.PayAmount - (x.PlatformDeductionAmount ?? 0) - (x.RefundPrice ?? 0));
             /// 绱涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╁強涔嬪墠鏃堕棿鐨勮鍗曡褰曪紱
             var accumulatedOrders = await _lifePayOrderRepository.Where(x => x.CreationTime < today).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync();
             /// 鏄ㄦ棩涓嬪崟锛氱粺璁″钩鍙颁腑璁㈠崟涓嬪崟鏃堕棿鍦ㄦ槰澶╃殑璁㈠崟璁板綍锛�
@@ -128,18 +236,19 @@
             var yesterdayFail = await _lifePayOrderRepository.Where(x => x.CreationTime >= today.AddDays(-1) && x.CreationTime < today && x.LifePayOrderStatus == LifePayOrderStatusEnum.宸查��娆�)
                 .WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.ChannelId == channleId).CountAsync();
             /// 绱鐢ㄦ埛
-            var accumulatedUsers = await _lifePayUserRepository.WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
+            var accumulatedUsers = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).CountAsync();
             /// 鏄ㄦ棩娲昏穬鐢ㄦ埛
-            var yesterdayActiveUsers = await _lifePayUserRepository.WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
+            var yesterdayActiveUsers = await _lifePayUserRepository.Where(x => x.IsDeleted == false).WhereIf(!string.IsNullOrWhiteSpace(channleId), x => x.CreationChannleNum == channleId).Where(x => x.LastLoginTime >= today.AddDays(-1)).CountAsync();
 
 
             var entity = new DallyStatistics()
             {
                 Id = GuidGenerator.Create(),
-                CreationTime = DateTime.Now,
+                CreationTime = today,
                 Amount = 0,
                 AccumulatedReceipts = accumulatedReceipts ?? 0,
                 AccumulatedIncome = accumulatedIncome ?? 0,
+                IncomeYesterday = yesterdayIncome ?? 0,
                 ReceiptsYesterday = receiptsYesterday ?? 0,
                 AccumulatedOrders = accumulatedOrders,
                 OrdersNumYesterday = ordersNumYesterday,
diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
index a7c1146..d2a2396 100644
--- a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
+++ b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs
@@ -196,5 +196,21 @@
 
     [Description("鏀嚭")]
     Receipts = 20,
+}
+public enum ConsumptionFrozenStatusEnum
+{
+    [Description("鍐荤粨")]
+    Frozen = 10,
 
+    [Description("瑙e喕")]
+    Thaw = 20,
+}
+
+public enum ConsumptionFlowEnum
+{
+    [Description("涓嶅彉")]
+    Unchanged = 10,
+
+    [Description("鍑洪噾")]
+    Out = 20,
 }
diff --git a/LifePayment/LifePayment.Domain/LifePay/DallyStatistics.cs b/LifePayment/LifePayment.Domain/LifePay/DallyStatistics.cs
index d5b6125..a5cb249 100644
--- a/LifePayment/LifePayment.Domain/LifePay/DallyStatistics.cs
+++ b/LifePayment/LifePayment.Domain/LifePay/DallyStatistics.cs
@@ -34,6 +34,11 @@
     public decimal AccumulatedIncome { get; set; }
 
     /// <summary>
+    /// 鏄ㄦ棩鏀跺叆
+    /// </summary>
+    public decimal IncomeYesterday { get; set; }
+
+    /// <summary>
     /// 绱涓嬪崟
     /// </summary>
     public int AccumulatedOrders { get; set; }
diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayConsumption.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayConsumption.cs
new file mode 100644
index 0000000..2ae50e7
--- /dev/null
+++ b/LifePayment/LifePayment.Domain/LifePay/LifePayConsumption.cs
@@ -0,0 +1,72 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Entities.Auditing;
+using Volo.Abp;
+using LifePayment.Domain.Shared;
+
+namespace LifePayment.Domain.LifePay
+{
+    /// <summary>
+    /// 娑堣垂娴佹按
+    /// </summary>
+    public class LifePayConsumption : FullAuditedEntity<Guid>, IDataUserFilter
+    {
+        public LifePayConsumption()
+        {
+        }
+
+        /// <summary>
+        /// 骞冲彴璁㈠崟鍙�
+        /// </summary>
+        public string OrderNo { get; set; }
+
+        /// <summary>
+        /// 娓犻亾娴佹按鍙�
+        /// </summary>
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 浜ゆ槗閲戦
+        /// </summary>
+        public decimal Amount { get; set; }
+
+        /// <summary>
+        /// 璁拌处鏃堕棿
+        /// </summary>
+        public DateTime FinishTime { get; set; }
+
+        /// <summary>
+        /// 鎷撳睍灞炴��
+        /// </summary>
+        public string ExtraProperties { get; set; }
+
+        /// <summary>
+        /// 鍐荤粨鐘舵��
+        /// </summary>
+        public ConsumptionFrozenStatusEnum FrozenStatus { get; set; }
+
+        /// <summary>
+        /// 璧勯噾娴佸悜
+        /// </summary>
+        public ConsumptionFlowEnum Flow { get; set; }
+
+        /// <summary>
+        /// 鎵f閲戦
+        /// </summary>
+        public decimal DeductionAmount { get; set; }
+
+        /// <summary>
+        /// 鍐荤粨閲戦
+        /// </summary>
+        public decimal? FrozenAmount { get; set; }
+
+        /// <summary>
+        /// 娓犻亾鍙�
+        /// </summary>
+        public string ChannelId { get; set; }
+
+    }
+}
diff --git a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
index 796362e..6daff53 100644
--- a/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
+++ b/LifePayment/LifePayment.EntityFrameworkCore/LifePaymentServicesDbContext.cs
@@ -25,6 +25,8 @@
 
         public virtual DbSet<LifePayPremium> LifePayPremium { get; set; }
 
+
+        public virtual DbSet<LifePayConsumption> LifePayConsumption { get; set; }
         public virtual DbSet<LifePayRechargeReceipts> LifePayRechargeReceipts { get; set; }
 
         public virtual DbSet<LifePayExpensesReceipts> LifePayExpensesReceipts { get; set; }
diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
index a6d4b04..fb8cfab 100644
--- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml
@@ -70,6 +70,13 @@
             <param name="input"></param>
             <returns></returns>
         </member>
+        <member name="M:LifePayment.HttpApi.LifePayController.GetReceiptsList(LifePayment.Application.Contracts.TopStatisticsInput)">
+            <summary>
+            鑾峰彇30鏃ユ敹娆剧粺璁�
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
         <member name="M:LifePayment.HttpApi.LifePayController.GetElectricParValue(LifePayment.Domain.Shared.ChannelsBaseInput)">
             <summary>
             鑾峰彇鐢佃垂闈㈠��
diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
index d8ef866..fdfea96 100644
--- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
+++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml
@@ -724,6 +724,26 @@
             鍒╂鼎
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionPageInput.KeyWord">
+            <summary>
+            鏌ヨ鏉′欢
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionPageInput.Flow">
+            <summary>
+            璧勯噾娴佸悜
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionPageInput.TimeBegin">
+            <summary>
+            璁拌处寮�濮嬫椂闂�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionPageInput.TimeEnd">
+            <summary>
+            璁拌处缁撴潫鏃堕棿
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.LifePayRechargeReceiptsPageInput.KeyWord">
             <summary>
             鏌ヨ鏉′欢
@@ -1759,6 +1779,47 @@
             璁拌处鏃堕棿
             </summary>
         </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.Id">
+            <summary>
+            缂栧彿
+            </summary>
+        </member>
+        <!-- Badly formed XML comment ignored for member "P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.OrderNo" -->
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.OutOrderNo">
+            <summary>
+            娓犻亾娴佹按鍙�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.Amount">
+            <summary>
+            浜ゆ槗閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.FinishTime">
+            <summary>
+            璁拌处鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.FrozenStatus">
+            <summary>
+            鍐荤粨鐘舵��
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.Flow">
+            <summary>
+            璧勯噾娴佸悜
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.DeductionAmount">
+            <summary>
+            鎵f閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.LifePayConsumptionListOutput.FrozenAmount">
+            <summary>
+            鍐荤粨閲戦
+            </summary>
+        </member>
         <member name="P:LifePayment.Application.Contracts.LifePayPhoneMesssageCodeLoginOutput.UserId">
             <summary>
             鐢ㄦ埛Id
@@ -1839,9 +1900,59 @@
             鍚堣浣i噾
             </summary>
         </member>
-        <member name="P:LifePayment.Application.Contracts.ReceiptsListOutPut.CreationTime">
+        <member name="P:LifePayment.Application.Contracts.ReceiptsListOutPut.ReceiveList">
+            <summary>
+            30澶╂敹娆�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ReceiptsListOutPut.IncomeList">
+            <summary>
+            30澶╂敹鍏�
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ReceiptsDetail.CreationTime">
             <summary>
             鍒涘缓鏃堕棿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ReceiptsDetail.Amount">
+            <summary>
+            閲戦
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataListOutPut.ReceiveList">
+            <summary>
+            Top5娓犻亾鏀舵
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataListOutPut.UserNumberList">
+            <summary>
+            Top5娓犻亾鐢ㄦ埛
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataReceive.ChannelId">
+            <summary>
+            娓犻亾缂栧彿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataReceive.ReceivePrice">
+            <summary>
+            鏀舵
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataReceive.ChannlesRakePrice">
+            <summary>
+            浣i噾
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataUserNumber.ChannelId">
+            <summary>
+            娓犻亾缂栧彿
+            </summary>
+        </member>
+        <member name="P:LifePayment.Application.Contracts.ChannelDataUserNumber.Number">
+            <summary>
+            鐢ㄦ埛鏁伴噺
             </summary>
         </member>
         <member name="P:LifePayment.Application.Contracts.LifePayChannlesRakeListOutput.Id">
@@ -2834,7 +2945,7 @@
         </member>
         <member name="P:LifePayment.Application.Contracts.CreateAccountInput.ChannlesId">
             <summary>
-            娓犻亾鍒楄〃
+            娓犻亾缂栧彿
             </summary>
         </member>
         <member name="P:LifePayment.Application.Contracts.CreateAccountInput.OpenId">
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
index 5dd5a70..606efc1 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs
@@ -61,6 +61,25 @@
         }
 
         /// <summary>
+        /// 鑾峰彇30鏃ユ敹娆剧粺璁�
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [AllowAnonymous]
+        public async Task<ReceiptsListOutPut> GetReceiptsList(TopStatisticsInput input)
+        {
+            return await _statisticsService.GetReceiptsList(input.ChannleList);
+        }
+
+        [HttpPost]
+        [AllowAnonymous]
+        public async Task<ChannelDataListOutPut> GetChannelDataList(TopStatisticsInput input)
+        {
+            return await _statisticsService.GetChannelDataList(input.ChannleList);
+        }
+
+        /// <summary>
         /// 鑾峰彇鐢佃垂闈㈠��
         /// </summary>
         /// <returns></returns>

--
Gitblit v1.9.1