This commit is contained in:
liwei1dao 2022-10-24 10:55:41 +08:00
commit 13dec018fe
22 changed files with 352 additions and 68 deletions

View File

@ -13,32 +13,32 @@
}, },
{ {
"msgid": "chat", "msgid": "chat",
"routrules": "~/worker",
"open": true, "open": true,
"routrules": "~/worker",
"describe": "聊天系统" "describe": "聊天系统"
}, },
{ {
"msgid": "chat.chanagechannel", "msgid": "chat.chanagechannel",
"routrules": "~/worker",
"open": true, "open": true,
"routrules": "~/worker",
"describe": "聊天系统" "describe": "聊天系统"
}, },
{ {
"msgid": "chat.crosschannel", "msgid": "chat.crosschannel",
"routrules": "~/worker",
"open": true, "open": true,
"routrules": "~/worker",
"describe": "聊天系统" "describe": "聊天系统"
}, },
{ {
"msgid": "chat.getcrosslist", "msgid": "chat.getcrosslist",
"routrules": "~/worker",
"open": true, "open": true,
"routrules": "~/worker",
"describe": "聊天系统" "describe": "聊天系统"
}, },
{ {
"msgid": "chat.sendcross", "msgid": "chat.sendcross",
"routrules": "~/worker",
"open": true, "open": true,
"routrules": "~/worker",
"describe": "聊天系统" "describe": "聊天系统"
}, },
{ {
@ -154,5 +154,11 @@
"open": true, "open": true,
"routrules": "~/worker", "routrules": "~/worker",
"describe": "好友推荐" "describe": "好友推荐"
},
{
"msgid": "friend.assistherolist",
"open": true,
"routrules": "~/worker",
"describe": "好友助战英雄列表"
} }
] ]

View File

@ -4,5 +4,5 @@ Website = "http://legu.cc"
Icon = "app.png" Icon = "app.png"
Name = "RobotGUI" Name = "RobotGUI"
ID = "cc.legu.app" ID = "cc.legu.app"
Version = "1.0.17" Version = "1.0.18"
Build = 20 Build = 21

View File

@ -82,6 +82,7 @@ var (
ff(comm.ModuleFriend, friend.FriendSubTypeGetreward): &formview.FriendGetrewardView{}, ff(comm.ModuleFriend, friend.FriendSubTypeGetreward): &formview.FriendGetrewardView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist): &formview.FriendAssistListView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist): &formview.FriendAssistListView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero): &formview.FriendAssistHeroView{}, ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero): &formview.FriendAssistHeroView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList): &formview.FriendAssistHeroListView{},
// shop // shop
ff(comm.ModuleShop, "getlist"): &formview.ShopListView{}, ff(comm.ModuleShop, "getlist"): &formview.ShopListView{},
@ -180,6 +181,7 @@ var (
ff(comm.ModuleFriend, friend.FriendSubTypeGetreward), ff(comm.ModuleFriend, friend.FriendSubTypeGetreward),
ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero), ff(comm.ModuleFriend, friend.FriendSubTypeAssistHero),
ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist), ff(comm.ModuleFriend, friend.FriendSubTypeAssistlist),
ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList),
}, },
"shop": { "shop": {
ff(comm.ModuleShop, "getlist"), ff(comm.ModuleShop, "getlist"),
@ -616,6 +618,13 @@ var (
SubType: friend.FriendSubTypeGetreward, SubType: friend.FriendSubTypeGetreward,
Enabled: true, Enabled: true,
}, },
ff(comm.ModuleFriend, friend.FriendSubTypeAssistHeroList): {
NavLabel: "助战英雄列表",
Desc: "我的好友助战英雄列表",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeAssistHeroList,
Enabled: true,
},
//shop //shop
string(comm.ModuleShop): { string(comm.ModuleShop): {

View File

@ -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
}

View File

@ -4,6 +4,7 @@ import (
"go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/model"
"go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"strings"
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
@ -19,18 +20,19 @@ func (this *HeroInfoView) CreateView(t *model.TestCase) fyne.CanvasObject {
uidEntry.PlaceHolder = "玩家ID" uidEntry.PlaceHolder = "玩家ID"
heroIdEntry := widget.NewEntry() heroIdEntry := widget.NewEntry()
heroIdEntry.PlaceHolder = "英雄ObjID" heroIdEntry.PlaceHolder = "英雄ObjID,多个用逗号分隔"
this.form.AppendItem(widget.NewFormItem("UID", uidEntry)) this.form.AppendItem(widget.NewFormItem("UID", uidEntry))
this.form.AppendItem(widget.NewFormItem("HeroObjID", heroIdEntry)) this.form.AppendItem(widget.NewFormItem("HeroObjID", heroIdEntry))
heroIds := strings.Split(heroIdEntry.Text, ",")
this.form.OnSubmit = func() { this.form.OnSubmit = func() {
if err := service.GetPttService().SendToClient( if err := service.GetPttService().SendToClient(
t.MainType, t.MainType,
t.SubType, t.SubType,
&pb.HeroInfoReq{ &pb.HeroInfoReq{
Uid: uidEntry.Text, Uid: uidEntry.Text,
HeroId: heroIdEntry.Text, HeroId: heroIds,
}, },
); err != nil { ); err != nil {
logrus.Error(err) logrus.Error(err)

View File

@ -123,6 +123,8 @@ const (
TablePagodaRankList = "pagodaranklist" TablePagodaRankList = "pagodaranklist"
TableSeasonRankList = "seasonranklist" // 赛季塔列表 TableSeasonRankList = "seasonranklist" // 赛季塔列表
TableSeasonRecord = "seasonRecord" // 赛季塔记录
/// 美食馆 /// 美食馆
TableSmithy = "smithy" TableSmithy = "smithy"
/// 赛季塔数据表 /// 赛季塔数据表

View File

@ -24,6 +24,7 @@ const (
FriendSubTypeDel = "del" FriendSubTypeDel = "del"
FriendSubTypeAssistlist = "assistlist" FriendSubTypeAssistlist = "assistlist"
FriendSubTypeGetreward = "getreward" FriendSubTypeGetreward = "getreward"
FriendSubTypeAssistHeroList = "assistherolist"
) )
type apiComp struct { 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 { func (this *apiComp) setDefaultFriendUserBaseInfo(userId string) *pb.FriendBase {
if user, err := this.moduleFriend.ModuleUser.GetRmoteUser(userId); err != nil { if user, err := this.moduleFriend.ModuleUser.GetRmoteUser(userId); err != nil {
this.moduleFriend.Errorf("GetRmoteUser err:%v", err)
return nil return nil
} else { } else {
if user != nil { if user != nil {

View File

@ -65,18 +65,20 @@ func (this *apiComp) Assisthero(session comm.IUserSession, req *pb.FriendAssisth
return return
} }
//推送 // 有好友时再推送
push := &pb.FriendAssistHeroListPush{} if len(self.FriendIds) > 0 {
for _, fId := range self.FriendIds { //把设置的助战英雄推送给好友
d := this.moduleFriend.modelFriend.GetFriend(fId) push := &pb.FriendAssistHeroUpdatePush{
push.Friends = append(push.Friends, &pb.FriendBase{ Friend: &pb.FriendBase{
HeroObjId: d.AssistHeroId, UserId: self.Uid,
}) HeroObjId: req.HeroObjId,
},
} }
if err := this.moduleFriend.SendMsgToUsers(string(this.moduleFriend.GetType()), "AssistHeroList",
&pb.FriendAssistHeroListPush{}, self.FriendIds...); err != nil { if err := this.moduleFriend.SendMsgToUsers(string(this.moduleFriend.GetType()), "assistheroupdate", push, self.FriendIds...); err != nil {
this.moduleFriend.Errorf("push AssistHeroList err:", err) this.moduleFriend.Errorf("push AssistHeroList err:", err)
} }
}
// 随机任务Rtype13 // 随机任务Rtype13
this.moduleFriend.ModuleRtask.SendToRtask(session, comm.Rtype13, 1) this.moduleFriend.ModuleRtask.SendToRtask(session, comm.Rtype13, 1)

View File

@ -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
}

View File

@ -3,6 +3,7 @@ package friend
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/utils"
"sort" "sort"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
@ -29,14 +30,20 @@ func (this *apiComp) Assistlist(session comm.IUserSession, req *pb.FriendAssistl
if target == nil { if target == nil {
continue continue
} }
if target.AssistHeroId != "" {
base.HeroObjId = target.AssistHeroId base.HeroObjId = target.AssistHeroId
base.Score = target.ZhuzhanScore base.Score = target.AssistScore
base.UpdateTime = target.UpdateTime
list = append(list, base) list = append(list, base)
} }
} }
}
//排序并取前三 //排序并取前三
sort.Slice(list, func(i, j int) bool { 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 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{ rsp := &pb.FriendAssistlistResp{
List: list, List: firstThree,
HeroObjId: self.AssistHeroId, HeroObjId: self.AssistHeroId,
Record: self.Record, Record: self.Record,
} }

View File

@ -2,9 +2,11 @@ package friend
import ( import (
"context" "context"
"errors"
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/utils"
"time" "time"
"go_dreamfactory/lego/base" "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 { 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) hero, err := this.UseAssistHero(req.Param1, req.Param2)
if err != nil { if err != nil {
return err return err
} }
reply = hero *reply = *hero
return nil return nil
} }
@ -104,18 +107,35 @@ func (this *Friend) UseAssistHero(uid, friendId string) (*pb.DBHero, error) {
for _, fId := range friend.FriendIds { for _, fId := range friend.FriendIds {
// 判断uid是否在指定玩家的好友列表中 // 判断uid是否在指定玩家的好友列表中
if fId == 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.AssistScore++
friend.Record = append(friend.Record, &pb.ZhuZhanRecord{ // 设置助战记录
friend.Record = append(friend.Record, &pb.AssistRecord{
Uid: uid, Uid: uid,
Zhuzhantime: time.Now().Unix(), AssistHeroId: friend.AssistHeroId,
AssistTime: time.Now().Unix(),
}) })
update := map[string]interface{}{ update := map[string]interface{}{
"zhuzhanScore": friend.ZhuzhanScore, "assistScore": friend.AssistScore,
"record": friend.Record, "record": friend.Record,
"updateTime": time.Now().Unix(),
} }
return friend.Hero, this.modelFriend.Change(friendId, update) return friend.Hero, this.modelFriend.Change(friendId, update)
} }
} }
return nil, nil log.Errorf("[friendId:%v]不是你[uid:%v]的好友", uid, friendId)
return nil, errors.New("非好友")
} }

View File

@ -2,8 +2,11 @@ package pagoda
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb" "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/bson/primitive"
"google.golang.org/protobuf/proto" "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) 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.Uid = session.GetUserId()
seasonPagoda.PagodaId = 0 // 初始数据0层 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) this.module.modelSeasonPagoda.addNewSeasonPagoda(session.GetUserId(), seasonPagoda)
// 推送新的 // 推送新的
pagoda.PagodaId = seasonPagoda.PagodaId 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 seasonPagoda.PagodaId = conf.LayerNum
mapData["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) 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}) session.SendMsg(string(this.module.GetType()), PagodaChallengeOverResp, &pb.PagodaChallengeOverResp{Data: pagoda})
} }

View File

@ -39,7 +39,7 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq
} }
} else { } else {
season, _ := this.module.modelSeasonPagoda.getSeasonPagodaList(session.GetUserId()) season, _ := this.module.modelSeasonPagoda.getSeasonPagodaList(session.GetUserId())
if season.PagodaId == 0 { // 创建一条新的数据 if season.Id == "" {
season.Id = primitive.NewObjectID().Hex() season.Id = primitive.NewObjectID().Hex()
season.Uid = session.GetUserId() season.Uid = session.GetUserId()
season.PagodaId = 0 // 初始数据0层 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) this.module.modelSeasonPagoda.addNewSeasonPagoda(session.GetUserId(), season)
} }
list = &pb.DBPagoda{ list = &pb.DBPagoda{
Id: season.Id, Id: season.Id,
Uid: season.Uid, Uid: season.Uid,
@ -59,7 +60,6 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.PagodaGetListReq
Type: season.Type, Type: season.Type,
} }
} }
session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: list}) session.SendMsg(string(this.module.GetType()), PagodaGetListResp, &pb.PagodaGetListResp{Data: list})
return return
} }

View File

@ -8,6 +8,7 @@ import (
"go_dreamfactory/lego/sys/redis" "go_dreamfactory/lego/sys/redis"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"sort" "sort"
"time" "time"
@ -55,7 +56,10 @@ func (this *ModelRank) ChangeUserRank(uid string, value map[string]interface{})
func (this *ModelRank) GetRankData() (data []*pb.DBPagodaRecord, err error) { func (this *ModelRank) GetRankData() (data []*pb.DBPagodaRecord, err error) {
data = make([]*pb.DBPagodaRecord, 0) 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 return
} }

View File

@ -4,11 +4,12 @@ import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/sys/redis"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/db"
"go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx" "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) { func (this *ModelSeasonPagoda) getSeasonPagodaList(uid string) (result *pb.DBSeasonPagoda, err error) {
result = &pb.DBSeasonPagoda{} result = &pb.DBSeasonPagoda{}
if err = this.Get(uid, result); err != nil { if err = this.Get(uid, result); err != nil {
if redis.RedisNil != err {
result = nil
}
return return
} }
err = nil err = nil
@ -55,6 +54,25 @@ func (this *ModelSeasonPagoda) addNewSeasonPagoda(uId string, data *pb.DBSeasonP
this.module.Errorf("err:%v", err) this.module.Errorf("err:%v", err)
return 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 return nil
} }

View File

@ -66,6 +66,7 @@ func (this *ChatComp) Start() (err error) {
} else { } else {
weekStr = "*" weekStr = "*"
} }
cronStr := fmt.Sprintf("0 %d %d ? * %s", v1.TimeM, v1.TimeH, 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}) 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 { if id, err = cron.AddFunc(cronStr, this.chatNoticen(v1.Text)); err != nil {

View File

@ -62,7 +62,6 @@ func (this *Timer) OnInstallComp() {
this.rank3 = this.RegisterComp(new(HuntingRank)).(*HuntingRank) this.rank3 = this.RegisterComp(new(HuntingRank)).(*HuntingRank)
this.chat = this.RegisterComp(new(ChatComp)).(*ChatComp) this.chat = this.RegisterComp(new(ChatComp)).(*ChatComp)
this.season = this.RegisterComp(new(SeasonPagoda)).(*SeasonPagoda) this.season = this.RegisterComp(new(SeasonPagoda)).(*SeasonPagoda)
} }
//日志 //日志

View File

@ -7,6 +7,7 @@ import (
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/core/cbase"
"go_dreamfactory/lego/sys/cron" "go_dreamfactory/lego/sys/cron"
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
@ -15,8 +16,10 @@ import (
) )
type PagodaRank struct { type PagodaRank struct {
cbase.ModuleBase
modules.MCompModel modules.MCompModel
service core.IService 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.TableName = comm.TablePagodaRecord
this.MCompModel.Init(service, module, comp, options) this.MCompModel.Init(service, module, comp, options)
this.module = module.(*Timer)
this.service = service this.service = service
return return
} }
func (this *PagodaRank) Start() (err error) { func (this *PagodaRank) Start() (err error) {
err = this.MCompModel.Start() err = this.MCompModel.Start()
cron.AddFunc("*/60 * * * * ?", this.Timer) //每60s执行一次
cron.AddFunc("*/60 * * * * ?", this.TimerPagoda) //每60s执行一次
cron.AddFunc("*/60 * * * * ?", this.TimerSeason) //每60s执行一次
return return
} }
// 处理排行榜排序 // 处理排行榜排序
func (this *PagodaRank) Timer() { func (this *PagodaRank) TimerPagoda() {
data := make([]interface{}, 0) // options.Find().SetLimit(comm.MaxRankList) 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()) { for _data.Next(context.TODO()) {
temp := &pb.DBPagodaRecord{} temp := &pb.DBPagodaRecord{}
if err = _data.Decode(temp); err == nil { 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")
}
}
}
}

View File

@ -49,20 +49,6 @@ func (this *SeasonPagoda) Start() (err error) {
cron.AddFunc("0 0 23 L * ?", this.TimerSeasonOver) //每月最后一天23点执行一次 cron.AddFunc("0 0 23 L * ?", this.TimerSeasonOver) //每月最后一天23点执行一次
cron.AddFunc("0 0 5 /* * ?", this.TimerSeasonStar) //每月第一天5点执行一次 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 return
} }
func (this *SeasonPagoda) CreatTestData(index int) { func (this *SeasonPagoda) CreatTestData(index int) {
@ -135,3 +121,49 @@ func (this *SeasonPagoda) TimerSeasonOver() {
func (this *SeasonPagoda) TimerSeasonStar() { func (this *SeasonPagoda) TimerSeasonStar() {
this.module.Debugf("TimerSeasonStar:%d", time.Now().Unix()) 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()
}

View File

@ -356,7 +356,6 @@ func (this *User) getUserFromRemoteDb(uid string, rsp *pb.DBUser) error {
} }
conn, err := db.ServerDBConn(sid) conn, err := db.ServerDBConn(sid)
if err != nil { if err != nil {
log.Errorf("cross db err: %v", err)
return err return err
} }
model := db.NewDBModel(comm.TableUser, 0, conn) model := db.NewDBModel(comm.TableUser, 0, conn)

View File

@ -129,7 +129,7 @@ func (this *Service) InitSys() {
// } // }
_len, err1 := model.DB.CountDocuments(comm.TableServerData, bson.M{}) _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) fmt.Printf("%v,%v", _len, err1)
server := &pb.DBServerData{ server := &pb.DBServerData{
Id: primitive.NewObjectID().Hex(), Id: primitive.NewObjectID().Hex(),