package main import ( "fmt" "math/rand" "github.com/bxcodec/faker/v3" "github.com/mhaya/game/game_cluster/internal/mdb/eventmodels" "gorm.io/gorm" ) func getTaskFakeData(users []*eventmodels.UserBasic) []*eventmodels.TaskFinishEventContent { datas := make([]*eventmodels.TaskFinishEventContent, 0, 8) for i := 0; i < count; i++ { userBasic := getUserBasic(users) eventBasic := getEventBasic() rewards := make([]eventmodels.ItemReward, 0, 8) rewards = append(rewards, eventmodels.ItemReward{ ItemBaseType: rand.Intn(5) + 1, ItemID: rand.Intn(7) + 1, Amount: rand.Intn(100) + 1, }) bytes, err := json.Marshal(rewards) if err != nil { panic(err) } eventBasic.Reward = string(bytes) datas = append(datas, &eventmodels.TaskFinishEventContent{ UserBasic: *userBasic, EventBasic: *eventBasic, TaskId: faker.TimeString(), TaskName: faker.Name(), TaskCondition: faker.AmountWithCurrency(), TaskType: faker.Name(), TaskProgress: 50, }) } return datas } func distinctTask(db *gorm.DB, users []*eventmodels.UserBasic) { for _, nameObj := range users { taskIds := make([]*eventmodels.TaskFinishEventContent, 0, 8) where := &eventmodels.TaskFinishEventContent{ UserBasic: eventmodels.UserBasic{ UserId: nameObj.UserId, }, } err := db.Model(&eventmodels.TaskFinishEventContent{}).Distinct("task_id").Where(where).Find(&taskIds).Error if err != nil { fmt.Printf("Distinct error:%v", err) return } fmt.Printf("taskIds:%#v", taskIds) for _, v := range taskIds { taskInfo := &eventmodels.TaskFinishEventContent{} where.TaskId = v.TaskId err = db.Model(&eventmodels.TaskFinishEventContent{}).Where(where).Order("create_at desc").First(&taskInfo).Error if err != nil { fmt.Printf("First error:%v", err) return } fmt.Printf("taskInfo:%#v", taskInfo) } } }