diff --git a/modules/smithy/api_tasklist.go b/modules/smithy/api_tasklist.go index 7be61f1bc..6977d1907 100644 --- a/modules/smithy/api_tasklist.go +++ b/modules/smithy/api_tasklist.go @@ -20,7 +20,9 @@ func (a *apiComp) Tasklist(session comm.IUserSession, req *pb.SmithyTasklistReq) dt, err := a.module.modelTask.getTaskRecord(session.GetUserId()) if err != nil { if err == mongo.ErrNoDocuments { + //遍历配置列表 resp.Tasks = []*pb.TujianTask{} + } else { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, @@ -30,31 +32,8 @@ func (a *apiComp) Tasklist(session comm.IUserSession, req *pb.SmithyTasklistReq) return } } else { - for _, t := range dt.Tasks { - conf, err := a.module.configure.GetSmithyTask(t.TaskId) - if err != nil { - errdata = &pb.ErrorData{ - Code: pb.ErrorCode_ConfigNoFound, - Title: pb.ErrorCode_ConfigNoFound.ToString(), - Message: err.Error(), - } - return - } - - conds, err := a.module.ModuleBuried.CheckCondition(session.GetUserId(), conf.TypeId) - if err != nil { - errdata = &pb.ErrorData{ - Code: pb.ErrorCode_ExternalModule, - Title: pb.ErrorCode_ExternalModule.ToString(), - Message: err.Error(), - } - return - } - if len(conds) > 0 { - t.Cond = conds[0] - } - } resp.Tasks = dt.Tasks + } session.SendMsg(string(a.module.GetType()), "tasklist", resp) diff --git a/modules/smithy/comp_configure.go b/modules/smithy/comp_configure.go index 35d4c1d81..f64a5f66c 100644 --- a/modules/smithy/comp_configure.go +++ b/modules/smithy/comp_configure.go @@ -303,6 +303,20 @@ func (this *configureComp) GetSmithyTask(taskId int32) (data *cfg.GameSmithyTask return } +func (this *configureComp) GetSmithyTasks() (data []*cfg.GameSmithyTaskData, err error) { + var ( + v interface{} + ) + if v, err = this.GetConfigure(game_smithytask); err == nil { + if configure, ok := v.(*cfg.GameSmithyTask); ok { + if data = configure.GetDataList(); data != nil { + return + } + } + } + return +} + func (this *configureComp) GetSmithyMake(cid int32) (data *cfg.GameSmithyMakeData, err error) { var ( v interface{} diff --git a/modules/smithy/model_task.go b/modules/smithy/model_task.go index 71390084b..ecf08bf93 100644 --- a/modules/smithy/model_task.go +++ b/modules/smithy/model_task.go @@ -3,6 +3,8 @@ package smithy import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/event" + "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" @@ -22,66 +24,160 @@ func (this *modelTask) Init(service core.IService, module core.IModule, comp cor this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) + event.Register(comm.EventBuriedComplete, this.TCondFinishNotify) return } func (this *modelTask) getTaskRecord(uid string) (*pb.DBTujianTask, error) { - tt := &pb.DBTujianTask{} + tt := &pb.DBTujianTask{Uid: uid} if err := this.Get(uid, tt); err != nil { return tt, err } return tt, nil } -func (this *modelTask) updateTaskRecord(uid string, taskId int32) error { - if !this.checkTaskStatus(uid, taskId) { - return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished) +func (this *modelTask) TCondFinishNotify(uid string, conds []*pb.ConIProgress) { + this.module.Debug("铁匠铺任务通知", log.Field{Key: "uid", Value: uid}, log.Field{Key: "conds", Value: conds}) + confList, err := this.module.configure.GetSmithyTasks() + if err != nil { + this.module.Error(err.Error()) + return } + condMap := make(map[int32]*pb.ConIProgress) + for _, conf := range confList { + for _, cond := range conds { + if cond.Conid == conf.TypeId { + condMap[conf.Key] = cond + } + } + } + update := make(map[string]interface{}) dt, err := this.getTaskRecord(uid) if err != nil { if err == mongo.ErrNoDocuments { - tj := &pb.DBTujianTask{Uid: uid} - tj.Tasks = append(tj.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) - return this.Add(uid, tj) + for k, v := range condMap { + tt := &pb.TujianTask{ + TaskId: k, + Cond: v, + } + if v.State == pb.BuriedItemFinishState_buried_finish { + tt.Received = 1 + } + dt.Tasks = append(dt.Tasks, tt) + if err := this.Add(uid, dt); err != nil { + this.module.Error(err.Error()) + return + } + return + } + } else { + this.module.Error(err.Error()) + return + } + } + + if dt.Tasks == nil { + for k, v := range condMap { + tt := &pb.TujianTask{ + TaskId: k, + Cond: v, + } + if v.State == pb.BuriedItemFinishState_buried_finish { + tt.Received = 1 + } + dt.Tasks = append(dt.Tasks, tt) + update["tasks"] = dt.Tasks + if err := this.Change(uid, update); err != nil { + this.module.Error(err.Error()) + return + } + return + } + } + + for _, t := range dt.Tasks { + for k, v := range condMap { + // update + if t.TaskId == k { + t.Cond = v + } else { + //add + dt.Tasks = append(dt.Tasks, &pb.TujianTask{ + TaskId: k, + Cond: v, + }) + } + } + } + update["tasks"] = dt.Tasks + + if len(update) > 0 { + if err := this.Change(uid, update); err != nil { + this.module.Error(err.Error()) + return + } + } +} + +func (this *modelTask) updateTaskRecord(uid string, taskId int32) error { + // if !this.checkTaskStatus(uid, taskId) { + // return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished) + // } + dt, err := this.getTaskRecord(uid) + if err != nil { + if err == mongo.ErrNoDocuments { + // tj := &pb.DBTujianTask{Uid: uid} + // tj.Tasks = append(tj.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) + // return this.Add(uid, tj) + return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished) } return err } - taskMap := make(map[int32]int32) + // taskMap := make(map[int32]int32) update := make(map[string]interface{}) if dt.Uid != "" { for _, v := range dt.Tasks { - taskMap[v.TaskId] = v.Received + if v.TaskId == taskId { + if v.Cond != nil && v.Cond.State == pb.BuriedItemFinishState_buried_finish { + v.Received = 2 + } + } else { + return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished) + } + // taskMap[v.TaskId] = v.Received + // } } - } - if t, ok := taskMap[taskId]; ok { - if t == 2 { - return comm.NewCustomError(pb.ErrorCode_SmithyTaskReceived) - } else { - update["received"] = 2 - } - } else { - dt.Tasks = append(dt.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) + // if t, ok := taskMap[taskId]; ok { + // if t == 2 { + // return comm.NewCustomError(pb.ErrorCode_SmithyTaskReceived) + // } else { + // update["received"] = 2 + // } + // } else { + // dt.Tasks = append(dt.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) update["tasks"] = dt.Tasks } - if err := this.Change(uid, update); err != nil { - return err + if len(update) > 0 { + if err := this.Change(uid, update); err != nil { + return err + } } return nil } // 检查任务状态 -func (this *modelTask) checkTaskStatus(uid string, taskId int32) bool { - conf, _ := this.module.configure.GetSmithyTask(taskId) - if conf == nil { - return false - } - // if ec := this.module.ModuleRtask.CheckCondi(uid, conf.TypeId); ec != nil { - // return false - // } - return true -} +// func (this *modelTask) checkTaskStatus(uid string, taskId int32) bool { +// conf, _ := this.module.configure.GetSmithyTask(taskId) +// if conf == nil { +// return false +// } +// // if ec := this.module.ModuleRtask.CheckCondi(uid, conf.TypeId); ec != nil { +// // return false +// // } +// return true +// }