127 lines
3.6 KiB
Go
127 lines
3.6 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"mongo.games.com/game/protocol/server"
|
|
"time"
|
|
|
|
"github.com/globalsign/mgo/bson"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
var (
|
|
CoinPoolSettingDBName = "user"
|
|
CoinPoolSettingCollName = "user_coinpoolsetting"
|
|
CoinPoolSettingHisDBName = "log"
|
|
CoinPoolSettingHisCollName = "log_coinpoolsetting"
|
|
)
|
|
|
|
var CoinPoolSettingDatas = make(map[string]*CoinPoolSetting)
|
|
|
|
type CoinPoolSetting struct {
|
|
Id bson.ObjectId `bson:"_id"`
|
|
Platform string // 平台id
|
|
GameFreeId int32 // 游戏id
|
|
GroupId int32 // 组id
|
|
ServerId int32 // 服务器id
|
|
InitValue int64 // 初始库存值
|
|
LowerLimit int64 // 库存下限
|
|
UpperLimit int64 // 库存上限
|
|
QuDu int64 // 曲度值
|
|
UpperOdds int32 // 上线初始概率
|
|
UpperOddsMax int32 // 上线最大概率
|
|
LowerOdds int32 // 下线初始概率
|
|
LowerOddsMax int32 // 下线最大概率
|
|
ProfitRate int32 // 收益抽取比例
|
|
CtrlRate int32 // 调节赔率
|
|
InitNoviceValue int64 // 新手初始库存值
|
|
// 扩展参数
|
|
ResetTime int64 // 重置时间
|
|
UptTime time.Time // 更新时间
|
|
Switch int32 // 开关 0开启 1关闭
|
|
}
|
|
|
|
func NewCoinPoolSetting(platform string, groupId, gamefreeid, srverId int32, db *server.DB_GameCoinPool) *CoinPoolSetting {
|
|
cl := &CoinPoolSetting{Id: bson.NewObjectId()}
|
|
cl.Platform = platform
|
|
cl.GroupId = groupId
|
|
cl.GameFreeId = gamefreeid
|
|
cl.ServerId = srverId
|
|
cl.InitValue = db.InitValue
|
|
cl.LowerLimit = db.LowerLimit
|
|
cl.UpperLimit = db.UpperLimit
|
|
cl.QuDu = db.QuDu
|
|
cl.UpperOdds = db.UpperOdds
|
|
cl.UpperOddsMax = db.UpperOddsMax
|
|
cl.LowerOdds = db.LowerOdds
|
|
cl.LowerOddsMax = db.LowerOddsMax
|
|
cl.ProfitRate = db.ProfitRate
|
|
cl.ResetTime = time.Now().Unix()
|
|
cl.UptTime = time.Now()
|
|
cl.CtrlRate = db.CtrlRate
|
|
cl.InitNoviceValue = db.InitNovicValue
|
|
return cl
|
|
}
|
|
|
|
func GetAllCoinPoolSettingData() error {
|
|
if rpcCli == nil {
|
|
return ErrRPClientNoConn
|
|
}
|
|
var datas []CoinPoolSetting
|
|
err := rpcCli.CallWithTimeout("CoinPoolSettingSvc.GetAllCoinPoolSettingData", struct{}{}, &datas, time.Second*30)
|
|
if err != nil {
|
|
logger.Logger.Warn("GetAllCoinPoolSettingData error:", err)
|
|
return err
|
|
}
|
|
for i := 0; i < len(datas); i++ {
|
|
dbSetting := &datas[i]
|
|
ManageCoinPoolSetting(dbSetting)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type UpsertCoinPoolSettingArgs struct {
|
|
Cps *CoinPoolSetting
|
|
Old *CoinPoolSetting
|
|
}
|
|
|
|
func UpsertCoinPoolSetting(cps, old *CoinPoolSetting) (err error) {
|
|
if rpcCli == nil {
|
|
return ErrRPClientNoConn
|
|
}
|
|
var ret bool
|
|
args := &UpsertCoinPoolSettingArgs{
|
|
Cps: cps,
|
|
Old: old,
|
|
}
|
|
err = rpcCli.CallWithTimeout("CoinPoolSettingSvc.UpsertCoinPoolSetting", args, &ret, time.Second*30)
|
|
if err != nil {
|
|
logger.Logger.Warn("UpsertCoinPoolSetting error:", err)
|
|
return err
|
|
}
|
|
return
|
|
}
|
|
|
|
func GetCoinPoolSetting(gameFreeId, serverId, groupId int32, platform string) *CoinPoolSetting {
|
|
var key string
|
|
if groupId != 0 {
|
|
key = fmt.Sprintf("%v+%v_%v", gameFreeId, groupId, serverId)
|
|
} else {
|
|
key = fmt.Sprintf("%v_%v_%v", gameFreeId, platform, serverId)
|
|
}
|
|
if data, exist := CoinPoolSettingDatas[key]; exist {
|
|
return data
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func ManageCoinPoolSetting(dbSetting *CoinPoolSetting) {
|
|
var key string
|
|
if dbSetting.GroupId != 0 {
|
|
key = fmt.Sprintf("%v+%v_%v", dbSetting.GameFreeId, dbSetting.GroupId, dbSetting.ServerId)
|
|
} else {
|
|
key = fmt.Sprintf("%v_%v_%v", dbSetting.GameFreeId, dbSetting.Platform, dbSetting.ServerId)
|
|
}
|
|
CoinPoolSettingDatas[key] = dbSetting
|
|
}
|