feat(points): 增加双边积分与虚拟积分商城

This commit is contained in:
yml2213
2026-11-04 19:21:02 +08:00
parent c00d691301
commit d5abe67f60
42 changed files with 2593 additions and 316 deletions
@@ -16,6 +16,7 @@ type UserDTO struct {
DepositFreeUsedCent int64 `json:"deposit_free_used_cent"`
DepositFreeRemainingCent int64 `json:"deposit_free_remaining_cent"`
RenterGrowthPoints int64 `json:"renter_growth_points"`
PointsAvailable int64 `json:"points_available"`
RenterGrowthLevel string `json:"renter_growth_level"`
RenterGrowthLevelName string `json:"renter_growth_level_name"`
AvailableBalanceCent int64 `json:"available_balance_cent"`
@@ -192,6 +192,12 @@ func (r *Repository) AdjustGrowthPoints(ctx context.Context, adminID uint64, use
return err
}
beforePoints := user.RenterGrowthPoints
beforeAvailable := user.PointsAvailable
pointsDelta := req.TargetPoints - beforePoints
afterAvailable := beforeAvailable + pointsDelta
if afterAvailable < 0 {
afterAvailable = 0
}
beforeLevel := rentergrowth.LevelForPoints(cfg, beforePoints)
afterLevel := rentergrowth.LevelForPoints(cfg, req.TargetPoints)
if !cfg.Enabled {
@@ -200,20 +206,25 @@ func (r *Repository) AdjustGrowthPoints(ctx context.Context, adminID uint64, use
}
user.RenterGrowthPoints = req.TargetPoints
user.RenterGrowthLevel = afterLevel.Code
user.PointsAvailable = afterAvailable
if err := tx.Save(&user).Error; err != nil {
return err
}
ledger := model.RenterGrowthLedger{
UserID: user.ID,
Points: req.TargetPoints - beforePoints,
BeforePoints: beforePoints,
AfterPoints: req.TargetPoints,
BeforeLevel: beforeLevel.Code,
AfterLevel: afterLevel.Code,
Source: rentergrowth.SourceAdminAdjustment,
OperatorAdminID: &adminID,
Remark: "后台调整成长积分: " + req.Reason,
CreatedAt: time.Now(),
UserID: user.ID,
Role: "admin",
Points: pointsDelta,
PointsMultiplierBps: afterLevel.PointsMultiplierBps,
BeforePoints: beforePoints,
AfterPoints: req.TargetPoints,
AvailableBefore: beforeAvailable,
AvailableAfter: afterAvailable,
BeforeLevel: beforeLevel.Code,
AfterLevel: afterLevel.Code,
Source: rentergrowth.SourceAdminAdjustment,
OperatorAdminID: &adminID,
Remark: "后台调整成长积分: " + req.Reason,
CreatedAt: time.Now(),
}
if err := tx.Create(&ledger).Error; err != nil {
return err
@@ -222,7 +233,7 @@ func (r *Repository) AdjustGrowthPoints(ctx context.Context, adminID uint64, use
"user_id": user.ID,
"before_points": beforePoints,
"after_points": req.TargetPoints,
"change_points": req.TargetPoints - beforePoints,
"change_points": pointsDelta,
"before_level": beforeLevel.Code,
"after_level": afterLevel.Code,
"reason": req.Reason,
@@ -562,6 +573,7 @@ func (row userRow) toDTO(growthConfig rentergrowth.Config) UserDTO {
DepositFreeUsedCent: row.DepositFreeUsedCent,
DepositFreeRemainingCent: remaining,
RenterGrowthPoints: row.RenterGrowthPoints,
PointsAvailable: row.PointsAvailable,
RenterGrowthLevel: level.Code,
RenterGrowthLevelName: level.Name,
AvailableBalanceCent: row.AvailableBalanceCent,