diff --git a/api/controller/CaseItem.go b/api/controller/CaseItem.go index 3753e71..1698635 100644 --- a/api/controller/CaseItem.go +++ b/api/controller/CaseItem.go @@ -7,6 +7,7 @@ import ( "case-admin-api/api/responses" "case-admin-api/global" "case-admin-api/utils" + "fmt" "github.com/gin-gonic/gin" "strconv" ) @@ -288,52 +289,83 @@ func (b *CaseItem) PutCaseItem(c *gin.Context) { return } + // 检测问题情况 + var deleteCaseItemQuestions []*model.CaseItemQuestion + var addCaseItemQuestions []*requests.CaseItemQuestion + + for _, itemQuestion := range req.CaseItemQuestion { + if itemQuestion.QuestionId == "" { + addCaseItemQuestions = append(addCaseItemQuestions, itemQuestion) + } + } + + for _, question := range caseItemQuestions { + isExist := false + for _, itemQuestion := range req.CaseItemQuestion { + if itemQuestion.QuestionId == "" { + continue + } + + if itemQuestion.QuestionId == fmt.Sprintf("%d", question.QuestionId) { + isExist = true + break + } + } + + // 如果没有找到匹配项,则需要删除 + if !isExist { + deleteCaseItemQuestions = append(deleteCaseItemQuestions, question) + } + } + statCaseQuestionDao := dao.StatCaseQuestionDao{} caseUserAnswerDao := dao.CaseUserAnswerDao{} - for _, question := range caseItemQuestions { - if question.QuestionType == 1 || question.QuestionType == 2 || question.QuestionType == 4 { - // 删除对应答题记录 + if len(deleteCaseItemQuestions) > 0 { + for _, question := range deleteCaseItemQuestions { + if question.QuestionType == 1 || question.QuestionType == 2 || question.QuestionType == 4 { + // 删除对应答题记录 + maps = make(map[string]interface{}) + maps["question_id"] = question.QuestionId + err := statCaseQuestionDao.DeleteStatCaseQuestion(tx, maps) + if err != nil { + tx.Rollback() + responses.FailWithMessage("操作失败", c) + return + } + + // 删除问题选项 + maps = make(map[string]interface{}) + maps["question_id"] = question.QuestionId + err = caseItemQuestionOptionDao.DeleteCaseItemQuestionOption(tx, maps) + if err != nil { + tx.Rollback() + responses.FailWithMessage("操作失败", c) + return + } + } + + // 删除用户答题记录 maps = make(map[string]interface{}) maps["question_id"] = question.QuestionId - err := statCaseQuestionDao.DeleteStatCaseQuestion(tx, maps) + err := caseUserAnswerDao.DeleteCaseUserAnswer(tx, maps) if err != nil { tx.Rollback() responses.FailWithMessage("操作失败", c) return } - // 删除问题选项 - maps = make(map[string]interface{}) - maps["question_id"] = question.QuestionId - err = caseItemQuestionOptionDao.DeleteCaseItemQuestionOption(tx, maps) + // 删除问题 + err = caseItemQuestionDao.DeleteCaseItemQuestionById(tx, question.QuestionId) if err != nil { tx.Rollback() responses.FailWithMessage("操作失败", c) return } } - - // 删除用户答题记录 - maps = make(map[string]interface{}) - maps["question_id"] = question.QuestionId - err := caseUserAnswerDao.DeleteCaseUserAnswer(tx, maps) - if err != nil { - tx.Rollback() - responses.FailWithMessage("操作失败", c) - return - } - - // 删除问题 - err = caseItemQuestionDao.DeleteCaseItemQuestionById(tx, question.QuestionId) - if err != nil { - tx.Rollback() - responses.FailWithMessage("操作失败", c) - return - } } // 新增病例题目 - if len(req.CaseItemQuestion) > 0 { + if len(addCaseItemQuestions) > 0 { for _, question := range req.CaseItemQuestion { caseItemQuestion := &model.CaseItemQuestion{ CaseId: caseItem.CaseId, diff --git a/api/requests/CaseItem.go b/api/requests/CaseItem.go index 31b390e..c5e39f1 100644 --- a/api/requests/CaseItem.go +++ b/api/requests/CaseItem.go @@ -16,6 +16,7 @@ type AddCaseItem struct { // CaseItemQuestion 病历表-明细-题目 type CaseItemQuestion struct { + QuestionId string `json:"question_id" form:"question_id" label:"题目标识"` QuestionName string `json:"question_name" form:"question_name" label:"题目名称" validate:"required"` QuestionType int `json:"question_type" form:"question_type" label:"题目类型" validate:"required,oneof=1 2 3 4"` QuestionAnswer string `json:"question_answer" form:"question_answer" label:"答案"`