package service import ( "blazing/cool" "blazing/modules/blazing/model" "encoding/json" "time" ) func Exec[T cool.UserModel, F any](userid uint32, s *cool.Service, processFunc func(F) F) bool { //todo待测试 var player T m1 := cool.DBM(s.Model).Where("player_id", userid) m1.Scan(&player) // 方法2:使用反射获取 // 获取反射值对象 ttt := player //fmt.Println(dataField.Interface().(string)) var tt F err := json.Unmarshal([]byte(ttt.GetData()), &tt) if err != nil { panic(err) } tt1 := processFunc(tt) tmep, err := json.Marshal(tt1) if err != nil { panic(err) } ttt.SetData(string(tmep)) m1.Save(player) return false } // func (s *UserService) InitTask() { // tt := model.NewTask() // tt.PlayerID = uint64(s.userid) // var ggg []model.TaskInfo // for i := 0; i < 500; i++ { // ggg = append(ggg, model.TaskInfo{ // //TaskID: (uint32(i)), // 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). Where("task_id", id) m1.Scan(&gg) if gg.TaskID == 0 { return ret, false } json.Unmarshal([]byte(gg.Data), &ret) return ret, true } func (s *UserService) TaskSet(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).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 gg.PlayerID = uint64(s.userid) _, err := cool.DBM(s.task.Model).Data(gg).Where("player_id", s.userid).Insert() if err != nil { panic(err) } } func (s *UserService) TaskExec(t func([]model.TaskInfo) []model.TaskInfo) (ret bool) { //待实现检测是否为每日任务 // if isdaliy { // Exec[*model.Task](s.userid, s.task, func(tt []model.TaskInfo) []model.TaskInfo { // var ttt = make([]model.TaskInfo, 500) // //先重置每日 // for k, v := range tt { // if k > 400 && !IsToday(v.LastResetTime) { //判断是每日任务 // v.Status = 0 //重置+自动接受每日任务 // v.LastResetTime = time.Now() // } // ttt = append(ttt, v) // } // return ttt // }) // } return Exec[*model.Task](s.userid, s.task, t) // m := cool.DBM(s.task.Model).Where("player_id", s.userid) // var tt model.Task // m.Scan(&tt) // var ttt map[uint32]model.TaskInfo // json.Unmarshal([]byte(tt.Data), &ttt) // ret = t(ttt) // t1, _ := json.Marshal(&ttt) // tt.Data = string(t1) // m.Save(&tt) //退出时保存 // return } // IsToday 判断给定时间是否是今天 func IsToday(t time.Time) bool { // 获取当前时间 now := time.Now() // 比较年、月、日是否相同 return t.Year() == now.Year() && t.Month() == now.Month() && t.Day() == now.Day() } // /** // * 完成任务 // */ // func (s *TaskService) CompleteTask(task uint32) bool { // return s.Exec(func(ttt map[uint32]model.TaskInfo) bool { // if conditions, ok := ttt[task]; ok { // conditions.Status = 3 // ttt[task] = conditions // } // return false // }) // } // /** // * 校验任务是否已经完成 // */ // func (s *TaskService) CheckTaskCompleted(task uint32) bool { // return s.Exec(func(ttt map[uint32]model.TaskInfo) bool { // if conditions, ok := ttt[task]; ok { // return conditions.Status == 3 // } // return false // }) // } // func (s *UserService) GenTask() [500]byte { // ret := [500]byte{} // Exec[*model.Task](s.userid, s.task, func(tt []model.TaskInfo) []model.TaskInfo { // //先重置每日 // for _, v := range tt { // ret[v.TaskID] = v.Status // } // return tt // }) // return ret // }