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.
59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
package cachecurd
|
|
|
|
import (
|
|
"joybuywork/internal/repository/dao"
|
|
"joybuywork/internal/utils/lockdo"
|
|
"fmt"
|
|
)
|
|
|
|
const (
|
|
tKeepRewardSelect = "keepRewardSelect" // 激励养成奖品选择人数
|
|
|
|
)
|
|
|
|
// 激励养成奖品选择人数
|
|
func (s *HMap) keepRewardSelect(cond *HMapBuild) (err error) {
|
|
err = lockdo.ExistDo(s.ctx, s.key, func(exist bool) (err error) {
|
|
if exist {
|
|
return
|
|
}
|
|
|
|
m := dao.FissionKeep
|
|
type Num struct {
|
|
RewardId int64
|
|
Num int64
|
|
}
|
|
|
|
var nums []*Num
|
|
err = m.WithContext(s.ctx).
|
|
Select(
|
|
m.ID.Count().As("num"),
|
|
m.RewardID,
|
|
).
|
|
Where(m.CampaignID.Eq(cond.CpnId)).Group(m.RewardID).Scan(&nums)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var values []string
|
|
for _, num := range nums {
|
|
values = append(values, fmt.Sprintf("%d", num.RewardId), fmt.Sprintf("%d", num.Num))
|
|
}
|
|
|
|
err = s.Set(values...)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.data = make(map[string]string, len(nums))
|
|
for i := 0; i < len(values); i += 2 {
|
|
s.data[values[i]] = values[i+1]
|
|
}
|
|
|
|
return
|
|
|
|
})
|
|
|
|
return
|
|
}
|