diff --git a/api/dao/Question.go b/api/dao/Question.go index 3e77c08..05917cc 100644 --- a/api/dao/Question.go +++ b/api/dao/Question.go @@ -253,13 +253,13 @@ func (r *QuestionDao) GetQuestionCountSearch(req requests.GetQuestionCount) (tot } // GetQuestionNotInListRand 获取列表-随机-排除 -func (r *QuestionDao) GetQuestionNotInListRand(maps interface{}, notQuestionId []int64, limit int) (m []*model.Question, err error) { +func (r *QuestionDao) GetQuestionNotInListRand(maps interface{}, notQuestionIds []int64, limit int) (m []*model.Question, err error) { query := global.Db.Model(&model.Question{}) query = query.Where(maps) // 排除选项 - if len(notQuestionId) > 0 { - query = query.Where("question_id not in (?)", notQuestionId) + if len(notQuestionIds) > 0 { + query = query.Where("question_id not in (?)", notQuestionIds) } query = query.Limit(limit).Order("rand()") diff --git a/api/dao/QuestionQaItem.go b/api/dao/QuestionQaItem.go index 1877aa5..f2f894b 100644 --- a/api/dao/QuestionQaItem.go +++ b/api/dao/QuestionQaItem.go @@ -347,3 +347,23 @@ func (r *QuestionQaItemDao) GetQuestionQaItemListByQuestionIdDistinctQaId(questi //query = query.Where("EXISTS (?)", subQuery) // //query = query.Limit(limit).Order("rand()") + +// GetAllNormalQuestionQaItemWhereList 获取正常题库的明细列表 +func (r *QuestionQaItemDao) GetAllNormalQuestionQaItemWhereList(maps interface{}) (m []*model.QuestionQaItem, err error) { + query := global.Db.Model(&model.QuestionQaItem{}) + query = query.Where(maps) + + query = query.Preload("QuestionQa") + + subQuery := global.Db.Model(&model.QuestionQa{}). + Where("qa_status = ?", 1). + Select("qa_id") + + query = query.Where("qa_id IN (?)", subQuery) + + err = query.Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/requests/QuestionQa.go b/api/requests/QuestionQa.go index 4d83ee6..5cd63e6 100644 --- a/api/requests/QuestionQa.go +++ b/api/requests/QuestionQa.go @@ -46,9 +46,10 @@ type AddQuestionQa struct { QaPassword string `json:"qa_password" form:"qa_password" label:"分享密码" validate:"required"` Image string `json:"image" form:"image" label:"背景图" validate:"required"` QuestionQaItem []*QuestionQaItem `json:"question_qa_item" form:"question_qa_item" label:"题目明细" validate:"required"` - BaseTokenItem []AddQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" label:"飞花令明细"` // 展示类型为飞花令时存在 - TokenQuestionContent []TokenQuestionContent `json:"token_question_content" form:"token_question_content" label:"飞花令题目数量规则"` // -json(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量) - QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` // + BaseTokenItem []AddQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" label:"飞花令明细"` // 展示类型为飞花令时存在 + TokenQuestionContent []TokenQuestionContent `json:"token_question_content" form:"token_question_content" label:"飞花令题目数量规则"` // -json(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量) + QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` // + IsRepeat int `json:"is_repeat" form:"is_repeat" label:"是否允许重复" validate:"omitempty,oneof=0 1"` // 是否允许重复(0:否 1:是) } // QuestionQaItem 新增问答题库-题目明细 @@ -92,10 +93,11 @@ type PutQuestionQa struct { QaPassword string `json:"qa_password" form:"qa_password" label:"分享密码" validate:"required"` Image string `json:"image" form:"image" label:"背景图" validate:"required"` QuestionQaItem []*QuestionQaItem `json:"question_qa_item" form:"question_qa_item" label:"题目明细" validate:"required"` - Action int `json:"action" form:"action" label:"动作" validate:"required,oneof=1 2"` // 1:正常修改 2:重新生成题库 - BaseTokenItem []PutQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" label:"飞花令明细"` // 展示类型为飞花令时存在 - TokenQuestionContent []TokenQuestionContent `json:"token_question_content" form:"token_question_content" label:"飞花令题目数量规则"` // -json(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量) - QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` // + Action int `json:"action" form:"action" label:"动作" validate:"required,oneof=1 2"` // 1:正常修改 2:重新生成题库 + BaseTokenItem []PutQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" label:"飞花令明细"` // 展示类型为飞花令时存在 + TokenQuestionContent []TokenQuestionContent `json:"token_question_content" form:"token_question_content" label:"飞花令题目数量规则"` // -json(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量) + QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` // + IsRepeat int `json:"is_repeat" form:"is_repeat" label:"是否允许重复" validate:"omitempty,oneof=0 1"` // 是否允许重复(0:否 1:是) } // PutQuestionQaBaseTokenItem 修改问答题库-飞花令明细 diff --git a/api/service/QuestionQa.go b/api/service/QuestionQa.go index bccacf0..2fbe407 100644 --- a/api/service/QuestionQa.go +++ b/api/service/QuestionQa.go @@ -212,9 +212,22 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err return false, errors.New("新增失败") } - // 新增问答题库题目列表 questionDao := dao.QuestionDao{} questionQaItemDao := dao.QuestionQaItemDao{} + + var notQuestionIds []int64 // 处理需排除的题目id + if req.IsRepeat == 1 { + // 获取正常题库的明细列表 + maps := make(map[string]interface{}) + questionQaItems, _ := questionQaItemDao.GetAllNormalQuestionQaItemWhereList(maps) + if len(questionQaItems) > 0 { + for _, item := range questionQaItems { + notQuestionIds = append(notQuestionIds, item.QuestionId) + } + } + } + + // 新增问答题库题目列表 for _, item := range req.QuestionQaItem { // 验证数量 maps := make(map[string]interface{}) @@ -231,7 +244,7 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err } // 获取随机明细题目 - questions, err := questionDao.GetQuestionListRand(maps, item.Quantity) + questions, err := questionDao.GetQuestionNotInListRand(maps, notQuestionIds, item.Quantity) if err != nil { tx.Rollback() return false, err @@ -404,6 +417,18 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa return false, err } + var notQuestionIds []int64 // 处理需排除的题目id + if req.IsRepeat == 1 { + // 获取正常题库的明细列表 + maps := make(map[string]interface{}) + questionQaItems, _ := questionQaItemDao.GetAllNormalQuestionQaItemWhereList(maps) + if len(questionQaItems) > 0 { + for _, item := range questionQaItems { + notQuestionIds = append(notQuestionIds, item.QuestionId) + } + } + } + for _, item := range req.QuestionQaItem { // 验证数量 maps := make(map[string]interface{}) @@ -420,7 +445,8 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa } // 获取随机明细题目 - questions, err := questionDao.GetQuestionListRand(maps, item.Quantity) + //questions, err := questionDao.GetQuestionListRand(maps, item.Quantity) + questions, err := questionDao.GetQuestionNotInListRand(maps, notQuestionIds, item.Quantity) if err != nil { tx.Rollback() return false, err