自动发奖

This commit is contained in:
zhx 2026-05-20 11:03:53 +08:00
parent 49d788be18
commit 4777c6dabb
2 changed files with 22 additions and 6 deletions

View File

@ -97,12 +97,13 @@ func (WeekStarRewardRecord) TableName() string { return "week_star_reward_record
// RoomTurnoverRewardConfig 保存房间流水奖励的系统级配置。
type RoomTurnoverRewardConfig struct {
ID int64 `gorm:"column:id;primaryKey"`
SysOrigin string `gorm:"column:sys_origin;size:32;uniqueIndex:uk_room_turnover_reward_sys_origin"`
Enabled bool `gorm:"column:enabled;index:idx_room_turnover_reward_enabled"`
Timezone string `gorm:"column:timezone;size:64"`
CreateTime time.Time `gorm:"column:create_time"`
UpdateTime time.Time `gorm:"column:update_time"`
ID int64 `gorm:"column:id;primaryKey"`
SysOrigin string `gorm:"column:sys_origin;size:32;uniqueIndex:uk_room_turnover_reward_sys_origin"`
Enabled bool `gorm:"column:enabled;index:idx_room_turnover_reward_enabled"`
AutoRewardEnabled bool `gorm:"column:auto_reward_enabled"`
Timezone string `gorm:"column:timezone;size:64"`
CreateTime time.Time `gorm:"column:create_time"`
UpdateTime time.Time `gorm:"column:update_time"`
}
func (RoomTurnoverRewardConfig) TableName() string { return "room_turnover_reward_config" }
@ -141,6 +142,7 @@ type RoomTurnoverRewardRecord struct {
TurnoverThreshold int64 `gorm:"column:turnover_threshold"`
RewardGold int64 `gorm:"column:reward_gold"`
TrackID string `gorm:"column:track_id;size:128;uniqueIndex:uk_room_turnover_reward_track"`
SourceID string `gorm:"column:source_id;size:128"`
Status string `gorm:"column:status;size:32;index:idx_room_turnover_reward_record_status"`
RetryCount int `gorm:"column:retry_count"`
LastError string `gorm:"column:last_error;size:1024"`

View File

@ -208,6 +208,9 @@ func (s *RoomTurnoverRewardSettlementService) settleCycle(
if record.Status != roomTurnoverRewardStatusPending && record.Status != roomTurnoverRewardStatusFailed {
continue
}
if !configRow.AutoRewardEnabled {
continue
}
if err := s.dispatchRewardRecord(ctx, &record, contribution.ID); err != nil {
lastErr = err
}
@ -276,6 +279,7 @@ func (s *RoomTurnoverRewardSettlementService) ensureRewardRecord(
TurnoverThreshold: level.TurnoverThreshold,
RewardGold: level.RewardGold,
TrackID: roomTurnoverRewardTrackID(sysOrigin, cycleKey, roomID),
SourceID: strings.TrimSpace(contribution.ID),
Status: roomTurnoverRewardStatusPending,
CreateTime: now,
UpdateTime: now,
@ -295,6 +299,16 @@ func (s *RoomTurnoverRewardSettlementService) ensureRewardRecord(
First(&saved).Error; err != nil {
return model.RoomTurnoverRewardRecord{}, err
}
if strings.TrimSpace(saved.SourceID) == "" && strings.TrimSpace(contribution.ID) != "" {
sourceID := strings.TrimSpace(contribution.ID)
if err := s.repo.DB.WithContext(ctx).
Model(&model.RoomTurnoverRewardRecord{}).
Where("id = ?", saved.ID).
Update("source_id", sourceID).Error; err != nil {
return model.RoomTurnoverRewardRecord{}, err
}
saved.SourceID = sourceID
}
return saved, nil
}