活动模块,计划任务模块 加入第三方

This commit is contained in:
ayflying
2025-02-28 12:12:03 +08:00
parent 6d2b68a202
commit e9540d0971
103 changed files with 4258 additions and 74 deletions

View File

@@ -0,0 +1,305 @@
package systemCron
import (
"context"
"github.com/ayflying/utility_go/api/system/v1"
"github.com/ayflying/utility_go/service2"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcron"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtimer"
"sync"
"time"
)
var (
ctx = gctx.New()
)
// sSystemCron 结构体定义了系统定时任务的秒计时器。
// 它包含了不同时间周期的任务,如秒、分钟、小时、天、周、月、年以及特定的工作日任务。
type sSystemCron struct {
//互斥锁
Lock sync.Mutex
// 每秒执行的任务
SecondlyTask []func() error
// 每分钟执行的任务
MinutelyTask []func() error
// 每小时执行的任务
HourlyTask []func() error
// 每天执行的任务
DailyTask []func() error
// 每周执行的任务
WeeklyTask []func() error
// 每月执行的任务
MonthlyTask []func() error
// 每年执行的任务
YearlyTask []func() error
// 每周一执行的任务
MondayTask []func() error
// 每周二执行的任务
TuesdayTask []func() error
// 每周三执行的任务
WednesdayTask []func() error
// 每周四执行的任务
ThursdayTask []func() error
// 每周五执行的任务
FridayTask []func() error
// 每周六执行的任务
SaturdayTask []func() error
// 每周日执行的任务
SundayTask []func() error
}
func New() *sSystemCron {
return &sSystemCron{}
}
func init() {
service2.RegisterSystemCron(New())
}
// AddCron 添加一个定时任务到相应的调度列表中。
//
// @Description: 根据指定的类型将函数添加到不同的任务列表中,以供后续执行。
// @receiver s: sSystemCron的实例代表一个调度系统。
// @param typ: 任务的类型,决定该任务将被添加到哪个列表中。对应不同的时间间隔。
// @param _func: 要添加的任务函数该函数执行时应该返回一个error。
func (s *sSystemCron) AddCron(typ v1.CronType, _func func() error) {
//加锁
s.Lock.Lock()
defer s.Lock.Unlock()
switch typ {
case v1.CronType_SECOND:
s.SecondlyTask = append(s.SecondlyTask, _func) // 将函数添加到每秒执行的任务列表中
case v1.CronType_MINUTE:
s.MinutelyTask = append(s.MinutelyTask, _func) // 将函数添加到每分钟执行的任务列表中
case v1.CronType_HOUR:
s.HourlyTask = append(s.HourlyTask, _func) // 将函数添加到每小时执行的任务列表中
case v1.CronType_DAILY:
s.DailyTask = append(s.DailyTask, _func) // 将函数添加到每日执行的任务列表中
case v1.CronType_WEEK:
s.WeeklyTask = append(s.WeeklyTask, _func) // 将函数添加到每周执行的任务列表中
case v1.CronType_MONTH:
s.MonthlyTask = append(s.MonthlyTask, _func) // 将函数添加到每月执行的任务列表中
case v1.CronType_YEAR:
s.YearlyTask = append(s.YearlyTask, _func) // 将函数添加到每年执行的任务列表中
case v1.CronType_MONDAY:
s.MondayTask = append(s.MondayTask, _func) // 将函数添加到每周一执行的任务列表中
case v1.CronType_TUESDAY:
s.TuesdayTask = append(s.TuesdayTask, _func) // 将函数添加到每周二的任务列表中
case v1.CronType_WEDNESDAY:
s.WednesdayTask = append(s.WednesdayTask, _func) // 将函数添加到每周三执行的任务列表中
case v1.CronType_THURSDAY:
s.ThursdayTask = append(s.ThursdayTask, _func) // 将函数添加到每周四执行的任务列表中
case v1.CronType_FRIDAY:
s.FridayTask = append(s.FridayTask, _func) // 将函数添加到每周五执行的任务列表中
case v1.CronType_SATURDAY:
s.SaturdayTask = append(s.SaturdayTask, _func) // 将函数添加到每周六执行的任务列表中
case v1.CronType_SUNDAY:
s.SundayTask = append(s.SundayTask, _func) // 将函数添加到每周日的任务列表中
}
}
// StartCron 开始计划任务执行
//
// @Description:
// @receiver s
// @return err
func (s *sSystemCron) StartCron() (err error) {
g.Log().Debug(ctx, "启动计划任务定时器详情")
//每秒任务
gtimer.SetInterval(ctx, time.Second, func(ctx context.Context) {
//g.Log().Debug(ctx, "每秒定时器")
err = s.secondlyTask()
})
//每分钟任务
_, err = gcron.AddSingleton(ctx, "0 * * * * *", func(ctx context.Context) {
//g.Log().Debug(ctx, "每分钟定时器")
err = s.minutelyTask()
})
//每小时任务
_, err = gcron.AddSingleton(ctx, "0 0 * * * *", func(ctx context.Context) {
g.Log().Debug(ctx, "每小时定时器")
err = s.hourlyTask()
})
//每天任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * *", func(ctx context.Context) {
g.Log().Debug(ctx, "每日定时器")
err = s.dailyTask()
})
//每周任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 1", func(ctx context.Context) {
g.Log().Debug(ctx, "每周一定时器")
err = s.weeklyTask(1)
})
//每周二任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 2", func(ctx context.Context) {
g.Log().Debug(ctx, "每周二定时器")
err = s.weeklyTask(2)
})
//周三任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 3", func(ctx context.Context) {
g.Log().Debug(ctx, "周三定时器")
err = s.weeklyTask(3)
})
//周四任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 4", func(ctx context.Context) {
g.Log().Debug(ctx, "周四定时器")
err = s.weeklyTask(4)
})
//周五任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 5", func(ctx context.Context) {
g.Log().Debug(ctx, "周五定时器")
err = s.fridayTask()
})
//周六任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 6", func(ctx context.Context) {
g.Log().Debug(ctx, "周六定时器")
err = s.weeklyTask(6)
})
//周日任务
_, err = gcron.AddSingleton(ctx, "0 0 0 * * 0", func(ctx context.Context) {
g.Log().Debug(ctx, "周日定时器")
err = s.weeklyTask(7)
})
//每月任务
_, err = gcron.AddSingleton(ctx, "0 0 0 1 * *", func(ctx context.Context) {
g.Log().Debug(ctx, "每月定时器")
err = s.monthlyTask()
})
_, err = gcron.AddSingleton(ctx, "0 0 0 1 1 *", func(ctx context.Context) {
g.Log().Debug(ctx, "每年定时器")
err = s.monthlyTask()
})
return
}
// 每妙任务
func (s *sSystemCron) secondlyTask() (err error) {
if len(s.SecondlyTask) == 0 {
return
}
for _, _func := range s.SecondlyTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 每分钟任务
func (s *sSystemCron) minutelyTask() (err error) {
if len(s.MinutelyTask) == 0 {
return
}
for _, _func := range s.MinutelyTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 每小时任务
func (s *sSystemCron) hourlyTask() (err error) {
if len(s.HourlyTask) == 0 {
return
}
for _, _func := range s.HourlyTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 每天任务
func (s *sSystemCron) dailyTask() (err error) {
if len(s.DailyTask) == 0 {
return
}
for _, _func := range s.DailyTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 每周任务
func (s *sSystemCron) weeklyTask(day int) (err error) {
var arr []func() error
switch day {
case 1:
arr = s.MondayTask
case 2:
arr = s.TuesdayTask
case 3:
arr = s.WednesdayTask
case 4:
arr = s.ThursdayTask
case 5:
arr = s.FridayTask
case 6:
arr = s.SaturdayTask
case 7:
arr = s.SundayTask
default:
arr = s.WeeklyTask
return
}
if len(arr) == 0 {
return
}
for _, _func := range arr {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 周五任务
func (s *sSystemCron) fridayTask() (err error) {
if len(s.FridayTask) == 0 {
return
}
for _, _func := range s.FridayTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}
// 每月任务
func (s *sSystemCron) monthlyTask() (err error) {
if len(s.MonthlyTask) == 0 {
return
}
for _, _func := range s.MonthlyTask {
err = _func()
if err != nil {
g.Log().Error(ctx, err)
}
}
return
}