diff --git a/api/controller/share.go b/api/controller/share.go index 89eba32..2af5c4c 100644 --- a/api/controller/share.go +++ b/api/controller/share.go @@ -59,7 +59,13 @@ func (r *Share) GetShare(c *gin.Context) { return } - g := &dto.ShareDto{} + //g := dto.ShareDto{} + + g := dto.ShareDto{ + QuestionQa: &dto.QuestionQaDto{}, + Question: []*dto.QuestionDto{}, + BaseTokenItem: []*dto.BaseTokenItemDto{}, + } // 加载题库数据 g.QuestionQa = dto.GetQuestionQaDto(questionQa) @@ -68,17 +74,32 @@ func (r *Share) GetShare(c *gin.Context) { maps = make(map[string]interface{}) maps["qa_id"] = questionQa.QaId maps["is_must_select"] = 1 - questionQaItems, err := questionQaItemDao.GetQuestionQaItemrPreloadList(maps) + questionQaItems, err := questionQaItemDao.GetQuestionQaItemPreloadList(maps) if err == nil && len(questionQaItems) > 0 { - for i, item := range questionQaItems { + for _, item := range questionQaItems { + questionOptionDao := dao.QuestionOptionDao{} + maps = make(map[string]interface{}) + maps["question_id"] = item.QuestionId + questionOption, err := questionOptionDao.GetQuestionOptionList(maps) + if err != nil { + responses.FailWithMessage("内部错误", c) + return + } + // 处理返回值 questionDto := dto.GetShareQuestionDto(item.Question) // 加载选项 - questionDto.LoadQuestionOption(item.Question.QuestionOption) + questionDto.LoadQuestionOption(questionOption) + + // 加载图片 + questionDto.LoadQuestionImage(item.Question.QuestionImage) + + // 加载答案 + questionDto.LoadQuestionAnswer(item.Question.QuestionAnswer) // 将转换后的结构体添加到新切片中 - g.Question[i] = questionDto + g.Question = append(g.Question, questionDto) } } @@ -92,11 +113,26 @@ func (r *Share) GetShare(c *gin.Context) { questionQaItems, err = questionQaItemDao.GetQuestionQaItemWhereListRand(maps, remainingQuantity) if err == nil && len(questionQaItems) > 0 { for _, item := range questionQaItems { + questionOptionDao := dao.QuestionOptionDao{} + maps = make(map[string]interface{}) + maps["question_id"] = item.QuestionId + questionOption, err := questionOptionDao.GetQuestionOptionList(maps) + if err != nil { + responses.FailWithMessage("内部错误", c) + return + } + // 处理返回值 questionDto := dto.GetShareQuestionDto(item.Question) // 加载选项 - questionDto.LoadQuestionOption(item.Question.QuestionOption) + questionDto.LoadQuestionOption(questionOption) + + // 加载图片 + questionDto.LoadQuestionImage(item.Question.QuestionImage) + + // 加载答案 + questionDto.LoadQuestionAnswer(item.Question.QuestionAnswer) // 将转换后的结构体添加到新切片中 g.Question = append(g.Question, questionDto) diff --git a/api/dao/QuestionQaItem.go b/api/dao/QuestionQaItem.go index cc84daa..6f12970 100644 --- a/api/dao/QuestionQaItem.go +++ b/api/dao/QuestionQaItem.go @@ -82,8 +82,8 @@ func (r *QuestionQaItemDao) GetQuestionQaItemList(maps interface{}) (m []*model. return m, nil } -// GetQuestionQaItemrPreloadList 获取列表-加载全部关联 -func (r *QuestionQaItemDao) GetQuestionQaItemrPreloadList(maps interface{}) (m []*model.QuestionQaItem, err error) { +// GetQuestionQaItemPreloadList 获取列表-加载全部关联 +func (r *QuestionQaItemDao) GetQuestionQaItemPreloadList(maps interface{}) (m []*model.QuestionQaItem, err error) { err = global.Db.Preload(clause.Associations).Where(maps).Find(&m).Error if err != nil { return nil, err diff --git a/api/dto/Question.go b/api/dto/Question.go index 2ae36b3..c7c1322 100644 --- a/api/dto/Question.go +++ b/api/dto/Question.go @@ -16,7 +16,7 @@ type QuestionDto struct { IsDelete int `json:"is_delete"` // 是否删除(0:否 1:是) QuestionSource int `json:"question_source"` // 题目来源(1:本题库 2:外部数据) QuestionImage []string `json:"question_image"` // 题目图片(逗号分隔) - QuestionAnswer string `json:"question_answer"` // 答案 + QuestionAnswer []string `json:"question_answer"` // 答案 QuestionAnalysis string `json:"question_analysis"` // 解析 Difficulty int `json:"difficulty"` // 难度(0:未知 1:低 2:中 3:高) FirstLabelId string `json:"first_label_id"` // 一级标签id @@ -30,17 +30,6 @@ type QuestionDto struct { // GetQuestionDto 题目详情 func GetQuestionDto(m *model.Question) *QuestionDto { - var questionImage []string - if m.QuestionImage != "" { - result := strings.Split(m.QuestionImage, ",") - if len(result) > 0 { - for _, v := range result { - v = utils.AddOssDomain(v) - questionImage = append(questionImage, v) - } - } - } - return &QuestionDto{ QuestionId: fmt.Sprintf("%d", m.QuestionId), QuestionName: m.QuestionName, @@ -48,8 +37,8 @@ func GetQuestionDto(m *model.Question) *QuestionDto { QuestionStatus: m.QuestionStatus, IsDelete: m.IsDelete, QuestionSource: m.QuestionSource, - QuestionImage: questionImage, - QuestionAnswer: m.QuestionAnswer, + QuestionImage: []string{}, + QuestionAnswer: []string{}, QuestionAnalysis: m.QuestionAnalysis, Difficulty: m.Difficulty, FirstLabelId: fmt.Sprintf("%d", *m.FirstLabelId), @@ -66,17 +55,6 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto { if len(m) > 0 { for i, v := range m { - var questionImage []string - if v.QuestionImage != "" { - result := strings.Split(v.QuestionImage, ",") - if len(result) > 0 { - for _, v := range result { - v = utils.AddOssDomain(v) - questionImage = append(questionImage, v) - } - } - } - response := &QuestionDto{ QuestionId: fmt.Sprintf("%d", v.QuestionId), QuestionName: v.QuestionName, @@ -84,8 +62,8 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto { QuestionStatus: v.QuestionStatus, IsDelete: v.IsDelete, QuestionSource: v.QuestionSource, - QuestionImage: questionImage, - QuestionAnswer: v.QuestionAnswer, + QuestionImage: []string{}, + QuestionAnswer: []string{}, QuestionAnalysis: v.QuestionAnalysis, Difficulty: v.Difficulty, FirstLabelId: fmt.Sprintf("%d", *v.FirstLabelId), @@ -104,6 +82,16 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto { response = response.LoadSecondLabel(v.SecondLabel) } + // 加载图片 + if v.QuestionImage != "" { + response = response.LoadQuestionImage(v.QuestionImage) + } + + // 加载答案 + if v.QuestionAnswer != "" { + response = response.LoadQuestionAnswer(v.QuestionAnswer) + } + // 将转换后的结构体添加到新切片中 responses[i] = response } @@ -114,23 +102,13 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto { // GetShareQuestionDto 题目详情-分享 func GetShareQuestionDto(m *model.Question) *QuestionDto { - var questionImage []string - if m.QuestionImage != "" { - result := strings.Split(m.QuestionImage, ",") - if len(result) > 0 { - for _, v := range result { - v = utils.AddOssDomain(v) - questionImage = append(questionImage, v) - } - } - } - return &QuestionDto{ QuestionId: fmt.Sprintf("%d", m.QuestionId), QuestionName: m.QuestionName, QuestionType: m.QuestionType, QuestionSource: m.QuestionSource, - QuestionImage: questionImage, + QuestionImage: []string{}, + QuestionAnswer: []string{}, QuestionAnalysis: m.QuestionAnalysis, Difficulty: m.Difficulty, CreatedAt: m.CreatedAt, @@ -161,3 +139,30 @@ func (r *QuestionDto) LoadQuestionOption(m []*model.QuestionOption) *QuestionDto } return r } + +// LoadQuestionImage 加载图片 +func (r *QuestionDto) LoadQuestionImage(s string) *QuestionDto { + if s != "" { + result := strings.Split(s, ",") + if len(result) > 0 { + for _, v := range result { + v = utils.AddOssDomain(v) + r.QuestionImage = append(r.QuestionImage, v) + } + } + } + return r +} + +// LoadQuestionAnswer 加载答案 +func (r *QuestionDto) LoadQuestionAnswer(s string) *QuestionDto { + if s != "" { + result := strings.Split(s, ",") + if len(result) > 0 { + for _, v := range result { + r.QuestionAnswer = append(r.QuestionAnswer, v) + } + } + } + return r +} diff --git a/api/dto/QuestionQaItem.go b/api/dto/QuestionQaItem.go index c8356df..c51d89d 100644 --- a/api/dto/QuestionQaItem.go +++ b/api/dto/QuestionQaItem.go @@ -89,6 +89,12 @@ func (r *QuestionQaItemDto) LoadSecondLabel(m *model.Label) *QuestionQaItemDto { func (r *QuestionQaItemDto) LoadQuestion(m *model.Question) *QuestionQaItemDto { if m != nil { r.Question = GetQuestionDto(m) + + // 加载图片 + r.Question = r.Question.LoadQuestionImage(m.QuestionImage) + + // 加载答案 + r.Question = r.Question.LoadQuestionAnswer(m.QuestionAnswer) } return r } diff --git a/api/requests/Question.go b/api/requests/Question.go index e5d9d68..528380e 100644 --- a/api/requests/Question.go +++ b/api/requests/Question.go @@ -38,7 +38,7 @@ type AddQuestion struct { QuestionType int `json:"question_type" form:"question_type" validate:"required,oneof=1 2 3 4" label:"题目类型"` // 题目类型(1:单选 2:多选 3:问答 4:判断) QuestionStatus int `json:"question_status" form:"question_status" validate:"required,oneof=1 2" label:"状态"` // 状态(1:正常 2:禁用) QuestionSource int `json:"question_source" form:"question_source" validate:"required,oneof=1 2" label:"题目来源"` // 题目来源(1:本题库 2:外部数据) - QuestionAnswer string `json:"question_answer" form:"question_answer" validate:"required" label:"答案"` + QuestionAnswer []string `json:"question_answer" form:"question_answer" validate:"required" label:"答案"` QuestionAnalysis string `json:"question_analysis" form:"question_analysis" label:"解析"` Difficulty int `json:"difficulty" form:"difficulty" validate:"required,oneof=1 2 3" label:"难度"` FirstLabelId string `json:"first_label_id" form:"first_label_id" validate:"required" label:"一级标签id"` @@ -72,7 +72,7 @@ type PutQuestion struct { QuestionName string `json:"question_name" form:"question_name" validate:"required" label:"题目名称"` QuestionType int `json:"question_type" form:"question_type" validate:"required,oneof=1 2 3 4" label:"题目类型"` // 题目类型(1:单选 2:多选 3:问答 4:判断) QuestionStatus int `json:"question_status" form:"question_status" validate:"required,oneof=1 2" label:"状态"` // 状态(1:正常 2:禁用) - QuestionAnswer string `json:"question_answer" form:"question_answer" validate:"required" label:"答案"` + QuestionAnswer []string `json:"question_answer" form:"question_answer" validate:"required" label:"答案"` QuestionAnalysis string `json:"question_analysis" form:"question_analysis" label:"解析"` Difficulty int `json:"difficulty" form:"difficulty" validate:"required,oneof=1 2 3" label:"难度"` FirstLabelId string `json:"first_label_id" form:"first_label_id" validate:"required" label:"一级标签id"` diff --git a/api/responses/responses.go b/api/responses/responses.go index a5a7c56..5be6f4d 100644 --- a/api/responses/responses.go +++ b/api/responses/responses.go @@ -13,9 +13,9 @@ type res struct { } func result(code int, data interface{}, msg string, c *gin.Context) { - if data == nil { - data = gin.H{} - } + //if data == nil { + // data = gin.H{} + //} c.JSON(http.StatusOK, res{ code, data, diff --git a/api/service/Question.go b/api/service/Question.go index 2449f24..bade4aa 100644 --- a/api/service/Question.go +++ b/api/service/Question.go @@ -56,6 +56,17 @@ func (r *QuestionService) AddQuestion(req requests.AddQuestion) (bool, error) { questionImage = strings.Join(result, ",") } + // 处理答案 + var questionAnswer string + if len(req.QuestionAnswer) > 0 { + result := make([]string, len(req.QuestionAnswer)) + for i, url := range req.QuestionAnswer { + result[i] = url + } + + questionAnswer = strings.Join(result, ",") + } + // 判断选项 if req.QuestionType == 1 || req.QuestionType == 2 { if len(req.QuestionOption) == 0 { @@ -88,7 +99,7 @@ func (r *QuestionService) AddQuestion(req requests.AddQuestion) (bool, error) { QuestionStatus: req.QuestionStatus, QuestionSource: req.QuestionSource, QuestionImage: questionImage, - QuestionAnswer: req.QuestionAnswer, + QuestionAnswer: questionAnswer, QuestionAnalysis: req.QuestionAnalysis, Difficulty: req.Difficulty, FirstLabelId: &firstLabelId, @@ -365,11 +376,6 @@ func (r *QuestionService) PutQuestion(questionId int64, req requests.PutQuestion questionData["question_status"] = req.QuestionStatus } - // 答案 - if req.QuestionAnswer != question.QuestionAnswer { - questionData["question_answer"] = req.QuestionAnswer - } - // 解析 if req.QuestionAnalysis != question.QuestionAnalysis { questionData["question_analysis"] = req.QuestionAnalysis @@ -432,6 +438,16 @@ func (r *QuestionService) PutQuestion(questionId int64, req requests.PutQuestion questionData["question_image"] = strings.Join(result, ",") } + // 答案 + if len(req.QuestionAnswer) > 0 { + result := make([]string, len(req.QuestionAnswer)) + for i, v := range req.QuestionAnswer { + result[i] = v + } + + questionData["question_answer"] = strings.Join(result, ",") + } + // 验证重复 if req.QuestionName != question.QuestionName { maps := make(map[string]interface{}) @@ -799,5 +815,11 @@ func (r *QuestionService) GetQuestion(questionId int64) (g *dto.QuestionDto, err // 加载选项 g.LoadQuestionOption(question.QuestionOption) + // 加载图片 + g.LoadQuestionImage(question.QuestionImage) + + // 加载答案 + g.LoadQuestionAnswer(question.QuestionAnswer) + return g, nil }