Files
kami_backend/utility/cron/cron.go
danial 3588bf9af6 feat(camel_oil): 支持Token管理与卡密绑定功能
- 新增CamelOilToken和CamelOilCardBinding数据库表,实现Token及卡密绑定记录管理
- 在service层增加Token的创建、查询、更新、删除及分页功能
- 实现卡密与Token绑定的业务逻辑,支持基于Token的卡密管理
- 在API层新增Token和卡密绑定相关接口:创建Token、获取Token详情、删除Token、列出Token及根据Token查询绑定卡密
- camel_oil_api新增绑卡接口,支持绑卡状态分类及错误处理
- 在定时任务中增加卡密绑定任务,实现自动处理已支付订单的卡密绑定
- 优化订单提交及支付流程,包含日志调整和请求参数随机扰动
- 统一调整camel_oil模块多控制器实现,完成账号状态查询及订单相关接口实现
- 注册更多camel_oil定时任务,包括订单支付检查、账号日重置和待回调订单处理任务
2025-11-23 00:08:35 +08:00

101 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cron
import (
"context"
"kami/internal/service"
"github.com/gogf/gf/v2/net/gtrace"
"github.com/gogf/gf/v2/os/gcron"
"github.com/gogf/gf/v2/os/glog"
"go.opentelemetry.io/otel/trace"
)
// Register 注册定时任务
func Register(ctx context.Context) {
//registerMainTasks(ctx)
// 骆驼加油模块定时任务
registerCamelOilTasks(ctx)
}
func registerMainTasks(ctx context.Context) {
//每日0时执行
_, _ = gcron.AddSingleton(ctx, "0 0 0 * * ?", func(ctx context.Context) {
tracer := gtrace.NewTracer("每日0时定时任务")
ctx, span := tracer.Start(ctx, "每日0时定时任务", trace.WithNewRoot())
defer span.End()
glog.Info(ctx, "每日0时执行重置苹果账户状态")
if err := service.AppleAccount().ResetStatus(ctx, nil); err != nil {
glog.Error(ctx, "重置苹果账户状态失败", err)
}
glog.Info(ctx, "每日0时执行重置充值账户状态")
if err := service.CardRedeemAccount().ResetTodayAmountTotal(ctx); err != nil {
glog.Error(ctx, "重置充值账户状态", err)
}
glog.Info(ctx, "每日0时执行每日账户充值统计")
if err := service.CardRedeemAccount().DailySummary(ctx); err != nil {
glog.Error(ctx, "每日账户充值统计失败", err)
}
})
_, _ = gcron.AddSingleton(ctx, "@every 10m", func(ctx context.Context) {
//处理正在等待充值的订单
_ = service.AppleOrder().HandleWaitingList(ctx)
//处理临时停止的订单
_ = service.AppleAccount().HandleTmpStoppedList(ctx)
//if err := tmall.NewClient().CronAuthTask(ctx); err != nil {
// glog.Error(ctx, "遍历天猫授权失败", err)
//}
})
//_, _ = gcron.AddSingleton(ctx, "@every 3m", func(ctx context.Context) {
// //处理大多数轮询订单
// _ = service.CardRedeemOrder().TriggerConsumeWithContext(ctx)
// _ = service.CardRedeemAccount().CheckAccountStatus(ctx, consts.CardRedeemAccountCategoryWalMart)
//})
_, _ = gcron.AddSingleton(ctx, "@every 5s", func(ctx context.Context) {
_ = service.CardRedeemOrder().TriggerConsumeWithContext(ctx)
//service.CardRedeemCookie().CheckPaySuccess(ctx, nil)
})
// 京东支付状态监控任务每10s执行一次
_, _ = gcron.AddSingleton(ctx, "@every 30s", func(ctx context.Context) {
tracer := gtrace.NewTracer("京东支付状态监控任务")
ctx, span := tracer.Start(ctx, "京东支付状态监控任务", trace.WithNewRoot())
defer span.End()
if err := service.JdCookie().ReleaseExpiredJdOrders(ctx); err != nil {
glog.Error(ctx, "释放过期京东订单失败", err)
}
if err := service.JdCookie().CleanupExpiredOrders(ctx); err != nil {
glog.Error(ctx, "清理过期订单失败", err)
}
if err := service.JdCookie().BatchCheckPaymentStatus(ctx); err != nil {
glog.Error(ctx, "京东支付状态监控任务失败", err)
}
})
}
// registerCamelOilTasks 注册骆驼加油模块的定时任务
func registerCamelOilTasks(ctx context.Context) {
_, _ = gcron.AddSingleton(ctx, "@every 10s", func(ctx context.Context) {
_ = service.CamelOil().CronAccountPrefetchTask(ctx)
}, "CamelOilAccountPrefetch")
_, _ = gcron.AddSingleton(ctx, "@every 10s", func(ctx context.Context) {
_ = service.CamelOil().CronVerifyCodeCheckTask(ctx)
}, "CamelOilAccountVerifyCodeCheck")
_, _ = gcron.AddSingleton(ctx, "@every 10s", func(ctx context.Context) {
_ = service.CamelOil().CronOrderPaymentCheckTask(ctx)
}, "CamelOilOrderPaymentCheck")
_, _ = gcron.AddSingleton(ctx, "0 1 0 * * ?", func(ctx context.Context) {
_ = service.CamelOil().CronAccountDailyResetTask(ctx)
}, "CamelOilAccountDailyReset")
_, _ = gcron.AddSingleton(ctx, "@every 10s", func(ctx context.Context) {
_ = service.CamelOil().ProcessPendingCallbacks(ctx)
}, "CamelOilProcessPendingCallbacks")
glog.Info(ctx, "骆驼加油模块定时任务注册完成")
}