refactor(task): 重构任务系统数据结构和处理逻辑
This commit is contained in:
@@ -12,5 +12,5 @@ func GDBM(m IModel) *gdb.Model {
|
|||||||
|
|
||||||
// DBM 根据model获取 *gdb.Model
|
// DBM 根据model获取 *gdb.Model
|
||||||
func DBM(m IModel) *gdb.Model {
|
func DBM(m IModel) *gdb.Model {
|
||||||
return g.DB(m.GroupName()).Model(m.TableName())
|
return g.DB(m.GroupName()).Model(m.TableName()).FieldsEx("id")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"blazing/common/utils"
|
"blazing/common/utils"
|
||||||
"blazing/modules/blazing/model"
|
"blazing/modules/blazing/model"
|
||||||
"blazing/modules/blazing/service"
|
"blazing/modules/blazing/service"
|
||||||
|
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|||||||
@@ -38,18 +38,19 @@ func (h Controller) AddTaskBuf(data *task.AddTaskBufInboundInfo, c *socket.Playe
|
|||||||
// if data.Head.CMD != 2204 { //判断是每日任务
|
// if data.Head.CMD != 2204 { //判断是每日任务
|
||||||
// isdaliy = true
|
// isdaliy = true
|
||||||
// }
|
// }
|
||||||
service.NewUserService(c.Info.UserID).TaskExec(func(ttt []model.TaskInfo) []model.TaskInfo {
|
result = &task.AddTaskBufOutboundInfo{}
|
||||||
var ttt2 []model.TaskInfo
|
|
||||||
for _, v := range ttt {
|
|
||||||
|
|
||||||
v.TaskInfo = data.TaskList
|
_, ok := service.NewUserService(c.Info.UserID).TaskInfo(data.TaskId)
|
||||||
|
if ok {
|
||||||
|
service.NewUserService(c.Info.UserID).TaskSet(data.TaskId, model.TaskInfo{
|
||||||
|
Info: data.TaskList,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
service.NewUserService(c.Info.UserID).TaskADD(data.TaskId, model.TaskInfo{
|
||||||
|
|
||||||
ttt2 = append(ttt2, v)
|
Info: data.TaskList,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return ttt2
|
|
||||||
})
|
|
||||||
|
|
||||||
return &task.AddTaskBufOutboundInfo{}, 0
|
return &task.AddTaskBufOutboundInfo{}, 0
|
||||||
}
|
}
|
||||||
@@ -115,24 +116,10 @@ func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *socket.
|
|||||||
* 获取任务状态
|
* 获取任务状态
|
||||||
*/
|
*/
|
||||||
func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *socket.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) {
|
func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *socket.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) {
|
||||||
// isdaliy := false
|
info, _ := service.NewUserService(c.Info.UserID).TaskInfo(data.TaskId)
|
||||||
// if data.Head.CMD == 2203 { //判断不是每日任务
|
result = &task.GetTaskBufOutboundInfo{}
|
||||||
// isdaliy = true
|
result.TaskId = data.TaskId
|
||||||
// }
|
result.TaskList = info.Info
|
||||||
|
|
||||||
service.NewUserService(c.Info.UserID).TaskExec(func(ttt []model.TaskInfo) []model.TaskInfo {
|
|
||||||
var ttt2 = make([]model.TaskInfo, 500)
|
|
||||||
for _, v := range ttt {
|
|
||||||
if data.TaskId == v.TaskID {
|
|
||||||
result = &task.GetTaskBufOutboundInfo{TaskId: data.TaskId, TaskList: v.TaskInfo}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ttt2
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return ttt2
|
|
||||||
})
|
|
||||||
|
|
||||||
return result, 0
|
return result, 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ const TableNameTask = "task"
|
|||||||
type Task struct {
|
type Task struct {
|
||||||
*cool.Model
|
*cool.Model
|
||||||
PlayerID uint64 `gorm:"not null;index:idx_task_by_player_id;comment:'所属玩家ID'" json:"player_id"`
|
PlayerID uint64 `gorm:"not null;index:idx_task_by_player_id;comment:'所属玩家ID'" json:"player_id"`
|
||||||
|
TaskID uint32 `gorm:"not null;comment:'任务ID'" json:"task_id"`
|
||||||
Data string `gorm:"type:text;not null;comment:'全部数据'" json:"data"`
|
Data string `gorm:"type:text;not null;comment:'全部数据'" json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,8 +19,8 @@ type Task struct {
|
|||||||
type TaskInfo struct {
|
type TaskInfo struct {
|
||||||
// TaskInfo 任务步骤信息,对应Java的@ArraySerialize(FIXED_LENGTH=20)注解
|
// TaskInfo 任务步骤信息,对应Java的@ArraySerialize(FIXED_LENGTH=20)注解
|
||||||
// struc:"[20]byte" 确保二进制序列化时固定20字节长度,json标签指定JSON字段名
|
// struc:"[20]byte" 确保二进制序列化时固定20字节长度,json标签指定JSON字段名
|
||||||
TaskID uint32 `json:"task_id"` //区分是每日任务还是常规任务,常规为0,每日为1
|
//TaskID uint32 `json:"task_id"` //区分是每日任务还是常规任务,常规为0,每日为1
|
||||||
TaskInfo []uint32 `struc:"[20]byte" json:"task_info"`
|
Info []uint32 `struc:"[20]byte" json:"task_info"`
|
||||||
//LastResetTime time.Time `gorm:"not null;comment:'上次重置时间(UTC)'" json:"last_reset_time"` //这里是每天重置
|
//LastResetTime time.Time `gorm:"not null;comment:'上次重置时间(UTC)'" json:"last_reset_time"` //这里是每天重置
|
||||||
// Status 任务整体状态:0-未接受,1-已接受,2-已完成未领取,3-已完成已领取
|
// Status 任务整体状态:0-未接受,1-已接受,2-已完成未领取,3-已完成已领取
|
||||||
// json标签指定JSON字段名,与业务状态说明保持一致
|
// json标签指定JSON字段名,与业务状态说明保持一致
|
||||||
|
|||||||
@@ -45,12 +45,12 @@ func (s *UserService) Reg(nick string, color uint32) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.Data = string(t22)
|
t.Data = string(t22)
|
||||||
_, err = cool.DBM(s.reg.Model).Data(t).FieldsEx("id").Insert()
|
_, err = cool.DBM(s.reg.Model).Data(t).Insert()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Error(context.Background(), err)
|
glog.Error(context.Background(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
go s.InitTask()
|
//go s.InitTask()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *UserService) Person() (ret *model.PlayerInfo) {
|
func (s *UserService) Person() (ret *model.PlayerInfo) {
|
||||||
|
|||||||
@@ -35,27 +35,59 @@ func Exec[T cool.UserModel, F any](userid uint32, s *cool.Service, processFunc f
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *UserService) InitTask() {
|
// func (s *UserService) InitTask() {
|
||||||
|
|
||||||
tt := model.NewTask()
|
// tt := model.NewTask()
|
||||||
tt.PlayerID = uint64(s.userid)
|
// tt.PlayerID = uint64(s.userid)
|
||||||
|
|
||||||
var ggg []model.TaskInfo
|
// var ggg []model.TaskInfo
|
||||||
|
|
||||||
for i := 0; i < 500; i++ {
|
// for i := 0; i < 500; i++ {
|
||||||
ggg = append(ggg, model.TaskInfo{
|
// ggg = append(ggg, model.TaskInfo{
|
||||||
TaskID: (uint32(i)),
|
// //TaskID: (uint32(i)),
|
||||||
TaskInfo: make([]uint32, 0),
|
// TaskIinnfo: make([]uint32, 0),
|
||||||
})
|
// })
|
||||||
|
|
||||||
|
// }
|
||||||
|
// ffgg, _ := json.Marshal(ggg)
|
||||||
|
// tt.Data = string(ffgg)
|
||||||
|
// _, err := cool.DBM(s.task.Model).Data(tt).FieldsEx("id").Insert()
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err)
|
||||||
|
// }
|
||||||
|
// //panic(err)
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 获取任务信息
|
||||||
|
func (s *UserService) TaskInfo(id uint32) (ret model.TaskInfo, ok bool) {
|
||||||
|
var gg model.Task
|
||||||
|
m1 := cool.DBM(s.task.Model).Where("player_id", s.userid)
|
||||||
|
m1.Scan(&gg)
|
||||||
|
|
||||||
|
if gg.TaskID == 0 {
|
||||||
|
|
||||||
|
return ret, false
|
||||||
}
|
}
|
||||||
ffgg, _ := json.Marshal(ggg)
|
json.Unmarshal([]byte(gg.Data), &ret)
|
||||||
tt.Data = string(ffgg)
|
return ret, true
|
||||||
_, err := cool.DBM(s.task.Model).Data(tt).FieldsEx("id").Insert()
|
}
|
||||||
if err != nil {
|
func (s *UserService) TaskSet(id uint32, ret model.TaskInfo) {
|
||||||
panic(err)
|
var gg model.Task
|
||||||
}
|
|
||||||
//panic(err)
|
tt, _ := json.Marshal(&ret)
|
||||||
|
gg.Data = string(tt)
|
||||||
|
//gg.TaskID = id
|
||||||
|
cool.DBM(s.task.Model).Where("player_id", s.userid).Where("task_id", id).Update(gg)
|
||||||
|
|
||||||
|
}
|
||||||
|
func (s *UserService) TaskADD(id uint32, ret model.TaskInfo) {
|
||||||
|
var gg model.Task
|
||||||
|
|
||||||
|
tt, _ := json.Marshal(&ret)
|
||||||
|
gg.Data = string(tt)
|
||||||
|
gg.TaskID = id
|
||||||
|
cool.DBM(s.task.Model).Where("player_id", s.userid).Insert()
|
||||||
|
|
||||||
}
|
}
|
||||||
func (s *UserService) TaskExec(t func([]model.TaskInfo) []model.TaskInfo) (ret bool) {
|
func (s *UserService) TaskExec(t func([]model.TaskInfo) []model.TaskInfo) (ret bool) {
|
||||||
|
|||||||
Reference in New Issue
Block a user