player-data.go 1.47 KB
package dto

import (
	"apigame/service/constd"
	"apigame/util/util-lx/lxalilog"
	"apigame/util/utmysql"
	"fmt"
	"github.com/astaxie/beego/orm"
)

func LoadPlayerData(gameId string, uid int64, data IPlayerData) (has bool, err error) {
	tableName := data.TableName(gameId)
	sql := fmt.Sprintf("select * from %s where uid=%d limit 1", tableName, uid)
	has, err = utmysql.FindOneSql(constd.MYSQL_MERGECOMMON, sql, data)
	if err != nil {
		lxalilog.Errors(err, sql, gameId, uid)
		return
	}
	// 档案不存在 新建
	if !has {
		data.Init(uid)
		CreatePlayerData(gameId, uid, data)
	}
	return
}

func CreatePlayerData(gameId string, uid int64, data IPlayerData) {
	text1 := ""
	text2 := ""
	for s, s2 := range data.SqlPairs() {
		text1 += "," + s
		text2 += "," + s2
	}
	sql := fmt.Sprintf("insert into %s (uid%s) value (%d%s)",
		data.TableName(gameId), text1, uid, text2)

	o := orm.NewOrm()
	o.Using(constd.MYSQL_MERGECOMMON)

	_, err := o.Raw(sql).Exec()
	if err != nil {
		lxalilog.Errors(err, sql, gameId, uid)
		return
	}
}

func SavePlayerData(gameId string, uid int64, data IPlayerData) {
	text := ""
	indexPairs := 0
	for s, s2 := range data.SqlPairs() {
		if indexPairs != 0 {
			text += ","
		}
		text += fmt.Sprintf("%s=%s", s, s2)
		indexPairs++
	}
	sql := fmt.Sprintf("update %s set %s where uid=%d", data.TableName(gameId), text, uid)

	o := orm.NewOrm()
	o.Using(constd.MYSQL_MERGECOMMON)

	_, err := o.Raw(sql).Exec()
	if err != nil {
		lxalilog.Errors(err, sql, gameId, uid)
		return
	}
}