Files
photowall/go/internal/scheduler/cleanup.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

36 lines
872 B
Go

package scheduler
import (
"log"
"photowall/internal/service"
"time"
)
// StartCleanup 启动过期班级清理定时任务。
// 每小时检查一次,超过 audit_deadline 仍未通过审核的班级自动删除。
func StartCleanup(adminSvc *service.AdminService) {
go func() {
// 启动后延迟 1 分钟先跑一次,避免服务刚启动就堆积
time.Sleep(1 * time.Minute)
runCleanup(adminSvc)
ticker := time.NewTicker(1 * time.Hour)
defer ticker.Stop()
for range ticker.C {
runCleanup(adminSvc)
}
}()
log.Println("[scheduler] expired class cleanup started (runs hourly)")
}
func runCleanup(adminSvc *service.AdminService) {
count, err := adminSvc.CleanupExpired()
if err != nil {
log.Printf("[scheduler] cleanup error: %v", err)
return
}
if count > 0 {
log.Printf("[scheduler] auto-deleted %d expired classes", count)
}
}