From 51af306add34334e7051e77565381ebe26579de2 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 12 Nov 2024 10:41:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E9=A3=9E=E8=8A=B1?= =?UTF-8?q?=E4=BB=A4=E6=95=B0=E9=87=8F1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/dao/QuestionQaTimer.go | 107 +++++++++++++++++++++++++++++++++++ api/dto/QuestionQa.go | 2 + api/dto/QuestionQaTimer.go | 54 ++++++++++++++++++ api/model/QuestionQa.go | 2 + api/model/QuestionQaTimer.go | 35 ++++++++++++ api/service/QuestionQa.go | 9 ++- 6 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 api/dao/QuestionQaTimer.go create mode 100644 api/dto/QuestionQaTimer.go create mode 100644 api/model/QuestionQaTimer.go diff --git a/api/dao/QuestionQaTimer.go b/api/dao/QuestionQaTimer.go new file mode 100644 index 0000000..aedcad0 --- /dev/null +++ b/api/dao/QuestionQaTimer.go @@ -0,0 +1,107 @@ +package dao + +import ( + "gorm.io/gorm" + "gorm.io/gorm/clause" + "knowledge/api/model" + "knowledge/global" +) + +type QuestionQaTimerDao struct { +} + +// GetQuestionQaTimerById 获取数据-id +func (r *QuestionQaTimerDao) GetQuestionQaTimerById(TimerId int64) (m *model.QuestionQaTimer, err error) { + err = global.Db.First(&m, TimerId).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetQuestionQaTimerListByQaId 获取数据-QaId +func (r *QuestionQaTimerDao) GetQuestionQaTimerListByQaId(qaId int64) (m []*model.QuestionQaTimer, err error) { + err = global.Db.Where("qa_id = ?", qaId).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// DeleteQuestionQaTimer 删除 +func (r *QuestionQaTimerDao) DeleteQuestionQaTimer(tx *gorm.DB, maps interface{}) error { + err := tx.Where(maps).Delete(&model.QuestionQaTimer{}).Error + if err != nil { + return err + } + return nil +} + +// DeleteQuestionQaTimerById 删除-Id +func (r *QuestionQaTimerDao) DeleteQuestionQaTimerById(tx *gorm.DB, itemId int64) error { + if err := tx.Delete(&model.QuestionQaTimer{}, itemId).Error; err != nil { + return err + } + return nil +} + +// DeleteQuestionQaTimerByQaId 删除-QaId +func (r *QuestionQaTimerDao) DeleteQuestionQaTimerByQaId(tx *gorm.DB, qaId int64) error { + if err := tx.Where("qa_id = ?", qaId).Delete(&model.QuestionQaTimer{}).Error; err != nil { + return err + } + return nil +} + +// EditQuestionQaTimer 修改 +func (r *QuestionQaTimerDao) EditQuestionQaTimer(tx *gorm.DB, maps interface{}, data interface{}) error { + err := tx.Model(&model.QuestionQaTimer{}).Where(maps).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// EditQuestionQaTimerById 修改-id +func (r *QuestionQaTimerDao) EditQuestionQaTimerById(tx *gorm.DB, TimerId int64, data interface{}) error { + err := tx.Model(&model.QuestionQaTimer{}).Where("timer_id = ?", TimerId).Updates(data).Error + if err != nil { + return err + } + return nil +} + +// GetQuestionQaTimerList 获取列表 +func (r *QuestionQaTimerDao) GetQuestionQaTimerList(maps interface{}) (m []*model.QuestionQaTimer, err error) { + err = global.Db.Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetQuestionQaTimerPreloadList 获取列表-加载全部关联 +func (r *QuestionQaTimerDao) GetQuestionQaTimerPreloadList(maps interface{}) (m []*model.QuestionQaTimer, err error) { + err = global.Db.Preload(clause.Associations).Where(maps).Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// AddQuestionQaTimer 新增 +func (r *QuestionQaTimerDao) AddQuestionQaTimer(tx *gorm.DB, model *model.QuestionQaTimer) (*model.QuestionQaTimer, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} + +// GetQuestionQaTimer 获取 +func (r *QuestionQaTimerDao) GetQuestionQaTimer(maps interface{}) (m *model.QuestionQaTimer, err error) { + err = global.Db.Where(maps).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dto/QuestionQa.go b/api/dto/QuestionQa.go index 11b9e39..740d26e 100644 --- a/api/dto/QuestionQa.go +++ b/api/dto/QuestionQa.go @@ -18,6 +18,7 @@ type QuestionQaDto struct { RoundNum *int `json:"round_num"` // 轮次数量(当题库类型为3时存在) QaRuleContent string `json:"qa_rule_content"` // 规则解释 QaDisplayType int `json:"qa_display_type"` // 展示类型(1:常规 2:飞花令) + IsTurnTimer int `json:"is_turn_timer"` // 是否开启计时(0:否 1:是) QaExpireTime *model.LocalTime `json:"qa_expire_time"` // 过期时间 QaShareId string `json:"qa_share_id"` // 分享标识 QaPassword string `json:"qa_password"` // 分享密码 @@ -28,6 +29,7 @@ type QuestionQaDto struct { TokenQuestionContent []*TokenQuestionContentDto `json:"token_question_content"` // 飞花令题目数量规则(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量) CreatedAt model.LocalTime `json:"created_at"` // 创建时间 UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 + QuestionQaTimer []*QuestionQaTimerDto `json:"question_qa_timer"` // 计时设置 } // QuestionQaBaseTokenItem 问答题库-飞花令明细 diff --git a/api/dto/QuestionQaTimer.go b/api/dto/QuestionQaTimer.go new file mode 100644 index 0000000..b81227d --- /dev/null +++ b/api/dto/QuestionQaTimer.go @@ -0,0 +1,54 @@ +package dto + +import ( + "fmt" + "knowledge/api/model" +) + +type QuestionQaTimerDto struct { + TimerId string `json:"timer_id"` // 主键id + QaId string `json:"qa_id"` // 知识问答id + QuestionType int `json:"question_type"` // 题目类型(1:单选 2:多选 3:问答 4:判断) + TimerRule int `json:"timer_rule"` // 计时规则(1:正计时 2:倒计时) + Duration int `json:"duration"` // 时长(秒) + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间 +} + +// GetQuestionQaTimerDto 详情 +func GetQuestionQaTimerDto(m *model.QuestionQaTimer) *QuestionQaTimerDto { + return &QuestionQaTimerDto{ + TimerId: fmt.Sprintf("%d", m.TimerId), + QaId: fmt.Sprintf("%d", m.QaId), + QuestionType: m.QuestionType, + TimerRule: m.TimerRule, + Duration: m.Duration, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} + +// GetQuestionQaTimerListDto 列表 +func GetQuestionQaTimerListDto(m []*model.QuestionQaTimer) []*QuestionQaTimerDto { + // 处理返回值 + responses := make([]*QuestionQaTimerDto, len(m)) + + if len(m) > 0 { + for i, v := range m { + response := &QuestionQaTimerDto{ + TimerId: fmt.Sprintf("%d", v.TimerId), + QaId: fmt.Sprintf("%d", v.QaId), + QuestionType: v.QuestionType, + TimerRule: v.TimerRule, + Duration: v.Duration, + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + } + + // 将转换后的结构体添加到新切片中 + responses[i] = response + } + } + + return responses +} diff --git a/api/model/QuestionQa.go b/api/model/QuestionQa.go index c7f964d..42281ca 100644 --- a/api/model/QuestionQa.go +++ b/api/model/QuestionQa.go @@ -17,6 +17,7 @@ type QuestionQa struct { RoundNum *int `gorm:"column:round_num;type:int(11);comment:轮次数量(当题库类型为3时存在)" json:"round_num"` 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"` 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"` @@ -25,6 +26,7 @@ type QuestionQa struct { ItemContent string `gorm:"column:item_content;type:text;comment:明细选题(json)" json:"item_content"` TokenQuestionContent string `gorm:"column:token_question_content;type:text;comment:飞花令题目数量规则(当题库类型为2、3时存在。2表示飞花令后固定题目数量,3表示飞花令后单个类型题目数量)" json:"token_question_content"` Model + QuestionQaTimer []*QuestionQaTimer `gorm:"foreignKey:QaId;references:qa_id" json:"question_qa_timer"` } func (m *QuestionQa) TableName() string { diff --git a/api/model/QuestionQaTimer.go b/api/model/QuestionQaTimer.go new file mode 100644 index 0000000..f408e8a --- /dev/null +++ b/api/model/QuestionQaTimer.go @@ -0,0 +1,35 @@ +package model + +import ( + "gorm.io/gorm" + "knowledge/global" + "time" +) + +// QuestionQaTimer 知识问答-计时设置 +type QuestionQaTimer struct { + TimerId int64 `gorm:"column:timer_id;type:bigint(19);primary_key;comment:主键id" json:"timer_id"` + QaId int64 `gorm:"column:qa_id;type:bigint(19);comment:知识问答id;NOT NULL" json:"qa_id"` + QuestionType int `gorm:"column:question_type;type:tinyint(1);default:1;comment:题目类型(1:单选 2:多选 3:问答 4:判断)" json:"question_type"` + TimerRule int `gorm:"column:timer_rule;type:tinyint(1);default:1;comment:计时规则(1:正计时 2:倒计时)" json:"timer_rule"` + Duration int `gorm:"column:duration;type:int(1);default:1;comment:时长(秒)" json:"duration"` + Model +} + +func (m *QuestionQaTimer) TableName() string { + return "kb_question_qa_timer" +} + +func (m *QuestionQaTimer) BeforeCreate(tx *gorm.DB) error { + if m.TimerId == 0 { + m.TimerId = global.Snowflake.Generate().Int64() + } + + m.CreatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("CreatedAt", m.CreatedAt) + + m.UpdatedAt = LocalTime(time.Now()) + tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) + + return nil +} diff --git a/api/service/QuestionQa.go b/api/service/QuestionQa.go index 274c4db..91ce5fc 100644 --- a/api/service/QuestionQa.go +++ b/api/service/QuestionQa.go @@ -333,6 +333,7 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa return false, err } + fmt.Println(1111) // 题目数量 if qaQuantity != questionQa.QaQuantity { if req.Action == 1 { @@ -764,7 +765,7 @@ func (r *QuestionQaService) CheckPutQaQuestionQuantity(req requests.PutQuestionQ itemQuantity = 0 for _, item := range req.QuestionQaItem { if content.QuestionType == item.QuestionType { - itemQuantity = item.Quantity + itemQuantity = itemQuantity + item.Quantity } } @@ -795,12 +796,16 @@ func (r *QuestionQaService) CheckPutQaQuestionQuantity(req requests.PutQuestionQ itemQuantity = 0 for _, item := range req.QuestionQaItem { if content.QuestionType == item.QuestionType { - itemQuantity = item.Quantity + itemQuantity = itemQuantity + item.Quantity } } quantity := content.Quantity * *req.TokenNum * *req.RoundNum + fmt.Println(utils.QuestionType(content.QuestionType)) + fmt.Println(quantity) + fmt.Println(req.QuestionQaItem) + fmt.Println(itemQuantity) if quantity > itemQuantity { return qaQuantity, errors.New(utils.QuestionType(content.QuestionType) + "数量不足") }