logic.go
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package ht_cardholder
import (
"apigame/dto"
"apigame/service/constd"
"apigame/util/util-lx/lxalilog"
"apigame/util/util-lx/lxtime"
"apigame/util/uttype"
"github.com/astaxie/beego/orm"
)
// SaveData 存储数据
func SaveData(d *dto.HtCardHolderData) {
d.UpdateTime = lxtime.NowUninx()
d.Encode()
o := orm.NewOrm()
o.Using(constd.MYSQL_DEFAULT)
if _, err := o.InsertOrUpdate(d); err != nil {
lxalilog.Errors(err, "ht_cardholder SaveData Error", d.Uid)
}
}
func _LoadData(uid int64) (d *dto.HtCardHolderData) {
d = dto.NewHtCardHolderData(uid)
o := orm.NewOrm()
o.Using(constd.MYSQL_DEFAULT)
qs := o.QueryTable(d)
qs = qs.Filter("uid", uid)
count, err := qs.Count()
if count == 0 {
d.CreateTime = lxtime.NowUninx()
} else {
err = qs.One(d)
if err != nil {
lxalilog.Errors(err, "ht_cardholder LoadData Error", uid)
} else {
d.Details = dto.NewHtCardHolderDataDetails()
d.Decode()
}
}
return
}
// LoadData 获取数据 外部接口
func LoadData(uid int64) (d *dto.HtCardHolderData) {
d = _LoadData(uid)
// 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
if Config.Id != 0 &&
Config.Id != d.ActivityId {
d.ActivityId = Config.Id
d.Details = dto.NewHtCardHolderDataDetails()
SaveData(d)
}
return
}
// CheckStatus 判断活动是否开启
func CheckStatus() string {
sec := lxtime.NowUninx()
if Config.Id == 0 {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
}
if sec < Config.Raw.StartTime {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
}
if sec > Config.Raw.EndTime {
return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
}
return constd.RECODE_OK
}
// GetUserSequenceIdAndCohort 获取 用户序列组ID(sequenceId) 用户分组(cohort)
func GetUserSequenceIdAndCohort(uid int64) (sequenceId, cohort string) {
// todo 这里后续要对接
sequenceId = "1"
cohort = "1"
return
}
// GetOneFromArray 从配置的数组里获取一个值 scale=之前刻度
func GetOneFromArray(array []string, scale int) string {
length := len(array)
if length < 1 {
return ""
}
if length == 1 {
return array[0]
}
return array[scale%length]
}
// GetListFromArray 从配置的数组里获取一组值 scale=之前刻度 count=数目
func GetListFromArray(array []string, scale, count int) []string {
list := make([]string, 0)
if count < 0 {
return list
}
s := scale
for i := 0; i < count; i++ {
one := GetOneFromArray(array, s)
list = append(list, one)
s++
}
return list
}
// GetNewCard 按顺序查找数目最少的一张卡抽取
func GetNewCard(gameData *dto.HtCardHolderData) int {
if len(Config.CardConfig) < 1 {
return 0
}
rate := int64(100000000)
list := make([]int64, 0)
for id, _ := range Config.CardConfig {
count, _ := gameData.Details.Cards[id]
index := int64(count)*rate + int64(id)
list = append(list, index)
}
indexMin := uttype.Min(list...)
return int(indexMin % rate)
}