From 32c21d5a73103ed8bc23ec45d37e05d017793167 Mon Sep 17 00:00:00 2001 From: gpu Date: Wed, 4 Feb 2026 20:54:38 +0800 Subject: [PATCH] 213 --- .../Services/QyLevelService.cs | 86 ++++++++++--------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/QyLevelService.cs b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/QyLevelService.cs index 334b13cf..220229e3 100644 --- a/server/HoneyBox/src/HoneyBox.Admin.Business/Services/QyLevelService.cs +++ b/server/HoneyBox/src/HoneyBox.Admin.Business/Services/QyLevelService.cs @@ -39,9 +39,10 @@ public class QyLevelService : IQyLevelService /// public async Task> GetQyLevelsAsync(QyLevelListRequest request) { - var query = _dbContext.EquityLevels + // 使用 VipLevels 表(与用户端 API 保持一致) + var query = _dbContext.VipLevels .AsNoTracking() - .Where(e => e.DeletedAt == null); + .Where(e => e.DeletedAt == null && e.Level > 0); // 按关键词搜索(搜索名称) if (!string.IsNullOrWhiteSpace(request.Keyword)) @@ -57,7 +58,7 @@ public class QyLevelService : IQyLevelService .Take(request.PageSize) .ToListAsync(); - var list = items.Select(MapToResponse).ToList(); + var list = items.Select(MapVipLevelToResponse).ToList(); return PagedResult.Create(list, total, request.Page, request.PageSize); } @@ -66,17 +67,17 @@ public class QyLevelService : IQyLevelService /// public async Task GetQyLevelByIdAsync(int id) { - var entity = await _dbContext.EquityLevels + var entity = await _dbContext.VipLevels .AsNoTracking() .FirstOrDefaultAsync(e => e.Id == id && e.DeletedAt == null); - return entity == null ? null : MapToResponse(entity); + return entity == null ? null : MapVipLevelToResponse(entity); } /// public async Task UpdateQyLevelAsync(int id, QyLevelUpdateRequest request) { - var entity = await _dbContext.EquityLevels + var entity = await _dbContext.VipLevels .FirstOrDefaultAsync(e => e.Id == id && e.DeletedAt == null); if (entity == null) @@ -89,7 +90,7 @@ public class QyLevelService : IQyLevelService entity.Level = request.Level; entity.Title = request.Title; - entity.RequiredPoints = request.RequiredPoints; + entity.Number = request.RequiredPoints; entity.UpdatedAt = DateTime.Now; var result = await _dbContext.SaveChangesAsync() > 0; @@ -107,7 +108,7 @@ public class QyLevelService : IQyLevelService public async Task> GetQyLevelPrizesAsync(int qyLevelId, QyLevelPrizeListRequest request) { // 验证权益等级是否存在 - var qyLevel = await _dbContext.EquityLevels + var qyLevel = await _dbContext.VipLevels .AsNoTracking() .FirstOrDefaultAsync(e => e.Id == qyLevelId && e.DeletedAt == null); @@ -116,14 +117,16 @@ public class QyLevelService : IQyLevelService throw new BusinessException(BusinessErrorCodes.NotFound, "权益等级不存在"); } - var query = _dbContext.EquityLevelPrizes + // 使用 VipLevelRewards 表 + var query = _dbContext.VipLevelRewards .AsNoTracking() - .Where(p => p.QyLevelId == qyLevelId && p.DeletedAt == null); + .Where(p => p.VipLevelId == qyLevelId && p.DeletedAt == null); // 按奖品类型筛选 if (request.Type.HasValue) { - query = query.Where(p => p.Type == request.Type.Value); + var typeFilter = (byte)request.Type.Value; + query = query.Where(p => p.Type == typeFilter); } // 按关键词搜索(搜索标题) @@ -135,8 +138,7 @@ public class QyLevelService : IQyLevelService var total = await query.CountAsync(); var items = await query - .OrderBy(p => p.Sort) - .ThenByDescending(p => p.CreatedAt) + .OrderBy(p => p.Id) .Skip(request.Skip) .Take(request.PageSize) .ToListAsync(); @@ -155,7 +157,7 @@ public class QyLevelService : IQyLevelService .ToDictionaryAsync(c => c.Id) : new Dictionary(); - var list = items.Select(p => MapToPrizeResponse(p, coupons)).ToList(); + var list = items.Select(p => MapVipLevelRewardToResponse(p, qyLevel.Level, coupons)).ToList(); return PagedResult.Create(list, total, request.Page, request.PageSize); } @@ -163,7 +165,7 @@ public class QyLevelService : IQyLevelService /// public async Task GetQyLevelPrizeByIdAsync(int prizeId) { - var entity = await _dbContext.EquityLevelPrizes + var entity = await _dbContext.VipLevelRewards .AsNoTracking() .FirstOrDefaultAsync(p => p.Id == prizeId && p.DeletedAt == null); @@ -172,6 +174,12 @@ public class QyLevelService : IQyLevelService return null; } + // 获取等级信息 + var qyLevel = await _dbContext.VipLevels + .AsNoTracking() + .FirstOrDefaultAsync(e => e.Id == entity.VipLevelId); + var level = qyLevel?.Level ?? 0; + // 如果是优惠券类型,获取优惠券信息 Dictionary coupons = new(); if (entity.Type == 1 && entity.CouponId.HasValue) @@ -185,7 +193,7 @@ public class QyLevelService : IQyLevelService } } - return MapToPrizeResponse(entity, coupons); + return MapVipLevelRewardToResponse(entity, level, coupons); } @@ -193,7 +201,7 @@ public class QyLevelService : IQyLevelService public async Task CreateQyLevelPrizeAsync(int qyLevelId, QyLevelPrizeCreateRequest request) { // 验证权益等级是否存在 - var qyLevel = await _dbContext.EquityLevels + var qyLevel = await _dbContext.VipLevels .AsNoTracking() .FirstOrDefaultAsync(e => e.Id == qyLevelId && e.DeletedAt == null); @@ -205,10 +213,9 @@ public class QyLevelService : IQyLevelService // 验证请求 ValidatePrizeCreateRequest(request); - var entity = new EquityLevelPrize + var entity = new VipLevelReward { - QyLevelId = qyLevelId, - QyLevel = qyLevel.Level, + VipLevelId = qyLevelId, Type = (byte)request.Type, Title = request.Title, CouponId = request.CouponId, @@ -218,13 +225,12 @@ public class QyLevelService : IQyLevelService ScMoney = request.ReferencePrice, Probability = request.Probability, ImgUrl = request.Image, - ShangId = request.ShangId, - Sort = request.Sort ?? 0, + PrizeLevelId = request.ShangId, CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now }; - _dbContext.EquityLevelPrizes.Add(entity); + _dbContext.VipLevelRewards.Add(entity); await _dbContext.SaveChangesAsync(); _logger.LogInformation("创建权益等级奖品成功: Id={Id}, QyLevelId={QyLevelId}, Type={Type}", @@ -236,7 +242,7 @@ public class QyLevelService : IQyLevelService /// public async Task UpdateQyLevelPrizeAsync(int prizeId, QyLevelPrizeUpdateRequest request) { - var entity = await _dbContext.EquityLevelPrizes + var entity = await _dbContext.VipLevelRewards .FirstOrDefaultAsync(p => p.Id == prizeId && p.DeletedAt == null); if (entity == null) @@ -256,8 +262,7 @@ public class QyLevelService : IQyLevelService entity.ScMoney = request.ReferencePrice; entity.Probability = request.Probability; entity.ImgUrl = request.Image; - entity.ShangId = request.ShangId; - entity.Sort = request.Sort ?? entity.Sort; + entity.PrizeLevelId = request.ShangId; entity.UpdatedAt = DateTime.Now; var result = await _dbContext.SaveChangesAsync() > 0; @@ -270,7 +275,7 @@ public class QyLevelService : IQyLevelService /// public async Task DeleteQyLevelPrizeAsync(int prizeId) { - var entity = await _dbContext.EquityLevelPrizes + var entity = await _dbContext.VipLevelRewards .FirstOrDefaultAsync(p => p.Id == prizeId && p.DeletedAt == null); if (entity == null) @@ -309,9 +314,9 @@ public class QyLevelService : IQyLevelService throw new BusinessException(BusinessErrorCodes.ValidationFailed, "等级名称不能为空"); } - if (request.RequiredPoints <= 0) + if (request.RequiredPoints < 0) { - throw new BusinessException(BusinessErrorCodes.ValidationFailed, "所需欧气值必须大于0"); + throw new BusinessException(BusinessErrorCodes.ValidationFailed, "所需欧气值不能为负数"); } } @@ -464,33 +469,34 @@ public class QyLevelService : IQyLevelService } /// - /// 将权益等级实体映射为响应模型 + /// 将 VipLevel 实体映射为响应模型 /// - private static QyLevelResponse MapToResponse(EquityLevel entity) + private static QyLevelResponse MapVipLevelToResponse(VipLevel entity) { return new QyLevelResponse { Id = entity.Id, Level = entity.Level, Title = entity.Title, - RequiredPoints = entity.RequiredPoints, + RequiredPoints = entity.Number, CreatedAt = entity.CreatedAt, UpdatedAt = entity.UpdatedAt }; } /// - /// 将奖品实体映射为响应模型 + /// 将 VipLevelReward 实体映射为奖品响应模型 /// - private static QyLevelPrizeResponse MapToPrizeResponse(EquityLevelPrize entity, Dictionary coupons) + private static QyLevelPrizeResponse MapVipLevelRewardToResponse(VipLevelReward entity, int qyLevel, Dictionary coupons) { + var typeValue = (int)entity.Type; var response = new QyLevelPrizeResponse { Id = entity.Id, - QyLevelId = entity.QyLevelId, - QyLevel = entity.QyLevel, - Type = entity.Type, - TypeName = PrizeTypeNames.GetValueOrDefault(entity.Type, "未知"), + QyLevelId = entity.VipLevelId, + QyLevel = qyLevel, + Type = typeValue, + TypeName = PrizeTypeNames.GetValueOrDefault(typeValue, "未知"), Title = entity.Title, CouponId = entity.CouponId, Quantity = entity.ZNum, @@ -500,13 +506,13 @@ public class QyLevelService : IQyLevelService Probability = entity.Probability, Image = entity.ImgUrl, PrizeCode = entity.PrizeCode, - Sort = entity.Sort, + Sort = 0, CreatedAt = entity.CreatedAt, UpdatedAt = entity.UpdatedAt }; // 如果是优惠券类型,添加优惠券信息 - if (entity.Type == 1 && entity.CouponId.HasValue && + if (typeValue == 1 && entity.CouponId.HasValue && coupons.TryGetValue(entity.CouponId.Value, out var coupon)) { response.Coupon = new CouponInfo