Compare commits
13 Commits
0cd5717368
...
c292fe4d33
| Author | SHA1 | Date | |
|---|---|---|---|
| c292fe4d33 | |||
| 6e662c0cb0 | |||
| d56b6ce9df | |||
| ecc7c52314 | |||
| 4a9760019f | |||
| 840fd493c0 | |||
| 0f8550d9f9 | |||
| 2a6d7d82ab | |||
| c7f68e4edc | |||
| 57e581c4e9 | |||
| f62a48f510 | |||
| 820d8de1d5 | |||
| 08341c8331 |
@ -10,6 +10,7 @@ import (
|
|||||||
"knowledge/global"
|
"knowledge/global"
|
||||||
"knowledge/utils"
|
"knowledge/utils"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type QuestionQa struct{}
|
type QuestionQa struct{}
|
||||||
@ -59,6 +60,42 @@ func (r *QuestionQa) GetQuestionQaPage(c *gin.Context) {
|
|||||||
responses.OkWithData(result, c)
|
responses.OkWithData(result, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetQuestionQaList 获取问答题库列表
|
||||||
|
func (r *QuestionQa) GetQuestionQaList(c *gin.Context) {
|
||||||
|
questionQaRequest := requests.QuestionQaRequest{}
|
||||||
|
req := questionQaRequest.GetQuestionQaList
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数验证
|
||||||
|
if err := global.Validate.Struct(req); err != nil {
|
||||||
|
responses.FailWithMessage(utils.Translate(err), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
questionQaDao := dao.QuestionQaDao{}
|
||||||
|
questionQa, err := questionQaDao.GetQuestionQaListSearch(req)
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理返回值
|
||||||
|
g := dto.GetQuestionQaListDto(questionQa)
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, qaDto := range g {
|
||||||
|
qaDto.QaRuleContent = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
responses.OkWithData(g, c)
|
||||||
|
}
|
||||||
|
|
||||||
// AddQuestionQa 新增问答题库
|
// AddQuestionQa 新增问答题库
|
||||||
func (r *QuestionQa) AddQuestionQa(c *gin.Context) {
|
func (r *QuestionQa) AddQuestionQa(c *gin.Context) {
|
||||||
questionQaRequest := requests.QuestionQaRequest{}
|
questionQaRequest := requests.QuestionQaRequest{}
|
||||||
@ -382,6 +419,18 @@ func (r *QuestionQa) GetQuestionQa(c *gin.Context) {
|
|||||||
g = g.LoadQuestionQaToken(questionQaTokens)
|
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 {
|
if questionQa.QaType == 2 {
|
||||||
// 加载飞花令数量(当题库类型为2、3时存在)
|
// 加载飞花令数量(当题库类型为2、3时存在)
|
||||||
g = g.LoadTokenNum(questionQa.TokenNum)
|
g = g.LoadTokenNum(questionQa.TokenNum)
|
||||||
|
|||||||
@ -253,13 +253,13 @@ func (r *QuestionDao) GetQuestionCountSearch(req requests.GetQuestionCount) (tot
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetQuestionNotInListRand 获取列表-随机-排除
|
// 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 := global.Db.Model(&model.Question{})
|
||||||
query = query.Where(maps)
|
query = query.Where(maps)
|
||||||
|
|
||||||
// 排除选项
|
// 排除选项
|
||||||
if len(notQuestionId) > 0 {
|
if len(notQuestionIds) > 0 {
|
||||||
query = query.Where("question_id not in (?)", notQuestionId)
|
query = query.Where("question_id not in (?)", notQuestionIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
query = query.Limit(limit).Order("rand()")
|
query = query.Limit(limit).Order("rand()")
|
||||||
|
|||||||
@ -66,6 +66,15 @@ func (r *QuestionQaDao) GetQuestionQaList(maps interface{}) (m []*model.Question
|
|||||||
return m, nil
|
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 新增
|
// AddQuestionQa 新增
|
||||||
func (r *QuestionQaDao) AddQuestionQa(tx *gorm.DB, model *model.QuestionQa) (*model.QuestionQa, error) {
|
func (r *QuestionQaDao) AddQuestionQa(tx *gorm.DB, model *model.QuestionQa) (*model.QuestionQa, error) {
|
||||||
if err := tx.Create(model).Error; err != nil {
|
if err := tx.Create(model).Error; err != nil {
|
||||||
@ -211,6 +220,115 @@ func (r *QuestionQaDao) GetQuestionQaPageSearch(req requests.GetQuestionQaPage,
|
|||||||
return m, totalRecords, nil
|
return m, totalRecords, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetQuestionQaListSearch 获取列表
|
||||||
|
func (r *QuestionQaDao) GetQuestionQaListSearch(req requests.GetQuestionQaList) (m []*model.QuestionQa, err error) {
|
||||||
|
// 构建查询条件
|
||||||
|
query := global.Db.Model(&model.QuestionQa{})
|
||||||
|
|
||||||
|
// 名称
|
||||||
|
if req.QaName != "" {
|
||||||
|
query = query.Where("qa_name LIKE ?", "%"+req.QaName+"%")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 类型
|
||||||
|
//query = query.Where("qa_type = ?", req.QaType)
|
||||||
|
|
||||||
|
query = query.Where("qa_type IN ?", []string{"1", "2", "3"})
|
||||||
|
|
||||||
|
// 状态
|
||||||
|
if req.QaStatus != nil {
|
||||||
|
query = query.Where("qa_status = ?", req.QaStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 规则解释
|
||||||
|
if req.QaRuleContent != "" {
|
||||||
|
query = query.Where("qa_rule_content LIKE ?", "%"+req.QaRuleContent+"%")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 展示类型
|
||||||
|
if req.QaDisplayType != nil {
|
||||||
|
query = query.Where("qa_display_type = ?", req.QaDisplayType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过期时间
|
||||||
|
if req.QaExpireTime != "" {
|
||||||
|
qaExpireTime := strings.Split(req.QaExpireTime, "&")
|
||||||
|
if len(qaExpireTime) == 2 {
|
||||||
|
startTime, _ := time.Parse("2006-01-02", qaExpireTime[0])
|
||||||
|
endTime, _ := time.Parse("2006-01-02", qaExpireTime[1])
|
||||||
|
|
||||||
|
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
|
||||||
|
|
||||||
|
query = query.Where("qa_expire_time BETWEEN ? AND ?", startTime, endTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建时间
|
||||||
|
if req.CreatedAt != "" {
|
||||||
|
createdAt := strings.Split(req.CreatedAt, "&")
|
||||||
|
if len(createdAt) == 2 {
|
||||||
|
startTime, _ := time.Parse("2006-01-02", createdAt[0])
|
||||||
|
endTime, _ := time.Parse("2006-01-02", createdAt[1])
|
||||||
|
|
||||||
|
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
|
||||||
|
|
||||||
|
query = query.Where("created_at BETWEEN ? AND ?", startTime, endTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改时间
|
||||||
|
if req.UpdatedAt != "" {
|
||||||
|
updatedAt := strings.Split(req.UpdatedAt, "&")
|
||||||
|
if len(updatedAt) == 2 {
|
||||||
|
startTime, _ := time.Parse("2006-01-02", updatedAt[0])
|
||||||
|
endTime, _ := time.Parse("2006-01-02", updatedAt[1])
|
||||||
|
|
||||||
|
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
|
||||||
|
|
||||||
|
query = query.Where("updated_at BETWEEN ? AND ?", startTime, endTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
if req.Order != nil {
|
||||||
|
// 有效期
|
||||||
|
if req.Order.QaExpireTime != "" {
|
||||||
|
if req.Order.QaExpireTime != "desc" && req.Order.QaExpireTime != "asc" {
|
||||||
|
return nil, errors.New("排序字段错误")
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Order("qa_expire_time " + req.Order.QaExpireTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 题目数量
|
||||||
|
if req.Order.QaQuantity != "" {
|
||||||
|
if req.Order.QaQuantity != "desc" && req.Order.QaQuantity != "asc" {
|
||||||
|
return nil, errors.New("排序字段错误")
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Order("qa_quantity " + req.Order.QaQuantity)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改时间
|
||||||
|
if req.Order.UpdatedAt != "" {
|
||||||
|
if req.Order.UpdatedAt != "desc" && req.Order.UpdatedAt != "asc" {
|
||||||
|
return nil, errors.New("排序字段错误")
|
||||||
|
}
|
||||||
|
|
||||||
|
query = query.Order("updated_at " + req.Order.UpdatedAt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
query = query.Order("created_at desc")
|
||||||
|
|
||||||
|
err = query.Find(&m).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Inc 自增
|
// Inc 自增
|
||||||
func (r *QuestionQaDao) Inc(tx *gorm.DB, qaId int64, field string, numeral int) error {
|
func (r *QuestionQaDao) Inc(tx *gorm.DB, qaId int64, field string, numeral int) error {
|
||||||
err := tx.Model(&model.QuestionQa{}).Where("qa_id = ?", qaId).UpdateColumn(field, gorm.Expr(field+" + ?", numeral)).Error
|
err := tx.Model(&model.QuestionQa{}).Where("qa_id = ?", qaId).UpdateColumn(field, gorm.Expr(field+" + ?", numeral)).Error
|
||||||
|
|||||||
@ -347,3 +347,32 @@ func (r *QuestionQaItemDao) GetQuestionQaItemListByQuestionIdDistinctQaId(questi
|
|||||||
//query = query.Where("EXISTS (?)", subQuery)
|
//query = query.Where("EXISTS (?)", subQuery)
|
||||||
//
|
//
|
||||||
//query = query.Limit(limit).Order("rand()")
|
//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
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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,6 +19,7 @@ type QuestionQaDto struct {
|
|||||||
QaRuleContent string `json:"qa_rule_content"` // 规则解释
|
QaRuleContent string `json:"qa_rule_content"` // 规则解释
|
||||||
QaDisplayType int `json:"qa_display_type"` // 展示类型(1:常规 2:飞花令)
|
QaDisplayType int `json:"qa_display_type"` // 展示类型(1:常规 2:飞花令)
|
||||||
IsTurnTimer int `json:"is_turn_timer"` // 是否开启计时(0:否 1:是)
|
IsTurnTimer int `json:"is_turn_timer"` // 是否开启计时(0:否 1:是)
|
||||||
|
RepeatQaId []*RepeatQaId `json:"repeat_qa_id"` // 禁止重复id合集
|
||||||
QaExpireTime *model.LocalTime `json:"qa_expire_time"` // 过期时间
|
QaExpireTime *model.LocalTime `json:"qa_expire_time"` // 过期时间
|
||||||
QaShareId string `json:"qa_share_id"` // 分享标识
|
QaShareId string `json:"qa_share_id"` // 分享标识
|
||||||
QaPassword string `json:"qa_password"` // 分享密码
|
QaPassword string `json:"qa_password"` // 分享密码
|
||||||
@ -32,6 +33,12 @@ type QuestionQaDto struct {
|
|||||||
QuestionQaTimer []*QuestionQaTimerDto `json:"question_qa_timer"` // 计时设置
|
QuestionQaTimer []*QuestionQaTimerDto `json:"question_qa_timer"` // 计时设置
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RepeatQaId 禁止重复id合集
|
||||||
|
type RepeatQaId struct {
|
||||||
|
QaId string `json:"qa_id"` // 主键id
|
||||||
|
QaName string `json:"qa_name"` // 名称
|
||||||
|
}
|
||||||
|
|
||||||
// QuestionQaBaseTokenItem 问答题库-飞花令明细
|
// QuestionQaBaseTokenItem 问答题库-飞花令明细
|
||||||
type QuestionQaBaseTokenItem struct {
|
type QuestionQaBaseTokenItem struct {
|
||||||
TokenId string `json:"token_id" form:"token_id" label:"飞花令明细id" validate:"required"`
|
TokenId string `json:"token_id" form:"token_id" label:"飞花令明细id" validate:"required"`
|
||||||
@ -173,3 +180,23 @@ func (r *QuestionQaDto) LoadQuestionQaTimerDto(m []*model.QuestionQaTimer) *Ques
|
|||||||
}
|
}
|
||||||
return r
|
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,6 +18,7 @@ type QuestionQa struct {
|
|||||||
QaRuleContent string `gorm:"column:qa_rule_content;type:text;comment:规则解释" json:"qa_rule_content"`
|
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"`
|
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"`
|
IsTurnTimer int `gorm:"column:is_turn_timer;type:tinyint(1);default:0;comment:是否开启计时(0:否 1:是)" json:"is_turn_timer"`
|
||||||
|
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"`
|
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"`
|
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"`
|
QaPassword string `gorm:"column:qa_password;type:varchar(255);comment:分享密码" json:"qa_password"`
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package requests
|
|||||||
|
|
||||||
type QuestionQaRequest struct {
|
type QuestionQaRequest struct {
|
||||||
GetQuestionQaPage // 获取问答题库列表-分页
|
GetQuestionQaPage // 获取问答题库列表-分页
|
||||||
|
GetQuestionQaList // 获取问答题库列表
|
||||||
AddQuestionQa // 新增问答题库
|
AddQuestionQa // 新增问答题库
|
||||||
PutQuestionQa // 修改问答题库
|
PutQuestionQa // 修改问答题库
|
||||||
PutQuestionQaPassword // 修改问答题库密码
|
PutQuestionQaPassword // 修改问答题库密码
|
||||||
@ -25,6 +26,19 @@ type GetQuestionQaPage struct {
|
|||||||
Order *GetQuestionQaPageOrder `json:"order" form:"order" label:"排序"`
|
Order *GetQuestionQaPageOrder `json:"order" form:"order" label:"排序"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetQuestionQaList 获取问答题库列表
|
||||||
|
type GetQuestionQaList struct {
|
||||||
|
QaName string `json:"qa_name" form:"qa_name" label:"名称"`
|
||||||
|
QaType int `json:"qa_type" form:"qa_type" label:"题库类型"` // (1:常规模式 2:固定套题模式 3:多轮固定题型模式)
|
||||||
|
QaStatus *int `json:"qa_status" form:"qa_status" label:"状态"` // (1:正常 2:过期)
|
||||||
|
QaRuleContent string `json:"qa_rule_content" form:"qa_rule_content" label:"规则解释"`
|
||||||
|
QaDisplayType *int `json:"qa_display_type" form:"qa_display_type" label:"展示类型"` // (1:常规 2:飞花令)
|
||||||
|
QaExpireTime string `json:"qa_expire_time" form:"qa_expire_time" label:"过期时间"` // 注意:这里假设LocalTime转换为字符串格式处理
|
||||||
|
CreatedAt string `json:"created_at" form:"created_at" label:"创建时间"` // 注意:这里假设LocalTime转换为字符串格式处理
|
||||||
|
UpdatedAt string `json:"updated_at" form:"updated_at" label:"修改时间"` // 注意:这里假设LocalTime转换为字符串格式处理
|
||||||
|
Order *GetQuestionQaPageOrder `json:"order" form:"order" label:"排序"`
|
||||||
|
}
|
||||||
|
|
||||||
// GetQuestionQaPageOrder 获取题目列表-分页-排序条件
|
// GetQuestionQaPageOrder 获取题目列表-分页-排序条件
|
||||||
type GetQuestionQaPageOrder struct {
|
type GetQuestionQaPageOrder struct {
|
||||||
UpdatedAt string `json:"updated_at" form:"updated_at" label:"排序"`
|
UpdatedAt string `json:"updated_at" form:"updated_at" label:"排序"`
|
||||||
@ -49,6 +63,12 @@ type AddQuestionQa struct {
|
|||||||
BaseTokenItem []AddQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" 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表示飞花令后单个类型题目数量)
|
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:"计时设置"` //
|
QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` //
|
||||||
|
RepeatQaId []RepeatQaId `json:"repeat_qa_id" form:"repeat_qa_id" label:"禁止重复id合集"` // 禁止重复id合集
|
||||||
|
}
|
||||||
|
|
||||||
|
// RepeatQaId 禁止重复id合集
|
||||||
|
type RepeatQaId struct {
|
||||||
|
QaId string `json:"qa_id" form:"qa_id" label:"唯一标识" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// QuestionQaItem 新增问答题库-题目明细
|
// QuestionQaItem 新增问答题库-题目明细
|
||||||
@ -96,6 +116,7 @@ type PutQuestionQa struct {
|
|||||||
BaseTokenItem []PutQuestionQaBaseTokenItem `json:"base_token_item" form:"base_token_item" label:"飞花令明细"` // 展示类型为飞花令时存在
|
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表示飞花令后单个类型题目数量)
|
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:"计时设置"` //
|
QuestionQaTimer []QuestionQaTimer `json:"question_qa_timer" form:"question_qa_timer" label:"计时设置"` //
|
||||||
|
RepeatQaId []RepeatQaId `json:"repeat_qa_id" form:"repeat_qa_id" label:"禁止重复id合集"` // 禁止重复id合集
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutQuestionQaBaseTokenItem 修改问答题库-飞花令明细
|
// PutQuestionQaBaseTokenItem 修改问答题库-飞花令明细
|
||||||
|
|||||||
@ -162,6 +162,9 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
|||||||
// 获取问答题库列表-分页
|
// 获取问答题库列表-分页
|
||||||
qaGroup.POST("/page", api.QuestionQa.GetQuestionQaPage)
|
qaGroup.POST("/page", api.QuestionQa.GetQuestionQaPage)
|
||||||
|
|
||||||
|
// 获取问答题库列表
|
||||||
|
qaGroup.POST("/list", api.QuestionQa.GetQuestionQaList)
|
||||||
|
|
||||||
// 新增问答题库
|
// 新增问答题库
|
||||||
qaGroup.POST("", api.QuestionQa.AddQuestionQa)
|
qaGroup.POST("", api.QuestionQa.AddQuestionQa)
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import (
|
|||||||
"knowledge/global"
|
"knowledge/global"
|
||||||
"knowledge/utils"
|
"knowledge/utils"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -97,6 +98,16 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
|
|||||||
ItemContent: string(questionQaItemContent),
|
ItemContent: string(questionQaItemContent),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(req.RepeatQaId) > 0 {
|
||||||
|
var repeatQaId []string
|
||||||
|
for _, item := range req.RepeatQaId {
|
||||||
|
repeatQaId = append(repeatQaId, item.QaId)
|
||||||
|
}
|
||||||
|
|
||||||
|
repeatQaIdStr := strings.Join(repeatQaId, ",")
|
||||||
|
questionQa.RepeatQaId = repeatQaIdStr
|
||||||
|
}
|
||||||
|
|
||||||
// 固定套题模式-飞花令数量
|
// 固定套题模式-飞花令数量
|
||||||
if req.QaType == 2 {
|
if req.QaType == 2 {
|
||||||
questionQa.TokenNum = req.TokenNum
|
questionQa.TokenNum = req.TokenNum
|
||||||
@ -212,9 +223,25 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
|
|||||||
return false, errors.New("新增失败")
|
return false, errors.New("新增失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增问答题库题目列表
|
|
||||||
questionDao := dao.QuestionDao{}
|
questionDao := dao.QuestionDao{}
|
||||||
questionQaItemDao := dao.QuestionQaItemDao{}
|
questionQaItemDao := dao.QuestionQaItemDao{}
|
||||||
|
|
||||||
|
var notQuestionIds []int64 // 处理需排除的题目id
|
||||||
|
if len(req.RepeatQaId) > 0 {
|
||||||
|
// 获取正常题库的明细列表
|
||||||
|
var repeatQaId []string
|
||||||
|
for _, item := range req.RepeatQaId {
|
||||||
|
repeatQaId = append(repeatQaId, item.QaId)
|
||||||
|
}
|
||||||
|
questionQaItems, _ := questionQaItemDao.GetQuestionQaItemListByQaIdDistinctQuestionId(repeatQaId)
|
||||||
|
if len(questionQaItems) > 0 {
|
||||||
|
for _, item := range questionQaItems {
|
||||||
|
notQuestionIds = append(notQuestionIds, item.QuestionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增问答题库题目列表
|
||||||
for _, item := range req.QuestionQaItem {
|
for _, item := range req.QuestionQaItem {
|
||||||
// 验证数量
|
// 验证数量
|
||||||
maps := make(map[string]interface{})
|
maps := make(map[string]interface{})
|
||||||
@ -231,7 +258,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 {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return false, err
|
return false, err
|
||||||
@ -239,7 +266,11 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
|
|||||||
|
|
||||||
if len(questions) < item.Quantity {
|
if len(questions) < item.Quantity {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return false, errors.New(utils.QuestionType(item.QuestionType) + "数量不足")
|
if len(notQuestionIds) > 0 {
|
||||||
|
return false, errors.New("因不允许重复" + utils.QuestionType(item.QuestionType) + "数量不足")
|
||||||
|
} else {
|
||||||
|
return false, errors.New(utils.QuestionType(item.QuestionType) + "数量不足")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增明细题目
|
// 新增明细题目
|
||||||
@ -346,6 +377,23 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
|
|||||||
questionQaData["qa_password"] = req.QaPassword
|
questionQaData["qa_password"] = req.QaPassword
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 是否允许重复
|
||||||
|
if req.Action == 2 {
|
||||||
|
if len(req.RepeatQaId) > 0 {
|
||||||
|
var repeatQaId []string
|
||||||
|
for _, item := range req.RepeatQaId {
|
||||||
|
repeatQaId = append(repeatQaId, item.QaId)
|
||||||
|
}
|
||||||
|
|
||||||
|
repeatQaIdStr := strings.Join(repeatQaId, ",")
|
||||||
|
if repeatQaIdStr != questionQa.RepeatQaId {
|
||||||
|
questionQaData["repeat_qa_id"] = repeatQaIdStr
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
questionQaData["repeat_qa_id"] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 背景图
|
// 背景图
|
||||||
image := utils.RemoveOssDomain(req.Image)
|
image := utils.RemoveOssDomain(req.Image)
|
||||||
if image != questionQa.Image {
|
if image != questionQa.Image {
|
||||||
@ -404,6 +452,21 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var notQuestionIds []int64 // 处理需排除的题目id
|
||||||
|
if len(req.RepeatQaId) > 0 {
|
||||||
|
// 获取正常题库的明细列表
|
||||||
|
var repeatQaId []string
|
||||||
|
for _, item := range req.RepeatQaId {
|
||||||
|
repeatQaId = append(repeatQaId, item.QaId)
|
||||||
|
}
|
||||||
|
questionQaItems, _ := questionQaItemDao.GetQuestionQaItemListByQaIdDistinctQuestionId(repeatQaId)
|
||||||
|
if len(questionQaItems) > 0 {
|
||||||
|
for _, item := range questionQaItems {
|
||||||
|
notQuestionIds = append(notQuestionIds, item.QuestionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, item := range req.QuestionQaItem {
|
for _, item := range req.QuestionQaItem {
|
||||||
// 验证数量
|
// 验证数量
|
||||||
maps := make(map[string]interface{})
|
maps := make(map[string]interface{})
|
||||||
@ -420,7 +483,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 {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return false, err
|
return false, err
|
||||||
@ -428,7 +492,11 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
|
|||||||
|
|
||||||
if len(questions) < item.Quantity {
|
if len(questions) < item.Quantity {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
return false, errors.New("选题超出现有题目数量")
|
if len(notQuestionIds) > 0 {
|
||||||
|
return false, errors.New("因不允许重复选题超出现有题目数量")
|
||||||
|
} else {
|
||||||
|
return false, errors.New("选题超出现有题目数量")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, question := range questions {
|
for _, question := range questions {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user