2026-04-27 23:27:37 +08:00

84 lines
2.2 KiB
Go

package roomturnoverreward
import (
"context"
"sort"
"time"
)
const (
roomTurnoverRewardActivityStatusDisabled = "DISABLED"
roomTurnoverRewardActivityStatusOngoing = "ONGOING"
)
// GetPublicPage 返回房间流水奖励 H5 页面所需的公开配置数据。
func (s *Service) GetPublicPage(ctx context.Context, sysOrigin string) (*RoomTurnoverRewardPageResponse, error) {
config, err := s.GetConfig(ctx, sysOrigin)
if err != nil {
return nil, err
}
now := time.Now().In(s.location)
periodStart, periodEnd := s.currentCycleBounds(now)
levels := enabledPageLevels(config.LevelConfigs)
activityStatus := roomTurnoverRewardActivityStatusDisabled
if config.Enabled {
activityStatus = roomTurnoverRewardActivityStatusOngoing
}
return &RoomTurnoverRewardPageResponse{
ActivityStatus: activityStatus,
Configured: config.Configured,
SysOrigin: config.SysOrigin,
Timezone: config.Timezone,
CycleKey: s.cycleKey(periodStart),
PeriodStartAt: formatDateTime(periodStart),
PeriodEndAt: formatDateTime(periodEnd),
CurrentPeriodText: formatRoomTurnoverRewardPeriod(periodStart, periodEnd),
CountdownMillis: maxInt64(0, periodEnd.UnixMilli()-now.UnixMilli()),
HighlightRewardGold: highestRewardGold(levels),
LevelConfigs: levels,
}, nil
}
func enabledPageLevels(levels []RoomTurnoverRewardLevelPayload) []RoomTurnoverRewardLevelPayload {
result := make([]RoomTurnoverRewardLevelPayload, 0, len(levels))
for _, level := range levels {
if !level.Enabled {
continue
}
result = append(result, level)
}
if len(result) == 0 {
result = append(result, levels...)
}
sort.Slice(result, func(i, j int) bool {
return result[i].TurnoverThreshold < result[j].TurnoverThreshold
})
return result
}
func highestRewardGold(levels []RoomTurnoverRewardLevelPayload) int64 {
var reward int64
for _, level := range levels {
if level.RewardGold > reward {
reward = level.RewardGold
}
}
return reward
}
func formatRoomTurnoverRewardPeriod(start, end time.Time) string {
if start.IsZero() || end.IsZero() {
return ""
}
return start.Format("Jan 02 15:04") + " - " + end.Format("Jan 02 15:04")
}
func maxInt64(a, b int64) int64 {
if a > b {
return a
}
return b
}