diff --git a/api/controller/questionQa.go b/api/controller/questionQa.go index 9b6cf1b..a81635d 100644 --- a/api/controller/questionQa.go +++ b/api/controller/questionQa.go @@ -124,6 +124,21 @@ func (r *QuestionQa) AddQuestionQa(c *gin.Context) { } } + // 判断计时 + if req.IsTurnTimer == 1 { + if req.QuestionQaTimer == nil { + responses.FailWithMessage("缺少题目计时明细", c) + return + } + + for _, item := range req.QuestionQaTimer { + if err := global.Validate.Struct(item); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + } + } + // 业务处理 questionQaService := service.QuestionQaService{} _, err := questionQaService.AddQuestionQa(req) @@ -167,6 +182,21 @@ func (r *QuestionQa) PutQuestionQa(c *gin.Context) { } } + // 判断计时 + if req.IsTurnTimer == 1 { + if req.QuestionQaTimer == nil { + responses.FailWithMessage("缺少题目计时明细", c) + return + } + + for _, item := range req.QuestionQaTimer { + if err := global.Validate.Struct(item); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + } + } + id := c.Param("qa_id") if id == "" { responses.FailWithMessage("缺少参数", c) diff --git a/api/dto/QuestionQa.go b/api/dto/QuestionQa.go index 10343bd..2638269 100644 --- a/api/dto/QuestionQa.go +++ b/api/dto/QuestionQa.go @@ -67,6 +67,7 @@ func GetQuestionQaListDto(m []*model.QuestionQa) []*QuestionQaDto { QaStatus: v.QaStatus, QaRuleContent: v.QaRuleContent, QaDisplayType: v.QaDisplayType, + IsTurnTimer: v.IsTurnTimer, QaExpireTime: &v.QaExpireTime, QaShareId: utils.AddDomain(v.QaShareId), QaPassword: v.QaPassword, @@ -104,6 +105,7 @@ func GetQuestionQaDto(m *model.QuestionQa) *QuestionQaDto { QaStatus: m.QaStatus, QaRuleContent: m.QaRuleContent, QaDisplayType: m.QaDisplayType, + IsTurnTimer: m.IsTurnTimer, QaExpireTime: &m.QaExpireTime, QaShareId: utils.AddDomain(m.QaShareId), QaPassword: m.QaPassword, diff --git a/api/requests/QuestionQa.go b/api/requests/QuestionQa.go index 39fcfaf..fdce2d4 100644 --- a/api/requests/QuestionQa.go +++ b/api/requests/QuestionQa.go @@ -41,12 +41,14 @@ type AddQuestionQa struct { TokenNum *int `json:"token_num" form:"token_num" label:"飞花令数量" validate:"omitempty,number,min=1"` // (当题库类型为2、3时存在) RoundNum *int `json:"round_num" form:"round_num" label:"轮次数量" validate:"omitempty,number,min=1"` // (当题库类型为3时存在) QaDisplayType int `json:"qa_display_type" form:"qa_display_type" label:"展示类型" validate:"required,oneof=1 2"` // (1:常规 2:飞花令) + IsTurnTimer int `json:"is_turn_timer" form:"is_turn_timer" label:"是否开启计时" validate:"omitempty,oneof=0 1"` // 是否开启计时(0:否 1:是) QaExpireTime string `json:"qa_expire_time" form:"qa_expire_time" label:"过期时间" validate:"required"` // 注意:这里假设LocalTime转换为字符串格式处理 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:"计时设置"` // } // QuestionQaItem 新增问答题库-题目明细 @@ -64,6 +66,13 @@ type TokenQuestionContent struct { Quantity int `json:"quantity" form:"quantity" validate:"number,min=0" label:"数量"` } +// QuestionQaTimer 计时设置 +type QuestionQaTimer struct { + QuestionType int `json:"question_type" form:"question_type" validate:"required,number,oneof=1 2 3 4" label:"题目类型"` // 题目类型(1:单选 2:多选 3:问答 4:判断) + TimerRule int `json:"timer_rule" form:"timer_rule" validate:"required,number,oneof=1 2" label:"计时规则"` // 计时规则(1:正计时 2:倒计时) + Duration int `json:"duration" form:"duration" validate:"required,number,min=1,max=600" label:"时长(秒)"` // 时长(秒) +} + // AddQuestionQaBaseTokenItem 新增问答题库-飞花令明细 type AddQuestionQaBaseTokenItem struct { TokenId string `json:"token_id" form:"token_id" label:"飞花令明细id" validate:"required"` @@ -78,6 +87,7 @@ type PutQuestionQa struct { TokenNum *int `json:"token_num" form:"token_num" label:"飞花令数量" validate:"omitempty,number,min=1"` // (当题库类型为2、3时存在) RoundNum *int `json:"round_num" form:"round_num" label:"轮次数量" validate:"omitempty,number,min=1"` // (当题库类型为3时存在) QaDisplayType int `json:"qa_display_type" form:"qa_display_type" label:"展示类型" validate:"required,oneof=1 2"` // (1:常规 2:飞花令) + IsTurnTimer int `json:"is_turn_timer" form:"is_turn_timer" label:"是否开启计时" validate:"omitempty,oneof=0 1"` // 是否开启计时(0:否 1:是) QaExpireTime string `json:"qa_expire_time" form:"qa_expire_time" label:"过期时间" validate:"required"` // 注意:这里假设LocalTime转换为字符串格式处理 QaPassword string `json:"qa_password" form:"qa_password" label:"分享密码" validate:"required"` Image string `json:"image" form:"image" label:"背景图" validate:"required"` @@ -85,6 +95,7 @@ type PutQuestionQa struct { 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:"计时设置"` // } // PutQuestionQaItem 修改问答题库-明细 diff --git a/api/service/QuestionQa.go b/api/service/QuestionQa.go index 80563cb..14ade39 100644 --- a/api/service/QuestionQa.go +++ b/api/service/QuestionQa.go @@ -79,6 +79,7 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err TokenNum: nil, RoundNum: nil, QaDisplayType: req.QaDisplayType, + IsTurnTimer: req.IsTurnTimer, QaExpireTime: model.LocalTime(qaExpireTime), QaPassword: req.QaPassword, OpenNumber: 0, @@ -245,6 +246,25 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err } } + // 新增计时设置 + if req.IsTurnTimer == 1 { + questionQaTimerDao := dao.QuestionQaTimerDao{} + for _, timer := range req.QuestionQaTimer { + QuestionQaTimer := &model.QuestionQaTimer{ + QaId: questionQa.QaId, + QuestionType: timer.QuestionType, + TimerRule: timer.TimerRule, + Duration: timer.Duration, + } + + QuestionQaTimer, err := questionQaTimerDao.AddQuestionQaTimer(tx, QuestionQaTimer) + if err != nil { + tx.Rollback() + return false, errors.New("新增失败") + } + } + } + tx.Commit() return true, nil } @@ -414,6 +434,11 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa } } + // 计时开关 + if req.IsTurnTimer != questionQa.IsTurnTimer { + questionQaData["is_turn_timer"] = req.IsTurnTimer + } + if len(questionQaData) > 0 { err = questionQaDao.EditQuestionQaById(tx, questionQa.QaId, questionQaData) if err != nil { @@ -509,6 +534,32 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa } } + // 删除计时规则 + questionQaTimerDao := dao.QuestionQaTimerDao{} + err = questionQaTimerDao.DeleteQuestionQaTimerByQaId(tx, questionQa.QaId) + if err != nil { + tx.Rollback() + return false, errors.New(err.Error()) + } + + // 新增计时规则 + if req.IsTurnTimer == 1 { + for _, timer := range req.QuestionQaTimer { + QuestionQaTimer := &model.QuestionQaTimer{ + QaId: questionQa.QaId, + QuestionType: timer.QuestionType, + TimerRule: timer.TimerRule, + Duration: timer.Duration, + } + + QuestionQaTimer, err := questionQaTimerDao.AddQuestionQaTimer(tx, QuestionQaTimer) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + } + } + tx.Commit() return true, nil }