This commit is contained in:
2024-09-27 10:44:43 +08:00
parent 0ee193348a
commit 65f3511ecb
25 changed files with 1368 additions and 209 deletions
+1
View File
@@ -48,6 +48,7 @@ func (r *AdminUserService) Login(req requests.Login) (res *dto.AdminUserDto, err
token := &utils.Token{
UserId: strconv.FormatInt(adminUser.UserId, 10),
Client: 2,
}
// 生成jwt
+85 -30
View File
@@ -5,7 +5,6 @@ import (
"fmt"
"github.com/goccy/go-json"
"knowledge/api/dao"
"knowledge/api/dto"
"knowledge/api/model"
"knowledge/api/requests"
"knowledge/global"
@@ -43,7 +42,10 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
}
// 处理明细选题规则
itemContent, _ := json.Marshal(req.Item)
questionQaItemContent, err := json.Marshal(req.QuestionQaItem)
if err != nil {
return false, errors.New("明细题目错误")
}
// 开始事务
tx := global.Db.Begin()
@@ -64,7 +66,7 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
QaPassword: req.QaPassword,
OpenNumber: 0,
Image: req.Image,
ItemContent: string(itemContent),
ItemContent: string(questionQaItemContent),
}
questionQaDao := dao.QuestionQaDao{}
@@ -92,7 +94,7 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
// 新增问答题库题目列表
questionDao := dao.QuestionDao{}
questionQaItemDao := dao.QuestionQaItemDao{}
for _, item := range req.Item {
for _, item := range req.QuestionQaItem {
// 验证一级标签
firstLabelId, err := strconv.ParseInt(item.FirstLabelId, 10, 64)
if err != nil {
@@ -153,6 +155,7 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
return false, err
}
// 新增明细题目
for _, question := range questions {
questionQaItem := &model.QuestionQaItem{
QaId: questionQa.QaId,
@@ -166,6 +169,38 @@ func (r *QuestionQaService) AddQuestionQa(req requests.AddQuestionQa) (bool, err
}
}
// 新增飞花令
if req.QaDisplayType == 2 {
questionQaTokenDao := dao.QuestionQaTokenDao{}
baseTokenDao := dao.BaseTokenDao{}
for i, item := range req.BaseTokenItem {
tokenId, err := strconv.ParseInt(item.TokenId, 10, 64)
if err != nil {
tx.Rollback()
return false, err
}
// 检测飞花令基础数据
_, err = baseTokenDao.GetBaseTokenById(tokenId)
if err != nil {
tx.Rollback()
return false, err
}
questionQaToken := &model.QuestionQaToken{
QaId: questionQa.QaId,
TokenId: tokenId,
Sort: i + 1,
}
questionQaToken, err = questionQaTokenDao.AddQuestionQaToken(tx, questionQaToken)
if err != nil {
tx.Rollback()
return false, err
}
}
}
tx.Commit()
return true, nil
}
@@ -181,7 +216,7 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
}
if questionQa.QaStatus == 2 {
return false, errors.New("题库已失效")
return false, errors.New("题库已失效,请重新创建")
}
// 开始事务
@@ -242,9 +277,9 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
}
// 处理明细选题规则
itemContent, _ := json.Marshal(req.Item)
if string(itemContent) != questionQa.ItemContent {
questionQaData["item_content"] = string(itemContent)
questionQaItemContent, _ := json.Marshal(req.QuestionQaItem)
if string(questionQaItemContent) != questionQa.ItemContent {
questionQaData["item_content"] = string(questionQaItemContent)
}
// 题目数量
@@ -267,7 +302,7 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
return false, err
}
for _, item := range req.Item {
for _, item := range req.QuestionQaItem {
// 验证一级标签
firstLabelId, err := strconv.ParseInt(item.FirstLabelId, 10, 64)
if err != nil {
@@ -350,6 +385,47 @@ func (r *QuestionQaService) PutQuestionQa(qaId int64, req requests.PutQuestionQa
}
}
// 删除飞花令
questionQaTokenDao := dao.QuestionQaTokenDao{}
maps := make(map[string]interface{})
maps["qa_id"] = questionQa.QaId
err = questionQaTokenDao.DeleteQuestionQaToken(tx, maps)
if err != nil {
tx.Rollback()
return false, errors.New(err.Error())
}
// 新增飞花令
if req.QaDisplayType == 2 {
baseTokenDao := dao.BaseTokenDao{}
for i, item := range req.BaseTokenItem {
tokenId, err := strconv.ParseInt(item.TokenId, 10, 64)
if err != nil {
tx.Rollback()
return false, err
}
// 检测飞花令基础数据
_, err = baseTokenDao.GetBaseTokenById(tokenId)
if err != nil {
tx.Rollback()
return false, err
}
questionQaToken := &model.QuestionQaToken{
QaId: questionQa.QaId,
TokenId: tokenId,
Sort: i + 1,
}
questionQaToken, err = questionQaTokenDao.AddQuestionQaToken(tx, questionQaToken)
if err != nil {
tx.Rollback()
return false, err
}
}
}
tx.Commit()
return true, nil
}
@@ -480,24 +556,3 @@ func (r *QuestionQaService) PutQuestionQaRule(qaId int64, req requests.PutQuesti
tx.Commit()
return true, nil
}
// GetQuestionQa 获取问答题库详情
func (r *QuestionQaService) GetQuestionQa(qaId int64) (g *dto.QuestionQaDto, err error) {
questionQaDao := dao.QuestionQaDao{}
questionQa, err := questionQaDao.GetQuestionQaById(qaId)
if err != nil {
return nil, errors.New("题库不存在")
}
if questionQa.QaStatus == 2 {
return nil, errors.New("题库已失效")
}
// 处理返回值
g = dto.GetQuestionQaDto(questionQa)
// 加载明细选题规则
g = g.LoadItemContent(questionQa.ItemContent)
return g, nil
}
-106
View File
@@ -1,106 +0,0 @@
package service
import (
"errors"
"knowledge/api/dao"
"knowledge/api/dto"
"knowledge/api/requests"
"sort"
"time"
)
type ShareService struct {
}
func (r *ShareService) GetShare(req requests.GetShare) (g *dto.ShareDto, err error) {
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 {
return nil, errors.New("题库不存在")
}
if questionQa.QaStatus == 2 {
return nil, errors.New("题库已失效")
}
if questionQa.QaPassword != req.QaPassword {
return nil, errors.New("密码错误")
}
// 检测过期时间
now := time.Now()
qaExpireTime := time.Time(questionQa.QaExpireTime)
if qaExpireTime.Before(now) {
return nil, errors.New("题库已失效")
}
// 加载题库数据
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 {
return nil, errors.New("题目错误")
}
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, 1)
if err == nil && len(questionQaItems) > 0 {
for _, item := range questionQaItems {
// 获取题目数据
question, err := questionDao.GetQuestionById(item.QuestionId)
if err != nil {
return nil, errors.New("题目错误")
}
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
})
return g, nil
}