123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package questionnaire_template
- import (
- "fmt"
- "surveyService/model"
- "surveyService/response"
- "surveyService/service/questionnaire_subject"
- "surveyService/validators"
- "github.com/samber/lo"
- "gorm.io/gorm"
- )
- // 获取问题模板下的问题库列表
- func ListSubjects(templateId int64) []*model.QuestionnaireTemplateSubject {
- var subjects []*model.QuestionnaireTemplateSubject
- // 获取问题模板下的问题库列表
- model.DB.Where("template_id = ?", templateId).Preload("Subject").Order("sort asc").Order("id asc").Find(&subjects)
- return subjects
- }
- // 删除问题模板下的问题库
- func DeleteSubject(templateId int64, subjectIds []int64) *response.ErrCode {
- model.DB.Where("template_id = ?", templateId).Where("id in (?)", subjectIds).Delete(&model.QuestionnaireTemplateSubject{})
- return nil
- }
- // 添加问题模板下的问题库
- func AddSubject(templateId int64, subjectIds []int64) *response.ErrCode {
- // 检查模板是否存在
- _, findErr := Find(templateId)
- 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.QuestionnaireTemplateSubject{}).Where("template_id = ?", templateId).Where("subject_id in (?)", subjectIds).Pluck("subject_id", &existsSubjectIds)
- // 取差集
- diffSubjectIds, _ := lo.Difference(subjectIds, existsSubjectIds)
- if len(diffSubjectIds) > 0 {
- var templateSubjects []*model.QuestionnaireTemplateSubject
- for _, subjectId := range diffSubjectIds {
- templateSubjects = append(templateSubjects, &model.QuestionnaireTemplateSubject{
- TemplateID: templateId,
- SubjectID: subjectId,
- Sort: 999,
- })
- }
- // 批量插入
- model.DB.CreateInBatches(&templateSubjects, 100)
- }
- }
- return nil
- }
- // 批量修改排序
- func UpdateSort(templateId int64, templateSubjectIds []int64) *response.ErrCode {
- // 检查模板是否存在
- _, findErr := Find(templateId)
- if findErr != nil {
- return findErr
- }
- if len(templateSubjectIds) > 0 {
- sqlExpr := "case id"
- for templateSubjectIndex, templateSubjectId := range templateSubjectIds {
- sqlExpr += " when " + fmt.Sprint(templateSubjectId) + " then " + fmt.Sprint(templateSubjectIndex+1)
- }
- sqlExpr += " else sort end"
- model.DB.Model(&model.QuestionnaireTemplateSubject{}).Where("template_id = ?", templateId).Update("sort", gorm.Expr(sqlExpr))
- }
- return nil
- }
- // 格式化
- func FormatTemplateSubject(templateSubject *model.QuestionnaireTemplateSubject) *validators.QuestionnaireTemplateSubject {
- return &validators.QuestionnaireTemplateSubject{
- ID: templateSubject.ID,
- Sort: templateSubject.Sort,
- QuestionnaireSubject: questionnaire_subject.Format(&templateSubject.Subject),
- }
- }
|