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.
80 lines
2.5 KiB
80 lines
2.5 KiB
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 |
|
}
|
|
|