123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- package model
- import (
- "active/constant"
- "active/tools"
- "fmt"
- "log"
- "strconv"
- "strings"
- "time"
- "git.jiaxianghudong.com/go/gsdkclient"
- "git.jiaxianghudong.com/webs/pkg/rds"
- )
- var PiggyBankConf = &PiggyBank{}
- var PushChan = make(chan struct{})
- type PiggyBank struct {
- ReceiveList []struct {
- Diamond int64 `json:"diamond" yaml:"diamond"`
- BeanNumber int64 `json:"bean_number" yaml:"bean_number"`
- RealDiamond int64 `json:"real_diamond" yaml:"real_diamond"`
- Add int64 `json:"add" yaml:"add"`
- Level int `json:"level" yaml:"level"`
- } `json:"receive_list" yaml:"receive_list"`
- ReceiveListV2 []struct {
- Diamond int64 `json:"diamond" yaml:"diamond"`
- RealDiamond int64 `json:"real_diamond" yaml:"real_diamond"`
- MinBean int64 `json:"min_bean" yaml:"min_bean"`
- MaxBean int64 `json:"max_bean" yaml:"max_bean"`
- Add int64 `json:"add" yaml:"add"` //折扣
- Between []int `json:"between" yaml:"between"`
- Level int `json:"level" yaml:"level"`
- } `json:"receive_list_v2" yaml:"receive_list_v2"`
- StartTime int64 `json:"start_time" yaml:"start_time"`
- EndTime int64 `json:"end_time" yaml:"end_time"`
- Switch int64 `json:"switch" yaml:"switch"`
- }
- type PiggyBankDetail struct {
- Level int64 `json:"level"` //档位
- BeanNumber int64 `json:"bean_number"` //豆豆数
- }
- func GetPiggyBankData(userID int64, tm int64, ishost bool) (*PiggyBankDetail, error) {
- //fmt.Println(fmt.Sprintf(constant.PIGGYBANKDATA, tm))
- userIdStr := strconv.FormatInt(userID, 10)
- piggyBankDetail := &PiggyBankDetail{
- Level: 1,
- BeanNumber: 0,
- }
- useGameRedis := rds.GameRedis0
- //if ishost {
- // useGameRedis = rds.GameTestRedis0
- //}
- var err error
- data := useGameRedis.HGet(fmt.Sprintf(constant.PIGGYBANKDATA, tm), userIdStr).Val()
- if data == "" {
- return nil, fmt.Errorf("没有存豆记录")
- }
- strList := strings.Split(data, ",")
- if len(strList) != 2 {
- SetPiggyBankData(userID, tm, piggyBankDetail, ishost)
- return nil, err
- }
- piggyBankDetail.Level, err = strconv.ParseInt(strList[0], 10, 64)
- if err != nil {
- log.Printf("redisKey: %v Level转成int64的问题: %v \n", userIdStr, err)
- return nil, err
- }
- piggyBankDetail.BeanNumber, err = strconv.ParseInt(strList[1], 10, 64)
- if err != nil {
- log.Printf("redisKey: %v BeanNumber转成int64的问题: %v \n", userIdStr, err)
- return nil, err
- }
- return piggyBankDetail, nil
- }
- func SetPiggyBankData(userID int64, tm int64, data *PiggyBankDetail, ishost bool) bool {
- useGameRedis := rds.GameRedis0
- if ishost {
- useGameRedis = rds.GameTestRedis0
- }
- userIdStr := strconv.FormatInt(userID, 10)
- dataStr := fmt.Sprintf("%v,%v", data.Level, data.BeanNumber)
- err := useGameRedis.HSet(fmt.Sprintf(constant.PIGGYBANKDATA, tm), userIdStr, dataStr).Err()
- if err != nil {
- log.Printf("redisKey: %v number: %v redis.HSet-err: %v \n", userID, data, err)
- return false
- }
- return true
- }
- func GetPiggyBankDataV2(userID int64, tm int64, ishost bool) (*PiggyBankDetail, error) {
- //fmt.Println(fmt.Sprintf(constant.PIGGYBANKDATA, tm))
- userIdStr := strconv.FormatInt(userID, 10)
- piggyBankDetail := &PiggyBankDetail{
- Level: 1,
- BeanNumber: 0,
- }
- useGameRedis := rds.GameRedis0
- //if ishost {
- // useGameRedis = rds.GameTestRedis0
- //}
- var err error
- data := useGameRedis.HGet(fmt.Sprintf(constant.PIGGYBANKDATAV2, tm), userIdStr).Val()
- if data == "" {
- return nil, nil
- }
- strList := strings.Split(data, ",")
- if len(strList) != 2 {
- SetPiggyBankData(userID, tm, piggyBankDetail, ishost)
- return nil, err
- }
- piggyBankDetail.Level, err = strconv.ParseInt(strList[0], 10, 64)
- if err != nil {
- log.Printf("redisKey: %v Level转成int64的问题: %v \n", userIdStr, err)
- return nil, err
- }
- piggyBankDetail.BeanNumber, err = strconv.ParseInt(strList[1], 10, 64)
- if err != nil {
- log.Printf("redisKey: %v BeanNumber转成int64的问题: %v \n", userIdStr, err)
- return nil, err
- }
- return piggyBankDetail, nil
- }
- func SetPiggyBankDataV2(userID int64, tm int64, data *PiggyBankDetail, ishost bool) bool {
- useGameRedis := rds.GameRedis0
- if ishost {
- useGameRedis = rds.GameTestRedis0
- }
- userIdStr := strconv.FormatInt(userID, 10)
- dataStr := fmt.Sprintf("%v,%v", data.Level, data.BeanNumber)
- err := useGameRedis.HSet(fmt.Sprintf(constant.PIGGYBANKDATAV2, tm), userIdStr, dataStr).Err()
- if err != nil {
- log.Printf("redisKey: %v number: %v redis.HSet-err: %v \n", userID, data, err)
- return false
- }
- return true
- }
- func SetPiggyBankExpire() {
- sp := GetAllActiceByType(constant.PiggyBankType)
- o := &OpenTimes{}
- o.GetOpenTime(sp.OpenTimes)
- if sp.Status == "1" {
- end := time.Unix(PiggyBankConf.EndTime, 0).Add(72 * time.Hour)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATA, PiggyBankConf.StartTime), end)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATAV2, PiggyBankConf.StartTime), end)
- }
- }
- func SetPiggyBankSend(room int64, server int64) error {
- return rds.GameRedis0.HSet(constant.PIGGYBANKSEND, fmt.Sprintf("%v;%v", room, server), 1).Err()
- }
- func InitPubPiggybank() {
- <-PushChan
- go PubPiggyBankConf()
- log.Println("done push ")
- }
- func PubPiggyBankConf() []string {
- msgList := []string{}
- sp := GetAllActiceByType(constant.PiggyBankType)
- o := &OpenTimes{}
- o.GetOpenTime(sp.OpenTimes)
- if sp.Status == "1" {
- PiggyBankConf.StartTime = tools.TimeParseUnix(o.Start, "")
- PiggyBankConf.EndTime = tools.TimeParseUnix(o.End, "")
- PiggyBankConf.Switch = 1
- end := time.Unix(PiggyBankConf.EndTime, 0).Add(72 * time.Hour)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATA, PiggyBankConf.StartTime), end)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATAV2, PiggyBankConf.StartTime), end)
- } else {
- PiggyBankConf.StartTime = 0
- PiggyBankConf.EndTime = 0
- PiggyBankConf.Switch = 0
- }
- str := fmt.Sprintf("%v_%v_%v;", PiggyBankConf.StartTime, PiggyBankConf.EndTime, PiggyBankConf.Switch)
- for _, v := range PiggyBankConf.ReceiveList {
- str += fmt.Sprintf("%v_%v_%v_%v_%v;", v.Diamond, v.BeanNumber, v.RealDiamond, v.Add, v.Level)
- }
- str2 := fmt.Sprintf("%v_%v_%v;", PiggyBankConf.StartTime, PiggyBankConf.EndTime, PiggyBankConf.Switch)
- for _, v := range PiggyBankConf.ReceiveListV2 {
- str2 += fmt.Sprintf("%v_%v_%v_%v_%v_%v;", v.Diamond, v.MinBean, v.MaxBean, v.RealDiamond, v.Add, v.Level)
- }
- result := rds.GameTestRedis0.Set(constant.PIGGYBANK, str, -1).Err()
- result = rds.GameRedis0.Set(constant.PIGGYBANK, str, -1).Err()
- result = rds.GameRedis0.Set(constant.PIGGYBANKSTART, fmt.Sprintf("%v", PiggyBankConf.StartTime), -1).Err()
- rds.GameRedis0.Set(constant.PIGGYBANKV2, str2, -1)
- rds.GameTestRedis0.Set(constant.PIGGYBANKV2, str2, -1)
- if result != nil {
- fmt.Println(result)
- return nil
- }
- log.Printf("%v \n", str)
- // sendMap := rds.GameRedis0.HGetAll(constant.PIGGYBANKSEND).Val()
- if sp.IsDebug != "1" {
- sendMap := make(map[string]bool)
- var cursor uint64
- for {
- var keys []string
- keys, cursor = rds.GameRedis0.HScan(constant.PIGGYBANKSEND, cursor, "*", 20).Val()
- for _, key := range keys {
- sendMap[key] = true
- }
- fmt.Println("ddd", cursor)
- if cursor == 0 {
- break
- }
- }
- for s := range sendMap {
- list := strings.Split(s, ";")
- if len(list) != 2 {
- continue
- }
- server, _ := strconv.Atoi(list[0])
- room, _ := strconv.Atoi(list[1])
- if _, ok := gsdkclient.Client().RoomShell(room, server, "piggybank"); !ok {
- log.Printf("reidstest 推送失败 %v , %v \n", room, server)
- //msgList = append(msgList,fmt.Sprintf("推送失败 %v , %v \n", server.Room[i], server.Server) )
- } else {
- log.Printf("reidstest 推送成功 %v , %v \n", room, server)
- }
- }
- for _, server := range constant.RoomServerConfs.ServerList {
- for i := range server.Room {
- if _, ok := gsdkclient.Client().RoomShell(server.Room[i], server.Server, "piggybank"); !ok {
- log.Printf("推送失败 %v , %v \n", server.Room[i], server.Server)
- //msgList = append(msgList,fmt.Sprintf("推送失败 %v , %v \n", server.Room[i], server.Server) )
- } else {
- log.Printf("推送成功 %v , %v \n", server.Room[i], server.Server)
- }
- }
- }
- } else {
- rom := []constant.Server{
- {
- Room: []int{7932, 7574, 6067, 6066, 6065, 6064, 6061},
- Server: 24795,
- },
- }
- for _, server := range rom {
- for i := range server.Room {
- if _, ok := gsdkclient.Client().RoomShell(server.Room[i], server.Server, "piggybank"); !ok {
- log.Printf("测试推送失败 %v , %v \n", server.Room[i], server.Server)
- //msgList = append(msgList,fmt.Sprintf("推送失败 %v , %v \n", server.Room[i], server.Server) )
- } else {
- log.Printf("测试推送成功 %v , %v \n", server.Room[i], server.Server)
- }
- }
- }
- }
- return msgList
- }
- func SetPiggyBank() {
- sp := GetAllActiceByType(constant.PiggyBankType)
- o := &OpenTimes{}
- o.GetOpenTime(sp.OpenTimes)
- if sp.Status == "1" {
- PiggyBankConf.StartTime = tools.TimeParseUnix(o.Start, "")
- PiggyBankConf.EndTime = tools.TimeParseUnix(o.End, "")
- PiggyBankConf.Switch = 1
- end := time.Unix(PiggyBankConf.EndTime, 0).Add(72 * time.Hour)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATA, PiggyBankConf.StartTime), end)
- rds.GameRedis0.ExpireAt(fmt.Sprintf(constant.PIGGYBANKDATAV2, PiggyBankConf.StartTime), end)
- } else {
- PiggyBankConf.StartTime = 0
- PiggyBankConf.EndTime = 0
- PiggyBankConf.Switch = 0
- }
- //Diamond int64 `json:"diamond" yaml:"diamond"`
- //BeanNumber int64 `json:"bean_number" yaml:"bean_number"`
- //RealDiamond int64 `json:"real_diamond" yaml:"real_diamond"`
- //Add int64 `json:"add" yaml:"add"`
- //Level int `json:"level" yaml:"level"`
- str := fmt.Sprintf("%v_%v_%v;", PiggyBankConf.StartTime, PiggyBankConf.EndTime, PiggyBankConf.Switch)
- for _, v := range PiggyBankConf.ReceiveList {
- str += fmt.Sprintf("%v_%v_%v_%v_%v;", v.Diamond, v.BeanNumber, v.RealDiamond, v.Add, v.Level)
- }
- str2 := fmt.Sprintf("%v_%v_%v;", PiggyBankConf.StartTime, PiggyBankConf.EndTime, PiggyBankConf.Switch)
- for _, v := range PiggyBankConf.ReceiveListV2 {
- str2 += fmt.Sprintf("%v_%v_%v_%v_%v_%v;", v.Diamond, v.MinBean, v.MaxBean, v.RealDiamond, v.Add, v.Level)
- }
- rds.GameTestRedis0.Set(constant.PIGGYBANK, str, -1)
- rds.GameRedis0.Set(constant.PIGGYBANK, str, -1)
- rds.GameRedis0.Set(constant.PIGGYBANKSTART, fmt.Sprintf("%v", PiggyBankConf.StartTime), -1)
- rds.GameRedis0.Set(constant.PIGGYBANKV2, str2, -1)
- rds.GameTestRedis0.Set(constant.PIGGYBANKV2, str2, -1)
- }
|