You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
2.7 KiB
Go
134 lines
2.7 KiB
Go
package provider
|
|
|
|
import (
|
|
"context"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils/merr"
|
|
"joybuywork/internal/utils/timez"
|
|
"time"
|
|
)
|
|
|
|
type CampaignTZ struct {
|
|
ctx context.Context
|
|
be *merr.BusinessError
|
|
|
|
cpn *model.FissionCampaign
|
|
langMark string
|
|
|
|
tOffset int32
|
|
start, end, pre int64
|
|
}
|
|
|
|
// NewCampaignTZ 活动控制器
|
|
func NewCampaignTZ(ctx context.Context, cpn *model.FissionCampaign, langMark string) *CampaignTZ {
|
|
ct := &CampaignTZ{
|
|
ctx: ctx,
|
|
be: merr.NewBE(ctx),
|
|
cpn: cpn,
|
|
langMark: langMark,
|
|
}
|
|
|
|
ct.tz()
|
|
|
|
return ct
|
|
}
|
|
|
|
// GetStatus 获取活动状态
|
|
func (s *CampaignTZ) GetStatus() int32 {
|
|
if s.IsWait() {
|
|
return mtype.FissionCampaignStatusWait
|
|
}
|
|
|
|
if s.IsPre() {
|
|
return mtype.FissionCampaignStatusPubPre
|
|
}
|
|
|
|
if s.IsRunning() {
|
|
return mtype.FissionCampaignStatusPub
|
|
}
|
|
|
|
return mtype.FissionCampaignStatusCancel
|
|
}
|
|
|
|
// GetTz 获取活动时区
|
|
func (s *CampaignTZ) GetTz() int32 {
|
|
return s.tOffset
|
|
}
|
|
|
|
// IsWait 活动等待开始
|
|
func (s *CampaignTZ) IsWait() bool {
|
|
return time.Now().Unix() < s.start
|
|
}
|
|
|
|
// IsRunning IsStart 活动进行中
|
|
func (s *CampaignTZ) IsRunning() bool {
|
|
return time.Now().Unix() > s.start && time.Now().Unix() < s.end
|
|
}
|
|
|
|
// IsEnd 活动是否结束
|
|
func (s *CampaignTZ) IsEnd() bool {
|
|
return time.Now().Unix() > s.end
|
|
}
|
|
|
|
// IsPre 活动是否在予发布期间
|
|
func (s *CampaignTZ) IsPre() bool {
|
|
if s.pre > 0 {
|
|
return time.Now().Unix() < s.pre
|
|
}
|
|
|
|
return s.cpn.Status == mtype.FissionCampaignStatusPubPre
|
|
}
|
|
|
|
// EndTime 结束时间处理成设置好时区的标准时间
|
|
func (s *CampaignTZ) EndTime() time.Time {
|
|
return time.Unix(s.end, 0).In(timez.Location(s.tOffset))
|
|
}
|
|
|
|
// StarTime 开始时间处理成设置好时区的标准时间
|
|
func (s *CampaignTZ) StarTime() time.Time {
|
|
return time.Unix(s.start, 0).In(timez.Location(s.tOffset))
|
|
}
|
|
|
|
// 时区处理
|
|
func (s *CampaignTZ) tz() {
|
|
s.tOffset = s.cpn.TOffset
|
|
s.start = s.cpn.StartTime
|
|
s.end = s.cpn.EndTime
|
|
s.pre = s.cpn.PreToRun
|
|
lms := s.cpn.GetLangMarks()
|
|
|
|
if len(lms) <= 1 || s.langMark == "" {
|
|
return
|
|
}
|
|
|
|
var uLang string
|
|
for _, lm := range lms[1:] {
|
|
if lm == s.langMark {
|
|
uLang = lm
|
|
break
|
|
}
|
|
}
|
|
|
|
if uLang == "" {
|
|
return
|
|
}
|
|
|
|
lang, _ := cache.NewCampaignLang(s.ctx).FindByCampaignId(s.cpn.ID, uLang)
|
|
if lang == nil {
|
|
return
|
|
}
|
|
|
|
s.tOffset = lang.TOffset
|
|
s.start = timez.GMT(s.cpn.TStart, lang.TOffset)
|
|
s.end = timez.GMT(s.cpn.TEnd, lang.TOffset)
|
|
|
|
if s.cpn.PreToRun > 0 {
|
|
preTime := timez.GMTTime(s.cpn.TOffset, s.cpn.PreToRun)
|
|
preDateTime := preTime.Format(time.DateTime)
|
|
langPre, _ := time.ParseInLocation(time.DateTime, preDateTime, timez.Location(lang.TOffset))
|
|
s.pre = langPre.Unix()
|
|
}
|
|
}
|