package questionnaire_survey import ( "fmt" "surveyService/model" "surveyService/response" "surveyService/service/questionnaire_subject" "surveyService/validators" "github.com/samber/lo" "gorm.io/gorm" ) // 获取问卷下的问题库列表 func ListSubjects(surveyId int64) []*model.QuestionnaireSurveyQuestionnaireSubject { var subjects []*model.QuestionnaireSurveyQuestionnaireSubject // 获取问卷下的问题库列表 model.DB.Where("survey_id = ?", surveyId).Preload("Subject").Order("sort asc").Order("id asc").Find(&subjects) return subjects } // 删除问卷下的问题库 func DeleteSubject(surveyId int64, subjectIds []int64) *response.ErrCode { model.DB.Where("survey_id = ?", surveyId).Where("id in (?)", subjectIds).Delete(&model.QuestionnaireSurveyQuestionnaireSubject{}) return nil } // 添加问卷下的问题库 func AddSubject(surveyId int64, subjectIds []int64) *response.ErrCode { // 检查模板是否存在 _, findErr := Find(surveyId) if findErr != nil { return findErr } if len(subjectIds) > 0 { // 检查问题是否都存在 existsSubjects := questionnaire_subject.ListByIds(subjectIds) if len(existsSubjects) < len(subjectIds) { return &response.ErrCode{ Code: response.ERROR, Msg: fmt.Sprintf("有%d个问题无效或不存在", len(subjectIds)-len(existsSubjects)), } } // 将已经存在的问卷下的问题过滤掉 var existsSubjectIds []int64 model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("survey_id = ?", surveyId).Where("subject_id in (?)", subjectIds).Pluck("subject_id", &existsSubjectIds) // 取差集 diffSubjectIds, _ := lo.Difference(subjectIds, existsSubjectIds) if len(diffSubjectIds) > 0 { var surveySubjects []*model.QuestionnaireSurveyQuestionnaireSubject for _, subjectId := range diffSubjectIds { surveySubjects = append(surveySubjects, &model.QuestionnaireSurveyQuestionnaireSubject{ SurveyID: surveyId, SubjectID: subjectId, Sort: 999, }) } // 批量插入 model.DB.CreateInBatches(&surveySubjects, 100) } } return nil } // 批量修改排序 func UpdateSort(surveyId int64, surveySubjectIds []int64) *response.ErrCode { // 检查模板是否存在 _, findErr := Find(surveyId) if findErr != nil { return findErr } if len(surveySubjectIds) > 0 { sqlExpr := "case id" for surveySubjectIndex, surveySubjectId := range surveySubjectIds { sqlExpr += " when " + fmt.Sprint(surveySubjectId) + " then " + fmt.Sprint(surveySubjectIndex+1) } sqlExpr += " else sort end" model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("survey_id = ?", surveyId).Update("sort", gorm.Expr(sqlExpr)) } return nil } // 修改是否必填 func UpdateIsRequired(id int64, isRequired bool) *response.ErrCode { model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("id = ?", id).Update("is_required", isRequired) return nil } // 格式化 func FormatSurveySubject(surveySubject *model.QuestionnaireSurveyQuestionnaireSubject) *validators.SurveyQuestionnaireSubject { if surveySubject == nil { return nil } return &validators.SurveyQuestionnaireSubject{ ID: surveySubject.ID, Sort: surveySubject.Sort, IsRequired: surveySubject.IsRequired == 1, QuestionnaireSubject: questionnaire_subject.Format(&surveySubject.Subject), } }