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.
113 lines
2.8 KiB
Go
113 lines
2.8 KiB
Go
// Package utils 依赖 joybuywork/internal 里面的东西写到这个文件
|
|
package utils
|
|
|
|
import (
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils/verify"
|
|
"fmt"
|
|
"math/rand"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/golang-module/carbon/v2"
|
|
)
|
|
|
|
func GetRandEnStr(l int) string {
|
|
b := make([]byte, l)
|
|
for i := range b {
|
|
c := rand.Intn(len(consts.RandEnStr))
|
|
b[i] = consts.RandEnStr[c]
|
|
}
|
|
|
|
return string(b)
|
|
}
|
|
|
|
// CampaignArchiveEnd 活动归档结束
|
|
func CampaignArchiveEnd(endTime int64) time.Time {
|
|
return carbon.CreateFromTimestamp(endTime).EndOfDay().ToStdTime()
|
|
}
|
|
|
|
// BehaviorFormatMark 行为带特殊id的标识
|
|
func BehaviorFormatMark(bt int32, markId any) string {
|
|
return fmt.Sprintf("%s%s%v", mtype.BehaviorTypeToMark[bt], consts.Colon, markId)
|
|
}
|
|
|
|
// BehaviorMarkToType 带特殊id的标识转换成类型
|
|
func BehaviorMarkToType(mark string) int32 {
|
|
mk := strings.Split(mark, consts.Colon)
|
|
return mtype.BehaviorMarkToType[mk[0]]
|
|
}
|
|
|
|
// BehaviorMarkId 获取带特殊id的标识的id
|
|
func BehaviorMarkId(mark string) string {
|
|
_, id, _ := strings.Cut(mark, consts.Colon)
|
|
return id
|
|
}
|
|
|
|
// FissionCampaignTaskMarkCondOneVal 完成任意事件的标识值
|
|
func FissionCampaignTaskMarkCondOneVal(condId int64) string {
|
|
return fmt.Sprintf("%s%s%d", mtype.FissionCampaignTaskMarkCondOne, consts.Colon, condId)
|
|
}
|
|
|
|
// FissionCampaignTaskMarkCondOneCondId 完成任意事件的条件ID
|
|
func FissionCampaignTaskMarkCondOneCondId(taskMark string) int64 {
|
|
_, id, _ := strings.Cut(taskMark, consts.Colon)
|
|
return StrToInt64(id)
|
|
}
|
|
|
|
// FissionCampaignTaskMarkRewardOneVal 完成奖品任务的标识值
|
|
func FissionCampaignTaskMarkRewardOneVal(rewardId int64) string {
|
|
return fmt.Sprintf("%s%s%d", mtype.FissionCampaignTaskMarkRewardOne, consts.Colon, rewardId)
|
|
}
|
|
|
|
// FissionCampaignTaskMarkRewardOneRewardId 完成奖品任务的奖品ID
|
|
func FissionCampaignTaskMarkRewardOneRewardId(taskMark string) int64 {
|
|
_, id, _ := strings.Cut(taskMark, consts.Colon)
|
|
return StrToInt64(id)
|
|
}
|
|
|
|
type CondTotalFinishRes struct {
|
|
Num int32 // 完成的次数
|
|
Remain string // 剩余累计计算数值
|
|
}
|
|
|
|
// CondTotalFinishNum 条件累计值完成次数
|
|
func CondTotalFinishNum(total, condVal string, bk ...func(doneNum int32) bool) (res *CondTotalFinishRes) {
|
|
res = &CondTotalFinishRes{}
|
|
|
|
t, cv := StrToFloat64(total), StrToFloat64(condVal)
|
|
defer func() {
|
|
res.Remain = t.String()
|
|
}()
|
|
if t.LessThan(cv) {
|
|
return
|
|
}
|
|
|
|
idx := 0
|
|
for {
|
|
|
|
idx++
|
|
res.Num++
|
|
t = t.Sub(cv)
|
|
|
|
if len(bk) > 0 && bk[0](res.Num) {
|
|
return
|
|
}
|
|
|
|
if t.LessThan(cv) || idx >= 50 {
|
|
return
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// NewGlobalTrigger 全局驱动
|
|
func NewGlobalTrigger(fissionId int64, t int32) int32 {
|
|
if t == 0 || verify.InArray(fissionId, consts.IdReferral) {
|
|
return mtype.FissionCampaignCondTriggerTypeGlobal
|
|
}
|
|
|
|
return t
|
|
}
|