33
This commit is contained in:
parent
d8b86a4f3a
commit
5d149a7129
|
|
@ -391,6 +391,9 @@ public class LotteryEngine : ILotteryEngine
|
||||||
var boxResults = await DrawInfiniteBoxPrizesAsync(request, selectedPrize.GoodsItemId);
|
var boxResults = await DrawInfiniteBoxPrizesAsync(request, selectedPrize.GoodsItemId);
|
||||||
result.BoxPrizes = boxResults;
|
result.BoxPrizes = boxResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 7. 处理领主赏逻辑(type=8)
|
||||||
|
await ProcessLingZhuLogicAsync(request.UserId, request.GoodsId, selectedPrize.ShangId, selectedPrize.IsLingzhu, orderItem.Id);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -402,6 +405,145 @@ public class LotteryEngine : ILotteryEngine
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 处理领主赏逻辑
|
||||||
|
/// </summary>
|
||||||
|
private async Task ProcessLingZhuLogicAsync(int userId, int goodsId, int? shangId, int isLingzhu, int orderItemId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 获取商品的领主赏配置
|
||||||
|
var goods = await _dbContext.Goods
|
||||||
|
.Where(g => g.Id == goodsId)
|
||||||
|
.Select(g => new { g.Type, g.LingzhuIs, g.LingzhuShangId, g.KingUserId, g.LingzhuFan })
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
// 只有领主赏类型(type=8)且开启了领主功能才处理
|
||||||
|
if (goods == null || goods.Type != 8 || goods.LingzhuIs != 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否抽中领主奖品
|
||||||
|
bool isLingzhuPrize = (shangId == goods.LingzhuShangId) || (isLingzhu == 1);
|
||||||
|
|
||||||
|
if (isLingzhuPrize)
|
||||||
|
{
|
||||||
|
// 抽中领主奖品 - 成为新领主
|
||||||
|
var currentTimestamp = (int)DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||||
|
|
||||||
|
// 如果当前有领主,结束其领主记录
|
||||||
|
if (goods.KingUserId > 0)
|
||||||
|
{
|
||||||
|
var currentKingRank = await _dbContext.GoodsKingRanks
|
||||||
|
.Where(r => r.UserId == goods.KingUserId && r.GoodsId == goodsId && r.EndTime == 0)
|
||||||
|
.OrderByDescending(r => r.Id)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
if (currentKingRank != null)
|
||||||
|
{
|
||||||
|
currentKingRank.EndTime = currentTimestamp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新商品的领主用户
|
||||||
|
await _dbContext.Goods
|
||||||
|
.Where(g => g.Id == goodsId)
|
||||||
|
.ExecuteUpdateAsync(s => s.SetProperty(g => g.KingUserId, userId));
|
||||||
|
|
||||||
|
// 计算多少发晋升领主
|
||||||
|
var luckNo = await _dbContext.OrderItems
|
||||||
|
.Where(oi => oi.GoodsId == goodsId && oi.Id <= orderItemId)
|
||||||
|
.CountAsync();
|
||||||
|
|
||||||
|
// 创建新的领主记录
|
||||||
|
var newKingRank = new GoodsKingRank
|
||||||
|
{
|
||||||
|
UserId = userId,
|
||||||
|
GoodsId = goodsId,
|
||||||
|
Count = luckNo,
|
||||||
|
OrderListId = orderItemId,
|
||||||
|
Addtime = currentTimestamp,
|
||||||
|
EndTime = 0,
|
||||||
|
ZNums = 0,
|
||||||
|
Money = 0
|
||||||
|
};
|
||||||
|
_dbContext.GoodsKingRanks.Add(newKingRank);
|
||||||
|
await _dbContext.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInformation("New king crowned: UserId={UserId}, GoodsId={GoodsId}, LuckNo={LuckNo}",
|
||||||
|
userId, goodsId, luckNo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 未抽中领主奖品 - 增加当前领主的被挑战次数
|
||||||
|
if (goods.KingUserId > 0)
|
||||||
|
{
|
||||||
|
var kingRank = await _dbContext.GoodsKingRanks
|
||||||
|
.Where(r => r.UserId == goods.KingUserId && r.GoodsId == goodsId && r.EndTime == 0)
|
||||||
|
.OrderByDescending(r => r.Id)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
// 如果没有领主记录(可能是从旧系统迁移的),创建一条初始记录
|
||||||
|
if (kingRank == null)
|
||||||
|
{
|
||||||
|
kingRank = new GoodsKingRank
|
||||||
|
{
|
||||||
|
UserId = goods.KingUserId,
|
||||||
|
GoodsId = goodsId,
|
||||||
|
Count = 0, // 未知占领时的抽奖次数
|
||||||
|
OrderListId = 0,
|
||||||
|
Addtime = (int)DateTimeOffset.UtcNow.ToUnixTimeSeconds(),
|
||||||
|
EndTime = 0,
|
||||||
|
ZNums = 0,
|
||||||
|
Money = 0
|
||||||
|
};
|
||||||
|
_dbContext.GoodsKingRanks.Add(kingRank);
|
||||||
|
_logger.LogInformation("Created initial king rank record for migrated king: UserId={UserId}, GoodsId={GoodsId}",
|
||||||
|
goods.KingUserId, goodsId);
|
||||||
|
}
|
||||||
|
|
||||||
|
kingRank.ZNums += 1;
|
||||||
|
|
||||||
|
// 领主收益(如果配置了)
|
||||||
|
if (goods.LingzhuFan > 0)
|
||||||
|
{
|
||||||
|
kingRank.Money += goods.LingzhuFan;
|
||||||
|
|
||||||
|
// 给领主增加积分收益
|
||||||
|
var kingUser = await _dbContext.Users.FindAsync(goods.KingUserId);
|
||||||
|
if (kingUser != null)
|
||||||
|
{
|
||||||
|
var beforeIntegral = kingUser.Integral;
|
||||||
|
kingUser.Integral += goods.LingzhuFan;
|
||||||
|
|
||||||
|
// 记录积分流水
|
||||||
|
var profitIntegral = new ProfitIntegral
|
||||||
|
{
|
||||||
|
UserId = goods.KingUserId,
|
||||||
|
Type = 4, // 领主收益
|
||||||
|
ChangeMoney = goods.LingzhuFan,
|
||||||
|
Money = kingUser.Integral,
|
||||||
|
Content = "领主收益",
|
||||||
|
ShareUid = 0,
|
||||||
|
CreatedAt = DateTime.Now
|
||||||
|
};
|
||||||
|
_dbContext.ProfitIntegrals.Add(profitIntegral);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await _dbContext.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Failed to process lingzhu logic: UserId={UserId}, GoodsId={GoodsId}",
|
||||||
|
userId, goodsId);
|
||||||
|
// 领主逻辑失败不影响抽奖结果
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// 多次无限赏抽奖流程:
|
/// 多次无限赏抽奖流程:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user