go_dreamfactory/modules/rtask/updateHandle.go
2022-09-01 14:58:40 +08:00

111 lines
2.5 KiB
Go

// package 更新任务触发后的数据更新
package rtask
import (
"go_dreamfactory/pb"
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 = verifyParam(cfg, vals...); err != nil {
return err
}
record := &pb.DBRtaskRecord{}
if err2 := this.Get(uid, record); err2 != nil {
if err2 != mongo.ErrNoDocuments {
return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
} else {
err = err2
}
}
if record.Vals == nil {
data := &pb.RtaskData{
Data: toMap(vals...),
}
record.Vals = map[int32]*pb.RtaskData{
cfg.Id: data,
}
record.Id = primitive.NewObjectID().Hex()
record.Uid = uid
record.RType = cfg.Type
if err := this.Add(uid, record); err != nil {
return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
}
} else {
if v, ok := record.Vals[cfg.Id]; ok {
m := isEqual(paramLen, v, cfg, vals...)
if len(m) > 0 {
update := map[string]interface{}{
"vals": m,
}
err = this.Change(uid, update)
}
}
}
return
}
// 累计更新 - 招募等
func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) {
var paramLen int
if paramLen, err = verifyParam(cfg, vals...); err != nil {
return err
}
record := &pb.DBRtaskRecord{}
err = this.Get(uid, record)
if err != nil {
return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
}
if record.Vals == nil {
data := &pb.RtaskData{
Data: toMap(vals...),
}
record.Vals = map[int32]*pb.RtaskData{
cfg.Id: data,
}
if err := this.Add(uid, record); err != nil {
return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id)
}
} else {
data := make(map[int32]int32)
//查找任务数据
if v, ok := record.Vals[cfg.Id]; ok {
if paramLen == 1 {
data[0] += v.Data[0]
} else if paramLen == 2 {
//第一个参数为累加,后续参数为判断条件
if data[1] == cfg.Data2 {
data[1] += v.Data[1]
}
} else if paramLen == 3 {
if data[1] == cfg.Data2 && data[2] == cfg.Data3 {
data[2] += v.Data[2]
}
}
if len(data) > 0 {
update := map[string]interface{}{
"vals": data,
}
err = this.Change(uid, update)
}
}
}
return
}