package model import ( "context" "fmt" "github.com/go-redis/redis/v8" "gorm.io/gorm" "samba/pkg/log" "samba/util/rdbkey" ) const ( //ResClubCoin = "coin" // 俱乐部币 ResClubScore = "score" // 俱乐部自身积分,非玩家积分 ) var clubResMap = map[string]int{ //ResClubCoin: 1005, ResClubScore: 1006, } func ClubResToInt(res string) (int, error) { resInt, ok := clubResMap[res] if !ok { return -1, fmt.Errorf("has not resource:%v", res) } return resInt, nil } func ClubIntToRes(res int) (string, error) { for k, v := range clubResMap { if v == res { return k, nil } } return "", fmt.Errorf("has not resource:%v", res) } type ClubResourceOp struct { rdb *redis.Client db *gorm.DB } func NewClubResourceOp() *ClubResourceOp { return &ClubResourceOp{rdb: rdbMoney, db: userDB} } func (op *ClubResourceOp) loadClubRes(clubId int) (*ClubInfo, error) { return NewClubInfoOp().Load(clubId) } func (op *ClubResourceOp) Get(resType string, clubId int) (int64, error) { res, err := op.loadClubRes(clubId) if err != nil { return 0, err } switch resType { //case ResClubCoin: // return res.Coin, nil case ResClubScore: return res.Score, nil default: log.Error(fmt.Sprintf("club:%v get resType:%v", clubId, resType)) return 0, nil } } func (op *ClubResourceOp) Add(clubId int, add int64, resType string) (int64, error) { res, err := op.Get(resType, clubId) if err != nil { err = fmt.Errorf("club:%v add res:%v value:%v fail.err:%v", clubId, resType, add, err.Error()) log.Error(err.Error()) return 0, err } //if res+add < 0 { // err = fmt.Errorf("club:%v add res:%v add value:%v + current value:%v<0", clubId, resType, add, res) // log.Error(err.Error()) // return 0, err //} res, err = op.rdb.HIncrBy(context.Background(), rdbkey.ClubKey(clubId), resType, add).Result() if err != nil { err = fmt.Errorf("key:%v add res:%v value:%v fail.err:%v", rdbkey.ClubKey(clubId), resType, add, err.Error()) log.Error(err.Error()) return 0, err } expr := fmt.Sprintf("%v + ?", resType) err = op.db.Model(&ClubInfo{}).Where("id = ?", clubId).Update(resType, gorm.Expr(expr, add)).Error if err != nil { err = fmt.Errorf("club:%v add res:%v value:%v fail.err:%v", clubId, resType, add, err.Error()) log.Error(err.Error()) } return res, err }