123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- 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"),
- }
- }
|