package questionnaire_survey import ( "surveyService/model" "surveyService/response" "surveyService/validators" "github.com/golang-module/carbon" "gorm.io/gorm" ) // 创建 func Create(survey *validators.QuestionnaireSurvey) *response.ErrCode { // 检查编号是否存在 if survey.SN == "" { return &response.ErrCode{ Code: response.VALIDATOR_ERROR, Msg: "编号不能为空", } } // 检查编号是否重复 existsErr := ExistBySn(survey.SN, 0) if existsErr != nil { return existsErr } // 创建 templateModel := model.QuestionnaireSurvey{ SN: survey.SN, Title: survey.Title, CanSkipIntro: survey.CanSkipIntro, CanSkipResult: survey.CanSkipResult, GuestAvatar: survey.GuestAvatar, CustomerAvatar: survey.CustomerAvatar, GreetingText: survey.GreetingText, FinishedText: survey.FinishedText, Intro: survey.Intro, Status: model.QUESTIONNAIRE_SURVEY_STATUS_ENABLE, Type: model.QUESTIONNAIRE_SURVEY_TYPE_NORMAL, } if err := model.DB.Create(&templateModel).Error; err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "创建失败", } } return nil } // 更新 func Update(survey *validators.QuestionnaireSurvey) *response.ErrCode { if survey.ID <= 0 { return &response.ErrCode{ Code: response.VALIDATOR_ERROR, Msg: "ID不能为空", } } // 检查编号是否重复 existsErr := ExistBySn(survey.SN, survey.ID) if existsErr != nil { return existsErr } updateErr := model.DB.Transaction(func(tx *gorm.DB) error { // 更新 tx.Model(&model.QuestionnaireSurvey{}).Where("id = ?", survey.ID).Select([]string{"SN", "Title", "CanSkipIntro", "CanSkipResult", "GuestAvatar", "CustomerAvatar", "GreetingText", "FinishedText", "Intro"}).Updates(model.QuestionnaireSurvey{ SN: survey.SN, Title: survey.Title, CanSkipIntro: survey.CanSkipIntro, CanSkipResult: survey.CanSkipResult, GuestAvatar: survey.GuestAvatar, CustomerAvatar: survey.CustomerAvatar, GreetingText: survey.GreetingText, FinishedText: survey.FinishedText, Intro: survey.Intro, }) return nil }) if updateErr != nil { return &response.ErrCode{ Code: response.ERROR, Msg: updateErr.Error(), } } return nil } // 获取单个 func Find(id int64) (*model.QuestionnaireSurvey, *response.ErrCode) { var survey model.QuestionnaireSurvey model.DB.Where("id = ?", id).Preload("Subjects", func(db *gorm.DB) *gorm.DB { return db.Order("sort ASC") }).Preload("Subjects.Subject").First(&survey) if survey.ID <= 0 { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "没有找到有效的问卷", } } return &survey, nil } // 获取单个 func FindBySN(sn string) (*model.QuestionnaireSurvey, *response.ErrCode) { var survey model.QuestionnaireSurvey model.DB.Where("sn = ?", sn).Preload("Subjects", func(db *gorm.DB) *gorm.DB { return db.Order("sort ASC") }).Preload("Subjects.Subject").First(&survey) if survey.ID <= 0 { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "没有找到有效的问卷", } } return &survey, nil } // 删除 func Delete(id int64) *response.ErrCode { // 删除问卷 model.DB.Where("id = ?", id).Delete(&model.QuestionnaireSurvey{}) // 删除问卷关联的数据 model.DB.Where("survey_id = ?", id).Delete(&model.QuestionnaireSurveyQuestionnaireSubject{}) // Todo 决策模型关联删除 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.QuestionnaireSurvey{}).Count(&total) if total > 0 { return &response.ErrCode{ Code: response.ERROR, Msg: "编号已存在", } } return nil } // 获取列表(分页) func Paginate(page, pageSize int, key string) ([]*model.QuestionnaireSurvey, int64) { var total int64 var subjects []*model.QuestionnaireSurvey = make([]*model.QuestionnaireSurvey, 0) query := model.DB.Model(&model.QuestionnaireSurvey{}) 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("SystemTags").Find(&subjects) } return subjects, total } // 获取所有列表 func List(key string) []*model.QuestionnaireSurvey { var subjects []*model.QuestionnaireSurvey = make([]*model.QuestionnaireSurvey, 0) query := model.DB.Model(&model.QuestionnaireSurvey{}) if key != "" { query = query.Where("title like @key or sn like @key", map[string]interface{}{ "key": "%" + key + "%", }) } query.Preload("SystemTags").Find(&subjects) return subjects } // 修改Peg.js func UpdatePeg(id int64, peg string) *response.ErrCode { _, findErr := Find(id) if findErr != nil { return findErr } // 更新 model.DB.Model(model.QuestionnaireSurvey{}).Where("id = ?", id).Update("peg", peg) return nil } // 修改备注 func UpdateRemark(id int64, remark string) *response.ErrCode { _, findErr := Find(id) if findErr != nil { return findErr } // 更新 model.DB.Model(model.QuestionnaireSurvey{}).Where("id = ?", id).Update("remark", remark) return nil } // 修改状态 func UpdateStatus(id int64, status int) *response.ErrCode { _, findErr := Find(id) if findErr != nil { return findErr } // 更新 model.DB.Model(model.QuestionnaireSurvey{}).Where("id = ?", id).Update("status", status) return nil } // 格式化 func Format(survey *model.QuestionnaireSurvey) *validators.QuestionnaireSurvey { if survey == nil { return nil } var subjects = make([]*validators.SurveyQuestionnaireSubject, 0) for _, subject := range survey.Subjects { subjects = append(subjects, FormatSurveySubject(subject)) } return &validators.QuestionnaireSurvey{ ID: survey.ID, SN: survey.SN, Title: survey.Title, CanSkipIntro: survey.CanSkipIntro, CanSkipResult: survey.CanSkipResult, GuestAvatar: survey.GuestAvatar, CustomerAvatar: survey.CustomerAvatar, GreetingText: survey.GreetingText, FinishedText: survey.FinishedText, Intro: survey.Intro, Status: survey.Status, Type: survey.Type, Returns: survey.Returns, Dsl: survey.Dsl, Peg: survey.Peg, Remark: survey.Remark, Subjects: subjects, CreatedAt: carbon.Time2Carbon(survey.CreatedAt).Format("Y/m/d H:i:s"), UpdatedAt: carbon.Time2Carbon(survey.UpdatedAt).Format("Y/m/d H:i:s"), } }