81 lines
2.5 KiB
Go
81 lines
2.5 KiB
Go
|
package dao
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"go-common/app/service/live/xlottery/model"
|
||
|
"strings"
|
||
|
|
||
|
"go-common/library/database/sql"
|
||
|
"go-common/library/log"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_getExtraDataByTypeMysql = "select type, item_value, item_extra, ctime, mtime from capsule_extra_data where uid = ? and type in (%v)"
|
||
|
_addExtraDataMysql = "insert into capsule_extra_data(uid,type,item_value,item_extra) values "
|
||
|
_updateExtraValueMysql = "update capsule_extra_data set item_value = ? where uid = ? and type = ?"
|
||
|
)
|
||
|
|
||
|
// GetExtraDataByType 添加数据
|
||
|
func (d *Dao) GetExtraDataByType(ctx context.Context, uid int64, types []string) (extraData []*model.ExtraData, err error) {
|
||
|
var rows *sql.Rows
|
||
|
var typeString []string
|
||
|
for _, etype := range types {
|
||
|
typeString = append(typeString, "'"+etype+"'")
|
||
|
}
|
||
|
sqlStr := fmt.Sprintf(_getExtraDataByTypeMysql, strings.Join(typeString, ","))
|
||
|
if rows, err = d.db.Query(ctx, sqlStr, uid); err != nil {
|
||
|
log.Error("[dao.extra | GetExtraDataByType] query(%s) error (%v)", sqlStr, err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
extraData = make([]*model.ExtraData, 0)
|
||
|
for rows.Next() {
|
||
|
p := &model.ExtraData{}
|
||
|
if err = rows.Scan(&p.Type, &p.ItemValue, &p.ItemExtra, &p.Ctime, &p.Mtime); err != nil {
|
||
|
log.Error("[dao.extra | GetExtraDataByType] scan error, err %v", err)
|
||
|
return
|
||
|
}
|
||
|
extraData = append(extraData, p)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// AddExtraData 添加数据
|
||
|
func (d *Dao) AddExtraData(ctx context.Context, extraData []*model.ExtraData) (status bool, err error) {
|
||
|
sqlStr := _addExtraDataMysql + strings.Repeat("(?,?,?,?),", len(extraData))
|
||
|
slen := len(sqlStr) - 1
|
||
|
sqlStr = sqlStr[0:slen]
|
||
|
values := make([]interface{}, len(extraData)*4)
|
||
|
for i, extra := range extraData {
|
||
|
values[i*4] = extra.Uid
|
||
|
values[i*4+1] = extra.Type
|
||
|
values[i*4+2] = extra.ItemValue
|
||
|
values[i*4+3] = extra.ItemExtra
|
||
|
}
|
||
|
res, err := d.db.Exec(ctx, sqlStr, values...)
|
||
|
if err != nil {
|
||
|
log.Error("[dao.extra | AddExtraData] add(%s) error (%v)", sqlStr, err)
|
||
|
return
|
||
|
}
|
||
|
rows, _ := res.RowsAffected()
|
||
|
status = rows > 0
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// UpdateExtraValue 更新数据
|
||
|
func (d *Dao) UpdateExtraValue(ctx context.Context, uid int64, etype string, itemValue int64) (status bool, err error) {
|
||
|
res, err := d.db.Exec(ctx, _updateExtraValueMysql, itemValue, uid, etype)
|
||
|
if err != nil {
|
||
|
log.Error("[dao.extra | UpdateExtraValue] update(%s) error(%v)", _updateExtraValueMysql, err)
|
||
|
return false, err
|
||
|
}
|
||
|
var rows int64
|
||
|
rows, err = res.RowsAffected()
|
||
|
if err != nil {
|
||
|
log.Error("[dao.extra | UpdateExtraValue] err %v", err)
|
||
|
return false, err
|
||
|
}
|
||
|
return rows > 0, nil
|
||
|
}
|