Files
photowall/go/internal/service/region_service.go
T
hero920103 57d9866dab feat: PhotoWall 毕业照存储系统初始版本
后端: Go(Gin+GORM+MySQL+Redis)
- 17张业务表(yz_pw_前缀), 自动迁移
- JWT认证(3小时) + 盐+MD5密码 + 图形验证码
- 班级CRUD/加入(8人姓名验证/邀请码)/审核/30天自动清理
- 系统配置(16项)/菜单管理(动态路由)/数据统计
- 文件MD5去重/数据隔离/账号封禁/敏感词DFA检测

前端: Vue3+Vite+Element Plus+Less+ECharts+FontAwesome
- 动态路由(数据库菜单驱动)
- 蓝白配色, H5响应式
- 登录/注册/忘记密码/个人中心
- 班级创建向导/详情/加入/列表
- 管理后台: 审核/配置/菜单/统计/用户/敏感词

数据库: MySQL 10.31.100.3:3306/photowall
管理员: hero920103 / 920103
2026-09-03 05:55:23 +08:00

69 lines
1.8 KiB
Go

package service
import (
"photowall/internal/model"
"gorm.io/gorm"
)
type RegionService struct {
db *gorm.DB
}
func NewRegionService(db *gorm.DB) *RegionService {
return &RegionService{db: db}
}
// ListByParent 根据父级ID查子地区;parentID=0 查国家
func (s *RegionService) ListByParent(parentID uint) ([]model.Region, error) {
var list []model.Region
err := s.db.Where("parent_id = ?", parentID).Order("sort_order, name").Find(&list).Error
return list, err
}
// ListCountries 查所有国家
func (s *RegionService) ListCountries() ([]model.Region, error) {
var list []model.Region
err := s.db.Where("level = ?", model.LevelCountry).Order("sort_order, name").Find(&list).Error
return list, err
}
// GetPath 获取某地区的完整路径(国家->省->县)
func (s *RegionService) GetPath(regionID uint) ([]model.Region, error) {
var r model.Region
if err := s.db.First(&r, regionID).Error; err != nil {
return nil, err
}
path := []model.Region{r}
cur := r
for cur.ParentID != 0 {
var parent model.Region
if err := s.db.First(&parent, cur.ParentID).Error; err != nil {
break
}
// 插到前面
path = append([]model.Region{parent}, path...)
cur = parent
}
return path, nil
}
// Search 按名称搜索地区(用于快速定位)
func (s *RegionService) Search(keyword string, limit int) ([]model.Region, error) {
if limit <= 0 {
limit = 20
}
var list []model.Region
err := s.db.Where("name LIKE ? OR name_en LIKE ?", "%"+keyword+"%", "%"+keyword+"%").
Order("level, sort_order, name").Limit(limit).Find(&list).Error
return list, err
}
// BatchCreate 平台管理员批量录入地区(导入完整行政区划数据用)
func (s *RegionService) BatchCreate(regions []model.Region) error {
if len(regions) == 0 {
return nil
}
return s.db.CreateInBatches(regions, 100).Error
}