package questionnaire_template import ( "surveyService/model" "surveyService/response" "surveyService/service/questionnaire_subject" "surveyService/validators" "github.com/golang-module/carbon" "gorm.io/gorm" ) // 创建 func Create(template *validators.QuestionnaireTemplate) *response.ErrCode { // 检查编号是否存在 if template.SN == "" { return &response.ErrCode{ Code: response.VALIDATOR_ERROR, Msg: "编号不能为空", } } // 检查编号是否重复 existsErr := ExistBySn(template.SN, 0) if existsErr != nil { return existsErr } // 创建 templateModel := model.QuestionnaireTemplate{ SN: template.SN, Title: template.Title, } if err := model.DB.Create(&templateModel).Error; err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "创建失败", } } return nil } // 更新 func Update(template *validators.QuestionnaireTemplate) *response.ErrCode { if template.ID <= 0 { return &response.ErrCode{ Code: response.VALIDATOR_ERROR, Msg: "ID不能为空", } } // 检查编号是否重复 existsErr := ExistBySn(template.SN, template.ID) if existsErr != nil { return existsErr } updateErr := model.DB.Transaction(func(tx *gorm.DB) error { // 更新 tx.Where("id = ?", template.ID).Select("title").Updates(model.QuestionnaireSubject{ Title: template.Title, }) return nil }) if updateErr != nil { return &response.ErrCode{ Code: response.ERROR, Msg: updateErr.Error(), } } return nil } // 获取单个 func Find(id int64) (*model.QuestionnaireTemplate, *response.ErrCode) { var template model.QuestionnaireTemplate model.DB.Where("id = ?", id).First(&template) if template.ID <= 0 { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "没有找到有效的问题模板", } } return &template, nil } // 删除 func Delete(id int64) *response.ErrCode { // 删除问题模板 model.DB.Where("id = ?", id).Delete(&model.QuestionnaireTemplate{}) // 删除问题模板关联的数据 model.DB.Where("template_id = ?", id).Delete(&model.QuestionnaireTemplateSubject{}) return nil } // 检查编号是否已存在 func ExistBySn(sn string, subjectId int64) *response.ErrCode { // 检查编号是否重复 query := model.DB.Where("sn = ?", sn) if subjectId > 0 { query = query.Where("id <> ?", subjectId) } var total int64 query.Model(&model.QuestionnaireTemplate{}).Count(&total) if total > 0 { return &response.ErrCode{ Code: response.ERROR, Msg: "编号已存在", } } return nil } // 获取列表(分页) func Paginate(page, pageSize int, key string) ([]*model.QuestionnaireTemplate, int64) { var total int64 var subjects []*model.QuestionnaireTemplate = make([]*model.QuestionnaireTemplate, 0) query := model.DB.Model(&model.QuestionnaireTemplate{}) if key != "" { query = query.Where("title like @key or sn like @key", map[string]interface{}{ "key": "%" + key + "%", }) } query.Count(&total) if total > 0 { query.Scopes(model.Paginate(page, pageSize)).Preload("SubjectRelations.Subject").Preload("SystemTags").Find(&subjects) } return subjects, total } // 获取所有列表 func List(key string) []*model.QuestionnaireTemplate { var subjects []*model.QuestionnaireTemplate = make([]*model.QuestionnaireTemplate, 0) query := model.DB.Model(&model.QuestionnaireTemplate{}) if key != "" { query = query.Where("title like @key or sn like @key", map[string]interface{}{ "key": "%" + key + "%", }) } query.Preload("SubjectRelations.Subject").Preload("SystemTags").Find(&subjects) return subjects } // 修改Peg.js func UpdatePeg(id int64, peg string) *response.ErrCode { _, findErr := Find(id) if findErr != nil { return findErr } // 更新 err := model.DB.Model(model.QuestionnaireTemplate{}).Where("id = ?", id).Update("peg", peg).Error if err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "更新失败", } } return nil } // 格式化 func Format(template *model.QuestionnaireTemplate) *validators.QuestionnaireTemplate { var subjectTotal int = len(template.SubjectRelations) var subjectIds []string = make([]string, 0) var subjects []*validators.QuestionnaireSubject = make([]*validators.QuestionnaireSubject, 0) for _, subject := range template.SubjectRelations { subjectIds = append(subjectIds, subject.Subject.SN) subjects = append(subjects, questionnaire_subject.Format(&subject.Subject)) } return &validators.QuestionnaireTemplate{ ID: template.ID, SN: template.SN, Title: template.Title, Peg: template.Peg, SubjectTotal: subjectTotal, SubjectIds: subjectIds, Subjects: subjects, CreatedAt: carbon.Time2Carbon(template.CreatedAt).Format("Y/m/d H:i:s"), } }