84 lines
2.2 KiB
Go
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
|
|
}
|