增加了题库不允许重复的业务逻辑4
This commit is contained in:
parent
f62a48f510
commit
57e581c4e9
@ -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)
|
||||
|
||||
@ -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 != "" {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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"`
|
||||
|
||||
@ -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 修改问答题库-飞花令明细
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user