处理分享2

This commit is contained in:
wucongxing8150 2024-09-29 14:52:42 +08:00
parent 077b94ff99
commit 6431aa890b
7 changed files with 127 additions and 58 deletions

View File

@ -59,7 +59,13 @@ func (r *Share) GetShare(c *gin.Context) {
return return
} }
g := &dto.ShareDto{} //g := dto.ShareDto{}
g := dto.ShareDto{
QuestionQa: &dto.QuestionQaDto{},
Question: []*dto.QuestionDto{},
BaseTokenItem: []*dto.BaseTokenItemDto{},
}
// 加载题库数据 // 加载题库数据
g.QuestionQa = dto.GetQuestionQaDto(questionQa) g.QuestionQa = dto.GetQuestionQaDto(questionQa)
@ -68,17 +74,32 @@ func (r *Share) GetShare(c *gin.Context) {
maps = make(map[string]interface{}) maps = make(map[string]interface{})
maps["qa_id"] = questionQa.QaId maps["qa_id"] = questionQa.QaId
maps["is_must_select"] = 1 maps["is_must_select"] = 1
questionQaItems, err := questionQaItemDao.GetQuestionQaItemrPreloadList(maps) questionQaItems, err := questionQaItemDao.GetQuestionQaItemPreloadList(maps)
if err == nil && len(questionQaItems) > 0 { 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 := 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) questionQaItems, err = questionQaItemDao.GetQuestionQaItemWhereListRand(maps, remainingQuantity)
if err == nil && len(questionQaItems) > 0 { if err == nil && len(questionQaItems) > 0 {
for _, 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 := 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) g.Question = append(g.Question, questionDto)

View File

@ -82,8 +82,8 @@ func (r *QuestionQaItemDao) GetQuestionQaItemList(maps interface{}) (m []*model.
return m, nil return m, nil
} }
// GetQuestionQaItemrPreloadList 获取列表-加载全部关联 // GetQuestionQaItemPreloadList 获取列表-加载全部关联
func (r *QuestionQaItemDao) GetQuestionQaItemrPreloadList(maps interface{}) (m []*model.QuestionQaItem, err error) { func (r *QuestionQaItemDao) GetQuestionQaItemPreloadList(maps interface{}) (m []*model.QuestionQaItem, err error) {
err = global.Db.Preload(clause.Associations).Where(maps).Find(&m).Error err = global.Db.Preload(clause.Associations).Where(maps).Find(&m).Error
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -16,7 +16,7 @@ type QuestionDto struct {
IsDelete int `json:"is_delete"` // 是否删除0:否 1:是) IsDelete int `json:"is_delete"` // 是否删除0:否 1:是)
QuestionSource int `json:"question_source"` // 题目来源1:本题库 2:外部数据) QuestionSource int `json:"question_source"` // 题目来源1:本题库 2:外部数据)
QuestionImage []string `json:"question_image"` // 题目图片(逗号分隔) QuestionImage []string `json:"question_image"` // 题目图片(逗号分隔)
QuestionAnswer string `json:"question_answer"` // 答案 QuestionAnswer []string `json:"question_answer"` // 答案
QuestionAnalysis string `json:"question_analysis"` // 解析 QuestionAnalysis string `json:"question_analysis"` // 解析
Difficulty int `json:"difficulty"` // 难度0:未知 1:低 2:中 3:高) Difficulty int `json:"difficulty"` // 难度0:未知 1:低 2:中 3:高)
FirstLabelId string `json:"first_label_id"` // 一级标签id FirstLabelId string `json:"first_label_id"` // 一级标签id
@ -30,17 +30,6 @@ type QuestionDto struct {
// GetQuestionDto 题目详情 // GetQuestionDto 题目详情
func GetQuestionDto(m *model.Question) *QuestionDto { 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{ return &QuestionDto{
QuestionId: fmt.Sprintf("%d", m.QuestionId), QuestionId: fmt.Sprintf("%d", m.QuestionId),
QuestionName: m.QuestionName, QuestionName: m.QuestionName,
@ -48,8 +37,8 @@ func GetQuestionDto(m *model.Question) *QuestionDto {
QuestionStatus: m.QuestionStatus, QuestionStatus: m.QuestionStatus,
IsDelete: m.IsDelete, IsDelete: m.IsDelete,
QuestionSource: m.QuestionSource, QuestionSource: m.QuestionSource,
QuestionImage: questionImage, QuestionImage: []string{},
QuestionAnswer: m.QuestionAnswer, QuestionAnswer: []string{},
QuestionAnalysis: m.QuestionAnalysis, QuestionAnalysis: m.QuestionAnalysis,
Difficulty: m.Difficulty, Difficulty: m.Difficulty,
FirstLabelId: fmt.Sprintf("%d", *m.FirstLabelId), FirstLabelId: fmt.Sprintf("%d", *m.FirstLabelId),
@ -66,17 +55,6 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto {
if len(m) > 0 { if len(m) > 0 {
for i, v := range m { 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{ response := &QuestionDto{
QuestionId: fmt.Sprintf("%d", v.QuestionId), QuestionId: fmt.Sprintf("%d", v.QuestionId),
QuestionName: v.QuestionName, QuestionName: v.QuestionName,
@ -84,8 +62,8 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto {
QuestionStatus: v.QuestionStatus, QuestionStatus: v.QuestionStatus,
IsDelete: v.IsDelete, IsDelete: v.IsDelete,
QuestionSource: v.QuestionSource, QuestionSource: v.QuestionSource,
QuestionImage: questionImage, QuestionImage: []string{},
QuestionAnswer: v.QuestionAnswer, QuestionAnswer: []string{},
QuestionAnalysis: v.QuestionAnalysis, QuestionAnalysis: v.QuestionAnalysis,
Difficulty: v.Difficulty, Difficulty: v.Difficulty,
FirstLabelId: fmt.Sprintf("%d", *v.FirstLabelId), FirstLabelId: fmt.Sprintf("%d", *v.FirstLabelId),
@ -104,6 +82,16 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto {
response = response.LoadSecondLabel(v.SecondLabel) response = response.LoadSecondLabel(v.SecondLabel)
} }
// 加载图片
if v.QuestionImage != "" {
response = response.LoadQuestionImage(v.QuestionImage)
}
// 加载答案
if v.QuestionAnswer != "" {
response = response.LoadQuestionAnswer(v.QuestionAnswer)
}
// 将转换后的结构体添加到新切片中 // 将转换后的结构体添加到新切片中
responses[i] = response responses[i] = response
} }
@ -114,23 +102,13 @@ func GetQuestionListDto(m []*model.Question) []*QuestionDto {
// GetShareQuestionDto 题目详情-分享 // GetShareQuestionDto 题目详情-分享
func GetShareQuestionDto(m *model.Question) *QuestionDto { 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{ return &QuestionDto{
QuestionId: fmt.Sprintf("%d", m.QuestionId), QuestionId: fmt.Sprintf("%d", m.QuestionId),
QuestionName: m.QuestionName, QuestionName: m.QuestionName,
QuestionType: m.QuestionType, QuestionType: m.QuestionType,
QuestionSource: m.QuestionSource, QuestionSource: m.QuestionSource,
QuestionImage: questionImage, QuestionImage: []string{},
QuestionAnswer: []string{},
QuestionAnalysis: m.QuestionAnalysis, QuestionAnalysis: m.QuestionAnalysis,
Difficulty: m.Difficulty, Difficulty: m.Difficulty,
CreatedAt: m.CreatedAt, CreatedAt: m.CreatedAt,
@ -161,3 +139,30 @@ func (r *QuestionDto) LoadQuestionOption(m []*model.QuestionOption) *QuestionDto
} }
return r 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
}

View File

@ -89,6 +89,12 @@ func (r *QuestionQaItemDto) LoadSecondLabel(m *model.Label) *QuestionQaItemDto {
func (r *QuestionQaItemDto) LoadQuestion(m *model.Question) *QuestionQaItemDto { func (r *QuestionQaItemDto) LoadQuestion(m *model.Question) *QuestionQaItemDto {
if m != nil { if m != nil {
r.Question = GetQuestionDto(m) r.Question = GetQuestionDto(m)
// 加载图片
r.Question = r.Question.LoadQuestionImage(m.QuestionImage)
// 加载答案
r.Question = r.Question.LoadQuestionAnswer(m.QuestionAnswer)
} }
return r return r
} }

View File

@ -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:判断) 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:禁用) 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:外部数据) 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:"解析"` QuestionAnalysis string `json:"question_analysis" form:"question_analysis" label:"解析"`
Difficulty int `json:"difficulty" form:"difficulty" validate:"required,oneof=1 2 3" 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"` 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:"题目名称"` 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:判断) 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:禁用) 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:"解析"` QuestionAnalysis string `json:"question_analysis" form:"question_analysis" label:"解析"`
Difficulty int `json:"difficulty" form:"difficulty" validate:"required,oneof=1 2 3" 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"` FirstLabelId string `json:"first_label_id" form:"first_label_id" validate:"required" label:"一级标签id"`

View File

@ -13,9 +13,9 @@ type res struct {
} }
func result(code int, data interface{}, msg string, c *gin.Context) { func result(code int, data interface{}, msg string, c *gin.Context) {
if data == nil { //if data == nil {
data = gin.H{} // data = gin.H{}
} //}
c.JSON(http.StatusOK, res{ c.JSON(http.StatusOK, res{
code, code,
data, data,

View File

@ -56,6 +56,17 @@ func (r *QuestionService) AddQuestion(req requests.AddQuestion) (bool, error) {
questionImage = strings.Join(result, ",") 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 req.QuestionType == 1 || req.QuestionType == 2 {
if len(req.QuestionOption) == 0 { if len(req.QuestionOption) == 0 {
@ -88,7 +99,7 @@ func (r *QuestionService) AddQuestion(req requests.AddQuestion) (bool, error) {
QuestionStatus: req.QuestionStatus, QuestionStatus: req.QuestionStatus,
QuestionSource: req.QuestionSource, QuestionSource: req.QuestionSource,
QuestionImage: questionImage, QuestionImage: questionImage,
QuestionAnswer: req.QuestionAnswer, QuestionAnswer: questionAnswer,
QuestionAnalysis: req.QuestionAnalysis, QuestionAnalysis: req.QuestionAnalysis,
Difficulty: req.Difficulty, Difficulty: req.Difficulty,
FirstLabelId: &firstLabelId, FirstLabelId: &firstLabelId,
@ -365,11 +376,6 @@ func (r *QuestionService) PutQuestion(questionId int64, req requests.PutQuestion
questionData["question_status"] = req.QuestionStatus questionData["question_status"] = req.QuestionStatus
} }
// 答案
if req.QuestionAnswer != question.QuestionAnswer {
questionData["question_answer"] = req.QuestionAnswer
}
// 解析 // 解析
if req.QuestionAnalysis != question.QuestionAnalysis { if req.QuestionAnalysis != question.QuestionAnalysis {
questionData["question_analysis"] = req.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, ",") 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 { if req.QuestionName != question.QuestionName {
maps := make(map[string]interface{}) maps := make(map[string]interface{})
@ -799,5 +815,11 @@ func (r *QuestionService) GetQuestion(questionId int64) (g *dto.QuestionDto, err
// 加载选项 // 加载选项
g.LoadQuestionOption(question.QuestionOption) g.LoadQuestionOption(question.QuestionOption)
// 加载图片
g.LoadQuestionImage(question.QuestionImage)
// 加载答案
g.LoadQuestionAnswer(question.QuestionAnswer)
return g, nil return g, nil
} }