107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"knowledge/api/dao"
|
|
"knowledge/api/requests"
|
|
"knowledge/global"
|
|
"strconv"
|
|
)
|
|
|
|
type QuestionQaItemService struct {
|
|
}
|
|
|
|
// DeleteQuestionQaItem 删除问答题库明细
|
|
func (r *QuestionQaItemService) DeleteQuestionQaItem(req requests.DeleteQuestionQaItem) (bool, error) {
|
|
questionQaItemDao := dao.QuestionQaItemDao{}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
for _, itemId := range req.ItemId {
|
|
// 将字符串转换为int64类型
|
|
itemId, err := strconv.ParseInt(itemId, 10, 64)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New("删除失败")
|
|
}
|
|
|
|
_, err = questionQaItemDao.GetQuestionQaItemById(itemId)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New("明细不存在")
|
|
}
|
|
|
|
err = questionQaItemDao.DeleteQuestionQaItemById(tx, itemId)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New("删除失败")
|
|
}
|
|
}
|
|
|
|
tx.Commit()
|
|
|
|
return true, nil
|
|
}
|
|
|
|
// PutQuestionQaItemMust 修改必选
|
|
func (r *QuestionQaItemService) PutQuestionQaItemMust(itemId int64, req requests.PutQuestionQaItemMust) (bool, error) {
|
|
questionQaItemDao := dao.QuestionQaItemDao{}
|
|
questionQaItem, err := questionQaItemDao.GetQuestionQaItemById(itemId)
|
|
if err != nil {
|
|
return false, errors.New("题目不存在")
|
|
}
|
|
|
|
// 分享密码
|
|
if req.IsMustSelect == questionQaItem.IsMustSelect {
|
|
return true, nil
|
|
}
|
|
|
|
// 检测必选数量
|
|
if req.IsMustSelect == 1 {
|
|
// 获取题库数据
|
|
questionQaDao := dao.QuestionQaDao{}
|
|
questionQa, err := questionQaDao.GetQuestionQaById(questionQaItem.QaId)
|
|
if err != nil {
|
|
return false, errors.New("题库错误")
|
|
}
|
|
|
|
maps := make(map[string]interface{})
|
|
maps["qa_id"] = questionQaItem.QaId
|
|
maps["is_must_select"] = 1
|
|
questionQaItems, err := questionQaItemDao.GetQuestionQaItemList(maps)
|
|
if err != nil {
|
|
return false, errors.New("内部错误")
|
|
}
|
|
|
|
if len(questionQaItems) > questionQa.QaQuantity {
|
|
return false, errors.New("必选题目已超出题库所需数量")
|
|
}
|
|
}
|
|
|
|
// 开始事务
|
|
tx := global.Db.Begin()
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
|
|
questionQaItemData := make(map[string]interface{})
|
|
questionQaItemData["is_must_select"] = req.IsMustSelect
|
|
|
|
err = questionQaItemDao.EditQuestionQaItemById(tx, itemId, questionQaItemData)
|
|
if err != nil {
|
|
tx.Rollback()
|
|
return false, errors.New(err.Error())
|
|
}
|
|
|
|
tx.Commit()
|
|
return true, nil
|
|
}
|