## DataFake 使用说明 `DataFake` 是一个用于生成模拟测试数据的工具类,主要用于生成试卷(Papers)、句子(Sentences)和单词标记(Tokens)的假数据。 ### 1. 获取实例 通过依赖注入获取单例: ```go import "gowfa/data/fake/simpleMake" dataFake := simpleMake.FindBeanDataFake() ``` 或者手动创建: ```go dataFake := simpleMake.NewDataFake() ``` ### 2. 主要方法 #### 2.1 生成模拟试卷 - `MakeFakePapers` ```go ret := dataFake.MakeFakePapers(200) // 生成 200 条试卷数据 if ret.IsFailed() { // 处理错误 } ``` - **参数**: `total` - 要生成的试卷数量 - **返回**: `*basedto.IchubResult` - 操作结果 - **功能**: 随机生成试卷数据,包括年份、级别、科目(英语)、总分等 #### 2.2 生成模拟句子 - `MakeFakeSentences` ```go ret := dataFake.MakeFakeSentences(200) // 生成 200 条句子数据 ``` - **参数**: `total` - 要生成的句子数量 - **返回**: `*basedto.IchubResult` - **功能**: 基于现有试卷生成句子数据,每个句子包含 6 个随机单词 #### 2.3 生成 Token 数据 - `MakeTakeTokens` ```go ret := dataFake.MakeTakeTokens(200) // 基于 200 条句子生成 Token ``` - **参数**: `total` - 要处理的句子数量 - **返回**: `*basedto.IchubResult` - **功能**: 将句子按空格拆分为单词,为每个单词创建 Token 记录 #### 2.4 查询方法 ```go // 查询试卷 papers := dataFake.QueryPapers(10) // 查询 10 条 // 查询句子 sentences := dataFake.QuerySentences(10) // 查询 10 条 ``` #### 2.5 辅助方法 ```go // 生成随机单词 words := dataFake.MakeWords(10) // 生成 10 个随机单词 // 从字符串中随机获取 ID id := dataFake.GetIdRandom("1\n2\n3") // 随机返回 1, 2 或 3 // 从数组中随机取值 val := dataFake.Fake([]int{2015, 2020, 2021}) // 随机返回其中一个年份 ``` ### 3. 典型使用流程 ```go // 1. 生成试卷 ret := simpleMake.FindBeanDataFake().MakeFakePapers(200) if ret.IsFailed() { logrus.Error(ret) return } // 2. 生成句子(依赖试卷) ret = simpleMake.FindBeanDataFake().MakeFakeSentences(200) // 3. 生成 Token(依赖句子) simpleMake.FindBeanDataFake().MakeTakeTokens(200) ``` ### 4. 数据依赖关系 ``` Papers (试卷) ↓ Sentences (句子) - 关联 PaperId ↓ Tokens (单词) - 关联 SentenceId ``` ### 5. 测试示例 参考测试文件: [data_fake_test.go](file:///E:/soft/go_wfa/data/fake/simpleMake/data_fake_test.go#L35-L45) func (self *TestDbFacadeSuite) Test001_Init() { ret := FindBeanDbFacade().QueryDict(dbentity.DictTypeQuestionType) if ret.IsFailed() { logrus.Error(ret) return } golog.Info(ret) }![]()
package fake import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gowfa/domain/db/dbfacade" "strings" "time" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goconfig/base/baseiface" "gitee.com/gowebframe3/webframe.git/goconfig/ichublog/golog" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" "github.com/brianvoe/gofakeit/v7" "github.com/duke-git/lancet/random" "github.com/gogf/gf/v2/util/gconv" "github.com/samber/lo" ) var itemType = `6 7 8 9 5 15 18 20` var examLevel = `10 11 12 14 16 17 13` type DataFake struct { basedto.BaseEntitySingle } func NewDataFake() *DataFake { return &DataFake{} } var trainIds = `1952534107195969536 2062709551269941248` var years = []int32{ 1952, 2020, 2021, 2022, 2023, 2024, } var pos = []int32{ 10, 20, 30, 40, 50, 60, 70, 80, 90, } var position = []int32{ 1, 3, 4, 5, 2, 6, } func (self *DataFake) GetTrainIdRandom() int64 { var len = len(trainIds) var i = random.RandInt(1, len) return int64(gconv.Int(trainIds[i-1])) } func (self *DataFake) Fake(v []int) int { var i = random.RandInt(1, len(v)) return v[i-1] } func (self *DataFake) MakeEntityMockY(entity baseiface.IpoolObj) int32 { entity.Init() gofakeit.Struct(entity) return int32(self.Fake(gconv.SliceInt(years))) } func (self *DataFake) MakeFakePapers(total int) *basedto.IchubResult { var papersDao = dbdao.FindBeanWfaExamPapersDao() for range total { var papers = dbentity.FindBeanWfaExamPapers() var y = self.MakeEntityMockY(papers) papers.ExamYear = y papers.ExamLevel = self.GetIdRandom(examLevel) papers.CreatedAt = time.Now() papers.DeletedAt = nil papers.UpdatedAt = time.Now() papers.PaperName = gofakeit.Word() papers.TotalScore = 100 papers.Subject = "英文" papers.Id = 0 if ret := papersDao.Save2Result(papers); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() } func (self *DataFake) GetIdRandom(idStr any) int64 { var ids []string if idss, ok := idStr.(string); ok { ids = strings.Split(idss, "\n") } else { ids = gconv.SliceStr(idStr) } var len = len(ids) if len == 0 { return -1 } var i = random.RandInt(1, len) return int64(gconv.Int(ids[i-1])) } func (self *DataFake) QueryPapers(size int) *pagemodel.PageResult[*dbentity.WfaExamPapers] { var dao = dbdao.FindBeanWfaExamPapersDao() dao.PageSize = size return dao.QueryModel() } func getItemType() []int64 { var ret = dbfacade.FindBeanDbFacade().QueryDict(dbentity.DictTypeQuestionType) return lo.Map(ret.Data, func(item *dbentity.WfaDict, _ int) int64 { return item.Id }) } func getLevels() []int64 { var ret = dbfacade.FindBeanDbFacade().QueryDict(dbentity.DictTypeExamLevel) return lo.Map(ret.Data, func(item *dbentity.WfaDict, _ int) int64 { return item.Id }) } func (self *DataFake) MakeFakeSentences(total int) *basedto.IchubResult { var papers = self.QueryPapers(total) var sentenceDao = dbdao.FindBeanWfaSentenceDao() for range total { var wfaSentence = dbentity.FindBeanWfaSentence() var y = self.MakeEntityMockY(wfaSentence) wfaSentence.Year = y var i = random.RandInt(1, len(papers.Data)) wfaSentence.PaperId = papers.Data[i-1].Id wfaSentence.PaperName = papers.Data[i-1].PaperName wfaSentence.ExamLevel = papers.Data[i-1].ExamLevel wfaSentence.QuestionType = self.GetIdRandom(itemType) wfaSentence.CreatedAt = time.Now() wfaSentence.UpdatedAt = time.Now() wfaSentence.Id = 0 wfaSentence.DeletedAt = nil wfaSentence.Sentence = gofakeit.Word() + " " + gofakeit.Word() + " " + gofakeit.Word() if ret := sentenceDao.Save2Result(wfaSentence); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() } func (self *DataFake) QuerySentences(size int) *pagemodel.PageResult[*dbentity.WfaSentence] { var dao = dbdao.FindBeanWfaSentenceDao() dao.PageSize = size return dao.QueryModel() } func (self *DataFake) MakeFakeTokens(total int) *basedto.IchubResult { var papers = self.QuerySentences(total) var pids = lo.Map(papers.Data, func(item *dbentity.WfaSentence, _ int) string { return gconv.String(item.Id) }) var tokenDao = dbdao.FindBeanWfaTokenDao() for range total { var wfaToken = dbentity.FindBeanWfaToken() self.MakeEntityMockY(wfaToken) wfaToken.CreatedAt = time.Now() wfaToken.UpdatedAt = time.Now() wfaToken.Id = 0 wfaToken.DeletedAt = nil wfaToken.SentenceId = self.GetIdRandom(pids) wfaToken.Pos = int32(self.Fake(gconv.SliceInt(pos))) wfaToken.Position = int32(self.Fake(gconv.SliceInt(position))) if ret := tokenDao.Save2Result(wfaToken); ret.IsFailed() { golog.Error(ret) return ret } } return basedto.ResultOk() }package dbfacade import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" ) type DbFacade struct { basedto.BaseEntitySingle WfaDictDao *dbdao.WfaDictDao } func NewDbFacade() *DbFacade { return &DbFacade{} } func (self *DbFacade) Init() { self.WfaDictDao = dbdao.FindBeanWfaDictDao() } func (self *DbFacade) AutoInit() bool { return true } func (self *DbFacade) QueryDict(dictType int32) *pagemodel.PageResult[*dbentity.WfaDict] { var dao = self.WfaDictDao.NewDao() dao.DbEq("dict_type", dictType) var ret = dao.QueryModelAll() return ret }package dbfacade import ( "gowfa/domain/db/dbdao" "gowfa/domain/db/dbentity" "gitee.com/gowebframe3/webframe.git/goconfig/base/basedto" "gitee.com/gowebframe3/webframe.git/goweb/pagemodel" ) type DbFacade struct { basedto.BaseEntitySingle WfaDictDao *dbdao.WfaDictDao } func NewDbFacade() *DbFacade { return &DbFacade{} } func (self *DbFacade) Init() { self.WfaDictDao = dbdao.FindBeanWfaDictDao() } func (self *DbFacade) AutoInit() bool { return true } func (self *DbFacade) QueryDict(dictType int32) *pagemodel.PageResult[*dbentity.WfaDict] { var dao = self.WfaDictDao.NewDao() dao.DbEq("dict_type", dictType) var ret = dao.QueryModelAll() return ret }