// Package mapper 数据访问层 package mapper import ( "server/common" "server/modules/yx/entity" "server/modules/yx/vo" ) type YxVolunteerMapper struct { *common.BaseMapper[entity.YxVolunteer] } func NewYxVolunteerMapper() *YxVolunteerMapper { return &YxVolunteerMapper{ BaseMapper: common.NewBaseMapper[entity.YxVolunteer](), } } // CloseOtherVolunteer 关闭用户的其他志愿单 func (m *YxVolunteerMapper) CloseOtherVolunteer(userId string) error { result := m.GetDB().Model(&entity.YxVolunteer{}). Where("create_by = ?", userId). Updates(map[string]interface{}{"state": "0"}) if result.Error != nil { return result.Error } return nil } // FindActiveByScoreId 根据 scoreId 查找激活的志愿单 func (m *YxVolunteerMapper) FindActiveByScoreId(scoreId string) (*entity.YxVolunteer, error) { var item entity.YxVolunteer err := m.GetDB().Where("score_id = ? AND state = ?", scoreId, "1").First(&item).Error return &item, err } // ListByUser 查询用户的志愿单列表(包含成绩信息) func (m *YxVolunteerMapper) ListByUser(userID string, page, size int) ([]vo.UserVolunteerVO, int64, error) { var items []vo.UserVolunteerVO var total int64 db := m.GetDB().Table("yx_volunteer v"). Select("v.*, s.professional_category, s.province, s.cultural_score, s.professional_score"). Joins("LEFT JOIN yx_user_score s ON v.score_id = s.id"). Where("v.create_by = ?", userID) db.Count(&total) err := db.Order("v.create_time DESC").Offset((page - 1) * size).Limit(size).Scan(&items).Error return items, total, err }