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{} qaId, err := strconv.ParseInt(req.QaId, 10, 64) if err != nil { return false, errors.New("删除失败") } // 获取题库数据 questionQaDao := dao.QuestionQaDao{} questionQa, err := questionQaDao.GetQuestionQaById(qaId) if err != nil { return false, errors.New("题库错误") } // 获取题库明细数据 questionQaItems, err := questionQaItemDao.GetQuestionQaItemListByQaId(qaId) if err != nil { return false, errors.New("题库错误") } // 检测剩余题目数量是否满足使用 if questionQa.QaQuantity > (len(questionQaItems) - len(req.ItemId)) { return false, errors.New("删除后剩余题目不满足题库使用") } // 开始事务 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 }