123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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 (
- _getPool = "SELECT id, coin_id, title, rule, start_time, end_time, status, is_bottom FROM capsule_pool"
- _getOnePool = "SELECT id, coin_id,title,rule,start_time,end_time,status, is_bottom FROM capsule_pool WHERE id = ?"
- _updatePStatus = "UPDATE capsule_pool SET status = ? WHERE id = ?"
- _delPool = "DELETE FROM capsule_pool WHERE id = ?"
- _createPool = "INSERT INTO capsule_pool (coin_id,title,rule,start_time,end_time,status) VALUES (?,?,?,?,?,0)"
- _updatePool = "UPDATE capsule_pool SET coin_id = ?, title = ?, rule = ?, start_time = ?, end_time = ? WHERE id = ?"
- _getPoolMap = "SELECT id, coin_id, title, rule, start_time, end_time, status, is_bottom FROM capsule_pool WHERE status = 1 and coin_id in (%v)"
- )
- //GetAllPool 获取奖池信息
- func (d *Dao) GetAllPool(ctx context.Context) (pools []*model.Pool, err error) {
- var rows *sql.Rows
- if rows, err = d.db.Query(ctx, _getPool); err != nil {
- log.Error("[dao.pool | GetAllPool] query(%s) error(%v)", _getPool, err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- p := &model.Pool{}
- if err = rows.Scan(&p.Id, &p.CoinId, &p.Title, &p.Description, &p.StartTime, &p.EndTime, &p.Status, &p.IsBottom); err != nil {
- log.Error("[dao.pool | GetAllPool] scan error, err %v", err)
- return
- }
- pools = append(pools, p)
- }
- return
- }
- //GetPoolMap 批量奖池信息
- func (d *Dao) GetPoolMap(ctx context.Context, coinIds []int64) (poolMap map[int64][]*model.Pool, err error) {
- var rows *sql.Rows
- stringCoinIds := make([]string, 0)
- for _, coinId := range coinIds {
- stringCoinIds = append(stringCoinIds, strconv.FormatInt(coinId, 10))
- }
- coinString := strings.Join(stringCoinIds, ",")
- if rows, err = d.db.Query(ctx, fmt.Sprintf(_getPoolMap, coinString)); err != nil {
- log.Error("[dao.pool | GetPoolMap]query(%s) error(%v)", _getPoolMap, err)
- return
- }
- defer rows.Close()
- poolMap = make(map[int64][]*model.Pool)
- for rows.Next() {
- d := &model.Pool{}
- if err = rows.Scan(&d.Id, &d.CoinId, &d.Title, &d.Description, &d.StartTime, &d.EndTime, &d.Status, &d.IsBottom); err != nil {
- log.Error("[dao.pool |GetPoolMap] scan error, err %v", err)
- return
- }
- if _, ok := poolMap[d.CoinId]; !ok {
- poolMap[d.CoinId] = make([]*model.Pool, 0)
- }
- poolMap[d.CoinId] = append(poolMap[d.CoinId], d)
- }
- return
- }
- // GetPoolById 通过ID获取奖池信息
- func (d *Dao) GetPoolById(ctx context.Context, poolID int64) (pool *model.Pool, err error) {
- var rows *sql.Rows
- if rows, err = d.db.Query(ctx, _getOnePool, poolID); err != nil {
- log.Error("[dao.pool | GetPoolById]query(%s) error(%v)", _getOnePool, err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- p := &model.Pool{}
- if err = rows.Scan(&p.Id, &p.CoinId, &p.Title, &p.Description, &p.StartTime, &p.EndTime, &p.Status, &p.IsBottom); err != nil {
- log.Error("[dao.pool | GetPoolById] scan error, err %v", err)
- return
- }
- pool = p
- }
- return
- }
- //UpdatePoolStatus 更新奖池状态
- func (d *Dao) UpdatePoolStatus(ctx context.Context, id int64, status int64) (bool, error) {
- //s := fmt.Sprintf(_updatePStatus, status, id)
- res, err := d.db.Exec(ctx, _updatePStatus, status, id)
- if err != nil {
- log.Error("[dao.pool | UpdatePoolStatus] query(%s) error(%v)", _updatePStatus, err)
- return false, err
- }
- var rows int64
- rows, err = res.RowsAffected()
- if err != nil {
- log.Error("[dao.pool | UpdatePoolStatus] no coin is affected, err %v", err)
- return false, err
- }
- return rows > 0, nil
- }
- //DelPool 删除奖池
- func (d *Dao) DelPool(ctx context.Context, id int64) (rows int64, err error) {
- res, err := d.db.Exec(ctx, _delPool, id)
- if err != nil {
- log.Error("[dao.pool | DelPool]query(%s) error(%v)", _delPool, err)
- return
- }
- rows, err = res.RowsAffected()
- if err != nil {
- log.Error("[dao.pool | DelPool]no pool is deleted, err %v", err)
- return
- }
- return
- }
- //CreatePool 新建奖池
- func (d *Dao) CreatePool(ctx context.Context, data *v1pb.UpdatePoolReq) (status bool, err error) {
- coinId := data.CoinId
- title := data.Title
- startTime := data.StartTime
- endTime := data.EndTime
- rule := data.Rule
- //s := fmt.Sprintf(_createPool,coinTitle,title,rule,startTime,endTime)
- res, err := d.db.Exec(ctx, _createPool, coinId, title, rule, startTime, endTime)
- if err != nil {
- log.Error("[dao.pool | CreatePool] query(%s) error(%v)", _createPool, err)
- return
- }
- var rows int64
- rows, err = res.RowsAffected()
- if err != nil {
- log.Error("[dao.pool | CreatePool] no pool is created, err %v", err)
- return
- }
- status = rows > 0
- return
- }
- //UpdatePool 更新奖池
- func (d *Dao) UpdatePool(ctx context.Context, data *v1pb.UpdatePoolReq) (status bool, err error) {
- id := data.Id
- coinId := data.CoinId
- title := data.Title
- startTime := data.StartTime
- endTime := data.EndTime
- rule := data.Rule
- res, err := d.db.Exec(ctx, _updatePool, coinId, title, rule, startTime, endTime, id)
- if err != nil {
- log.Error("[dao.pool | UpdatePool] query(%s) error(%v)", _updatePool, err)
- return
- }
- var rows int64
- rows, err = res.RowsAffected()
- if err != nil {
- log.Error("[dao.pool | UpdatePool] no pool is updated, err %v", err)
- return
- }
- status = rows > 0
- return
- }
|