1111
This commit is contained in:
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user