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

122 lines
3.3 KiB
Go

package roomturnoverreward
import (
"sort"
"strings"
"time"
"chatapp3-golang/internal/model"
)
func (s *Service) normalizeSysOrigin(sysOrigin string) string {
sysOrigin = strings.ToUpper(strings.TrimSpace(sysOrigin))
if sysOrigin != "" {
return sysOrigin
}
if fallback := strings.ToUpper(strings.TrimSpace(s.cfg.RoomTurnoverReward.DefaultSysOrigin)); fallback != "" {
return fallback
}
if fallback := strings.ToUpper(strings.TrimSpace(s.cfg.WeekStar.DefaultSysOrigin)); fallback != "" {
return fallback
}
return "LIKEI"
}
func (s *Service) defaultTimezone() string {
if timezone := strings.TrimSpace(s.cfg.RoomTurnoverReward.Timezone); timezone != "" {
return timezone
}
if timezone := strings.TrimSpace(s.cfg.WeekStar.Timezone); timezone != "" {
return timezone
}
return defaultRoomTurnoverRewardTimezone
}
func defaultLevelPayloads() []RoomTurnoverRewardLevelPayload {
return []RoomTurnoverRewardLevelPayload{
{Level: 1, TurnoverThreshold: 100000, RewardGold: 2000, Enabled: true},
{Level: 2, TurnoverThreshold: 500000, RewardGold: 15000, Enabled: true},
{Level: 3, TurnoverThreshold: 2000000, RewardGold: 80000, Enabled: true},
{Level: 4, TurnoverThreshold: 5000000, RewardGold: 250000, Enabled: true},
}
}
func buildLevelPayloads(rows []model.RoomTurnoverRewardLevel) []RoomTurnoverRewardLevelPayload {
sort.Slice(rows, func(i, j int) bool {
return rows[i].Level < rows[j].Level
})
result := make([]RoomTurnoverRewardLevelPayload, 0, len(rows))
for _, row := range rows {
result = append(result, RoomTurnoverRewardLevelPayload{
ID: row.ID,
Level: row.Level,
TurnoverThreshold: row.TurnoverThreshold,
RewardGold: row.RewardGold,
Enabled: row.Enabled,
})
}
return result
}
func toRecordView(row model.RoomTurnoverRewardRecord) RoomTurnoverRewardRecordView {
return RoomTurnoverRewardRecordView{
ID: row.ID,
ConfigID: row.ConfigID,
SysOrigin: row.SysOrigin,
CycleKey: row.CycleKey,
PeriodStartAt: formatDateTime(row.PeriodStartAt),
PeriodEndAt: formatDateTime(row.PeriodEndAt),
RoomID: row.RoomID,
RoomAccount: row.RoomAccount,
RoomName: row.RoomName,
RoomCover: row.RoomCover,
OwnerUserID: row.OwnerUserID,
CountryCode: row.CountryCode,
CountryName: row.CountryName,
TurnoverAmount: row.TurnoverAmount,
Level: row.Level,
TurnoverThreshold: row.TurnoverThreshold,
RewardGold: row.RewardGold,
TrackID: row.TrackID,
Status: row.Status,
RetryCount: row.RetryCount,
LastError: row.LastError,
SentAt: formatDateTime(pointerTimeValue(row.SentAt)),
UpdateTime: formatDateTime(row.UpdateTime),
}
}
func normalizePage(cursor, limit int) (int, int) {
if cursor <= 0 {
cursor = 1
}
if limit <= 0 {
limit = 20
}
if limit > 100 {
limit = 100
}
return cursor, limit
}
func formatDateTime(t time.Time) string {
if t.IsZero() {
return ""
}
return t.Format("2006-01-02 15:04:05")
}
func pointerTimeValue(value *time.Time) time.Time {
if value == nil {
return time.Time{}
}
return *value
}
func truncateString(value string, limit int) string {
if limit <= 0 || len(value) <= limit {
return value
}
return value[:limit]
}