254 lines
5.5 KiB
Go
254 lines
5.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"knowledge/api/dao"
|
|
"knowledge/api/dto"
|
|
"knowledge/api/requests"
|
|
"knowledge/api/responses"
|
|
"knowledge/api/service"
|
|
"knowledge/consts"
|
|
"knowledge/global"
|
|
"knowledge/utils"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type Share struct{}
|
|
|
|
// GetBackgroundImage 获取背景图
|
|
func (r *Share) GetBackgroundImage(c *gin.Context) {
|
|
shareRequest := requests.ShareRequest{}
|
|
req := shareRequest.GetBackgroundImage
|
|
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{}
|
|
|
|
// 获取题库数据
|
|
maps := make(map[string]interface{})
|
|
maps["qa_share_id"] = req.QaShareId
|
|
questionQa, err := questionQaDao.GetQuestionQa(maps)
|
|
if err != nil || questionQa == nil {
|
|
responses.FailWithMessage("题库不存在", c)
|
|
return
|
|
}
|
|
|
|
if questionQa.QaStatus == 2 {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
// 检测过期时间
|
|
now := time.Now()
|
|
qaExpireTime := time.Time(questionQa.QaExpireTime)
|
|
if qaExpireTime.Before(now) {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
image := utils.AddOssDomain(questionQa.Image)
|
|
responses.OkWithData(image, c)
|
|
}
|
|
|
|
// ShareAuth 授权
|
|
func (r *Share) ShareAuth(c *gin.Context) {
|
|
shareRequest := requests.ShareRequest{}
|
|
req := shareRequest.ShareAuth
|
|
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{}
|
|
|
|
// 获取题库数据
|
|
maps := make(map[string]interface{})
|
|
maps["qa_share_id"] = req.QaShareId
|
|
questionQa, err := questionQaDao.GetQuestionQa(maps)
|
|
if err != nil || questionQa == nil {
|
|
responses.FailWithMessage("题库不存在", c)
|
|
return
|
|
}
|
|
|
|
if questionQa.QaStatus == 2 {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
if questionQa.QaPassword != req.QaPassword {
|
|
responses.FailWithMessage("密码错误", c)
|
|
return
|
|
}
|
|
|
|
// 检测过期时间
|
|
now := time.Now()
|
|
qaExpireTime := time.Time(questionQa.QaExpireTime)
|
|
if qaExpireTime.Before(now) {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
token := &utils.Token{
|
|
Client: 1,
|
|
QaId: fmt.Sprintf("%d", questionQa.QaId),
|
|
}
|
|
|
|
// 生成jwt
|
|
ttl := 5 * time.Hour
|
|
jwt, err := token.NewJWT(ttl)
|
|
if err != nil {
|
|
responses.FailWithMessage("题库错误", c)
|
|
return
|
|
}
|
|
|
|
// 处理返回值
|
|
g := dto.ShareAuthDto{}
|
|
|
|
g.Token = jwt
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// GetQuestionQa 获取知识问答数据
|
|
func (r *Share) GetQuestionQa(c *gin.Context) {
|
|
// 获取知识问答id
|
|
qaId := c.GetInt64("QaId")
|
|
if qaId == 0 {
|
|
c.JSON(http.StatusUnauthorized, gin.H{
|
|
"message": "请输入密码后查看",
|
|
"code": consts.TokenError,
|
|
"data": "",
|
|
})
|
|
return
|
|
}
|
|
|
|
questionQaDao := dao.QuestionQaDao{}
|
|
|
|
// 获取题库数据
|
|
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
|
|
if err != nil || questionQa == nil {
|
|
responses.FailWithMessage("题库不存在", c)
|
|
return
|
|
}
|
|
|
|
if questionQa.QaStatus == 2 {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
// 检测过期时间
|
|
now := time.Now()
|
|
qaExpireTime := time.Time(questionQa.QaExpireTime)
|
|
if qaExpireTime.Before(now) {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
g := dto.GetQuestionQaDto(questionQa)
|
|
|
|
// 加载题目计时
|
|
questionQaTimerDao := dao.QuestionQaTimerDao{}
|
|
questionQaTimers, err := questionQaTimerDao.GetQuestionQaTimerListByQaId(questionQa.QaId)
|
|
g = g.LoadQuestionQaTimerDto(questionQaTimers)
|
|
|
|
responses.OkWithData(g, c)
|
|
}
|
|
|
|
// GetQuestion 获取题目数据
|
|
func (r *Share) GetQuestion(c *gin.Context) {
|
|
// 获取知识问答id
|
|
qaId := c.GetInt64("QaId")
|
|
if qaId == 0 {
|
|
c.JSON(http.StatusUnauthorized, gin.H{
|
|
"message": "请输入密码后查看",
|
|
"code": consts.TokenError,
|
|
"data": "",
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
questionQaDao := dao.QuestionQaDao{}
|
|
|
|
// 获取题库数据
|
|
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
|
|
if err != nil || questionQa == nil {
|
|
responses.FailWithMessage("题库不存在", c)
|
|
return
|
|
}
|
|
|
|
if questionQa.QaStatus == 2 {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
// 检测过期时间
|
|
now := time.Now()
|
|
qaExpireTime := time.Time(questionQa.QaExpireTime)
|
|
if qaExpireTime.Before(now) {
|
|
responses.FailWithMessage("题库已失效", c)
|
|
return
|
|
}
|
|
|
|
questionQaService := service.QuestionQaService{}
|
|
|
|
// 题库类型1-常规模式
|
|
if questionQa.QaType == 1 {
|
|
g, err := questionQaService.GetShareQuestionQaForTypeOne(questionQa)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
return
|
|
}
|
|
|
|
// 题库类型2-固定套题模式
|
|
if questionQa.QaType == 2 {
|
|
g, err := questionQaService.GetShareQuestionQaForTypeTwo(questionQa)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
return
|
|
}
|
|
|
|
// 题库类型3-多轮固定题型模式
|
|
if questionQa.QaType == 3 {
|
|
g, err := questionQaService.GetShareQuestionQaForTypeThree(questionQa)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
responses.OkWithData(g, c)
|
|
return
|
|
}
|
|
|
|
// 记录问答题库打开次数
|
|
_ = questionQaService.RecordQuestionQaOpenNum(global.Db, questionQa.QaId)
|
|
|
|
// 返回
|
|
responses.FailWithMessage("题库错误", c)
|
|
return
|
|
}
|