go_dreamfactory/modules/task/model_active.go
2022-12-05 16:09:13 +08:00

113 lines
3.0 KiB
Go

package task
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
type ModelTaskActive struct {
modules.MCompModel
moduleTask *ModuleTask
}
func (this *ModelTaskActive) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.TableName = comm.TableTaskActive
err = this.MCompModel.Init(service, module, comp, options)
this.moduleTask = module.(*ModuleTask)
// 加索引
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
})
return
}
//初始化活跃度
func (this *ModelTaskActive) initActiveReward(uid string, taskTag comm.TaskTag) {
data := this.moduleTask.configure.getTaskActiveByTag(int32(taskTag))
for _, conf := range data {
objId := primitive.NewObjectID().Hex()
ta := &pb.DBTaskActive{
Id: objId,
Uid: uid,
Tag: int32(taskTag),
RId: conf.Key,
}
if err := this.moduleTask.modelTaskActive.AddList(uid, ta.Id, ta); err != nil {
this.moduleTask.Errorf("uid:%v tag:%v initActiv add err %v", uid, err)
return
}
}
}
//获取玩家活跃度列表
func (this *ModelTaskActive) getActiveListByTag(uid string, taskTag comm.TaskTag) (list []*pb.DBTaskActive) {
al := []*pb.DBTaskActive{}
if err := this.GetList(uid, &al); err != nil {
this.moduleTask.Errorf("getUserActiveList err:%v", err)
return al
}
for _, v := range al {
if v.Tag == int32(taskTag) {
list = append(list, v)
}
}
return list
}
// 查询完成的且未领取的任务 发现未领取返回true
func (this *ModelTaskActive) noReceiveTaskActive(uid string, taskTag comm.TaskTag) (bool, error) {
list := []*pb.DBTaskActive{}
if err := this.GetList(uid, &list); err != nil {
this.moduleTask.Errorf("getUserActiveList err:%v", err)
return false, err
}
for _, v := range list {
if v.Tag == int32(taskTag) && v.Received == 0 {
return true, nil
}
}
return false, nil
}
//获取玩家活跃记录 id 唯一ID
func (this *ModelTaskActive) getUserActive(uid, id string, taskTag comm.TaskTag) *pb.DBTaskActive {
record := this.getActiveListByTag(uid, taskTag)
for _, v := range record {
if v.Id == id {
return v
}
}
return nil
}
func (this *ModelTaskActive) updateReceive(uid, id string, taskTag comm.TaskTag, data map[string]interface{}) (err error) {
if len(data) == 0 {
return
}
return this.moduleTask.modelTaskActive.ChangeList(uid, id, data)
}
//清空活跃度任务
func (this *ModelTaskActive) clearTask(uid string, taskTag ...comm.TaskTag) {
if len(taskTag) == 0 {
this.moduleTask.Errorf("least one param for taskTag")
return
}
data := this.getActiveListByTag(uid, taskTag[0])
for _, v := range data {
if err := this.moduleTask.modelTaskActive.DelListlds(uid, v.Id); err != nil {
this.moduleTask.Errorf("uid: %v err:%v", uid, err)
return
}
}
}