survey_subject.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package questionnaire_survey
  2. import (
  3. "fmt"
  4. "surveyService/model"
  5. "surveyService/response"
  6. "surveyService/service/questionnaire_subject"
  7. "surveyService/validators"
  8. "github.com/samber/lo"
  9. "gorm.io/gorm"
  10. )
  11. // 获取问卷下的问题库列表
  12. func ListSubjects(surveyId int64) []*model.QuestionnaireSurveyQuestionnaireSubject {
  13. var subjects []*model.QuestionnaireSurveyQuestionnaireSubject
  14. // 获取问卷下的问题库列表
  15. model.DB.Where("survey_id = ?", surveyId).Preload("Subject").Order("sort asc").Order("id asc").Find(&subjects)
  16. return subjects
  17. }
  18. // 删除问卷下的问题库
  19. func DeleteSubject(surveyId int64, subjectIds []int64) *response.ErrCode {
  20. model.DB.Where("survey_id = ?", surveyId).Where("id in (?)", subjectIds).Delete(&model.QuestionnaireSurveyQuestionnaireSubject{})
  21. return nil
  22. }
  23. // 添加问卷下的问题库
  24. func AddSubject(surveyId int64, subjectIds []int64) *response.ErrCode {
  25. // 检查模板是否存在
  26. _, findErr := Find(surveyId)
  27. if findErr != nil {
  28. return findErr
  29. }
  30. if len(subjectIds) > 0 {
  31. // 检查问题是否都存在
  32. existsSubjects := questionnaire_subject.ListByIds(subjectIds)
  33. if len(existsSubjects) < len(subjectIds) {
  34. return &response.ErrCode{
  35. Code: response.ERROR,
  36. Msg: fmt.Sprintf("有%d个问题无效或不存在", len(subjectIds)-len(existsSubjects)),
  37. }
  38. }
  39. // 将已经存在的问卷下的问题过滤掉
  40. var existsSubjectIds []int64
  41. model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("survey_id = ?", surveyId).Where("subject_id in (?)", subjectIds).Pluck("subject_id", &existsSubjectIds)
  42. // 取差集
  43. diffSubjectIds, _ := lo.Difference(subjectIds, existsSubjectIds)
  44. if len(diffSubjectIds) > 0 {
  45. var surveySubjects []*model.QuestionnaireSurveyQuestionnaireSubject
  46. for _, subjectId := range diffSubjectIds {
  47. surveySubjects = append(surveySubjects, &model.QuestionnaireSurveyQuestionnaireSubject{
  48. SurveyID: surveyId,
  49. SubjectID: subjectId,
  50. Sort: 999,
  51. })
  52. }
  53. // 批量插入
  54. model.DB.CreateInBatches(&surveySubjects, 100)
  55. }
  56. }
  57. return nil
  58. }
  59. // 批量修改排序
  60. func UpdateSort(surveyId int64, surveySubjectIds []int64) *response.ErrCode {
  61. // 检查模板是否存在
  62. _, findErr := Find(surveyId)
  63. if findErr != nil {
  64. return findErr
  65. }
  66. if len(surveySubjectIds) > 0 {
  67. sqlExpr := "case id"
  68. for surveySubjectIndex, surveySubjectId := range surveySubjectIds {
  69. sqlExpr += " when " + fmt.Sprint(surveySubjectId) + " then " + fmt.Sprint(surveySubjectIndex+1)
  70. }
  71. sqlExpr += " else sort end"
  72. model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("survey_id = ?", surveyId).Update("sort", gorm.Expr(sqlExpr))
  73. }
  74. return nil
  75. }
  76. // 修改是否必填
  77. func UpdateIsRequired(id int64, isRequired bool) *response.ErrCode {
  78. model.DB.Model(&model.QuestionnaireSurveyQuestionnaireSubject{}).Where("id = ?", id).Update("is_required", isRequired)
  79. return nil
  80. }
  81. // 格式化
  82. func FormatSurveySubject(surveySubject *model.QuestionnaireSurveyQuestionnaireSubject) *validators.SurveyQuestionnaireSubject {
  83. if surveySubject == nil {
  84. return nil
  85. }
  86. return &validators.SurveyQuestionnaireSubject{
  87. ID: surveySubject.ID,
  88. Sort: surveySubject.Sort,
  89. IsRequired: surveySubject.IsRequired == 1,
  90. QuestionnaireSubject: questionnaire_subject.Format(&surveySubject.Subject),
  91. }
  92. }