瀏覽代碼

小程序积分排行榜接口

qinchaoyue 1 月之前
父節點
當前提交
5edeb434a5

+ 17 - 10
src/Hotline.Application/Snapshot/SnapshotApplicationBase.cs

@@ -923,29 +923,36 @@ public abstract class SnapshotApplicationBase
         var query = _pointsRecordRepository.Queryable()
             .LeftJoin<Citizen>((points, citizen) => points.UserId == citizen.Id)
             .Where((points, citizen) => points.CreationTime >= startTime && points.CreationTime <= endTime)
-            .GroupBy((points, citizen) => new { points.UserId, citizen.IsSecurityMax, citizen.Name, citizen.PhoneNumber })
-            .Select((points, citizen) => new PointsItemsOutDto
+            .GroupBy((points, citizen) => new { citizen.Id, points.UserId, citizen.IsSecurityMax, citizen.Name, citizen.PhoneNumber })
+            .Select((points, citizen) => new PointsRankUserDto
             {
                 IsSecurityMax = citizen.IsSecurityMax ?? false,
                 Rank = SqlFunc.MappingColumn<int>($@"
             CASE 
-                WHEN citizen.""Id"" = {_sessionContext.UserId} THEN 1 
+                WHEN citizen.""Id"" = '{_sessionContext.UserId}' THEN 1 
                 ELSE DENSE_RANK() OVER (ORDER BY SUM(CASE WHEN ""points"".""Direction"" = 1 THEN ""points"".""Points"" ELSE 0 END) DESC)
             END"),
-                //Rank = SqlFunc.MappingColumn<int>("DENSE_RANK() OVER (ORDER BY SUM(CASE WHEN \"points\".\"Direction\" = 1 THEN \"points\".\"Points\" ELSE 0 END) DESC)"),
-                OutTotalPoint = SqlFunc.AggregateSum(SqlFunc.IIF(points.Direction == EPointsDirection.Out, points.Points, 0)),
-                OutPoints = SqlFunc.AggregateSum(SqlFunc.IIF(points.Direction == EPointsDirection.Out && points.Source == EPointsSource.Audit, points.Points, 0)),
-                TotalPoints = SqlFunc.AggregateSum(points.Points),
-                InTotalPoint = SqlFunc.AggregateSum(SqlFunc.IIF(points.Direction == EPointsDirection.In, points.Points, 0)),
+                Points = SqlFunc.AggregateSum(points.Points),
                 UserName = citizen.Name!,
-                PhoneNumber = citizen.PhoneNumber
-            })
+                PhoneNumber = citizen.PhoneNumber,
+                CitizenId = citizen.Id,
+            }).MergeTable()
             .OrderByDescending(points => points.Rank)
             .Take(11);
+
 #if DEBUG
         var sql = query.ToSqlString();
 #endif
         var item = await query.ToListAsync();
+
+        item.ForEach(m =>
+        {
+            if (m.IsSecurityMax)
+                m.HeadUrl = _systemDicDataCacheManager.HeaderImages("aqws");
+            else
+                m.HeadUrl = _systemDicDataCacheManager.HeaderImages("default");
+        });
+        outDto.Ranks = item;
         return outDto;
     }
     #endregion

+ 15 - 0
src/Hotline.Share/Dtos/Snapshot/PointsDto.cs

@@ -135,4 +135,19 @@ public class PointsRankUserDto
     /// 积分
     /// </summary>
     public int Points { get; set; }
+
+    /// <summary>
+    /// UserId
+    /// </summary>
+    public string CitizenId { get; set; }
+
+    /// <summary>
+    /// 是否安全卫士
+    /// </summary>
+    public bool IsSecurityMax { get; set; }
+
+    /// <summary>
+    /// 头像地址
+    /// </summary>
+    public string HeadUrl { get; set; }
 }

+ 1 - 1
src/Hotline.Share/Tools/DataMaskExtensions.cs

@@ -23,7 +23,7 @@ public static class DataMaskExtensions
 
     public static string MaskPhoneNumber(this string original)
     {
-        if (original.Length != 11) return string.Empty;
+        if (original.Length < 11) return string.Empty;
         return original.Mask(3, 4);
     }
 

+ 7 - 0
src/Hotline/Caching/Interfaces/ISysDicDataCacheManager.cs

@@ -63,6 +63,13 @@ namespace Hotline.Caching.Interfaces
         /// <returns></returns>
         SystemDicDataOutDto GetSnapshotBulletinType(string dicDataValue);
 
+        /// <summary>
+        /// 用户头像
+        /// </summary>
+        /// <param name="v"></param>
+        /// <returns></returns>
+        string HeaderImages(string name);
+
         /// <summary>
         /// 红包补充发放类型
         /// </summary>

+ 19 - 0
src/Hotline/Caching/Services/SysDicDataCacheManager.cs

@@ -160,5 +160,24 @@ namespace Hotline.Caching.Services
             _cacheSysDicData.Remove(code);
         }
 
+        /// <summary>
+        /// 获取用户头像图片
+        /// </summary>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public string HeaderImages(string value)
+        {
+            var dto = GetOrAdd(SysDicTypeConsts.HeaderImages).Where(m => m.DicDataValue == value).FirstOrDefault() ?? new SystemDicDataOutDto();
+            if (dto.DicDataName == "LocalHeadImageDefault")
+            {
+                return SystemDicDataSeedData.LocalHeadImageDefault;
+            }
+            if (dto.DicDataName == "LocalHeadImageAQWS")
+            {
+                return SystemDicDataSeedData.LocalHeadImageAQWS;
+            }
+            return dto.DicDataName;
+        }
     }
 }

文件差異過大導致無法顯示
+ 13 - 0
src/Hotline/SeedData/SystemDicDataSeedData.cs


+ 5 - 0
src/Hotline/Settings/SysDicTypeConsts.cs

@@ -331,4 +331,9 @@ public class SysDicTypeConsts
     /// 额外扣除积分类型
     /// </summary>
     public static string ExtraDeductionPointsType = "ExtraDeductionPointsType";
+
+    /// <summary>
+    /// 用户头像集合
+    /// </summary>
+    public static string HeaderImages = "HeaderImages";
 }

+ 4 - 0
test/Hotline.Tests/Application/PointsRecordApplicationTest.cs

@@ -47,5 +47,9 @@ public class PointsRecordApplicationTest : TestBase
     {
         var item = await _snapshotApplication.GetPointsRankAsync();
         item.ShouldNotBeNull();
+        foreach (var a in item.Ranks)
+        {
+            var s = a.PhoneNumber;
+        }
     }
 }

部分文件因文件數量過多而無法顯示