package survey import ( "surveyService/model" "surveyService/response" "surveyService/validators" "github.com/golang-module/carbon" ) // 创建或修改问卷 func UpdateOrCreate(surveyForm *validators.Survey) *response.ErrCode { if surveyForm.ID == "" { return Create(surveyForm) } else { return Update(surveyForm) } } // 创建问卷 func Create(surveyForm *validators.Survey) *response.ErrCode { // // 如果是定制体检,要禁止他创建多个 // if surveyForm.Type == model.SURVEY_TYPE_PHYSICAL { // // 检查是否有定制体检 // var physicalSurveyTotal int64 // model.DB.Model(&model.Survey{}).Where("type = ?", model.SURVEY_TYPE_PHYSICAL).Count(&physicalSurveyTotal) // if physicalSurveyTotal > 0 { // return &response.ErrCode{ // Code: response.ERROR, // Msg: "当前已设置有定制体检,请先修改原问卷的类型后再添加", // } // } // } surveyModel := &model.Survey{ Name: surveyForm.Name, Cover: surveyForm.Cover, SurveyCode: surveyForm.SurveyCode, Type: surveyForm.Type, Status: model.SURVEY_STATUS_ENABLE, } err := model.DB.Create(surveyModel).Error if err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "创建问卷失败", } } return nil } // 修改问卷 func Update(surveyForm *validators.Survey) *response.ErrCode { if surveyForm.ID == "" { return &response.ErrCode{ Code: response.ERROR, Msg: "问卷编号不能为空", } } // 获取问卷信息 surveyModel, errCode := FindBySn(surveyForm.ID) if errCode != nil { return errCode } // 如果没有SurveyCode,表示是默认值,不允许修改类型、模型编号 if surveyModel.SurveyCode == "" { if surveyForm.Type != surveyModel.Type { return &response.ErrCode{ Code: response.ERROR, Msg: "问卷类型不允许修改", } } if surveyForm.SurveyCode != "" { return &response.ErrCode{ Code: response.ERROR, Msg: "问卷模型编号不允许修改", } } } // // 如果是定制体检,要禁止他创建多个 // if surveyForm.Type == model.SURVEY_TYPE_PHYSICAL { // // 检查是否有定制体检 // var physicalSurveyTotal int64 // model.DB.Model(&model.Survey{}).Where("type = ? and sn != ?", model.SURVEY_TYPE_PHYSICAL, surveyForm.ID).Count(&physicalSurveyTotal) // if physicalSurveyTotal > 0 { // return &response.ErrCode{ // Code: response.ERROR, // Msg: "当前已设置有定制体检,请先修改原问卷的类型后再添加", // } // } // } err := model.DB.Model(model.Survey{}).Where("id = ?", surveyModel.ID).Select("name", "cover", "survey_code", "type").Updates(map[string]any{ "name": surveyForm.Name, "cover": surveyForm.Cover, "survey_code": surveyForm.SurveyCode, "type": surveyForm.Type, }).Error if err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "修改问卷失败", } } return nil } // 获取问卷信息 func Find(id int64) (*model.Survey, *response.ErrCode) { var surveyModel model.Survey err := model.DB.Where("id = ?", id).First(&surveyModel).Error if err != nil { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "获取问卷信息失败", } } return &surveyModel, nil } // 通过编号获取问卷信息 func FindBySn(sn string) (*model.Survey, *response.ErrCode) { var surveyModel model.Survey err := model.DB.Where("sn = ?", sn).First(&surveyModel).Error if err != nil { return nil, &response.ErrCode{ Code: response.ERROR, Msg: "获取问卷信息失败", } } return &surveyModel, nil } // 修改备注 func UpdateRemark(sn string, remark string) *response.ErrCode { // 检查是否存在 _, errCode := FindBySn(sn) if errCode != nil { return errCode } err := model.DB.Model(&model.Survey{}).Where("sn = ?", sn).Update("remark", remark).Error if err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "修改备注失败", } } return nil } // 修改状态 func UpdateStatus(sn string, status int) *response.ErrCode { if status != model.SURVEY_STATUS_ENABLE && status != model.SURVEY_STATUS_DISABLE { return &response.ErrCode{ Code: response.ERROR, Msg: "状态不在许可范围内", } } // 检查是否存在 _, errCode := FindBySn(sn) if errCode != nil { return errCode } err := model.DB.Model(&model.Survey{}).Where("sn = ?", sn).Update("status", status).Error if err != nil { return &response.ErrCode{ Code: response.ERROR, Msg: "修改状态失败", } } return nil } // 获取列表 func List(key string, surveyCode string, status int) []*model.Survey { var surveyModels []*model.Survey query := model.DB.Model(&model.Survey{}) if key != "" { query = query.Where("name like @key or remark like @key", map[string]any{ "key": "%" + key + "%", }) } if surveyCode != "" { query = query.Where("survey_code = ?", surveyCode) } if status != 0 { query = query.Where("status = ?", status) } query.Order("id desc").Find(&surveyModels) return surveyModels } // 分页获取列表 func Paginate(page, pageSize int, key string, surveyCode string, status int) ([]*model.Survey, int64) { var surveyModels []*model.Survey var total int64 query := model.DB.Model(&model.Survey{}) if key != "" { query = query.Where("name like @key or remark like @key", map[string]any{ "key": "%" + key + "%", }) } if surveyCode != "" { query = query.Where("survey_code = ?", surveyCode) } if status != 0 { query = query.Where("status = ?", status) } query.Count(&total) query.Scopes(model.Paginate(page, pageSize)).Order("id desc").Find(&surveyModels) return surveyModels, total } // 格式化 func Format(surveyModel *model.Survey) *validators.Survey { return &validators.Survey{ ID: surveyModel.SN, Name: surveyModel.Name, Cover: surveyModel.Cover, SurveyCode: surveyModel.SurveyCode, Status: surveyModel.Status, Remark: surveyModel.Remark, Type: surveyModel.Type, CreatedAt: carbon.Time2Carbon(surveyModel.CreatedAt).Format("Y/m/d H:i:s"), UpdatedAt: carbon.Time2Carbon(surveyModel.UpdatedAt).Format("Y/m/d H:i:s"), } }