132 lines
3.5 KiB
Go
132 lines
3.5 KiB
Go
// package 更新任务触发后的数据更新
|
|
package rtask
|
|
|
|
import (
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/sys/log"
|
|
"go_dreamfactory/modules/task"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/configure"
|
|
cfg "go_dreamfactory/sys/configure/structs"
|
|
|
|
"github.com/pkg/errors"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
)
|
|
|
|
// 覆盖更新
|
|
func (this *ModelRtaskRecord) overrideUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) {
|
|
var paramLen int
|
|
if paramLen, err = lenParam(cfg, vals...); err != nil {
|
|
return err
|
|
}
|
|
|
|
record := &pb.DBRtaskRecord{Uid: uid}
|
|
if err := this.Get(uid, record); err != nil {
|
|
if err == mongo.ErrNoDocuments {
|
|
record.Id = primitive.NewObjectID().Hex()
|
|
if err := this.Add(uid, record); err != nil {
|
|
return errors.Wrapf(err, "创建玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
|
|
}
|
|
} else {
|
|
return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
|
|
}
|
|
}
|
|
|
|
if record.Vals == nil {
|
|
record.Vals = make(map[int32]*pb.RtaskData)
|
|
}
|
|
|
|
if v, ok := record.Vals[cfg.Id]; ok {
|
|
v.Data = hasUpdateData(paramLen, v, vals...)
|
|
if len(v.Data) > 0 {
|
|
update := map[string]interface{}{
|
|
"vals": v,
|
|
}
|
|
if err = this.Change(uid, update); err != nil {
|
|
return
|
|
}
|
|
|
|
}
|
|
} else {
|
|
data := &pb.RtaskData{
|
|
Rtype: cfg.Type,
|
|
Data: toMap(vals...),
|
|
Timestamp: configure.Now().Unix(),
|
|
}
|
|
record.Vals[cfg.Id] = data
|
|
|
|
update := map[string]interface{}{
|
|
"vals": record.Vals,
|
|
}
|
|
if err = this.Change(uid, update); err != nil {
|
|
return
|
|
}
|
|
}
|
|
log.Debug("覆盖数值更新", log.Fields{"uid": uid, "condiId": cfg.Id, "params": vals, "updated": record.Vals[cfg.Id]})
|
|
// this.listenTask(uid, cfg.Id)
|
|
return
|
|
}
|
|
|
|
// 累计更新 - 招募等
|
|
func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) {
|
|
record := &pb.DBRtaskRecord{Uid: uid}
|
|
err = this.Get(uid, record)
|
|
if err != nil {
|
|
if err == mongo.ErrNoDocuments {
|
|
record.Id = primitive.NewObjectID().Hex()
|
|
if err := this.Add(uid, record); err != nil {
|
|
return errors.Wrapf(err, "创建玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
|
|
}
|
|
} else {
|
|
return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
|
|
}
|
|
}
|
|
|
|
if record.Vals == nil {
|
|
record.Vals = make(map[int32]*pb.RtaskData)
|
|
}
|
|
//查找任务数据
|
|
if v, ok := record.Vals[cfg.Id]; ok {
|
|
newArr := make([]int32, len(vals))
|
|
newArr = vals
|
|
srcCount := v.Data[0]
|
|
newArr[0] = srcCount + vals[0]
|
|
v.Data = toMap(newArr...)
|
|
v.Timestamp = configure.Now().Unix()
|
|
|
|
update := map[string]interface{}{
|
|
"vals": record.Vals,
|
|
}
|
|
err = this.Change(uid, update)
|
|
} else {
|
|
record.Vals[cfg.Id] = &pb.RtaskData{
|
|
Data: toMap(vals...),
|
|
Rtype: cfg.Type,
|
|
Timestamp: configure.Now().Unix(),
|
|
}
|
|
update := map[string]interface{}{
|
|
"vals": record.Vals,
|
|
}
|
|
err = this.Change(uid, update)
|
|
}
|
|
log.Debug("累计次数更新", log.Fields{"uid": uid, "condiId": cfg.Id, "params": vals, "updated": record.Vals[cfg.Id]})
|
|
|
|
// this.listenTask(uid, cfg.Id)
|
|
return
|
|
}
|
|
|
|
func (this *ModelRtaskRecord) listenTask(uid string, cfgId int32) {
|
|
//日/周/成就任务监听触发
|
|
tl := new(task.TaskListen)
|
|
tl.Uid = uid
|
|
tl.TaskType = comm.TaskType(cfgId)
|
|
if im, err := this.service.GetModule(comm.ModuleTask); err == nil {
|
|
if mt, ok := im.(*task.ModuleTask); ok {
|
|
mt.GetEventApp().Dispatch(comm.EventTaskChanged, tl)
|
|
}
|
|
} else {
|
|
this.moduleRtask.Printf("get ModuleTask err: %v", err)
|
|
}
|
|
}
|