107 lines
2.7 KiB
Go
107 lines
2.7 KiB
Go
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
|
|
}
|