knowledge-api/api/controller/questionQa.go

442 lines
10 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"github.com/gin-gonic/gin"
"knowledge/api/dao"
"knowledge/api/dto"
"knowledge/api/requests"
"knowledge/api/responses"
"knowledge/api/service"
"knowledge/global"
"knowledge/utils"
"strconv"
)
type QuestionQa struct{}
// GetQuestionQaPage 获取问答题库列表-分页
func (r *QuestionQa) GetQuestionQaPage(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.GetQuestionQaPage
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if req.Page == 0 {
req.Page = 1
}
if req.PageSize == 0 {
req.PageSize = 20
}
questionQaDao := dao.QuestionQaDao{}
questionQa, total, err := questionQaDao.GetQuestionQaPageSearch(req, req.Page, req.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
g := dto.GetQuestionQaListDto(questionQa)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
result := make(map[string]interface{})
result["page"] = req.Page
result["page_size"] = req.PageSize
result["total"] = total
result["data"] = g
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
}
responses.OkWithData(g, c)
}
// AddQuestionQa 新增问答题库
func (r *QuestionQa) AddQuestionQa(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.AddQuestionQa
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 参数验证
for _, item := range req.QuestionQaItem {
if err := global.Validate.Struct(item); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
}
if req.BaseTokenItem != nil && req.QaDisplayType == 2 {
for _, item := range req.BaseTokenItem {
if err := global.Validate.Struct(item); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
}
}
// 判断题库类型
if req.QaType == 2 || req.QaType == 3 {
if req.QaDisplayType == 1 {
responses.FailWithMessage("展示类型错误,该题库下只允许选择飞花令类型", c)
return
}
// 判断飞花令题目数量规则
if req.TokenQuestionContent == nil {
responses.FailWithMessage("请填入飞花令题目数量规则", c)
return
}
for _, item := range req.TokenQuestionContent {
if err := global.Validate.Struct(item); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
}
if req.TokenNum == nil {
responses.FailWithMessage("请填入飞花令数量", c)
return
}
if req.QaType == 3 {
if req.RoundNum == nil {
responses.FailWithMessage("请填入轮次数量", c)
return
}
}
}
// 判断计时
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)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// PutQuestionQa 修改问答题库
func (r *QuestionQa) PutQuestionQa(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.PutQuestionQa
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 参数验证
for _, item := range req.QuestionQaItem {
if err := global.Validate.Struct(item); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
}
if req.BaseTokenItem != nil && req.QaDisplayType == 2 {
for _, item := range req.BaseTokenItem {
if err := global.Validate.Struct(item); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
}
}
// 判断计时
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)
return
}
// 将 id 转换为 int64 类型
qaId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
questionQaService := service.QuestionQaService{}
_, err = questionQaService.PutQuestionQa(qaId, req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// PutQuestionQaPassword 修改问答题库密码
func (r *QuestionQa) PutQuestionQaPassword(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.PutQuestionQaPassword
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("qa_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
qaId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
questionQaService := service.QuestionQaService{}
_, err = questionQaService.PutQuestionQaPassword(qaId, req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// PutQuestionQaExpire 修改问答题库有效期
func (r *QuestionQa) PutQuestionQaExpire(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.PutQuestionQaExpire
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("qa_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
qaId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
questionQaService := service.QuestionQaService{}
_, err = questionQaService.PutQuestionQaExpire(qaId, req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// PutQuestionQaRule 修改问答题库规则解释
func (r *QuestionQa) PutQuestionQaRule(c *gin.Context) {
questionQaRequest := requests.QuestionQaRequest{}
req := questionQaRequest.PutQuestionQaRule
if err := c.ShouldBindJSON(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
id := c.Param("qa_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
qaId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
questionQaService := service.QuestionQaService{}
_, err = questionQaService.PutQuestionQaRule(qaId, req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.Ok(c)
}
// GetQuestionQa 获取问答题库详情
func (r *QuestionQa) GetQuestionQa(c *gin.Context) {
id := c.Param("qa_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
qaId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 获取问答题库详情数据
questionQaDao := dao.QuestionQaDao{}
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
if err != nil {
responses.FailWithMessage("题库不存在", c)
return
}
// 处理返回值
g := dto.GetQuestionQaDto(questionQa)
// 加载明细选题规则
g = g.LoadItemContent(questionQa.ItemContent)
// 获取题库飞花令数据
if questionQa.QaDisplayType == 2 {
questionQaTokenDao := dao.QuestionQaTokenDao{}
maps := make(map[string]interface{})
maps["qa_id"] = questionQa.QaId
questionQaTokens, err := questionQaTokenDao.GetQuestionQaTokenPreloadList(maps)
if err != nil {
responses.FailWithMessage("题库不存在", c)
return
}
// 加载飞花令数据
g = g.LoadQuestionQaToken(questionQaTokens)
}
if questionQa.QaType == 2 {
// 加载飞花令数量当题库类型为2、3时存在
g = g.LoadTokenNum(questionQa.TokenNum)
}
if questionQa.QaType == 3 {
// 加载飞花令数量当题库类型为2、3时存在
g = g.LoadTokenNum(questionQa.TokenNum)
// 加载轮次数量当题库类型为3时存在
g = g.LoadRoundNum(questionQa.RoundNum)
}
if questionQa.QaType == 2 || questionQa.QaType == 3 {
// 加载飞花令题目数量规则当题库类型为2、3时存在。2表示飞花令后固定题目数量3表示飞花令后单个类型题目数量
g = g.LoadQaQuestionQuantityContent(questionQa.TokenQuestionContent)
}
// 加载题目计时
questionQaTimerDao := dao.QuestionQaTimerDao{}
questionQaTimers, err := questionQaTimerDao.GetQuestionQaTimerListByQaId(questionQa.QaId)
g = g.LoadQuestionQaTimerDto(questionQaTimers)
responses.OkWithData(g, c)
}