diff --git a/bin/json/game_msgdistrib.json b/bin/json/game_msgdistrib.json index cc36bbb68..14562d9cf 100644 --- a/bin/json/game_msgdistrib.json +++ b/bin/json/game_msgdistrib.json @@ -13,32 +13,32 @@ }, { "msgid": "chat", - "routrules": "~/worker", "open": true, + "routrules": "~/worker", "describe": "聊天系统" }, { "msgid": "chat.chanagechannel", - "routrules": "~/worker", "open": true, + "routrules": "~/worker", "describe": "聊天系统" }, { "msgid": "chat.crosschannel", - "routrules": "~/worker", "open": true, + "routrules": "~/worker", "describe": "聊天系统" }, { "msgid": "chat.getcrosslist", - "routrules": "~/worker", "open": true, + "routrules": "~/worker", "describe": "聊天系统" }, { "msgid": "chat.sendcross", - "routrules": "~/worker", "open": true, + "routrules": "~/worker", "describe": "聊天系统" }, { @@ -154,5 +154,11 @@ "open": true, "routrules": "~/worker", "describe": "好友推荐" + }, + { + "msgid": "friend.assistherolist", + "open": true, + "routrules": "~/worker", + "describe": "好友助战英雄列表" } ] \ No newline at end of file diff --git a/cmd/v2/FyneApp.toml b/cmd/v2/FyneApp.toml index 683a15be3..5e4358de2 100644 --- a/cmd/v2/FyneApp.toml +++ b/cmd/v2/FyneApp.toml @@ -4,5 +4,5 @@ Website = "http://legu.cc" Icon = "app.png" Name = "RobotGUI" ID = "cc.legu.app" - Version = "1.0.17" - Build = 20 + Version = "1.0.18" + Build = 21 diff --git a/cmd/v2/ui/protocol.go b/cmd/v2/ui/protocol.go index 05185d95e..2849da561 100644 --- a/cmd/v2/ui/protocol.go +++ b/cmd/v2/ui/protocol.go @@ -78,10 +78,11 @@ var ( ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): &formview.FriendDelblackView{}, ff(comm.ModuleFriend, friend.FriendSubTypeSearch): &formview.FriendSearchView{}, // ff(comm.ModuleFriend, friend.FriendSubTypeZanList): &formview.FriendZanView{}, - ff(comm.ModuleFriend, friend.FriendSubTypeRandList): &formview.FriendRandListView{}, - ff(comm.ModuleFriend, friend.FriendSubTypeGetreward): &formview.FriendGetrewardView{}, - ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist): &formview.FriendAssistListView{}, - ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero): &formview.FriendAssistHeroView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeRandList): &formview.FriendRandListView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeGetreward): &formview.FriendGetrewardView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist): &formview.FriendAssistListView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero): &formview.FriendAssistHeroView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList): &formview.FriendAssistHeroListView{}, // shop ff(comm.ModuleShop, "getlist"): &formview.ShopListView{}, @@ -180,6 +181,7 @@ var ( ff(comm.ModuleFriend, friend.FriendSubTypeGetreward), ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero), ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist), + ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList), }, "shop": { ff(comm.ModuleShop, "getlist"), @@ -616,6 +618,13 @@ var ( SubType: friend.FriendSubTypeGetreward, Enabled: true, }, + ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList): { + NavLabel: "助战英雄列表", + Desc: "我的好友助战英雄列表", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeAssistHeroList, + Enabled: true, + }, //shop string(comm.ModuleShop): { diff --git a/cmd/v2/ui/views/friend_assistherolist.go b/cmd/v2/ui/views/friend_assistherolist.go new file mode 100644 index 000000000..9b048d879 --- /dev/null +++ b/cmd/v2/ui/views/friend_assistherolist.go @@ -0,0 +1,38 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/theme" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendAssistHeroListView struct { + BaseformView + assistHeroList func() +} + +func (this *FriendAssistHeroListView) CreateView(t *model.TestCase) fyne.CanvasObject { + this.assistHeroList = func() { + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, + &pb.FriendAssistHeroListReq{}); err != nil { + logrus.Error(err) + } + } + defer this.assistHeroList() + + refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), func() { + + this.assistHeroList() + }) + + buttonBar := container.NewHBox(refreshBtn) + + c := container.NewBorder(buttonBar, nil, nil, nil) + return c +} diff --git a/cmd/v2/ui/views/hero_info.go b/cmd/v2/ui/views/hero_info.go index c75dd41ed..f62834e65 100644 --- a/cmd/v2/ui/views/hero_info.go +++ b/cmd/v2/ui/views/hero_info.go @@ -4,6 +4,7 @@ import ( "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/pb" + "strings" "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" @@ -19,18 +20,19 @@ func (this *HeroInfoView) CreateView(t *model.TestCase) fyne.CanvasObject { uidEntry.PlaceHolder = "玩家ID" heroIdEntry := widget.NewEntry() - heroIdEntry.PlaceHolder = "英雄ObjID" + heroIdEntry.PlaceHolder = "英雄ObjID,多个用逗号分隔" this.form.AppendItem(widget.NewFormItem("UID", uidEntry)) this.form.AppendItem(widget.NewFormItem("HeroObjID", heroIdEntry)) + heroIds := strings.Split(heroIdEntry.Text, ",") this.form.OnSubmit = func() { if err := service.GetPttService().SendToClient( t.MainType, t.SubType, &pb.HeroInfoReq{ Uid: uidEntry.Text, - HeroId: heroIdEntry.Text, + HeroId: heroIds, }, ); err != nil { logrus.Error(err) diff --git a/comm/const.go b/comm/const.go index 97c149d89..be0bd5d33 100644 --- a/comm/const.go +++ b/comm/const.go @@ -123,6 +123,8 @@ const ( TablePagodaRankList = "pagodaranklist" TableSeasonRankList = "seasonranklist" // 赛季塔列表 + + TableSeasonRecord = "seasonRecord" // 赛季塔记录 /// 美食馆 TableSmithy = "smithy" /// 赛季塔数据表 diff --git a/modules/friend/api.go b/modules/friend/api.go index 88a6e6f04..c8d484c14 100644 --- a/modules/friend/api.go +++ b/modules/friend/api.go @@ -24,6 +24,7 @@ const ( FriendSubTypeDel = "del" FriendSubTypeAssistlist = "assistlist" FriendSubTypeGetreward = "getreward" + FriendSubTypeAssistHeroList = "assistherolist" ) type apiComp struct { @@ -39,6 +40,7 @@ func (this *apiComp) Init(service core.IService, module core.IModule, comp core. func (this *apiComp) setDefaultFriendUserBaseInfo(userId string) *pb.FriendBase { if user, err := this.moduleFriend.ModuleUser.GetRmoteUser(userId); err != nil { + this.moduleFriend.Errorf("GetRmoteUser err:%v", err) return nil } else { if user != nil { diff --git a/modules/friend/api_cross_assisthero.go b/modules/friend/api_cross_assisthero.go index 06c1bef78..ddbc5b04b 100644 --- a/modules/friend/api_cross_assisthero.go +++ b/modules/friend/api_cross_assisthero.go @@ -65,17 +65,19 @@ func (this *apiComp) Assisthero(session comm.IUserSession, req *pb.FriendAssisth return } - //推送 - push := &pb.FriendAssistHeroListPush{} - for _, fId := range self.FriendIds { - d := this.moduleFriend.modelFriend.GetFriend(fId) - push.Friends = append(push.Friends, &pb.FriendBase{ - HeroObjId: d.AssistHeroId, - }) - } - if err := this.moduleFriend.SendMsgToUsers(string(this.moduleFriend.GetType()), "AssistHeroList", - &pb.FriendAssistHeroListPush{}, self.FriendIds...); err != nil { - this.moduleFriend.Errorf("push AssistHeroList err:", err) + // 有好友时再推送 + if len(self.FriendIds) > 0 { + //把设置的助战英雄推送给好友 + push := &pb.FriendAssistHeroUpdatePush{ + Friend: &pb.FriendBase{ + UserId: self.Uid, + HeroObjId: req.HeroObjId, + }, + } + + if err := this.moduleFriend.SendMsgToUsers(string(this.moduleFriend.GetType()), "assistheroupdate", push, self.FriendIds...); err != nil { + this.moduleFriend.Errorf("push AssistHeroList err:", err) + } } // 随机任务Rtype13 diff --git a/modules/friend/api_cross_assistherolist.go b/modules/friend/api_cross_assistherolist.go new file mode 100644 index 000000000..b12a270d3 --- /dev/null +++ b/modules/friend/api_cross_assistherolist.go @@ -0,0 +1,40 @@ +package friend + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + + "google.golang.org/protobuf/proto" +) + +// 好友助战英雄列表 + +func (this *apiComp) AssistHeroListCheck(session comm.IUserSession, req *pb.FriendAssistHeroListReq) (code pb.ErrorCode) { + return +} + +func (this *apiComp) AssistHeroList(session comm.IUserSession, req *pb.FriendAssistHeroListReq) (code pb.ErrorCode, data proto.Message) { + + //获取玩家自己好友数据 + self := this.moduleFriend.modelFriend.GetFriend(session.GetUserId()) + if self == nil { + code = pb.ErrorCode_FriendSelfNoData + return + } + + rsp := &pb.FriendAssistHeroListResp{} + for _, v := range self.FriendIds { + f := this.moduleFriend.modelFriend.GetFriend(v) + + rsp.Friends = append(rsp.Friends, &pb.FriendBase{ + UserId: v, + HeroObjId: f.AssistHeroId, + }) + } + + if err := session.SendMsg(string(this.moduleFriend.GetType()), FriendSubTypeAssistHeroList, rsp); err != nil { + code = pb.ErrorCode_SystemError + } + + return +} diff --git a/modules/friend/api_cross_assistlist.go b/modules/friend/api_cross_assistlist.go index ee1228b6d..e04427f1f 100644 --- a/modules/friend/api_cross_assistlist.go +++ b/modules/friend/api_cross_assistlist.go @@ -3,6 +3,7 @@ package friend import ( "go_dreamfactory/comm" "go_dreamfactory/pb" + "go_dreamfactory/utils" "sort" "google.golang.org/protobuf/proto" @@ -29,14 +30,20 @@ func (this *apiComp) Assistlist(session comm.IUserSession, req *pb.FriendAssistl if target == nil { continue } - base.HeroObjId = target.AssistHeroId - base.Score = target.ZhuzhanScore - list = append(list, base) + if target.AssistHeroId != "" { + base.HeroObjId = target.AssistHeroId + base.Score = target.AssistScore + base.UpdateTime = target.UpdateTime + list = append(list, base) + } } } //排序并取前三 sort.Slice(list, func(i, j int) bool { + if list[i].Score == list[j].Score { + return list[i].UpdateTime < list[j].UpdateTime + } return list[i].Score < list[j].Score }) @@ -47,8 +54,13 @@ func (this *apiComp) Assistlist(session comm.IUserSession, req *pb.FriendAssistl } } + //助战记录一周清空 + if utils.IsAfterWeek(self.UpdateTime) { + self.Record = []*pb.AssistRecord{} + } + rsp := &pb.FriendAssistlistResp{ - List: list, + List: firstThree, HeroObjId: self.AssistHeroId, Record: self.Record, } diff --git a/modules/friend/module.go b/modules/friend/module.go index a1a761cf2..81f997be8 100644 --- a/modules/friend/module.go +++ b/modules/friend/module.go @@ -2,9 +2,11 @@ package friend import ( "context" + "errors" "go_dreamfactory/comm" "go_dreamfactory/modules" "go_dreamfactory/pb" + "go_dreamfactory/utils" "time" "go_dreamfactory/lego/base" @@ -88,11 +90,12 @@ func (this *Friend) GetFriendList(uid string) (uids []string) { } func (this *Friend) RpcUseAssisHero(ctx context.Context, req *pb.RPCGeneralReqA2, reply *pb.DBHero) error { + this.Debug("Rpc_ModuleFriendUseAssitHero", log.Field{Key: "req", Value: req}) hero, err := this.UseAssistHero(req.Param1, req.Param2) if err != nil { return err } - reply = hero + *reply = *hero return nil } @@ -104,18 +107,35 @@ func (this *Friend) UseAssistHero(uid, friendId string) (*pb.DBHero, error) { for _, fId := range friend.FriendIds { // 判断uid是否在指定玩家的好友列表中 if fId == uid { + //好友没有设置助战英雄 + if friend.AssistHeroId == "" { + break + } + //遍历助战记录 + for _, r := range friend.Record { + if r.AssistHeroId == friend.AssistHeroId { + if utils.IsToday(r.AssistTime) { + log.Warnf("今日已助战 uid:%v friendId:%v heroId:%v", uid, friendId, r.AssistHeroId) + return nil, errors.New("今日已助战") + } + } + } //更新助战记录和助战分数 - friend.ZhuzhanScore++ - friend.Record = append(friend.Record, &pb.ZhuZhanRecord{ - Uid: uid, - Zhuzhantime: time.Now().Unix(), + friend.AssistScore++ + // 设置助战记录 + friend.Record = append(friend.Record, &pb.AssistRecord{ + Uid: uid, + AssistHeroId: friend.AssistHeroId, + AssistTime: time.Now().Unix(), }) update := map[string]interface{}{ - "zhuzhanScore": friend.ZhuzhanScore, - "record": friend.Record, + "assistScore": friend.AssistScore, + "record": friend.Record, + "updateTime": time.Now().Unix(), } return friend.Hero, this.modelFriend.Change(friendId, update) } } - return nil, nil + log.Errorf("[friendId:%v]不是你[uid:%v]的好友", uid, friendId) + return nil, errors.New("非好友") } diff --git a/modules/linestory/api_dotask.go b/modules/linestory/api_dotask.go index 2255ecc22..a6a93dd76 100644 --- a/modules/linestory/api_dotask.go +++ b/modules/linestory/api_dotask.go @@ -13,7 +13,7 @@ func (this *apiComp) DotaskCheck(session comm.IUserSession, req *pb.LinestoryDot if req.TaskId == 0 || req.SubtaskId == 0 { code = pb.ErrorCode_ReqParameterError } - return + return } func (this *apiComp) Dotask(session comm.IUserSession, req *pb.LinestoryDotaskReq) (code pb.ErrorCode, data proto.Message) { diff --git a/modules/pagoda/api_challengeover.go b/modules/pagoda/api_challengeover.go index 6ab7c20bc..f1b83378f 100644 --- a/modules/pagoda/api_challengeover.go +++ b/modules/pagoda/api_challengeover.go @@ -2,8 +2,11 @@ package pagoda import ( "go_dreamfactory/comm" + "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" + "go_dreamfactory/sys/db" + "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "google.golang.org/protobuf/proto" ) @@ -107,7 +110,23 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal } } } - this.module.modulerank.addPagodaList(session, pagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime) + if !this.module.IsCross() { + if conn, err := db.Cross(); err == nil { + userinfo := this.module.ModuleUser.GetUser(session.GetUserId()) + newData := &pb.DBPagodaRecord{ + Id: primitive.NewObjectID().Hex(), + Uid: session.GetUserId(), + PagodaId: pagoda.PagodaId, + Type: pagoda.Type, + Nickname: userinfo.Name, + Icon: "", // icon 暂无 + Lv: userinfo.Lv, + CostTime: req.Report.Costtime, + } + conn.Mgo.InsertOne(comm.TablePagodaRecord, newData) + } + } + //this.module.modulerank.addPagodaList(session, pagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime) } // 普通塔通关了 Nomalcfg := this.module.configure.GetPagodaConfigData(comm.PagodaType, pagoda.PagodaId+1) @@ -122,7 +141,13 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal seasonPagoda.Uid = session.GetUserId() seasonPagoda.PagodaId = 0 // 初始数据0层 - seasonPagoda.Type = 201 + + if conn, err := db.Cross(); err == nil { + rst := conn.Mgo.FindOne(comm.TableServerData, bson.M{}) + server := &pb.DBServerData{} + rst.Decode(server) + seasonPagoda.Type = server.SeasonType // 动态获取塔数据 + } this.module.modelSeasonPagoda.addNewSeasonPagoda(session.GetUserId(), seasonPagoda) // 推送新的 pagoda.PagodaId = seasonPagoda.PagodaId @@ -142,13 +167,57 @@ func (this *apiComp) ChallengeOver(session comm.IUserSession, req *pb.PagodaChal } } } - this.module.modulerank.addPagodaRankList(session, seasonPagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime) + // 数据直接插入跨服数据库中 + userinfo := this.module.ModuleUser.GetUser(session.GetUserId()) + newData := &pb.DBPagodaRecord{ + Id: primitive.NewObjectID().Hex(), + Uid: session.GetUserId(), + PagodaId: seasonPagoda.PagodaId, + Type: seasonPagoda.Type, + Nickname: userinfo.Name, + Icon: "", // icon 暂无 + Lv: userinfo.Lv, + CostTime: req.Report.Costtime, + } + // 数据写到跨服中 + if !this.module.IsCross() { + if conn, err := db.Cross(); err == nil { + conn.Mgo.InsertOne(comm.TableSeasonRecord, newData) + } + } + //this.module.modulerank.addPagodaRankList(session, seasonPagoda, req.Report.Info.Redflist[0].Leadpos, sz, req.Report.Costtime) } // 挑战处理 seasonPagoda.PagodaId = conf.LayerNum mapData["pagodaId"] = conf.LayerNum + if !this.module.IsCross() { + if conn, err := db.Cross(); err == nil { + data := &comm.Autogenerated{ + ID: primitive.NewObjectID().Hex(), + UID: seasonPagoda.Uid, + Act: string(comm.LogHandleType_Update), + } + table := comm.TableSeasonRecord //, uid, , data) + data.D = append(data.D, table) // D[0] + data.D = append(data.D, bson.M{"uid": session.GetUserId()}) // D[1] + data.D = append(data.D, seasonPagoda) // D[2] + + _, err = conn.Mgo.InsertOne("model_log", data) + if err != nil { + log.Errorf("insert model db err %v", err) + } + } + } + code = this.module.ModifySeasonPagodaData(session.GetUserId(), mapData) + pagoda = &pb.DBPagoda{ + Id: seasonPagoda.Id, + Uid: seasonPagoda.Uid, + PagodaId: seasonPagoda.PagodaId, + Reward: seasonPagoda.Reward, + Type: seasonPagoda.Type, + } session.SendMsg(string(this.module.GetType()), PagodaChallengeOverResp, &pb.PagodaChallengeOverResp{Data: pagoda}) } diff --git a/modules/pagoda/api_getlist.go b/modules/pagoda/api_getlist.go index 6cb4cde4b..bc852f809 100644 --- a/modules/pagoda/api_getlist.go +++ b/modules/pagoda/api_getlist.go @@ -39,7 +39,7 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq } } else { season, _ := this.module.modelSeasonPagoda.getSeasonPagodaList(session.GetUserId()) - if season.PagodaId == 0 { // 创建一条新的数据 + if season.Id == "" { season.Id = primitive.NewObjectID().Hex() season.Uid = session.GetUserId() season.PagodaId = 0 // 初始数据0层 @@ -51,6 +51,7 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq } this.module.modelSeasonPagoda.addNewSeasonPagoda(session.GetUserId(), season) } + list = &pb.DBPagoda{ Id: season.Id, Uid: season.Uid, @@ -59,7 +60,6 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq Type: season.Type, } } - session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: list}) return } diff --git a/modules/pagoda/model_rank.go b/modules/pagoda/model_rank.go index 84f30470d..19937b39e 100644 --- a/modules/pagoda/model_rank.go +++ b/modules/pagoda/model_rank.go @@ -8,6 +8,7 @@ import ( "go_dreamfactory/lego/sys/redis" "go_dreamfactory/modules" "go_dreamfactory/pb" + "go_dreamfactory/sys/db" "sort" "time" @@ -55,7 +56,10 @@ func (this *ModelRank) ChangeUserRank(uid string, value map[string]interface{}) func (this *ModelRank) GetRankData() (data []*pb.DBPagodaRecord, err error) { data = make([]*pb.DBPagodaRecord, 0) - err = this.Redis.LRange(comm.TablePagodaRankList, 0, -1, &data) + if conn, err := db.Cross(); err == nil { + err = conn.Redis.LRange(comm.TableSeasonRankList, 0, -1, &data) + } + //err = this.Redis.LRange(comm.TablePagodaRankList, 0, -1, &data) return } diff --git a/modules/pagoda/model_seasonpagoda.go b/modules/pagoda/model_seasonpagoda.go index d57d0095b..460c2d7ad 100644 --- a/modules/pagoda/model_seasonpagoda.go +++ b/modules/pagoda/model_seasonpagoda.go @@ -4,11 +4,12 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/log" - "go_dreamfactory/lego/sys/redis" "go_dreamfactory/modules" "go_dreamfactory/pb" + "go_dreamfactory/sys/db" "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) @@ -34,9 +35,7 @@ func (this *ModelSeasonPagoda) Init(service core.IService, module core.IModule, func (this *ModelSeasonPagoda) getSeasonPagodaList(uid string) (result *pb.DBSeasonPagoda, err error) { result = &pb.DBSeasonPagoda{} if err = this.Get(uid, result); err != nil { - if redis.RedisNil != err { - result = nil - } + return } err = nil @@ -55,6 +54,25 @@ func (this *ModelSeasonPagoda) addNewSeasonPagoda(uId string, data *pb.DBSeasonP this.module.Errorf("err:%v", err) return } + + if !this.module.IsCross() { + if conn, err := db.Cross(); err == nil { + data1 := &comm.Autogenerated{ + ID: primitive.NewObjectID().Hex(), + UID: uId, + Act: string(comm.LogHandleType_Update), + } + table := comm.TableSeasonRecord //, uid, , data) + data1.D = append(data1.D, table) // D[0] + data1.D = append(data1.D, bson.M{"uid": uId}) // D[1] + data1.D = append(data1.D, data) // D[2] + + _, err = conn.Mgo.InsertOne("model_log", data1) + if err != nil { + log.Errorf("insert model db err %v", err) + } + } + } return nil } diff --git a/modules/timer/chat.go b/modules/timer/chat.go index fcdcde899..bf8a1bf3f 100644 --- a/modules/timer/chat.go +++ b/modules/timer/chat.go @@ -66,6 +66,7 @@ func (this *ChatComp) Start() (err error) { } else { weekStr = "*" } + cronStr := fmt.Sprintf("0 %d %d ? * %s", v1.TimeM, v1.TimeH, weekStr) this.module.Debug("注册Chat广播公告消息", log.Field{Key: "cronStr", Value: cronStr}, log.Field{Key: "text", Value: v1.Text}) if id, err = cron.AddFunc(cronStr, this.chatNoticen(v1.Text)); err != nil { diff --git a/modules/timer/module.go b/modules/timer/module.go index 771bf6486..304595f44 100644 --- a/modules/timer/module.go +++ b/modules/timer/module.go @@ -62,7 +62,6 @@ func (this *Timer) OnInstallComp() { this.rank3 = this.RegisterComp(new(HuntingRank)).(*HuntingRank) this.chat = this.RegisterComp(new(ChatComp)).(*ChatComp) this.season = this.RegisterComp(new(SeasonPagoda)).(*SeasonPagoda) - } //日志 diff --git a/modules/timer/pagodarank.go b/modules/timer/pagodarank.go index 482a85963..5c5d56eb8 100644 --- a/modules/timer/pagodarank.go +++ b/modules/timer/pagodarank.go @@ -7,6 +7,7 @@ import ( "go_dreamfactory/pb" "go_dreamfactory/lego/core" + "go_dreamfactory/lego/core/cbase" "go_dreamfactory/lego/sys/cron" "go_dreamfactory/lego/sys/log" @@ -15,8 +16,10 @@ import ( ) type PagodaRank struct { + cbase.ModuleBase modules.MCompModel service core.IService + module *Timer } //组件初始化接口 @@ -24,20 +27,25 @@ func (this *PagodaRank) Init(service core.IService, module core.IModule, comp co this.TableName = comm.TablePagodaRecord this.MCompModel.Init(service, module, comp, options) + this.module = module.(*Timer) this.service = service return } func (this *PagodaRank) Start() (err error) { err = this.MCompModel.Start() - cron.AddFunc("*/60 * * * * ?", this.Timer) //每60s执行一次 + + cron.AddFunc("*/60 * * * * ?", this.TimerPagoda) //每60s执行一次 + + cron.AddFunc("*/60 * * * * ?", this.TimerSeason) //每60s执行一次 + return } // 处理排行榜排序 -func (this *PagodaRank) Timer() { +func (this *PagodaRank) TimerPagoda() { data := make([]interface{}, 0) // options.Find().SetLimit(comm.MaxRankList) - if _data, err := this.DB.Find(comm.TableSeasonPagoda, bson.M{}, options.Find().SetSort(bson.M{"pagodaId": -1}).SetLimit(comm.MaxRankList)); err == nil { + if _data, err := this.DB.Find(comm.TablePagoda, bson.M{}, options.Find().SetSort(bson.M{"pagodaId": -1}).SetLimit(comm.MaxRankList)); err == nil { for _data.Next(context.TODO()) { temp := &pb.DBPagodaRecord{} if err = _data.Decode(temp); err == nil { @@ -55,3 +63,24 @@ func (this *PagodaRank) Timer() { } } } + +func (this *PagodaRank) TimerSeason() { + data := make([]interface{}, 0) // options.Find().SetLimit(comm.MaxRankList) + if _data, err := this.DB.Find(comm.TableSeasonPagoda, bson.M{}, options.Find().SetSort(bson.M{"pagodaId": -1}).SetLimit(comm.MaxRankList)); err == nil { + for _data.Next(context.TODO()) { + temp := &pb.DBPagodaRecord{} + if err = _data.Decode(temp); err == nil { + data = append(data, temp) + } + } + } + if len(data) > 0 { + err := this.Redis.RPush(comm.TableSeasonRankList, data...) + if err == nil { + err = this.Redis.Ltrim(comm.TableSeasonRankList, -1*len(data), -1) //对一个列表进行修剪 + if err != nil { + log.Errorf("delete failed") + } + } + } +} diff --git a/modules/timer/season.go b/modules/timer/season.go index c9c44e585..81f1a606f 100644 --- a/modules/timer/season.go +++ b/modules/timer/season.go @@ -49,20 +49,6 @@ func (this *SeasonPagoda) Start() (err error) { cron.AddFunc("0 0 23 L * ?", this.TimerSeasonOver) //每月最后一天23点执行一次 cron.AddFunc("0 0 5 /* * ?", this.TimerSeasonStar) //每月第一天5点执行一次 - // _data := this.GetSeasonLoop(2) - // this.module.Debugf("%v", _data) - // for i := 0; i < 10000; i++ { - // this.CreatTestData(i) - // } - - // if conn, err := db.Cross(); err == nil { - // rst := conn.Mgo.FindOne(comm.TableServerData, bson.M{}) - // server := &pb.DBServerData{} - // rst.Decode(server) - // fmt.Printf("%v", server) - // } - - this.TimerSeasonOver() return } func (this *SeasonPagoda) CreatTestData(index int) { @@ -135,3 +121,49 @@ func (this *SeasonPagoda) TimerSeasonOver() { func (this *SeasonPagoda) TimerSeasonStar() { this.module.Debugf("TimerSeasonStar:%d", time.Now().Unix()) } + +// 测试用 后面删 +func (this *SeasonPagoda) TestFunc() { + // newData1 := &pb.DBSeasonPagoda{ + // Id: primitive.NewObjectID().Hex(), + // Uid: "sdsdassd", + // PagodaId: 1, + // Reward: map[int32]bool{}, + // Type: 201, + // } + // if conn, err := db.Cross(); err == nil { + // rst, err := conn.Mgo.InsertOne(comm.TableSeasonPagoda, newData) + + // fmt.Printf("%v,%v", rst, err) + // } + // _data := this.GetSeasonLoop(2) + // this.module.Debugf("%v", _data) + // for i := 0; i < 10000; i++ { + // this.CreatTestData(i) + // } + + // if conn, err := db.Cross(); err == nil { + // rst := conn.Mgo.FindOne(comm.TableServerData, bson.M{}) + // server := &pb.DBServerData{} + // rst.Decode(server) + // fmt.Printf("%v", server) + // } + + // newData := &pb.DBPagodaRecord{ + // Id: primitive.NewObjectID().Hex(), + // Uid: "sdsd", + // PagodaId: 1, + // Type: 2, + // Nickname: "userinfo.Name", + // Icon: "", // icon 暂无 + // Lv: 12, + // CostTime: 12000, + // } + // // 数据写到跨服中 + // if !db.IsCross() { + // if conn, err := db.Cross(); err == nil { + // conn.Mgo.InsertOne(comm.TableSeasonRecord, newData) + // } + // } + //this.TimerSeasonOver() +} diff --git a/modules/user/module.go b/modules/user/module.go index 1848bb2e3..cdaa9fe7e 100644 --- a/modules/user/module.go +++ b/modules/user/module.go @@ -355,8 +355,7 @@ func (this *User) getUserFromRemoteDb(uid string, rsp *pb.DBUser) error { return errors.New("sid split error") } conn, err := db.ServerDBConn(sid) - if err != nil { - log.Errorf("cross db err: %v", err) + if err != nil { return err } model := db.NewDBModel(comm.TableUser, 0, conn) diff --git a/services/worker/main.go b/services/worker/main.go index f5eec88e5..f8f125255 100644 --- a/services/worker/main.go +++ b/services/worker/main.go @@ -129,7 +129,7 @@ func (this *Service) InitSys() { // } _len, err1 := model.DB.CountDocuments(comm.TableServerData, bson.M{}) - if err1 != nil && _len > 0 { + if err1 == nil && _len == 0 { fmt.Printf("%v,%v", _len, err1) server := &pb.DBServerData{ Id: primitive.NewObjectID().Hex(),