package questionnaire_subject import ( "surveyService/model" "surveyService/response" "surveyService/validators" "github.com/golang-module/carbon" ) // 创建 func Create(subject *validators.QuestionnaireSubject) *response.ErrCode { // 检查编号是否重复 existsErr := ExistBySn(subject.SN, 0) if existsErr != nil { return existsErr } // 创建 subjectModel := model.QuestionnaireSubject{ SN: subject.SN, Type: subject.Type, Title: subject.Title, Validator: subject.Validator, Remark: subject.Remark, Mark: subject.Mark, } if err := model.DB.Create(&subjectModel).Error; err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "创建失败", } } return nil } // 更新 func Update(subject *validators.QuestionnaireSubject) *response.ErrCode { if subject.ID <= 0 { return &response.ErrCode{ Code: response.VALIDATOR_ERROR, Msg: "ID不能为空", } } // 检查编号是否重复 existsErr := ExistBySn(subject.SN, subject.ID) if existsErr != nil { return existsErr } // 更新 model.DB.Where("id = ?", subject.ID).Select("type", "title", "remark", "validator").Updates(model.QuestionnaireSubject{ Type: subject.Type, Title: subject.Title, Validator: subject.Validator, Remark: subject.Remark, }) return nil } // 获取单个 func Find(id int64) (*model.QuestionnaireSubject, *response.ErrCode) { var subject model.QuestionnaireSubject model.DB.Where("id = ?", id).First(&subject) if subject.ID <= 0 { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "没有找到有效的数据", } } return &subject, nil } // 删除 func Delete(id int64) *response.ErrCode { // 检查问题库是否被问题模板关联 var total int64 model.DB.Model(&model.QuestionnaireTemplateSubject{}).Where("subject_id = ?", id).Count(&total) if total > 0 { return &response.ErrCode{ Code: response.ERROR, Msg: "该题目已被问题模板关联,不能删除", } } // 检查问题库是否被问卷关联 model.DB.Model(&model.QuestionnaireSubject{}).Where("subject_id = ?", id).Count(&total) if total > 0 { return &response.ErrCode{ Code: response.ERROR, Msg: "该题目已被问卷关联,不能删除", } } // 执行删除 model.DB.Where("id = ?", id).Delete(&model.QuestionnaireSubject{}) return nil } // 修改备注 func UpdateMark(id int64, mark string) *response.ErrCode { _, findErr := Find(id) if findErr != nil { return findErr } // 更新 model.DB.Where("id = ?", id).Select("mark").Updates(model.QuestionnaireSubject{ Mark: mark, }) 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.QuestionnaireSubject{}).Count(&total) if total > 0 { return &response.ErrCode{ Code: response.ERROR, Msg: "编号已存在", } } return nil } // 获取列表 func Paginate(page, pageSize int, key string) ([]*model.QuestionnaireSubject, int64) { var total int64 var subjects []*model.QuestionnaireSubject = make([]*model.QuestionnaireSubject, 0) query := model.DB.Model(&model.QuestionnaireSubject{}) 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)).Find(&subjects) } return subjects, total } // 获取所有列表 func List(key string) []*model.QuestionnaireSubject { var subjects []*model.QuestionnaireSubject = make([]*model.QuestionnaireSubject, 0) query := model.DB.Model(&model.QuestionnaireSubject{}) if key != "" { query = query.Where("title like @key or sn like @key", map[string]interface{}{ "key": "%" + key + "%", }) } query.Find(&subjects) return subjects } // 通过ID获取列表 func ListByIds(ids []int64) []*model.QuestionnaireSubject { var subjects []*model.QuestionnaireSubject = make([]*model.QuestionnaireSubject, 0) model.DB.Where("id in (?)", ids).Find(&subjects) return subjects } // 格式化 func Format(subject *model.QuestionnaireSubject) *validators.QuestionnaireSubject { if subject == nil { return nil } return &validators.QuestionnaireSubject{ ID: subject.ID, SN: subject.SN, Type: subject.Type, Title: subject.Title, Validator: subject.Validator, Remark: subject.Remark, Mark: subject.Mark, CreatedAt: carbon.Time2Carbon(subject.CreatedAt).Format("Y/m/d H:i:s"), } }