117 lines
4.8 KiB
Go
117 lines
4.8 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
v1pb "go-common/app/service/live/xlottery/api/grpc/v1"
|
|
"go-common/app/service/live/xlottery/model"
|
|
"go-common/library/database/sql"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
const (
|
|
_getPoolPrize = "SELECT id, pool_id, type, num, object_id,expire, web_url, mobile_url, description, jump_url, pro_type, chance, loop_num, limit_num, weight FROM capsule_pool_prize WHERE pool_id = ? and status = 1 order by ctime"
|
|
_delPoolPrize = "UPDATE capsule_pool_prize set status = 0 WHERE id = ?"
|
|
_addPoolPrize = "INSERT INTO capsule_pool_prize(pool_id,type,num,object_id,expire,web_url,mobile_url,description,jump_url,pro_type,chance,loop_num,limit_num,weight,status) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
|
|
_updatePoolPrize = "UPDATE capsule_pool_prize SET pool_id=?, type=?, num=?, object_id=?,expire=?, web_url=?, mobile_url=?, description=?, jump_url=?, pro_type=?, chance=?, loop_num=?, limit_num=?,weight=? WHERE id = ?"
|
|
_getPoolPrizeMap = "SELECT id, pool_id, type, num, object_id,expire, web_url, mobile_url, description, jump_url, pro_type, chance, loop_num, limit_num, weight FROM capsule_pool_prize WHERE pool_id in (%s) and status = 1 order by ctime"
|
|
)
|
|
|
|
// GetPoolPrize 获取奖池奖品
|
|
func (d *Dao) GetPoolPrize(ctx context.Context, poolID int64) (poolPrize []*model.PoolPrize, err error) {
|
|
var rows *sql.Rows
|
|
if rows, err = d.db.Query(ctx, _getPoolPrize, poolID); err != nil {
|
|
log.Error("[dao.pool_prize | GetPoolPrize]query(%s) error(%v)", _getPoolPrize, err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
|
|
poolPrize = make([]*model.PoolPrize, 0)
|
|
for rows.Next() {
|
|
p := &model.PoolPrize{}
|
|
if err = rows.Scan(&p.Id, &p.PoolId, &p.Type, &p.Num, &p.ObjectId, &p.Expire, &p.WebUrl, &p.MobileUrl, &p.Description, &p.JumpUrl, &p.ProType, &p.Chance, &p.LoopNum, &p.LimitNum, &p.Weight); err != nil {
|
|
log.Error("[dao.pool_prize | GetPoolPrize] scan error, err %v", err)
|
|
return
|
|
}
|
|
poolPrize = append(poolPrize, p)
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetPoolPrizeMap 批量奖池奖品
|
|
func (d *Dao) GetPoolPrizeMap(ctx context.Context, poolIds []int64) (poolPrizeMap map[int64][]*model.PoolPrize, err error) {
|
|
var rows *sql.Rows
|
|
stringPoolIds := make([]string, 0)
|
|
for _, poolId := range poolIds {
|
|
stringPoolIds = append(stringPoolIds, strconv.FormatInt(poolId, 10))
|
|
}
|
|
poolString := strings.Join(stringPoolIds, ",")
|
|
if rows, err = d.db.Query(ctx, fmt.Sprintf(_getPoolPrizeMap, poolString)); err != nil {
|
|
log.Error("[dao.pool_prize | GetPoolPrizeMap] query(%s) error(%v)", _getPoolPrizeMap, err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
|
|
poolPrizeMap = make(map[int64][]*model.PoolPrize)
|
|
for rows.Next() {
|
|
d := &model.PoolPrize{}
|
|
if err = rows.Scan(&d.Id, &d.PoolId, &d.Type, &d.Num, &d.ObjectId, &d.Expire, &d.WebUrl, &d.MobileUrl, &d.Description, &d.JumpUrl, &d.ProType, &d.Chance, &d.LoopNum, &d.LimitNum, &d.Weight); err != nil {
|
|
log.Error("[dao.pool_prize | GetPoolPrizeMap] scan error, err %v", err)
|
|
return
|
|
}
|
|
if _, ok := PrizeNameMap[d.Type]; !ok {
|
|
continue
|
|
}
|
|
if _, ok := poolPrizeMap[d.PoolId]; !ok {
|
|
poolPrizeMap[d.PoolId] = make([]*model.PoolPrize, 0)
|
|
}
|
|
poolPrizeMap[d.PoolId] = append(poolPrizeMap[d.PoolId], d)
|
|
}
|
|
return
|
|
}
|
|
|
|
// DeletePoolPrize 删除奖池奖品
|
|
func (d *Dao) DeletePoolPrize(ctx context.Context, id int64) (status bool, err error) {
|
|
res, err := d.db.Exec(ctx, _delPoolPrize, id)
|
|
if err != nil {
|
|
log.Error("[dao.pool_prize | DelPoolDetail] query(%s) error (%v)", _delPoolPrize, err)
|
|
return
|
|
}
|
|
var rows int64
|
|
rows, err = res.RowsAffected()
|
|
if err != nil {
|
|
log.Error("[dao.pool_prize | DelPoolDetail] no poolDetail is deleted, err %v", err)
|
|
return
|
|
}
|
|
status = rows > 0
|
|
return
|
|
}
|
|
|
|
// AddPoolPrize 创建奖池奖品
|
|
func (d *Dao) AddPoolPrize(ctx context.Context, data *v1pb.UpdatePoolPrizeReq) (prizeId int64, err error) {
|
|
res, err := d.db.Exec(ctx, _addPoolPrize, data.PoolId, data.Type, data.Num, data.ObjectId, data.Expire, data.WebUrl, data.MobileUrl, data.Description, data.JumpUrl, data.ProType, data.Chance, data.Loop, data.Limit, data.Weight, 1)
|
|
if err != nil {
|
|
log.Error("[dao.pool_prize | CreatePoolPrize] query(%s) error (%v)", _addPoolPrize, err)
|
|
return
|
|
}
|
|
prizeId, err = res.LastInsertId()
|
|
if err != nil {
|
|
log.Error("[dao.pool_prize | CreatePoolPrize] insertLastId error(%v)", err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdatePoolPrize 更新奖池奖品
|
|
func (d *Dao) UpdatePoolPrize(ctx context.Context, data *v1pb.UpdatePoolPrizeReq) (status bool, err error) {
|
|
_, err = d.db.Exec(ctx, _updatePoolPrize, data.PoolId, data.Type, data.Num, data.ObjectId, data.Expire, data.WebUrl, data.MobileUrl, data.Description, data.JumpUrl, data.ProType, data.Chance, data.Loop, data.Limit, data.Weight, data.Id)
|
|
if err != nil {
|
|
log.Error("[dao.pool_prize | UpdatePoolPrize] query(%s) error(%v)", _updatePoolPrize, err)
|
|
return
|
|
}
|
|
return true, nil
|
|
}
|