go_dreamfactory/modules/uniongve/modelUnionRoulette.go
2023-07-19 17:44:35 +08:00

103 lines
2.9 KiB
Go

package uniongve
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/sys/mgo"
"go_dreamfactory/lego/sys/redis"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sync"
)
type ModelUnionroulette struct {
modules.MCompModel
module *UnionGve
conflock sync.RWMutex
bossconf *pb.DBUnionGveBossConf
}
func (this *ModelUnionroulette) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
err = this.MCompModel.Init(service, module, comp, options)
this.TableName = comm.TableUnionroulette
this.module = module.(*UnionGve)
return
}
func (this *ModelUnionroulette) Start() (err error) {
err = this.MCompModel.Start()
return
}
// 获取用户全部的埋点数据
func (this *ModelUnionroulette) getUnionRoulette(unionid string) (results *pb.DBUnionRouletteRecord, err error) {
results = &pb.DBUnionRouletteRecord{}
if err = this.Get(unionid, results); err != nil && err != mgo.MongodbNil {
this.module.Errorln(err)
return
}
if err == mgo.MongodbNil {
results = &pb.DBUnionRouletteRecord{
Unionid: unionid,
Roulette: make([]*pb.DBGveRouletteRecord, 0),
}
err = this.Add(unionid, results)
}
return
}
func (this *ModelUnionroulette) updateUnionRoulette(data *pb.DBUnionRouletteRecord) (err error) {
if err = this.Change(data.Unionid, map[string]interface{}{
"roulette": data.Roulette,
}); err != nil {
this.module.Error("更新用户任务数据 错误!", log.Field{Key: "err", Value: err.Error()})
return
}
return
}
// 分布式锁
func (this *ModelUnionroulette) userlock(id string) (result *redis.RedisMutex, err error) {
return this.DBModel.Redis.NewRedisMutex(fmt.Sprintf("lockunionroulette:%s", id))
}
// boos 信息变化推送
func (this *ModelUnionroulette) roulettechangePush(unionid string, uid string, award []*pb.UserAssets) {
var (
info *pb.DBUnionRouletteRecord
members []*pb.SociatyMemberInfo
users []string = make([]string, 0)
errdata *pb.ErrorData
err error
)
if members, errdata = this.module.sociaty.MembersBySociatyId(unionid); errdata != nil {
this.module.Debug("获取工会成员列表!", log.Field{Key: "errdata", Value: errdata})
return
}
for _, v := range members {
users = append(users, v.Uid)
}
lock, _ := this.module.modelUniongve.userlock(unionid)
err = lock.Lock()
if err != nil {
this.module.Error("公会战分布式锁 err!", log.Field{Key: "Unionid", Value: unionid}, log.Field{Key: "err", Value: err.Error()})
return
}
defer lock.Unlock()
if info, err = this.getUnionRoulette(unionid); err != nil {
this.module.Errorln(err)
return
}
info.Roulette = append(info.Roulette, &pb.DBGveRouletteRecord{
Uid: uid,
Award: award,
})
this.module.SendMsgToUsers(string(this.module.GetType()), "roulettechange", &pb.UniongveRouletteChangePush{
Record: info,
})
}