From 1ecc54ef2416512e89f15f70569efaad7f684c10 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Thu, 21 Nov 2024 17:32:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=20=20=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E9=A2=98=E7=9B=AE=E5=85=B3=E8=81=94=E7=9A=84=E9=A2=98?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E9=87=8F=E6=98=AF=E5=90=A6=E5=85=85=E8=B6=B3?= =?UTF-8?q?-=E5=87=8F=E5=8E=BB=E5=AF=B9=E5=BA=94=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/controller/question.go | 12 +++++++++++- api/dao/QuestionQaItem.go | 9 +++++++++ api/service/Question.go | 8 ++++++++ api/service/QuestionQa.go | 31 +++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/api/controller/question.go b/api/controller/question.go index effdd75..d546f28 100644 --- a/api/controller/question.go +++ b/api/controller/question.go @@ -240,6 +240,16 @@ func (b *Question) PutQuestionStatus(c *gin.Context) { return } + if req.QuestionStatus == 2 { + // 检测题目关联的题库数量是否充足-减去对应数量后 + questionQaService := service.QuestionQaService{} + res, err := questionQaService.CheckQuestionRelationQaQuantitySub(question.QuestionId, 1) + if res == false { + responses.FailWithMessage(err.Error(), c) + return + } + } + // 开始事务 tx := global.Db.Begin() defer func() { @@ -257,7 +267,7 @@ func (b *Question) PutQuestionStatus(c *gin.Context) { return } - tx.Commit() + //tx.Commit() responses.Ok(c) } diff --git a/api/dao/QuestionQaItem.go b/api/dao/QuestionQaItem.go index c63d0b5..1877aa5 100644 --- a/api/dao/QuestionQaItem.go +++ b/api/dao/QuestionQaItem.go @@ -329,6 +329,15 @@ func (r *QuestionQaItemDao) GetQuestionQaItemNotInListRand(maps interface{}, que return m, nil } +// GetQuestionQaItemListByQuestionIdDistinctQaId 获取数据-QuestionId-去重复(QaId) +func (r *QuestionQaItemDao) GetQuestionQaItemListByQuestionIdDistinctQaId(questionId int64) (m []*model.QuestionQaItem, err error) { + err = global.Db.Where("question_id = ?", questionId).Distinct("qa_id").Find(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + //subQuery := global.Db.Model(&model.Question{}). //Where("kb_question.question_id = kb_question_qa_item.question_id"). //Where("question_status = ?", 1). diff --git a/api/service/Question.go b/api/service/Question.go index 0a56014..5f07693 100644 --- a/api/service/Question.go +++ b/api/service/Question.go @@ -872,6 +872,14 @@ func (r *QuestionService) DeleteQuestion(req requests.DeleteQuestion) (bool, err return false, errors.New("题目不存在") } + // 检测题目关联的题库数量是否充足-减去对应数量后 + questionQaService := QuestionQaService{} + res, err := questionQaService.CheckQuestionRelationQaQuantitySub(questionId, 1) + if res == false { + tx.Rollback() + return false, err + } + // 删除选项 err = questionOptionDao.DeleteQuestionOptionByQuestionId(tx, questionId) if err != nil { diff --git a/api/service/QuestionQa.go b/api/service/QuestionQa.go index b40ea3c..f106b2a 100644 --- a/api/service/QuestionQa.go +++ b/api/service/QuestionQa.go @@ -1323,3 +1323,34 @@ func (r *QuestionQaService) CheckQuestionQaItemRepeat(items []*requests.Question } return true } + +// CheckQuestionRelationQaQuantitySub 检测题目关联的题库数量是否充足-减去对应数量后 +func (r *QuestionQaService) CheckQuestionRelationQaQuantitySub(questionId int64, num int) (bool, error) { + // 获取关联题库id + questionQaItemDao := dao.QuestionQaItemDao{} + questionQaItems, err := questionQaItemDao.GetQuestionQaItemListByQuestionIdDistinctQaId(questionId) + if err != nil { + return false, err + } + + questionQaDao := dao.QuestionQaDao{} + for _, item := range questionQaItems { + // 获取题库数据 + questionQa, err := questionQaDao.GetQuestionQaById(item.QaId) + if err != nil { + return false, err + } + + // 获取明细数据 + questionQaItems, err = questionQaItemDao.GetQuestionQaItemListByQaId(item.QaId) + if err != nil { + return false, err + } + + if (len(questionQaItems) - num) < questionQa.QaQuantity { + return false, errors.New("关联题库:" + questionQa.QaName + " 题目数量不足") + } + } + + return true, nil +}