94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
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
|
|
}
|