1967 lines
60 KiB
Go
1967 lines
60 KiB
Go
package main
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
_ "games.yol.com/win88"
|
||
"go.etcd.io/etcd/client/v3"
|
||
"mongo.games.com/game/common"
|
||
"mongo.games.com/game/etcd"
|
||
"mongo.games.com/game/protocol/server"
|
||
"mongo.games.com/game/srvdata"
|
||
"mongo.games.com/game/webapi"
|
||
"mongo.games.com/goserver/core"
|
||
_ "mongo.games.com/goserver/core/i18n"
|
||
"mongo.games.com/goserver/core/logger"
|
||
"mongo.games.com/goserver/core/module"
|
||
"net"
|
||
"strconv"
|
||
"time"
|
||
)
|
||
|
||
//获取平台数据 platform_list
|
||
|
||
// 排行榜开关
|
||
type RankSwitch struct {
|
||
Asset int32 // 财富榜
|
||
Recharge int32 // 充值榜
|
||
Exchange int32 // 兑换榜
|
||
Profit int32 // 盈利榜
|
||
}
|
||
|
||
// 俱乐部配置
|
||
type ClubConfig struct {
|
||
CreationCoin int64 //创建俱乐部金额
|
||
IncreaseCoin int64 //升级俱乐部金额
|
||
ClubInitPlayerNum int32 //俱乐部初始人数
|
||
IncreasePlayerNum int32 //升级人数增加
|
||
IsOpenClub bool //是否开放俱乐部
|
||
CreateClubCheckByManual bool //创建俱乐部人工审核,true=手动
|
||
EditClubNoticeByManual bool //修改公告人工审核,true=手动
|
||
CreateRoomAmount int64 //创建房间金额(分/局)
|
||
GiveCoinRate []int64 //会长充值额外赠送比例
|
||
}
|
||
|
||
type PlatformInfoApi struct {
|
||
PlatformName string
|
||
Isolated bool
|
||
Disabled bool
|
||
ConfigId int32
|
||
CustomService string
|
||
BindOption int32
|
||
ServiceFlag int32
|
||
UpgradeAccountGiveCoin int32 //升级账号奖励金币
|
||
NewAccountGiveCoin int32 //新账号奖励金币
|
||
PerBankNoLimitAccount int32 //同一银行卡号绑定用户数量限制
|
||
ExchangeMin int32 //最低兑换金额
|
||
ExchangeLimit int32 //兑换限制
|
||
ExchangeTax int32 //兑换税收(万分比)
|
||
ExchangeForceTax int32 //强制兑换税收
|
||
ExchangeFlow int32 //兑换流水比例
|
||
ExchangeGiveFlow int32 //赠送兑换流水比例
|
||
ExchangeFlag int32 //兑换标记 二进制 第一位:兑换税收 第二位:流水比例
|
||
ExchangeVer int32 //兑换版本
|
||
ExchangeMultiple int32 //兑换基数
|
||
VipRange []int32 //VIP充值区间
|
||
OtherParams string //其他参数json串
|
||
SpreadConfig int32
|
||
Leaderboard RankSwitch
|
||
ClubConfig *ClubConfig //俱乐部配置
|
||
VerifyCodeType int32 //验证码方式
|
||
ThirdGameMerchant map[int32]int32 //三方游戏平台状态
|
||
CustomType int32
|
||
NeedDeviceInfo bool
|
||
NeedSameName bool //绑定的银行卡和支付宝用户名字需要相同
|
||
ExchangeBankMax int32 //银行卡最大兑换金额 0不限制
|
||
ExchangeAlipayMax int32 //支付宝最大兑换金额 0不限制
|
||
DgHboConfig int32 //dg hbo配置,默认0,dg 1 hbo 2
|
||
PerBankNoLimitName int32 //银行卡名字数量限制
|
||
IsCanUserBindPromoter bool //是否允许用户手动绑定推广员
|
||
UserBindPromoterPrize int32 //手动绑定奖励
|
||
}
|
||
|
||
type PackageListApi struct {
|
||
Tag string //android包名或者ios标记
|
||
Platform int32 //所属平台
|
||
ChannelId int32 //渠道ID
|
||
PromoterId int32 //推广员ID
|
||
PromoterTree int32 //无级推广树
|
||
SpreadTag int32 //全民包标识 0:普通包 1:全民包
|
||
OpenInstallTag int32 //是否是openinstall包 0:不是 1:是
|
||
Status int32 //状态
|
||
AppStore int32 //是否是苹果商店包 0:不是 1:是
|
||
ExchangeFlag int32 //兑换标记 0 关闭包返利 1打开包返利 受平台配置影响
|
||
ExchangeFlow int32 //兑换比例
|
||
IsForceBind int32
|
||
}
|
||
|
||
type PlatformCoinfig struct {
|
||
Id int32
|
||
Params []PlatConDataDetail
|
||
Parent_id int32
|
||
Platform int32
|
||
}
|
||
|
||
// 游戏平台配置
|
||
type PlatConDataDetail struct {
|
||
LogicId int32 ////对应DB_GameFree.xlsx中的id
|
||
Param string //参数
|
||
State int32 //开关 0:关 1:开
|
||
GroupId int32 //组id
|
||
DBGameFree *server.DB_GameFree //游戏配置
|
||
}
|
||
|
||
// 游戏平台状态
|
||
type PlatConfState struct {
|
||
LogicId int32 //对应GameGlobalState中的LogicId
|
||
Param string //参数
|
||
State int32 //开关 0:关 1:开
|
||
GroupId int32 //组id
|
||
DBGameFree *server.DB_GameFree //配置参数
|
||
}
|
||
|
||
var PlatformList = make(map[string]*PlatformInfoApi)
|
||
var PackageList = make(map[string]*PackageListApi)
|
||
var PlatConList = make(map[int32]*PlatformCoinfig)
|
||
var etcdCli = &etcd.Client{}
|
||
var waitCnt int
|
||
var isClearEtcd = "n" //是否清理etcd数据,默认是不清理
|
||
var isPutToEtcd = "n" //是否拉取数据到etcd,默认是不拉取
|
||
var isWatchEtcd = "n" //是否监控etcd,默认是不监控
|
||
func main() {
|
||
logger.Trace(`==================== Tips: Submit Your Choice =======================`)
|
||
|
||
logger.Tracef(`Do you want delete etcd only key=%v data (y/n) ?`, etcd.ETCDKEY_ROOT_PREFIX)
|
||
fmt.Scan(&isClearEtcd)
|
||
|
||
logger.Tracef(`Do you want put data to etcd by WebAPI (y/n) ?`)
|
||
fmt.Scan(&isPutToEtcd)
|
||
|
||
logger.Tracef(`Do you want watch etcd (y/n) ?`)
|
||
fmt.Scan(&isWatchEtcd)
|
||
|
||
var err error
|
||
if isClearEtcd != "y" && isPutToEtcd != "y" && isWatchEtcd != "y" {
|
||
logger.Errorf(`you don't have select any action, bye! `)
|
||
goto END
|
||
}
|
||
defer core.ClosePackages()
|
||
core.LoadPackages("config.json")
|
||
logger.Trace("etcdurl=", common.CustomConfig.GetStrings("etcdurl"))
|
||
logger.Trace("etcduser=", common.CustomConfig.GetString("etcduser"))
|
||
logger.Trace("etcdpwd=", common.CustomConfig.GetString("etcdpwd"))
|
||
logger.Trace("正在连接ETCD服务...")
|
||
err = etcdCli.Open(common.CustomConfig.GetStrings("etcdurl"), common.CustomConfig.GetString("etcduser"), common.CustomConfig.GetString("etcdpwd"), time.Minute)
|
||
if err != nil {
|
||
logger.Error("etcd connect fail because : ", err)
|
||
return
|
||
}
|
||
logger.Trace("连接ETCD服务成功!")
|
||
|
||
if isClearEtcd == "y" {
|
||
logger.Trace("delete etcd data...")
|
||
rep, err := etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ROOT_PREFIX)
|
||
if err != nil {
|
||
logger.Logger.Errorf("delete etcd date err:%v", err)
|
||
} else {
|
||
logger.Tracef("delete %v item in key=%v", rep.Deleted, etcd.ETCDKEY_ROOT_PREFIX)
|
||
}
|
||
}
|
||
|
||
if isPutToEtcd == "y" {
|
||
logger.Trace("是否只获取公共黑名单数据=", common.CustomConfig.GetBool("UseBlacklistBindPlayerinfo"))
|
||
//PutTestPlatform2Etcd()
|
||
//return
|
||
LoadActGoldCome()
|
||
PutActGoldCome2Etcd()
|
||
return
|
||
LoadRebateData()
|
||
PutRebateTaskEtcd()
|
||
|
||
//获取平台列表
|
||
GetPlatformList()
|
||
PutPlatform2Etcd()
|
||
|
||
//包
|
||
//LoadPlatformPackage()
|
||
PutPlatformPackage2Etcd()
|
||
|
||
//
|
||
LoadPlatformConfig()
|
||
PutPlatformConfig2Etcd()
|
||
|
||
//
|
||
LoadGameGroup()
|
||
PutPlatformGroup2Etcd()
|
||
|
||
//
|
||
LoadBullet()
|
||
PutBullet2Etcd()
|
||
|
||
//
|
||
LoadCustomer()
|
||
PutCustomer2Etcd()
|
||
|
||
LoadBlackList()
|
||
PutBlackList2Etcd()
|
||
|
||
LoadActSign()
|
||
PutActSign2Etcd()
|
||
|
||
//
|
||
LoadActGoldTask()
|
||
PutActGoldTask2Etcd()
|
||
|
||
//
|
||
|
||
LoadActOnlineReward()
|
||
PutActOnlineReward2Etcd()
|
||
|
||
LoadLuckyTurntableConfig()
|
||
PutLuckyTurntableConfig2Etcd()
|
||
|
||
LoadYebConfig()
|
||
PutYeb2ConfigEtcd()
|
||
|
||
LoadPromoterData()
|
||
PutPromoterEtcd()
|
||
|
||
LoadActVipData()
|
||
PutActVipEtcd()
|
||
|
||
LoadActWxShareData()
|
||
PutActWxShareEtcd()
|
||
|
||
LoadActData()
|
||
PutAcEtcd()
|
||
|
||
LoadRandomPrizeData()
|
||
PutRandomPrizeEtcd()
|
||
|
||
LoadActFPayData()
|
||
PutAcFPayEtcd()
|
||
|
||
}
|
||
|
||
if isWatchEtcd == "y" {
|
||
logger.Trace("Tip:watching etcd ,you can get/put keys....")
|
||
go func() {
|
||
defer func() {
|
||
if err := recover(); err != nil {
|
||
logger.Logger.Errorf("etcd watch WithPrefix(%v) panic:%v", etcd.ETCDKEY_ROOT_PREFIX, err)
|
||
}
|
||
logger.Logger.Warnf("etcd watch WithPrefix(%v) quit!!!", etcd.ETCDKEY_ROOT_PREFIX)
|
||
}()
|
||
var times int64
|
||
for {
|
||
times++
|
||
logger.Logger.Warnf("etcd watch WithPrefix(%v) start[%v]!!!", etcd.ETCDKEY_ROOT_PREFIX, times)
|
||
rch := etcdCli.WatchWithPrefix(etcd.ETCDKEY_ROOT_PREFIX, 0)
|
||
for wresp := range rch {
|
||
if wresp.Canceled {
|
||
logger.Logger.Warnf("etcd watch WithPrefix(%v) be closed, reason:%v", etcd.ETCDKEY_ROOT_PREFIX, wresp.Err())
|
||
continue
|
||
}
|
||
for _, ev := range wresp.Events {
|
||
switch ev.Type {
|
||
case clientv3.EventTypeDelete:
|
||
logger.Logger.Infof("etcd desc WithPrefix(%v) delete data:%v", string(ev.Kv.Key), string(ev.Kv.Value))
|
||
case clientv3.EventTypePut:
|
||
logger.Logger.Infof("etcd desc WithPrefix(%v) put data:%v", string(ev.Kv.Key), string(ev.Kv.Value))
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}()
|
||
}
|
||
END:
|
||
//启动业务模块
|
||
waiter := module.Start()
|
||
waiter.Wait("main()")
|
||
}
|
||
|
||
// 平台列表
|
||
func GetPlatformList() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []PlatformInfoApi
|
||
}
|
||
logger.Logger.Trace("start API_GetPlatformList")
|
||
platformBuff, err := webapi.API_GetPlatformData(common.GetAppId())
|
||
if err == nil {
|
||
//logger.Logger.Trace("API_GetPlatformData:", string(platformBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(platformBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for i := 0; i < len(ar.Msg); i++ {
|
||
PlatformList[ar.Msg[i].PlatformName] = &ar.Msg[i]
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal platform data error:", err, string(platformBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get platfrom data error:", err)
|
||
}
|
||
}
|
||
|
||
func PutTestPlatform2Etcd() {
|
||
|
||
for i := 1; i < 10000; i++ {
|
||
s := "{\"PlatformName\":\"9\",\"Isolated\":true,\"Disabled\":true,\"ConfigId\":9,\"CustomService\":\"\",\"BindOption\":1,\"ServiceFlag\":1,\"UpgradeAccountGiveCoin\":300,\"NewAccountGiveCoin\":0,\"PerBankNoLimitAccount\":1,\"ExchangeMin\":10000,\"ExchangeLimit\":300,\"ExchangeTax\":100,\"ExchangeForceTax\":0,\"ExchangeMultiple\":0,\"ExchangeFlow\":0,\"ExchangeGiveFlow\":0,\"ExchangeFlag\":1,\"ExchangeVer\":0,\"VipRange\":[10000,50000,100000,300000,500000,1000000],\"OtherParams\":\"\",\"SpreadConfig\":1,\"Leaderboard\":{\"Asset\":0,\"Recharge\":0,\"Exchange\":0,\"Profit\":0},\"ClubConfig\":{\"CreationCoin\":10000,\"IncreaseCoin\":100000,\"ClubInitPlayerNum\":50,\"IncreasePlayerNum\":50,\"IsOpenClub\":false,\"CreateClubCheckByManual\":false,\"EditClubNoticeByManual\":false,\"CreateRoomAmount\":1,\"GiveCoinRate\":[1,2,3,4,5,6,7,8,9,10]},\"VerifyCodeType\":0,\"ThirdGameMerchant\":{\"38\":1,\"39\":1,\"41\":0,\"43\":1,\"46\":0,\"47\":0,\"48\":0},\"CustomType\":0,\"NeedDeviceInfo\":false,\"NeedSameName\":false,\"ExchangeBankMax\":0,\"ExchangeAlipayMax\":0,\"DgHboConfig\":0}"
|
||
data, err := json.Marshal(s)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_PLATFORM_PREFIX, "7"), string(s))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutPlatform2Etcd err:%v data:%v", err, string(s))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutPlatform2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
func PutPlatform2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_PLATFORM_PREFIX)
|
||
|
||
logger.Logger.Trace("ETCD_PutPlatform2Etcd")
|
||
for name, p := range PlatformList {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_PLATFORM_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutPlatform2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutPlatform2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
}
|
||
}
|
||
|
||
// 包列表
|
||
//func LoadPlatformPackage() {
|
||
// //获取包对应关系 package_list
|
||
// logger.Logger.Trace("start API_PackageList")
|
||
// packageBuff, err := webapi.API_PackageList(common.GetAppId())
|
||
// if err == nil {
|
||
// type ApiResult struct {
|
||
// Tag int
|
||
// Msg []PackageListApi
|
||
// }
|
||
// ar := ApiResult{}
|
||
// err = json.Unmarshal(packageBuff, &ar)
|
||
// if err == nil && ar.Tag == 0 {
|
||
// for i := 0; i < len(ar.Msg); i++ {
|
||
// if ar.Msg[i].Platform == 0 {
|
||
// ar.Msg[i].Platform = 1
|
||
// }
|
||
// PackageList[ar.Msg[i].Tag] = &ar.Msg[i]
|
||
// //logger.Logger.Trace("PlatformPackage data:", ar.Msg[i])
|
||
// }
|
||
// } else {
|
||
// logger.Logger.Error("Unmarshal package list data error:", err, string(packageBuff))
|
||
// }
|
||
// } else {
|
||
// logger.Logger.Error("Get package list data error:", err)
|
||
// }
|
||
//}
|
||
|
||
func PutPlatformPackage2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_PACKAGE_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutPlatformPackage2Etcd")
|
||
//type ETCDPackageInfo struct {
|
||
// Tag string //android包名或者ios标记
|
||
// Platform int32 //所属平台
|
||
// Channel int32 //渠道ID
|
||
// Promoter int32 //推广员ID
|
||
// PromoterTree int32 //无级推广树
|
||
// SpreadTag int32 //全民包标识 0:普通包 1:全民包
|
||
// Status int32 //状态
|
||
//}
|
||
count := len(PackageList)
|
||
cur := 0
|
||
for name, p := range PackageList {
|
||
//value := &ETCDPackageInfo{
|
||
// Tag: p.Tag,
|
||
// Platform: p.Platform,
|
||
// Channel: p.ChannelId,
|
||
// Promoter: p.PromoterId,
|
||
// PromoterTree: p.PromoterTree,
|
||
// SpreadTag: p.SpreadTag,
|
||
// Status: p.Status,
|
||
//}
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_PACKAGE_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutPlatformPackage2Etcd err:%v data:%v", err, string(data))
|
||
} else {
|
||
//logger.Logger.Tracef("PutPlatformPackage2Etcd succes:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutPlatformPackage2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
func LoadPlatformConfig() {
|
||
//获取平台详细信息 game_config_list
|
||
type PlatformConfigApi struct {
|
||
Id int32
|
||
Params []PlatConfState
|
||
Parent_id int32
|
||
Platform int32
|
||
}
|
||
type PlatformConfigDataResult struct {
|
||
Tag int
|
||
Msg []PlatformConfigApi
|
||
}
|
||
//logger.Logger.Trace("LoadPlatformConfig")
|
||
configBuff, err := webapi.API_GetPlatformConfigData(common.GetAppId())
|
||
//logger.Trace(string(configBuff))
|
||
if err == nil {
|
||
pcdr := PlatformConfigDataResult{}
|
||
err = json.Unmarshal(configBuff, &pcdr)
|
||
if err == nil && pcdr.Tag == 0 {
|
||
for _, config := range pcdr.Msg {
|
||
pc := &PlatformCoinfig{
|
||
Id: config.Id,
|
||
Parent_id: config.Parent_id,
|
||
Platform: config.Platform,
|
||
}
|
||
println(pc.Id)
|
||
for _, config := range config.Params {
|
||
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(config.LogicId)
|
||
if dbGameFree == nil {
|
||
logger.Logger.Error("Platform config data error logic id:", config.LogicId)
|
||
continue
|
||
}
|
||
pcd := PlatConDataDetail{
|
||
LogicId: config.LogicId,
|
||
Param: config.Param,
|
||
State: config.State,
|
||
GroupId: config.GroupId,
|
||
DBGameFree: config.DBGameFree,
|
||
}
|
||
if pcd.DBGameFree == nil { //数据容错
|
||
pcd.DBGameFree = dbGameFree
|
||
} else {
|
||
|
||
CopyDBGameFreeField(dbGameFree, pcd.DBGameFree)
|
||
}
|
||
pc.Params = append(pc.Params, pcd)
|
||
}
|
||
//logger.Logger.Info("PlatformCoinfig data:", pc)
|
||
PlatConList[config.Id] = pc
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal platform config data error:", err, string(configBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get platfrom config data error:", err)
|
||
}
|
||
}
|
||
|
||
func PutPlatformConfig2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_GAMECONFIG_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutPlatformConfig2Etcd")
|
||
count := len(PlatConList)
|
||
cur := 0
|
||
for name, p := range PlatConList {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_GAMECONFIG_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutPlatformConfig2Etcd err:%v data:%v", err, string(data))
|
||
} else {
|
||
//logger.Logger.Tracef("PutPlatformConfig2Etcd succes:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutPlatformConfig2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type PlatformGameGroup struct {
|
||
GroupId int32 `json:"id"`
|
||
LogicId int32 `json:"LogicId"`
|
||
State int32 `json:"State"`
|
||
DBGameFree *server.DB_GameFree `json:"DBGameFree"` //游戏配置
|
||
}
|
||
|
||
var GameGroups = make(map[int32]*PlatformGameGroup)
|
||
|
||
func LoadGameGroup() {
|
||
//获取包对应关系 package_list
|
||
logger.Logger.Trace("API_GetGameGroupData")
|
||
packageBuff, err := webapi.API_GetGameGroupData(common.GetAppId())
|
||
if err == nil {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []*PlatformGameGroup
|
||
}
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(packageBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, value := range ar.Msg {
|
||
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(value.LogicId)
|
||
if dbGameFree == nil {
|
||
continue
|
||
}
|
||
if value.DBGameFree == nil {
|
||
value.DBGameFree = dbGameFree
|
||
} else {
|
||
CopyDBGameFreeField(dbGameFree, value.DBGameFree)
|
||
}
|
||
GameGroups[value.GroupId] = value
|
||
//logger.Logger.Trace("PlatformGameGroup data:", value)
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal PlatformGameGroup data error:", err, string(packageBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get PlatformGameGroup data error:", err)
|
||
}
|
||
}
|
||
|
||
func PutPlatformGroup2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_GROUPCONFIG_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutPlatformGroup2Etcd")
|
||
count := len(GameGroups)
|
||
cur := 0
|
||
for name, p := range GameGroups {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_GROUPCONFIG_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutPlatformGroup2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutPlatformGroup2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type Bullet struct {
|
||
Id int32
|
||
Sort int32 //排序
|
||
Platform string
|
||
NoticeTitle string
|
||
NoticeContent string
|
||
UpdateTime string
|
||
State int //0 关闭 1开启
|
||
} //声明与world中一样的结构体
|
||
type ApiBulletResult struct {
|
||
Tag int
|
||
Msg []Bullet
|
||
}
|
||
|
||
var BulletMsgList = make(map[int32]*Bullet)
|
||
|
||
func LoadBullet() {
|
||
logger.Logger.Trace("LoadBullet")
|
||
buff, err := webapi.API_GetBulletData(common.GetAppId())
|
||
//logger.Logger.Warn("bulletin buff: ", string(buff))
|
||
if err == nil {
|
||
info := ApiBulletResult{}
|
||
err = json.Unmarshal([]byte(buff), &info)
|
||
if err == nil {
|
||
for i := 0; i < len(info.Msg); i++ {
|
||
BulletMsgList[info.Msg[i].Id] = &info.Msg[i]
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal Bullet data error:", err, string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get Bullet data error:", err)
|
||
}
|
||
}
|
||
|
||
func PutBullet2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_BULLETIN_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutBullet2Etcd")
|
||
count := len(BulletMsgList)
|
||
cur := 0
|
||
for name, p := range BulletMsgList {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_BULLETIN_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutCustomer2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutCustomer2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
func CompBullet() {
|
||
logger.Logger.Trace("LoadBullet")
|
||
buff, err := webapi.API_GetBulletData(common.GetAppId())
|
||
//logger.Logger.Warn("bulletin buff: ", string(buff))
|
||
if err == nil {
|
||
info := ApiBulletResult{}
|
||
err = json.Unmarshal([]byte(buff), &info)
|
||
if err == nil {
|
||
for i := 0; i < len(info.Msg); i++ {
|
||
BulletMsgList[info.Msg[i].Id] = &info.Msg[i]
|
||
}
|
||
|
||
res, err := etcdCli.GetValueWithPrefix(etcd.ETCDKEY_BULLETIN_PREFIX)
|
||
if err == nil {
|
||
for i := int64(0); i < res.Count; i++ {
|
||
var info Bullet
|
||
err = json.Unmarshal(res.Kvs[i].Value, &info)
|
||
if err == nil {
|
||
if BulletMsgList[info.Id] == nil {
|
||
etcdCli.DelValue(string(res.Kvs[i].Key))
|
||
//logger.Logger.Errorf("etcd json pasre : ", string(res.Kvs[i].Key))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("etcd json pasre err: ", res.Kvs[i].Key, err)
|
||
}
|
||
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_BULLETIN_PREFIX, err)
|
||
return
|
||
}
|
||
|
||
} else {
|
||
logger.Logger.Error("Unmarshal Bullet data error:", err, string(buff))
|
||
return
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get Bullet data error:", err)
|
||
return
|
||
}
|
||
|
||
}
|
||
|
||
type Customer struct {
|
||
Id int32
|
||
Platform string
|
||
Weixin_account string
|
||
Qq_account string
|
||
Headurl string
|
||
Nickname string
|
||
Status int
|
||
Ext string
|
||
} //声明与world中一样的结构体
|
||
type ApiCustomerResult struct {
|
||
Tag int
|
||
Msg []Customer
|
||
}
|
||
|
||
var CustomerMsgList = make(map[int32]*Customer)
|
||
|
||
func LoadCustomer() {
|
||
logger.Logger.Trace("LoadCustomer")
|
||
buff, err := webapi.API_GetCustomerData(common.GetAppId())
|
||
//logger.Logger.Trace("customer buff:", string(buff))
|
||
if err == nil {
|
||
c_info := ApiCustomerResult{}
|
||
err = json.Unmarshal([]byte(buff), &c_info)
|
||
if err == nil {
|
||
for i := 0; i < len(c_info.Msg); i++ {
|
||
CustomerMsgList[c_info.Msg[i].Id] = &c_info.Msg[i]
|
||
}
|
||
} else {
|
||
logger.Logger.Trace("CustomerMgr is Unmarshal error.", err, string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Trace("API_GetCustomerData is error. ", err)
|
||
}
|
||
}
|
||
|
||
func PutCustomer2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_AGENTCUSTOMER_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutCustomer2Etcd")
|
||
count := len(CustomerMsgList)
|
||
cur := 0
|
||
for name, p := range CustomerMsgList {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_AGENTCUSTOMER_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutCustomer2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutCustomer2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type BlackInfo struct {
|
||
Id int32
|
||
BlackType int //1.游戏2.兑换3.充值
|
||
MemberId int32 //
|
||
AlipayAccount string
|
||
AlipayName string
|
||
Bankcard string
|
||
Ip string //support like "192.0.2.0/24" or "2001:db8::/32", as defined in RFC 4632 and RFC 4291.
|
||
Platform string
|
||
PackageTag string
|
||
ipNet *net.IPNet
|
||
}
|
||
type BlackInfoApi struct {
|
||
Id int32
|
||
Space int32
|
||
Snid int32
|
||
Alipay_account string
|
||
Alipay_name string
|
||
Bankcard string
|
||
Ip string
|
||
Platform string
|
||
PackageTag string
|
||
Explain string
|
||
Creator int32
|
||
Create_time string
|
||
Update_time string
|
||
} //声明与world一样结构体
|
||
var BlackList = make(map[int32]BlackInfoApi)
|
||
|
||
func LoadBlackList() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []BlackInfoApi
|
||
}
|
||
logger.Logger.Trace("LoadBlackList")
|
||
page := 1
|
||
for {
|
||
logger.Logger.Trace("LoadBlackList req page:%v", page)
|
||
var buff []byte
|
||
var err error
|
||
if common.CustomConfig.GetBool("UseBlacklistBindPlayerinfo") {
|
||
buff, err = webapi.API_GetCommonBlackData(common.GetAppId(), page)
|
||
} else {
|
||
buff, err = webapi.API_GetBlackData(common.GetAppId(), page)
|
||
}
|
||
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, value := range ar.Msg {
|
||
BlackList[value.Id] = value
|
||
}
|
||
if len(ar.Msg) < 5000 {
|
||
break
|
||
} else {
|
||
page++
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal black data error:", err, string(buff))
|
||
break
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Init black list failed.", err, string(buff))
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
func PutBlackList2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_BLACKLIST_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutBlackList2Etcd")
|
||
count := len(BlackList)
|
||
cur := 0
|
||
for name, p := range BlackList {
|
||
data, err := json.Marshal(&p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_BLACKLIST_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutBlackList2Etcd err:%v data:%v", err, string(data))
|
||
} else {
|
||
//logger.Logger.Tracef("PutBlackList2Etcd succes:%v data:%v", err, string(data))
|
||
}
|
||
//time.Sleep(time.Millisecond * 200)
|
||
} else {
|
||
logger.Logger.Errorf("PutBlackList2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type SignConfig struct {
|
||
ConfigTickets int64 //tickets
|
||
Platform string
|
||
StartAct int32 //活动是否开启
|
||
StartTickets int64 //tickets
|
||
Reward [][]int64 // [vipLevel][dayIndex]
|
||
} //声明与world中一样的结构体
|
||
var SignConfigs = make(map[string]SignConfig)
|
||
|
||
func LoadActSign() {
|
||
type SignConfigApi struct {
|
||
Params []SignConfig
|
||
}
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg SignConfigApi
|
||
}
|
||
logger.Logger.Trace("LoadActSign")
|
||
buff, err := webapi.API_GetPlatformSignConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, value := range ar.Msg.Params {
|
||
if value.StartAct > 0 {
|
||
SignConfigs[value.Platform] = value
|
||
//logger.Logger.Trace("value:", value)
|
||
}
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActSign data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Init ActSign list failed.")
|
||
}
|
||
|
||
}
|
||
|
||
func PutActSign2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_SIGNIN_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActSign2Etcd")
|
||
count := len(SignConfigs)
|
||
cur := 0
|
||
for name, p := range SignConfigs {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_SIGNIN_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutActSign2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutActSign2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type GoldTaskConfig struct {
|
||
TaskId int32 //
|
||
TaskDsc string
|
||
StartAct int32 //活动是否开启, 0:关闭 1:开启
|
||
GameId int32 //
|
||
TaskSort int32 //0,游戏对局; 1,打死某类鱼
|
||
TaskParam []int64 //活动参数 0;[count]; 1[fishid, count]
|
||
LimitTimes int32 //限制次数
|
||
Reward int64 //奖励
|
||
DurationSort int32 //持续时间 0:永久有效, 1:每天清除; 2,...
|
||
}
|
||
|
||
type APIGoldTaskConfigs struct {
|
||
Datas []GoldTaskConfig //[taskid]
|
||
Platform string //平台
|
||
ConfigVer int64 //时间戳
|
||
StartAct int32 //开关
|
||
} //声明与world中一样的结构体
|
||
|
||
var ActGoldTaskMap = make(map[string]APIGoldTaskConfigs)
|
||
|
||
func LoadActGoldTask() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []APIGoldTaskConfigs
|
||
}
|
||
logger.Logger.Trace("LoadActGoldTask")
|
||
buff, err := webapi.API_GetGoldTaskConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
//logger.Logger.Trace("API_GetGoldTaskConfig response:", string(buff))
|
||
for _, plateformConfig := range ar.Msg {
|
||
//logger.Logger.Trace("Platform:", plateformConfig.Platform, " ConfigVer:", plateformConfig.ConfigVer)
|
||
ActGoldTaskMap[plateformConfig.Platform] = plateformConfig
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActGoldTaskMgr data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Init ActGoldTaskMgr list failed.")
|
||
}
|
||
}
|
||
|
||
func PutActGoldTask2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_GOLDTASK_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActGoldTask2Etcd")
|
||
count := len(ActGoldTaskMap)
|
||
cur := 0
|
||
for name, p := range ActGoldTaskMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_GOLDTASK_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutActGoldTask2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutActGoldTask2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type GoldComeConfig struct {
|
||
TaskId int32 //
|
||
TaskDsc string
|
||
StartAct int32 //活动是否开启, 0:关闭 1:开启
|
||
GameId int32 //
|
||
WinType int32 //1,输赢分数; 2下注流水
|
||
MinTimes int64 //责任局数
|
||
BeginHour int32
|
||
BeginMinute int32
|
||
EndHour int32
|
||
EndMinute int32
|
||
Reward []int64 //奖励1~20名奖励
|
||
} //声明与world中一样的结构体
|
||
type RobotType int32
|
||
|
||
const (
|
||
ROBOTTYPE_ROBOT_CLOSE RobotType = iota //0:不使用机器人
|
||
ROBOTTYPE_ROBOT_OPEN = 1 //1:使用机器人
|
||
)
|
||
|
||
type APIGoldComeConfig struct {
|
||
Datas []GoldComeConfig //[taskid]
|
||
Platform string //平台
|
||
ConfigVer int64 //版本号
|
||
StartAct int32 //开启标记
|
||
RobotType RobotType //机器人类型
|
||
} //声明与world中一样的结构体
|
||
|
||
var ActGoldComeMap = make(map[string]APIGoldComeConfig)
|
||
|
||
func LoadActGoldCome() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []APIGoldComeConfig
|
||
}
|
||
logger.Logger.Trace("LoadActGoldCome")
|
||
buff, err := webapi.API_GetGoldComeConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, plateformConfig := range ar.Msg {
|
||
ActGoldComeMap[plateformConfig.Platform] = plateformConfig
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActGoldComeMgr data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Init ActGoldComeMgr list failed.")
|
||
}
|
||
|
||
}
|
||
|
||
func PutActGoldCome2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_GOLDCOME_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActGoldCome2Etcd")
|
||
count := len(ActGoldComeMap)
|
||
cur := 0
|
||
for name, p := range ActGoldComeMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_GOLDCOME_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutActGoldCome2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutActGoldCome2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type OnlineRewardConfig struct {
|
||
Id int32
|
||
OnlineDuration int32
|
||
RewardAmount int64
|
||
}
|
||
|
||
type PlatformOnlineRewardConfig struct {
|
||
Platform string
|
||
StartAct int32 //活动是否开启
|
||
StartTickets int64 //tickets
|
||
Version int32 // 活动版本
|
||
PayNeed int32 //充值需要的
|
||
Reward []OnlineRewardConfig `json:"Data,omitempty"`
|
||
} //声明与world中一样的结构体
|
||
|
||
type ApiOnlineRewardDatas struct {
|
||
Params []PlatformOnlineRewardConfig
|
||
}
|
||
|
||
var ActOnlineRewardMap = make(map[string]PlatformOnlineRewardConfig)
|
||
|
||
type LuckyTurntableConfig struct {
|
||
TurntableType int32 `json:"Type"` // 转盘类型
|
||
PoolInitAmount int64 `json:"PoolCoin"` // 水池初始额度
|
||
ScoreCost int64 // 积分消耗
|
||
Reward []int64 // 奖励:依次为小奖1、小奖2、中奖1、中奖2、大奖1、大奖2、特大奖1、特大奖2
|
||
PoolModify int64 `json:"PoolChange"` // 水池变化额度
|
||
}
|
||
|
||
type PlatformLuckyTurntableConfig struct {
|
||
Platform string // 平台名
|
||
StartAct int32 // 活动是否开启
|
||
StartTickets int64 // tickets
|
||
Version int32 // 活动版本
|
||
Turntables []*LuckyTurntableConfig `json:"Data"`
|
||
|
||
MapTurntables map[int32]*LuckyTurntableConfig
|
||
} //声明与world一样的结构体
|
||
|
||
type ApiResultDatas struct {
|
||
Params []PlatformLuckyTurntableConfig
|
||
}
|
||
|
||
var LuckyTurntableMap = make(map[string]PlatformLuckyTurntableConfig)
|
||
|
||
// 平台幸运转盘活动
|
||
func LoadLuckyTurntableConfig() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg ApiResultDatas
|
||
}
|
||
logger.Logger.Trace("LoadLuckyTurntableConfig")
|
||
buff, err := webapi.API_GetLuckyTurntableConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, value := range ar.Msg.Params {
|
||
//if value.StartAct > 0 {
|
||
LuckyTurntableMap[value.Platform] = value
|
||
//logger.Logger.Trace("value:", value)
|
||
//}
|
||
}
|
||
} else {
|
||
logger.Logger.Error("LuckyTurntableConfig.Init Unmarshal LuckyTurntableConfig data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("LuckyTurntableConfig.Init webapi.API_GetLuckyTurntableConfig failed.")
|
||
}
|
||
}
|
||
|
||
func PutLuckyTurntableConfig2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_LUCKLYTURNTABLE_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutLuckyTurntableConfig2Etcd")
|
||
count := len(LuckyTurntableMap)
|
||
cur := 0
|
||
for name, p := range LuckyTurntableMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_LUCKLYTURNTABLE_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutLuckyTurntableConfig2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutLuckyTurntableConfig2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
func LoadActOnlineReward() {
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg ApiOnlineRewardDatas
|
||
}
|
||
logger.Logger.Trace("LoadActOnlineReward")
|
||
buff, err := webapi.API_GetOnlineRewardConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, value := range ar.Msg.Params {
|
||
//if value.StartAct > 0 {
|
||
ActOnlineRewardMap[value.Platform] = value
|
||
//logger.Logger.Trace("value:", value)
|
||
//}
|
||
}
|
||
} else {
|
||
logger.Logger.Error("ActOnlineRewardMgr.Init Unmarshal ActOnlineReward data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("ActOnlineRewardMgr.Init webapi.API_GetOnlineRewardConfig failed.")
|
||
}
|
||
}
|
||
|
||
func PutActOnlineReward2Etcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_ONLINEREWARD_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActOnlineReward2Etcd")
|
||
count := len(ActOnlineRewardMap)
|
||
cur := 0
|
||
for name, p := range ActOnlineRewardMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_ONLINEREWARD_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutActOnlineReward2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutActOnlineReward2Etcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type YebConfig struct {
|
||
Platform string // 平台名
|
||
StartAct int32 // 活动是否开启
|
||
StartTickets int64 // tickets
|
||
Version int32 // 活动版本
|
||
|
||
Rate int64 // 配置利率(每万元收益,单位:分)
|
||
} //与world中一样
|
||
|
||
var YebConfigMap = make(map[string]YebConfig)
|
||
|
||
// 平台余额宝活动
|
||
func LoadYebConfig() {
|
||
type ApiResultDatas struct {
|
||
Params []YebConfig
|
||
}
|
||
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg ApiResultDatas
|
||
}
|
||
logger.Logger.Trace("LoadYebConfig")
|
||
buff, err := webapi.API_GetYebConfig(common.GetAppId())
|
||
if err == nil {
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(buff, &ar)
|
||
if err == nil {
|
||
for _, value := range ar.Msg.Params {
|
||
//if value.StartAct > 0 {
|
||
YebConfigMap[value.Platform] = value
|
||
//logger.Logger.Trace("value:", value)
|
||
//}
|
||
}
|
||
} else {
|
||
logger.Logger.Error("API_GetYebConfig.Init Unmarshal API_GetYebConfig data error:", err, " buff:", string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("API_GetYebConfig.Init webapi.API_GetYebConfig failed.")
|
||
}
|
||
}
|
||
|
||
func PutYeb2ConfigEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_YEB_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutYeb2ConfigEtcd")
|
||
count := len(YebConfigMap)
|
||
cur := 0
|
||
for name, p := range YebConfigMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_YEB_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutYeb2ConfigEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutYeb2ConfigEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type RebateGameCfg struct {
|
||
BaseCoin [3]int32 //返利基准
|
||
RebateRate [3]int32 //返利比率
|
||
GameId int32 //游戏id
|
||
GameMode int32 //游戏类型
|
||
MaxRebateCoin int64 //最高返利
|
||
|
||
}
|
||
type RebateGameThirdCfg struct {
|
||
BaseCoin [3]int32 //返利基准
|
||
RebateRate [3]int32 //返利比率
|
||
ThirdName string //第三方key
|
||
ThirdShowName string //前端显示name
|
||
MaxRebateCoin int64 //最高返利
|
||
ThirdId string //三方游戏id
|
||
}
|
||
type RebateInfo struct {
|
||
Platform string //平台名称
|
||
RebateSwitch bool //返利开关
|
||
RebateManState int //返利是开启个人返利 0 关闭 1 开启
|
||
ReceiveMode int //领取方式 0实时领取 1次日领取
|
||
NotGiveOverdue int //0不过期 1过期不给 2过期邮件给
|
||
RebateGameCfg []*RebateGameCfg //key为"gameid"+"gamemode"
|
||
RebateGameThirdCfg []*RebateGameThirdCfg //第三方key
|
||
Version int //活动版本 后台控制
|
||
}
|
||
type RebateTask struct {
|
||
Platform string //平台名称
|
||
RebateSwitch bool //返利开关
|
||
RebateManState int //返利是开启个人返利 0 关闭 1 开启
|
||
ReceiveMode int //领取方式 0实时领取 1次日领取
|
||
NotGiveOverdue int //0不过期 1过期不给 2过期邮件给
|
||
RebateGameCfg map[string]*RebateGameCfg //key为"gameid"+"gamemode"
|
||
RebateGameThirdCfg map[string]*RebateGameThirdCfg //第三方key
|
||
Version int //活动版本 后台控制
|
||
}
|
||
|
||
var RebateTaskMap = make(map[string]*RebateTask)
|
||
|
||
func LoadRebateData() {
|
||
logger.Logger.Trace("LoadRebateData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []RebateInfo
|
||
}
|
||
rebateBuff, err := webapi.API_GetGameRebateConfig(common.GetAppId())
|
||
if err == nil {
|
||
logger.Logger.Trace("API_GetGameRebateConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
RebateTaskMap[v.Platform] = &RebateTask{
|
||
Platform: v.Platform,
|
||
RebateSwitch: v.RebateSwitch,
|
||
ReceiveMode: v.ReceiveMode,
|
||
RebateManState: v.RebateManState,
|
||
NotGiveOverdue: v.NotGiveOverdue,
|
||
Version: v.Version,
|
||
}
|
||
RebateTaskMap[v.Platform].RebateGameCfg = make(map[string]*RebateGameCfg)
|
||
RebateTaskMap[v.Platform].RebateGameThirdCfg = make(map[string]*RebateGameThirdCfg)
|
||
for _, cfg := range v.RebateGameCfg {
|
||
for _, dfm := range srvdata.PBDB_GameFreeMgr.Datas.Arr {
|
||
|
||
if dfm.GetGameId() == cfg.GameId && dfm.GetGameMode() == cfg.GameMode {
|
||
RebateTaskMap[v.Platform].RebateGameCfg[dfm.GetGameDif()] = cfg
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
for _, cfg := range v.RebateGameThirdCfg {
|
||
RebateTaskMap[v.Platform].RebateGameThirdCfg[cfg.ThirdId] = cfg
|
||
}
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal RebateTask data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get RebateTask data error:", err)
|
||
}
|
||
}
|
||
func PutRebateTaskEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_CONFIG_REBATE)
|
||
logger.Logger.Trace("ETCD_PutRebateTaskEtcd")
|
||
count := len(RebateTaskMap)
|
||
cur := 0
|
||
for name, p := range RebateTaskMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_CONFIG_REBATE, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutRebateTaskEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutRebateTaskEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type PromoterConfig struct {
|
||
PromoterID string //代理ID
|
||
Platform string //平台
|
||
PromoterType int32 //代理类型 0 全民 1无限代理 2 渠道 3 推广员
|
||
UpgradeAccountGiveCoin int32 //升级账号奖励金币
|
||
NewAccountGiveCoin int32 //新账号奖励金币
|
||
ExchangeTax int32 //兑换税收(万分比)
|
||
ExchangeForceTax int32 //强制兑换税收
|
||
ExchangeFlow int32 //兑换流水比例
|
||
ExchangeGiveFlow int32 //赠送兑换流水比例
|
||
ExchangeFlag int32 //兑换标记
|
||
IsInviteRoot int32 //是否绑定全民用户
|
||
}
|
||
|
||
var PromoterMap = make(map[string]*PromoterConfig)
|
||
|
||
func LoadPromoterData() {
|
||
logger.Logger.Trace("LoadPromoterData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []PromoterConfig
|
||
}
|
||
rebateBuff, err := webapi.API_GetPromoterConfig(common.GetAppId())
|
||
if err == nil {
|
||
logger.Logger.Trace("API_GetPromoterConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
temp := v
|
||
PromoterMap[v.PromoterID+"_"+strconv.Itoa(int(v.PromoterType))] = &temp
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal Promoter data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get Promoter data error:", err)
|
||
}
|
||
}
|
||
func PutPromoterEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_PROMOTER_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutPromoterEtcd")
|
||
count := len(PromoterMap)
|
||
cur := 0
|
||
for name, p := range PromoterMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_PROMOTER_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("ETCD_PutPromoterEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("ETCD_PutPromoterEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type ActVipRewardConfig struct {
|
||
LevelCoin int32 //等级奖励金币
|
||
DayCoin int32 //每日奖励
|
||
WeekCoin int32 //每周奖励
|
||
MonthCoin int32 //每月奖励
|
||
}
|
||
|
||
type ActVipPlateformConfig struct {
|
||
VipBonusInfo []ActVipRewardConfig //奖励信息
|
||
Platform string //平台
|
||
StartAct int32 //活动开启标记 0:关闭 1:开启
|
||
}
|
||
|
||
var ActVipMap = make(map[string]*ActVipPlateformConfig)
|
||
|
||
func LoadActVipData() {
|
||
logger.Logger.Trace("LoadActVipData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []ActVipPlateformConfig
|
||
}
|
||
|
||
rebateBuff, err := webapi.API_GetActVipConfig(common.GetAppId())
|
||
if err == nil {
|
||
logger.Logger.Trace("API_GetPromoterConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
temp := v
|
||
ActVipMap[temp.Platform] = &temp
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActVip data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get ActVip data error:", err)
|
||
}
|
||
}
|
||
func PutActVipEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_VIP_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActVipEtcd")
|
||
count := len(ActVipMap)
|
||
cur := 0
|
||
for name, p := range ActVipMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_VIP_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("ETCD_ActVipMapEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("ETCD_ActVipMapEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type ShareConfig struct {
|
||
Platform string // 平台id
|
||
Status int32 // 开关
|
||
Number int64 // 分享彩金
|
||
Times int64 // 每日领取次数
|
||
FriendUrl string
|
||
SpaceUrl string
|
||
VipLevel int32 // vip等级下限
|
||
Recharge int64 // 充值下限
|
||
}
|
||
|
||
var ActWxShareMap = make(map[string]*ShareConfig)
|
||
|
||
func LoadActWxShareData() {
|
||
logger.Logger.Trace("LoadActWxShareData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []ShareConfig
|
||
}
|
||
|
||
rebateBuff, err := webapi.API_GetWeiXinShareConfig(common.GetAppId())
|
||
if err == nil {
|
||
//logger.Logger.Trace("API_GetPromoterConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
temp := v
|
||
ActWxShareMap[temp.Platform] = &temp
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActWxShare data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get ActWxShare data error:", err)
|
||
}
|
||
}
|
||
func PutActWxShareEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_WEIXIN_SHARE_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActEtcd")
|
||
count := len(ActWxShareMap)
|
||
cur := 0
|
||
for name, p := range ActWxShareMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_WEIXIN_SHARE_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("ETCD_PutActWxShareEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("ETCD_PutActWxShareEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type ActGiveConfig struct {
|
||
Tag int32 //赠与类型
|
||
IsStop int32 //是否阻止 1阻止 0放开
|
||
NeedFlow int32
|
||
}
|
||
|
||
type ActGivePlateformConfig struct {
|
||
ActInfo map[string]*ActGiveConfig //奖励信息
|
||
Platform string //平台
|
||
}
|
||
|
||
var ActMap = make(map[string]*ActGivePlateformConfig)
|
||
|
||
func LoadActData() {
|
||
logger.Logger.Trace("LoadActData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []ActGivePlateformConfig
|
||
}
|
||
|
||
rebateBuff, err := webapi.API_GetActConfig(common.GetAppId())
|
||
if err == nil {
|
||
//logger.Logger.Trace("API_GetPromoterConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
temp := v
|
||
ActMap[temp.Platform] = &temp
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal Act data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get Act data error:", err)
|
||
}
|
||
}
|
||
func PutAcEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_GIVE_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActEtcd")
|
||
count := len(ActMap)
|
||
cur := 0
|
||
for name, p := range ActMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_GIVE_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("ETCD_PutActEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("ETCD_PutActEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type RandRange struct {
|
||
Low int32
|
||
High int32
|
||
}
|
||
|
||
type RandCoinData struct {
|
||
Id int //红包活动编号
|
||
Platform string
|
||
IsOpen bool
|
||
DType int //红包类型 0:全量红包 1:随机红包 2:五福红包
|
||
StartTs int64 //开始时间
|
||
EndTs int64 //结束时间
|
||
CoinTs int64 //可以领奖的时间(五福红包有特殊的时间,其他的和开始时间是一样的)
|
||
Title string //红包标题
|
||
Context string //红包文案
|
||
Count int32 //红包数量
|
||
TotleCoin int64 //红包总额度(写错成了totlecoin,想修改成coin,但是这个需要后端配合修改,后端改起来麻烦,所以不要纠结这个变量名)
|
||
VipSel []int //红包VIP选项 勾选的VIP等级
|
||
ExtCoin int64 //红包额外条件
|
||
RandCoin []RandRange //VIP随机范围(随机红包特有)
|
||
NewYear []int //五福参数(五福红包特有)邀请好友数量,好友流水,每日充值,游戏局数,个人流水
|
||
}
|
||
|
||
type ActConfig struct {
|
||
Platform string
|
||
IsOpen bool
|
||
ActivityArr []*RandCoinData
|
||
}
|
||
|
||
var RandomPrizeMap = make(map[string]*ActConfig)
|
||
|
||
func LoadRandomPrizeData() {
|
||
logger.Logger.Trace("LoadRandomPrizeData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []*ActConfig
|
||
}
|
||
|
||
rebateBuff, err := webapi.API_GetRandCoinData(common.GetAppId())
|
||
if err == nil {
|
||
//logger.Logger.Trace("API_GetPromoterConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
RandomPrizeMap[v.Platform] = v
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal RandomPrize data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get RandomPrize data error:", err)
|
||
}
|
||
}
|
||
|
||
func PutRandomPrizeEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_RANDCOIN_PREFIX)
|
||
logger.Logger.Trace("ETCD_PutActEtcd")
|
||
count := len(RandomPrizeMap)
|
||
cur := 0
|
||
for name, p := range RandomPrizeMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_RANDCOIN_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("ETCD_PutActEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("ETCD_PutActEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
type ActFPayWinConfig struct {
|
||
WinType int32 //类型
|
||
WinRate int32 //赢取比例
|
||
}
|
||
|
||
type ActFPayConfig struct {
|
||
StartAct int32 //活动开启标记 0:关闭 1:开启
|
||
ConfigVer int32 //版本
|
||
PlayerAddMax int32 //玩家数量 //每分钟增长最大
|
||
PlayerAddMin int32 //玩家数量 //每分钟增长最小
|
||
StartTime int32 //开启时间 //秒
|
||
EndTime int32 //结束时间 //秒
|
||
FPayCoin int32 //首充金额
|
||
FPayGiveType int32 //赠送类型 0 金额 1 比例
|
||
FPayGiveCoin int32 //赠送金额
|
||
NeedWinCoin int32 //需要完成赢取金额
|
||
Remark string //备注
|
||
WinConfig map[string]*ActFPayWinConfig //赢取比例配置
|
||
}
|
||
|
||
type ActFPayPlateformConfig struct {
|
||
FPayInfo *ActFPayConfig //奖励信息
|
||
Platform string //平台
|
||
}
|
||
|
||
var ActFPayMap = make(map[string]*ActFPayPlateformConfig)
|
||
|
||
func LoadActFPayData() {
|
||
logger.Logger.Trace("LoadActData")
|
||
|
||
//获取平台返利数据
|
||
type ApiResult struct {
|
||
Tag int
|
||
Msg []ActFPayPlateformConfig
|
||
}
|
||
|
||
rebateBuff, err := webapi.API_GetActFPayConfig(common.GetAppId())
|
||
if err == nil {
|
||
logger.Logger.Trace("API_GetActFPayConfig:", string(rebateBuff))
|
||
ar := ApiResult{}
|
||
err = json.Unmarshal(rebateBuff, &ar)
|
||
if err == nil && ar.Tag == 0 {
|
||
for _, v := range ar.Msg {
|
||
temp := v
|
||
ActFPayMap[temp.Platform] = &temp
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActFPay data error:", err, string(rebateBuff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get ActFPay data error:", err)
|
||
}
|
||
}
|
||
func PutAcFPayEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_FPAY_PREFIX)
|
||
logger.Logger.Trace("PutAcFPayEtcd")
|
||
count := len(ActFPayMap)
|
||
cur := 0
|
||
for name, p := range ActFPayMap {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_FPAY_PREFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
func CopyDBGameFreeField(src, dst *server.DB_GameFree) {
|
||
dst.Id = src.Id
|
||
dst.Name = src.Name
|
||
dst.Title = src.Title
|
||
dst.ShowType = src.ShowType
|
||
dst.SubShowType = src.SubShowType
|
||
dst.Flag = src.Flag
|
||
dst.GameRule = src.GameRule
|
||
dst.TestTakeCoin = src.TestTakeCoin
|
||
dst.SceneType = src.SceneType
|
||
dst.GameType = src.GameType
|
||
dst.GameId = src.GameId
|
||
dst.GameMode = src.GameMode
|
||
dst.ShowId = src.ShowId
|
||
dst.ServiceFee = src.ServiceFee
|
||
dst.Turn = src.Turn
|
||
dst.BetDec = src.BetDec
|
||
//dst.CorrectNum = src.CorrectNum
|
||
//dst.CorrectRate = src.CorrectRate
|
||
//dst.Deviation = src.Deviation
|
||
//dst.Ready = src.Ready
|
||
dst.Ai = src.Ai
|
||
dst.Jackpot = src.Jackpot
|
||
//dst.ElementsParams = src.ElementsParams
|
||
//dst.OtherElementsParams = src.OtherElementsParams
|
||
//dst.DownRiceParams = src.DownRiceParams
|
||
//dst.InitValue = src.InitValue
|
||
//dst.LowerLimit = src.LowerLimit
|
||
//dst.UpperLimit = src.UpperLimit
|
||
//dst.UpperOffsetLimit = src.UpperOffsetLimit
|
||
//dst.MaxOutValue = src.MaxOutValue
|
||
//dst.ChangeRate = src.ChangeRate
|
||
//dst.MinOutPlayerNum = src.MinOutPlayerNum
|
||
//dst.UpperLimitOfOdds = src.UpperLimitOfOdds
|
||
if len(dst.RobotNumRng) < 2 {
|
||
dst.RobotNumRng = src.RobotNumRng
|
||
}
|
||
//dst.SameIpLimit = src.SameIpLimit
|
||
//dst.BaseRate = src.BaseRate
|
||
//dst.CtroRate = src.CtroRate
|
||
//dst.HardTimeMin = src.HardTimeMin
|
||
//dst.HardTimeMax = src.HardTimeMax
|
||
//dst.NormalTimeMin = src.NormalTimeMin
|
||
//dst.NormalTimeMax = src.NormalTimeMax
|
||
//dst.EasyTimeMin = src.EasyTimeMin
|
||
//dst.EasyTimeMax = src.EasyTimeMax
|
||
//dst.EasrierTimeMin = src.EasrierTimeMin
|
||
//dst.EasrierTimeMax = src.EasrierTimeMax
|
||
dst.GameType = src.GameType
|
||
dst.GameDif = src.GameDif
|
||
dst.GameClass = src.GameClass
|
||
dst.PlatformName = src.PlatformName
|
||
if len(dst.MaxBetCoin) == 0 {
|
||
dst.MaxBetCoin = src.MaxBetCoin
|
||
}
|
||
|
||
//预创建房间数量走后台配置
|
||
//dst.CreateRoomNum = src.CreateRoomNum
|
||
//后台功能做上后,优先使用后台的配置,默认直接用表格种配好的
|
||
//if !model.GameParamData.MatchTrueManUseWeb {
|
||
// dst.MatchTrueMan = src.MatchTrueMan
|
||
//}
|
||
|
||
////默认走本地配置
|
||
//if dst.PlayerWaterRate == nil {
|
||
// tv := src.GetPlayerWaterRate()
|
||
// dst.PlayerWaterRate = &tv
|
||
//}
|
||
//
|
||
//if dst.BetWaterRate == nil {
|
||
// tv := src.GetBetWaterRate()
|
||
// dst.BetWaterRate = &tv
|
||
//}
|
||
if dst.Id == 10000001 {
|
||
println(dst.GetMatchTrueMan())
|
||
}
|
||
}
|
||
|
||
// 赛事奖励配置
|
||
type ActMatchRewardConfig struct {
|
||
RankRange []int32 //名次区间
|
||
Reward int32 //奖励数量
|
||
}
|
||
|
||
// 活动配置
|
||
type ActTicketConfig struct {
|
||
Id int32 //配置编号
|
||
Platform string //平台编号
|
||
MatchId int32 //比赛编号
|
||
StartTime int64 //开始时间
|
||
EndTime int64 //结束时间
|
||
Enable bool //是否开启
|
||
AutoAgree bool //自动同意
|
||
PlayerType int32 //玩家类型 0:受邀请的玩家
|
||
AchievType int32 //成绩类型 0:首日最好成绩
|
||
Rewards []*ActMatchRewardConfig //奖励配置
|
||
}
|
||
|
||
var ActTicketConfigData = make(map[string]*ActTicketConfig)
|
||
|
||
func LoadActTicketConfig() {
|
||
type ActTicketConfigMsg struct {
|
||
Tag int
|
||
Msg []*ActTicketConfig
|
||
}
|
||
logger.Logger.Trace("API_GetActTicketConfigData")
|
||
buff, err := webapi.API_GetActTicketConfigData(common.GetAppId())
|
||
if err == nil {
|
||
var data ActTicketConfigMsg
|
||
err = json.Unmarshal(buff, &data)
|
||
if err == nil && data.Tag == 0 {
|
||
for _, cfg := range data.Msg {
|
||
ActTicketConfigData[cfg.Platform] = cfg
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActTicketConfig config data error:", err, string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get ActTicketConfig config data error:", err)
|
||
}
|
||
}
|
||
func PutActTicketEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_ACT_TICKET_PROFIX)
|
||
logger.Logger.Trace("PutActTicketEtcd")
|
||
count := len(ActTicketConfigData)
|
||
cur := 0
|
||
for name, p := range ActTicketConfigData {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_ACT_TICKET_PROFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|
||
|
||
// 比赛配置
|
||
type MatchConfig struct {
|
||
Id int32 //比赛id
|
||
Platform string //平台编号
|
||
Ver int32 //数据版本号
|
||
Name string //名称
|
||
Desc string //比赛说明
|
||
Turn int32 //显示排序
|
||
Enable bool //开启标记 false:未开启 true:开启
|
||
StartMatchType int32 //开赛类型 1:流水赛(人满即开) 2:定点赛(固定时间开赛)
|
||
GameFreeId int32 //游戏id 对应gamefreeid
|
||
Onumber int32 //最低开赛人数
|
||
Gnumber int32 //分组人数
|
||
NumberLimit int32 //最高报名数人数
|
||
Rot bool //是否使用机器人 false:不使用 true:使用
|
||
RobCnt []int32 //邀请机器人数量 5,8 => 5~8
|
||
SameIpLimit bool //同ip限制
|
||
GuestLimit bool //正式玩家限制 false:游客也可报名 true:只能正式玩家报名
|
||
PrizeWashLimit bool //奖金是否有打码要求 false:无 true:需要打码
|
||
VipLimit int32 //vip限制 二进制模式
|
||
PrizeLimit int32 //单日奖金发放限制 0:不限制 >0:发完停赛
|
||
ShowPrize int32 //给客户端展示的奖励限制
|
||
RobOccupyPrize bool //机器人是否占用奖励
|
||
SignupCost MatchSignupConfig //报名费
|
||
StartTime []MatchDateTimeConfig //开赛时间
|
||
MatchProcess []*MatchProcessConfig //赛程阶段
|
||
Reward []*MatchRewardConfig //奖励配置
|
||
}
|
||
|
||
// 赛程配置
|
||
type MatchProcessConfig struct {
|
||
Name string //赛程名称
|
||
Desc string //赛程描述
|
||
InitGrade int32 //初始积分
|
||
GradeDiscount int32 //积分折算 0.使用初始积分 1:使用上个赛程的积分 2:上一轮积分进行折算
|
||
MPPType int32 //赛段赛制类型 1:定局积分 2:打立出局 3:瑞士移位 4:定时积分
|
||
NumOfGames int32 //局数
|
||
BaseScore int32 //初始底分
|
||
Filter int32 //晋级人数
|
||
Params []int32 //具体规则参数 打立出局:X,Y,Z 每X秒增加Y底分,低于Z分淘汰
|
||
PhaseFlag int32 //0:海选 1:预赛 2:淘汰赛 3:半决赛 4.决赛
|
||
}
|
||
|
||
// 比赛奖励配置
|
||
type MatchRewardConfig struct {
|
||
RankRange []int32 //名次区间
|
||
Reward int32 //奖励金币
|
||
}
|
||
|
||
// 比赛报名配置
|
||
type MatchSignupConfig struct {
|
||
SupportFreeTimes bool //是否支持免费
|
||
FreeTimes int32 //免费次数
|
||
SupportTicket bool //是否支持入场券
|
||
TicketCnt int32 //入场券数量
|
||
SupportCoin bool //是否支持金币报名
|
||
Coin int32 //所需金币
|
||
}
|
||
|
||
// 比赛时间配置
|
||
type MatchDateTimeConfig struct {
|
||
StartDate int32 //开始日期 如:20200801 0表示不限开始日期
|
||
EndDate int32 //结束日期 如:20200808 0表示不限结束日期
|
||
StartMini int32 //开始时间 如:1000 10点开赛 0表示不限开始时间
|
||
EndMini int32 //结束时间 如:1200 12点结束 0表示不限结束时间
|
||
}
|
||
|
||
var MatchConfigData = make(map[int32]*MatchConfig)
|
||
|
||
func LoadMatchConfig() {
|
||
type ActTicketConfigMsg struct {
|
||
Tag int
|
||
Msg []*MatchConfig
|
||
}
|
||
logger.Logger.Trace("API_GetMatchConfigData")
|
||
buff, err := webapi.API_GetMatchConfigData(common.GetAppId())
|
||
if err == nil {
|
||
var data ActTicketConfigMsg
|
||
err = json.Unmarshal(buff, &data)
|
||
if err == nil && data.Tag == 0 {
|
||
for _, cfg := range data.Msg {
|
||
MatchConfigData[cfg.Id] = cfg
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Unmarshal ActTicketConfig config data error:", err, string(buff))
|
||
}
|
||
} else {
|
||
logger.Logger.Error("Get ActTicketConfig config data error:", err)
|
||
}
|
||
}
|
||
func PutMatchConfigEtcd() {
|
||
etcdCli.DelValueWithPrefix(etcd.ETCDKEY_MATCH_PROFIX)
|
||
logger.Logger.Trace("PutMatchConfigEtcd")
|
||
count := len(MatchConfigData)
|
||
cur := 0
|
||
for name, p := range MatchConfigData {
|
||
data, err := json.Marshal(p)
|
||
if err == nil {
|
||
_, err := etcdCli.PutValue(fmt.Sprintf("%v%v", etcd.ETCDKEY_MATCH_PROFIX, name), string(data))
|
||
if err != nil {
|
||
logger.Logger.Tracef("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
} else {
|
||
logger.Logger.Errorf("PutAcFPayEtcd err:%v data:%v", err, string(data))
|
||
}
|
||
|
||
cur++
|
||
fmt.Printf("\r")
|
||
fmt.Printf("%d%%", int(float64(cur)/float64(count)*100))
|
||
}
|
||
}
|