123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- 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),
- }
- }
|