diff --git a/api/controller/questionQa.go b/api/controller/questionQa.go index fab07c8..c08a63f 100644 --- a/api/controller/questionQa.go +++ b/api/controller/questionQa.go @@ -10,6 +10,7 @@ import ( "knowledge/global" "knowledge/utils" "strconv" + "strings" ) type QuestionQa struct{} @@ -88,6 +89,10 @@ func (r *QuestionQa) GetQuestionQaList(c *gin.Context) { return } + for _, qaDto := range g { + qaDto.QaRuleContent = "" + } + responses.OkWithData(g, c) } @@ -414,6 +419,18 @@ func (r *QuestionQa) GetQuestionQa(c *gin.Context) { g = g.LoadQuestionQaToken(questionQaTokens) } + // 获取禁止重复id合集数据 + if questionQa.RepeatQaId != "" { + repeatQaId := strings.Split(questionQa.RepeatQaId, ",") + repeatQa, err := questionQaDao.GetQuestionQaInQaIdList(repeatQaId) + if err != nil { + responses.FailWithMessage("题库不存在", c) + return + } + + g = g.LoadRepeatQaId(repeatQa) + } + if questionQa.QaType == 2 { // 加载飞花令数量(当题库类型为2、3时存在) g = g.LoadTokenNum(questionQa.TokenNum) diff --git a/api/dao/QuestionQa.go b/api/dao/QuestionQa.go index d2c5a91..7eb2687 100644 --- a/api/dao/QuestionQa.go +++ b/api/dao/QuestionQa.go @@ -66,6 +66,15 @@ func (r *QuestionQaDao) GetQuestionQaList(maps interface{}) (m []*model.Question return m, nil } +// GetQuestionQaInQaIdList 获取列表-in主键id +func (r *QuestionQaDao) GetQuestionQaInQaIdList(qaIds []string) (m []*model.QuestionQa, err error) { + err = global.Db.Where("qa_id in ?", qaIds).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + // AddQuestionQa 新增 func (r *QuestionQaDao) AddQuestionQa(tx *gorm.DB, model *model.QuestionQa) (*model.QuestionQa, error) { if err := tx.Create(model).Error; err != nil { @@ -214,7 +223,7 @@ func (r *QuestionQaDao) GetQuestionQaPageSearch(req requests.GetQuestionQaPage, // GetQuestionQaListSearch 获取列表 func (r *QuestionQaDao) GetQuestionQaListSearch(req requests.GetQuestionQaList) (m []*model.QuestionQa, err error) { // 构建查询条件 - query := global.Db.Model(&model.Label{}) + query := global.Db.Model(&model.QuestionQa{}) // 名称 if req.QaName != "" { diff --git a/api/dao/QuestionQaItem.go b/api/dao/QuestionQaItem.go index f2f894b..5d6b4de 100644 --- a/api/dao/QuestionQaItem.go +++ b/api/dao/QuestionQaItem.go @@ -367,3 +367,12 @@ func (r *QuestionQaItemDao) GetAllNormalQuestionQaItemWhereList(maps interface{} } return m, nil } + +// GetQuestionQaItemListByQaIdDistinctQuestionId 获取数据-QuestionId-去重复(QaId) +func (r *QuestionQaItemDao) GetQuestionQaItemListByQaIdDistinctQuestionId(qaId []string) (m []*model.QuestionQaItem, err error) { + err = global.Db.Where("qa_id IN ?", qaId).Distinct("question_id").Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dto/QuestionQa.go b/api/dto/QuestionQa.go index 606a661..0d48f53 100644 --- a/api/dto/QuestionQa.go +++ b/api/dto/QuestionQa.go @@ -19,7 +19,7 @@ type QuestionQaDto struct { QaRuleContent string `json:"qa_rule_content"` // 规则解释 QaDisplayType int `json:"qa_display_type"` // 展示类型(1:常规 2:飞花令) IsTurnTimer int `json:"is_turn_timer"` // 是否开启计时(0:否 1:是) - IsRepeat int `json:"is_repeat"` // 是否允许重复(0:否 1:是) + RepeatQaId []*RepeatQaId `json:"repeat_qa_id"` // 禁止重复id合集 QaExpireTime *model.LocalTime `json:"qa_expire_time"` // 过期时间 QaShareId string `json:"qa_share_id"` // 分享标识 QaPassword string `json:"qa_password"` // 分享密码 @@ -33,6 +33,12 @@ type QuestionQaDto struct { QuestionQaTimer []*QuestionQaTimerDto `json:"question_qa_timer"` // 计时设置 } +// RepeatQaId 禁止重复id合集 +type RepeatQaId struct { + QaId string `json:"qa_id"` // 主键id + QaName string `json:"qa_name"` // 名称 +} + // QuestionQaBaseTokenItem 问答题库-飞花令明细 type QuestionQaBaseTokenItem struct { TokenId string `json:"token_id" form:"token_id" label:"飞花令明细id" validate:"required"` @@ -69,7 +75,6 @@ func GetQuestionQaListDto(m []*model.QuestionQa) []*QuestionQaDto { QaRuleContent: v.QaRuleContent, QaDisplayType: v.QaDisplayType, IsTurnTimer: v.IsTurnTimer, - IsRepeat: v.IsRepeat, QaExpireTime: &v.QaExpireTime, QaShareId: utils.AddDomain(v.QaShareId), QaPassword: v.QaPassword, @@ -108,7 +113,6 @@ func GetQuestionQaDto(m *model.QuestionQa) *QuestionQaDto { QaRuleContent: m.QaRuleContent, QaDisplayType: m.QaDisplayType, IsTurnTimer: m.IsTurnTimer, - IsRepeat: m.IsRepeat, QaExpireTime: &m.QaExpireTime, QaShareId: utils.AddDomain(m.QaShareId), QaPassword: m.QaPassword, @@ -176,3 +180,23 @@ func (r *QuestionQaDto) LoadQuestionQaTimerDto(m []*model.QuestionQaTimer) *Ques } return r } + +// LoadRepeatQaId 加载禁止重复id合集 +func (r *QuestionQaDto) LoadRepeatQaId(m []*model.QuestionQa) *QuestionQaDto { + if len(m) > 0 { + responses := make([]*RepeatQaId, len(m)) + + for i, v := range m { + response := &RepeatQaId{ + QaId: fmt.Sprintf("%d", v.QaId), + QaName: v.QaName, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + + r.RepeatQaId = responses + } + return r +} diff --git a/api/model/QuestionQa.go b/api/model/QuestionQa.go index 783c8f1..0b21198 100644 --- a/api/model/QuestionQa.go +++ b/api/model/QuestionQa.go @@ -18,7 +18,7 @@ type QuestionQa struct { QaRuleContent string `gorm:"column:qa_rule_content;type:text;comment:规则解释" json:"qa_rule_content"` QaDisplayType int `gorm:"column:qa_display_type;type:tinyint(1);default:1;comment:展示类型(1:常规 2:飞花令)" json:"qa_display_type"` IsTurnTimer int `gorm:"column:is_turn_timer;type:tinyint(1);default:0;comment:是否开启计时(0:否 1:是)" json:"is_turn_timer"` - IsRepeat int `gorm:"column:;type:tinyint(1);default:0;comment:是否允许重复(0:否 1:是)" json:""` + RepeatQaId string `gorm:"column:repeat_qa_id;type:text;comment:禁止重复id合集(逗号分割)" json:"repeat_qa_id"` QaExpireTime LocalTime `gorm:"column:qa_expire_time;type:datetime;comment:过期时间" json:"qa_expire_time"` QaShareId string `gorm:"column:qa_share_id;type:varchar(255);comment:分享标识" json:"qa_share_id"` QaPassword string `gorm:"column:qa_password;type:varchar(255);comment:分享密码" json:"qa_password"` diff --git a/api/requests/QuestionQa.go b/api/requests/QuestionQa.go index e06ded8..9d0c602 100644 --- a/api/requests/QuestionQa.go +++ b/api/requests/QuestionQa.go @@ -60,10 +60,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:"计时设置"` // - IsRepeat int `json:"is_repeat" form:"is_repeat" label:"是否允许重复" validate:"omitempty,oneof=0 1"` // 是否允许重复(0:否 1:是) + 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:"计时设置"` // + RepeatQaId string `json:"repeat_qa_id" form:"repeat_qa_id" label:"禁止重复id合集"` // 禁止重复id合集 } // QuestionQaItem 新增问答题库-题目明细 @@ -107,11 +107,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:"计时设置"` // - IsRepeat int `json:"is_repeat" form:"is_repeat" label:"是否允许重复" validate:"omitempty,oneof=0 1"` // 是否允许重复(0:否 1:是) + 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:"计时设置"` // + RepeatQaId string `json:"repeat_qa_id" form:"repeat_qa_id" label:"禁止重复id合集"` // 禁止重复id合集(逗号分割) } // PutQuestionQaBaseTokenItem 修改问答题库-飞花令明细 diff --git a/api/service/QuestionQa.go b/api/service/QuestionQa.go index 0ae845a..0b113cc 100644 --- a/api/service/QuestionQa.go +++ b/api/service/QuestionQa.go @@ -12,6 +12,7 @@ import ( "knowledge/global" "knowledge/utils" "strconv" + "strings" "time" ) @@ -90,7 +91,6 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err RoundNum: nil, QaDisplayType: req.QaDisplayType, IsTurnTimer: req.IsTurnTimer, - IsRepeat: req.IsRepeat, QaExpireTime: model.LocalTime(qaExpireTime), QaPassword: req.QaPassword, OpenNumber: 0, @@ -217,10 +217,10 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err questionQaItemDao := dao.QuestionQaItemDao{} var notQuestionIds []int64 // 处理需排除的题目id - if req.IsRepeat == 1 { + if req.RepeatQaId != "" { // 获取正常题库的明细列表 - maps := make(map[string]interface{}) - questionQaItems, _ := questionQaItemDao.GetAllNormalQuestionQaItemWhereList(maps) + repeatQaId := strings.Split(req.RepeatQaId, ",") + questionQaItems, _ := questionQaItemDao.GetQuestionQaItemListByQaIdDistinctQuestionId(repeatQaId) if len(questionQaItems) > 0 { for _, item := range questionQaItems { notQuestionIds = append(notQuestionIds, item.QuestionId) @@ -361,8 +361,8 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa } // 是否允许重复 - if req.IsRepeat != questionQa.IsRepeat { - questionQaData["is_repeat"] = req.IsRepeat + if req.RepeatQaId != questionQa.RepeatQaId { + questionQaData["repeat_qa_id"] = req.RepeatQaId } // 背景图 @@ -424,10 +424,10 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa } var notQuestionIds []int64 // 处理需排除的题目id - if req.IsRepeat == 1 { + if req.RepeatQaId != "" { // 获取正常题库的明细列表 - maps := make(map[string]interface{}) - questionQaItems, _ := questionQaItemDao.GetAllNormalQuestionQaItemWhereList(maps) + repeatQaId := strings.Split(req.RepeatQaId, ",") + questionQaItems, _ := questionQaItemDao.GetQuestionQaItemListByQaIdDistinctQuestionId(repeatQaId) if len(questionQaItems) > 0 { for _, item := range questionQaItems { notQuestionIds = append(notQuestionIds, item.QuestionId)