1111
This commit is contained in:
@@ -0,0 +1,231 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"knowledge/api/dao"
|
||||
"knowledge/api/dto"
|
||||
"knowledge/api/model"
|
||||
"knowledge/api/requests"
|
||||
"knowledge/api/responses"
|
||||
"knowledge/global"
|
||||
"knowledge/utils"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type BaseToken struct{}
|
||||
|
||||
// GetTokenPage 获取列表-分页
|
||||
func (r *BaseToken) GetTokenPage(c *gin.Context) {
|
||||
baseTokenRequest := requests.BaseTokenRequest{}
|
||||
req := baseTokenRequest.GetTokenPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
baseTokenDao := dao.BaseTokenDao{}
|
||||
baseToken, total, err := baseTokenDao.GetBaseTokenPageSearch(req, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
GetQuestionPageResponses := dto.GetBaseTokenListDto(baseToken)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = GetQuestionPageResponses
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetTokenList 获取列表
|
||||
func (r *BaseToken) GetTokenList(c *gin.Context) {
|
||||
baseTokenRequest := requests.BaseTokenRequest{}
|
||||
req := baseTokenRequest.GetTokenList
|
||||
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
|
||||
}
|
||||
|
||||
baseTokenDao := dao.BaseTokenDao{}
|
||||
baseToken, err := baseTokenDao.GetBaseTokenListSearch(req)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetBaseTokenListDto(baseToken)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
// AddBaseToken 新增
|
||||
func (r *BaseToken) AddBaseToken(c *gin.Context) {
|
||||
baseTokenRequest := requests.BaseTokenRequest{}
|
||||
req := baseTokenRequest.AddBaseToken
|
||||
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
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
// 新增飞花令
|
||||
baseTokenDao := dao.BaseTokenDao{}
|
||||
baseToken := &model.BaseToken{
|
||||
TokenName: req.TokenName,
|
||||
}
|
||||
baseToken, err := baseTokenDao.AddBaseToken(tx, baseToken)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("新增失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 新增飞花令明细
|
||||
baseTokenItemDao := dao.BaseTokenItemDao{}
|
||||
for _, item := range req.BaseTokenItem {
|
||||
baseTokenItem := &model.BaseTokenItem{
|
||||
TokenId: baseToken.TokenId,
|
||||
ItemName: item.ItemName,
|
||||
ItemImage: utils.RemoveOssDomain(item.ItemImage),
|
||||
ItemSort: item.ItemSort,
|
||||
}
|
||||
baseTokenItem, err := baseTokenItemDao.AddBaseTokenItem(tx, baseTokenItem)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("新增失败", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
|
||||
// PutBaseToken 修改
|
||||
func (r *BaseToken) PutBaseToken(c *gin.Context) {
|
||||
baseTokenRequest := requests.BaseTokenRequest{}
|
||||
req := baseTokenRequest.PutBaseToken
|
||||
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("token_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 将 id 转换为 int64 类型
|
||||
tokenId, err := strconv.ParseInt(id, 10, 64)
|
||||
if err != nil {
|
||||
responses.Fail(c)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取详情
|
||||
baseTokenDao := dao.BaseTokenDao{}
|
||||
baseToken, err := baseTokenDao.GetBaseTokenById(tokenId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("数据不存在", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 开始事务
|
||||
tx := global.Db.Begin()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
tx.Rollback()
|
||||
}
|
||||
}()
|
||||
|
||||
baseTokenData := make(map[string]interface{})
|
||||
if req.TokenName != baseToken.TokenName {
|
||||
baseTokenData["token_name"] = req.TokenName
|
||||
}
|
||||
|
||||
if len(baseTokenData) > 0 {
|
||||
err := baseTokenDao.EditBaseTokenById(tx, tokenId, baseTokenData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("修改失败", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 删除明细
|
||||
baseTokenItemDao := dao.BaseTokenItemDao{}
|
||||
err = baseTokenItemDao.DeleteBaseTokenItemByTokenId(tx, baseToken.TokenId)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("修改失败", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 新增飞花令明细
|
||||
for _, item := range req.BaseTokenItem {
|
||||
baseTokenItem := &model.BaseTokenItem{
|
||||
TokenId: baseToken.TokenId,
|
||||
ItemName: item.ItemName,
|
||||
ItemImage: utils.RemoveOssDomain(item.ItemImage),
|
||||
ItemSort: item.ItemSort,
|
||||
}
|
||||
baseTokenItem, err := baseTokenItemDao.AddBaseTokenItem(tx, baseTokenItem)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
responses.FailWithMessage("修改失败", c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tx.Commit()
|
||||
responses.Ok(c)
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"knowledge/api/dao"
|
||||
"knowledge/api/dto"
|
||||
"knowledge/api/requests"
|
||||
"knowledge/api/responses"
|
||||
"knowledge/global"
|
||||
"knowledge/utils"
|
||||
)
|
||||
|
||||
type BaseTokenItem struct{}
|
||||
|
||||
// GetBaseTokenItemPage 获取列表-分页
|
||||
func (r *BaseTokenItem) GetBaseTokenItemPage(c *gin.Context) {
|
||||
baseTokenItemRequest := requests.BaseTokenItemRequest{}
|
||||
req := baseTokenItemRequest.GetBaseTokenItemPage
|
||||
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
|
||||
}
|
||||
|
||||
if req.Page == 0 {
|
||||
req.Page = 1
|
||||
}
|
||||
|
||||
if req.PageSize == 0 {
|
||||
req.PageSize = 20
|
||||
}
|
||||
|
||||
baseTokenItemDao := dao.BaseTokenItemDao{}
|
||||
baseTokenItem, total, err := baseTokenItemDao.GetBaseTokenItemPageSearch(req, req.Page, req.PageSize)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetBaseTokenItemListDto(baseTokenItem)
|
||||
|
||||
result := make(map[string]interface{})
|
||||
result["page"] = req.Page
|
||||
result["page_size"] = req.PageSize
|
||||
result["total"] = total
|
||||
result["data"] = g
|
||||
responses.OkWithData(result, c)
|
||||
}
|
||||
|
||||
// GetBaseTokenItemList 获取列表
|
||||
func (r *BaseTokenItem) GetBaseTokenItemList(c *gin.Context) {
|
||||
baseTokenItemRequest := requests.BaseTokenItemRequest{}
|
||||
req := baseTokenItemRequest.GetBaseTokenItemList
|
||||
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
|
||||
}
|
||||
|
||||
baseTokenItemDao := dao.BaseTokenItemDao{}
|
||||
baseTokenItem, err := baseTokenItemDao.GetBaseTokenItemListSearch(req)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetBaseTokenItemListDto(baseTokenItem)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
return
|
||||
}
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
@@ -11,4 +11,6 @@ type Api struct {
|
||||
Label // 标签
|
||||
Static // 统计
|
||||
Share // 分享
|
||||
BaseToken // 基础数据-飞花令
|
||||
BaseTokenItem // 基础数据-飞花令-明细
|
||||
}
|
||||
|
||||
@@ -75,13 +75,22 @@ func (r *QuestionQa) AddQuestionQa(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 参数验证
|
||||
for _, item := range req.Item {
|
||||
for _, item := range req.BaseTokenItem {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 业务处理
|
||||
questionQaService := service.QuestionQaService{}
|
||||
_, err := questionQaService.AddQuestionQa(req)
|
||||
@@ -109,13 +118,22 @@ func (r *QuestionQa) PutQuestionQa(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 参数验证
|
||||
for _, item := range req.Item {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
id := c.Param("qa_id")
|
||||
if id == "" {
|
||||
responses.FailWithMessage("缺少参数", c)
|
||||
@@ -272,13 +290,23 @@ func (r *QuestionQa) GetQuestionQa(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 业务处理
|
||||
questionQaService := service.QuestionQaService{}
|
||||
getQuestionQaResponses, err := questionQaService.GetQuestionQa(qaId)
|
||||
questionQaDao := dao.QuestionQaDao{}
|
||||
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
responses.FailWithMessage("题库不存在", c)
|
||||
return
|
||||
}
|
||||
|
||||
responses.OkWithData(getQuestionQaResponses, c)
|
||||
if questionQa.QaStatus == 2 {
|
||||
responses.FailWithMessage("题库已失效", c)
|
||||
return
|
||||
}
|
||||
|
||||
// 处理返回值
|
||||
g := dto.GetQuestionQaDto(questionQa)
|
||||
|
||||
// 加载明细选题规则
|
||||
g = g.LoadItemContent(questionQa.ItemContent)
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
+97
-6
@@ -2,11 +2,14 @@ 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"
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Share struct{}
|
||||
@@ -27,12 +30,100 @@ func (r *Share) GetShare(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 业务处理
|
||||
shareService := service.ShareService{}
|
||||
getShareResponses, err := shareService.GetShare(req)
|
||||
if err != nil {
|
||||
responses.FailWithMessage(err.Error(), c)
|
||||
questionQaDao := dao.QuestionQaDao{}
|
||||
questionQaItemDao := dao.QuestionQaItemDao{}
|
||||
questionDao := dao.QuestionDao{}
|
||||
|
||||
// 获取题库数据
|
||||
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
|
||||
}
|
||||
|
||||
responses.OkWithData(getShareResponses, c)
|
||||
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
|
||||
}
|
||||
|
||||
g := &dto.ShareDto{}
|
||||
|
||||
// 加载题库数据
|
||||
g.QuestionQa = dto.GetQuestionQaDto(questionQa)
|
||||
|
||||
// 题目数据-必备选中
|
||||
maps = make(map[string]interface{})
|
||||
maps["qa_id"] = questionQa.QaId
|
||||
maps["is_must_select"] = 1
|
||||
questionQaItems, err := questionQaItemDao.GetQuestionQaItemList(maps)
|
||||
if err == nil && len(questionQaItems) > 0 {
|
||||
shareQuestionDtos := make([]*dto.ShareQuestionDto, len(questionQaItems))
|
||||
|
||||
for i, item := range questionQaItems {
|
||||
// 获取题目数据
|
||||
question, err := questionDao.GetQuestionById(item.QuestionId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("题目错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
shareQuestionDto := dto.GetShareQuestionDto(question)
|
||||
|
||||
shareQuestionDto.IsMustSelect = item.IsMustSelect
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
shareQuestionDtos[i] = shareQuestionDto
|
||||
}
|
||||
|
||||
g.Question = shareQuestionDtos
|
||||
}
|
||||
|
||||
// 题目数据-剩余随机数量
|
||||
remainingQuantity := questionQa.QaQuantity - len(questionQaItems)
|
||||
if remainingQuantity > 0 {
|
||||
// 随机获取剩余题目
|
||||
maps = make(map[string]interface{})
|
||||
maps["qa_id"] = questionQa.QaId
|
||||
maps["is_must_select"] = 0
|
||||
questionQaItems, err = questionQaItemDao.GetQuestionQaItemListRand(maps, remainingQuantity)
|
||||
if err == nil && len(questionQaItems) > 0 {
|
||||
for _, item := range questionQaItems {
|
||||
// 获取题目数据
|
||||
question, err := questionDao.GetQuestionById(item.QuestionId)
|
||||
if err != nil {
|
||||
responses.FailWithMessage("题目错误", c)
|
||||
return
|
||||
}
|
||||
|
||||
shareQuestionDto := dto.GetShareQuestionDto(question)
|
||||
|
||||
shareQuestionDto.IsMustSelect = item.IsMustSelect
|
||||
|
||||
// 将转换后的结构体添加到新切片中
|
||||
g.Question = append(g.Question, shareQuestionDto)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 按照难度重新排序题目顺序
|
||||
sort.SliceStable(g.Question, func(i, j int) bool {
|
||||
return g.Question[i].Difficulty < g.Question[j].Difficulty
|
||||
})
|
||||
|
||||
responses.OkWithData(g, c)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user