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 }