You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
78 lines
2.3 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"strings" |
|
|
|
"go-common/library/database/sql" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_getWhiteList = "select prize_id, item_id from capsule_prize_extra WHERE prize_id in (%v) and type = ? and status = 1 order by id" |
|
_updateWhiteList = "UPDATE capsule_prize_extra SET status = ? WHERE prize_id = ?" |
|
_addWhiteUser = "INSERT INTO capsule_prize_extra (prize_id,type,item_id,status) VALUES " |
|
_whiteType = 1 |
|
) |
|
|
|
// GetWhiteUserMap 获取白名单用户 |
|
func (d *Dao) GetWhiteUserMap(ctx context.Context, prizeIds []int64) (userMap map[int64][]int64, err error) { |
|
var rows *sql.Rows |
|
stringPrizeIds := make([]string, len(prizeIds)) |
|
for ix, prizeId := range prizeIds { |
|
stringPrizeIds[ix] = strconv.FormatInt(prizeId, 10) |
|
} |
|
sqlStr := fmt.Sprintf(_getWhiteList, strings.Join(stringPrizeIds, ",")) |
|
if rows, err = d.db.Query(ctx, sqlStr, _whiteType); err != nil { |
|
log.Error("[dao.pool_prize | GetPoolPrize]query(%s) error(%v)", _getWhiteList, err) |
|
return |
|
} |
|
defer rows.Close() |
|
|
|
userMap = make(map[int64][]int64) |
|
for rows.Next() { |
|
var uid, prizeId int64 |
|
if err = rows.Scan(&prizeId, &uid); err != nil { |
|
log.Error("[dao.pool_prize | GetWhiteUser] scan error, err %v", err) |
|
return |
|
} |
|
if _, ok := userMap[prizeId]; !ok { |
|
userMap[prizeId] = make([]int64, 0) |
|
} |
|
userMap[prizeId] = append(userMap[prizeId], uid) |
|
} |
|
return |
|
} |
|
|
|
// AddWhiteUser 添加白名单用户 |
|
func (d *Dao) AddWhiteUser(ctx context.Context, prizeId int64, uids []int64) (status bool, err error) { |
|
_, err = d.db.Exec(ctx, _updateWhiteList, 0, prizeId) |
|
if err != nil { |
|
log.Error("[dao.pool_prize | AddWhiteUids] update(%s) error(%v)", _updateWhiteList, err) |
|
return |
|
} |
|
rowFields := make([][4]interface{}, 0) |
|
for _, uid := range uids { |
|
rowFields = append(rowFields, [4]interface{}{prizeId, _whiteType, uid, 1}) |
|
} |
|
sqlStr := _addWhiteUser + strings.Repeat("(?,?,?,?),", len(rowFields)) |
|
slen := len(sqlStr) - 1 |
|
sqlStr = sqlStr[0:slen] |
|
values := make([]interface{}, len(rowFields)*4) |
|
for i, field := range rowFields { |
|
for j, v := range field { |
|
ix := i*4 + j |
|
values[ix] = v |
|
} |
|
} |
|
res, err := d.db.Exec(ctx, sqlStr, values...) |
|
if err != nil { |
|
log.Error("[dao.prize_extra | AddWhiteUser] add(%s) error (%v)", sqlStr, err) |
|
return |
|
} |
|
rows, _ := res.RowsAffected() |
|
status = rows > 0 |
|
return |
|
}
|
|
|