Browse Source

Merge branch 'feature/snapshot' into dev

qinchaoyue 5 months ago
parent
commit
0773c9132a

+ 9 - 1
src/Hotline.Api/Controllers/Snapshot/SnapshotController.cs

@@ -178,7 +178,15 @@ public class SnapshotController : BaseController
     /// <returns></returns>
     [HttpGet("redpack")]
     public virtual async Task<IReadOnlyList<RedPackDateOutDto>> QueryRedPackDateAsync([FromQuery] RedPackDateInDto dto)
-        => await _snapshotApplication.GetRedPackDateAsync(dto);
+        => await _snapshotApplication.GetRedPackDateAsync(dto, HttpContext.RequestAborted);
+
+    /// <summary>
+    /// 用户领取红包总金额
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet("redpack/received")]
+    public async Task<string> GetRedPackReceivedTotalAsync()
+        => await _snapshotApplication.GetRedPackReceivedTotalAsync(HttpContext.RequestAborted);
 
     /// <summary>
     /// 获取当月详细红包列表

+ 9 - 1
src/Hotline.Application.Tests/Application/SnapshotApplicationTest.cs

@@ -210,11 +210,19 @@ public class SnapshotApplicationTest : TestBase
     [InlineData(12, 12)]
     public async Task GetRedPackDateAsync(int count, int exp)
     {
-        var items = await _snapshotApplication.GetRedPackDateAsync(new RedPackDateInDto { Count = count });
+        var items = await _snapshotApplication.GetRedPackDateAsync(new RedPackDateInDto { QueryCount = count }, CancellationToken.None);
         items.Count.ShouldNotBe(0, "0数据");
         items.Count.ShouldBe(exp, $"应该:{exp}, 实际 {items.Count}");
     }
 
+    [Fact]
+    public async Task GetRedPackReceivedTotal_Test()
+    {
+        var amount = await _snapshotApplication.GetRedPackReceivedTotalAsync(CancellationToken.None);
+        amount.ShouldNotBe("0.00");
+        amount.ShouldNotBe("0");
+    }
+
     [Theory]
     [InlineData(ERedPackPickupStatus.Unreceived)]
     [InlineData(ERedPackPickupStatus.Received)]

+ 8 - 1
src/Hotline.Application/Snapshot/ISnapshotApplication.cs

@@ -47,7 +47,7 @@ public interface ISnapshotApplication
     /// </summary>
     /// <param name="count"></param>
     /// <returns></returns>
-    Task<IReadOnlyList<RedPackDateOutDto>> GetRedPackDateAsync(RedPackDateInDto dto);
+    Task<IReadOnlyList<RedPackDateOutDto>> GetRedPackDateAsync(RedPackDateInDto dto, CancellationToken cancellationToken);
 
     /// <summary>
     /// 获取当月详细红包列表
@@ -108,4 +108,11 @@ public interface ISnapshotApplication
     /// <param name="none"></param>
     /// <returns></returns>
     Task AddOrderPublishAsync(AddSnapshotOrderPublishInDto addSnapshotOrderPublishInDto, CancellationToken none);
+
+    /// <summary>
+    /// 获取用户领取的红包总金额
+    /// </summary>
+    /// <param name="requestAborted"></param>
+    /// <returns></returns>
+    Task<string> GetRedPackReceivedTotalAsync(CancellationToken requestAborted);
 }

+ 13 - 3
src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs

@@ -357,12 +357,23 @@ public abstract class SnapshotApplicationBase
         return items;
     }
 
+    /// <summary>
+    /// 获取用户领取过的红包总金额
+    /// </summary>
+    /// <returns></returns>
+    public async Task<string> GetRedPackReceivedTotalAsync(CancellationToken cancellationToken)
+    {
+        var member = await _thirdAccountRepository.GetAsync(m => m.OpenId == _sessionContext.OpenId, cancellationToken)
+            ?? throw UserFriendlyException.SameMessage("用户不存在");
+        return member.TotalAmount.ToYuanFinance();
+    }
+
     /// <summary>
     /// 按月统计红包金额
     /// </summary>
     /// <param name="count"></param>
     /// <returns></returns>
-    public async Task<IReadOnlyList<RedPackDateOutDto>> GetRedPackDateAsync(RedPackDateInDto dto)
+    public async Task<IReadOnlyList<RedPackDateOutDto>> GetRedPackDateAsync(RedPackDateInDto dto, CancellationToken cancellationToken)
     {
         var openId = _sessionContext.OpenId;
         var item = await _redPackRecordRepository.Queryable()
@@ -375,8 +386,7 @@ public abstract class SnapshotApplicationBase
                 CreationTime = SqlFunc.AggregateMax(m.CreationTime.Date),
                 Amount = SqlFunc.AggregateSum(m.Amount)
             })
-            .Take(dto.Count)
-            .ToListAsync();
+            .ToFixedListAsync(dto, cancellationToken);
 
         return item;
     }

+ 1 - 6
src/Hotline.Share/Dtos/Snapshot/RedPackDto.cs

@@ -35,13 +35,8 @@ public class RedPacksInDto : QueryFixedDto
     public ERedPackPickupStatus Status { get; set; }
 }
 
-public class RedPackDateInDto
+public class RedPackDateInDto : QueryFixedDto
 {
-    /// <summary>
-    /// 查询条数
-    /// </summary>
-    public int Count { get; set; } = 12;
-
     /// <summary>
     /// 红包状态
     /// </summary>

+ 3 - 1
src/Hotline.Share/Enums/Snapshot/ERedPackPickupStatus.cs

@@ -8,7 +8,9 @@ using System.Threading.Tasks;
 namespace Hotline.Share.Enums.Snapshot;
 
 /// <summary>
-/// 红包领取状态
+/// 红包领取状态;
+/// 0: 未领取;
+/// 1: 已领取;
 /// </summary>
 [Description("红包领取状态")]
 public enum ERedPackPickupStatus