123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package schedule
- import (
- "fmt"
- "github.com/caixw/lib.go/conv"
- "github.com/robfig/cron/v3"
- "log"
- "time"
- "youngee_b_api/app/dao"
- "youngee_b_api/app/entity"
- )
- func AutoTaskInvalid() error {
- // 新建一个定时任务对象
- crontab := cron.New(cron.WithSeconds()) // 精确到秒
- spec := "0 */5 * * * ?" //cron表达式,每5分钟一次
- // "0 0 12 * * ?" 每天中午12点执行
- // 添加定时任务
- // 定时任务1 品牌种草失效自动处理
- _, err1 := crontab.AddFunc(spec, AutoProjectInvalidTask)
- if err1 != nil {
- return err1
- }
- // 定时任务2 电商带货失效自动处理
- _, err2 := crontab.AddFunc(spec, AutoSelectionInvalidTask)
- if err2 != nil {
- return err2
- }
- // 定时任务3 本地生活失效自动处理
- _, err3 := crontab.AddFunc(spec, AutoLocalLifeInvalidTask)
- if err3 != nil {
- return err3
- }
- // 启动定时器
- crontab.Start()
- // 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
- //select {} //阻塞主线程停止
- return nil
- }
- // 定时任务1 品牌种草失效自动处理
- func AutoProjectInvalidTask() {
- log.Println("AutoProjectInvalidTask running Start, Time :", time.Now())
- var projectInfos []*entity.Project
- _ = dao.Db.Model(entity.Project{}).Where("project_status <= ?", 6).Select("project_id,project_status,recruit_ddl,auto_task_id,auto_fail_at").Find(&projectInfos).Error
- // 对于所有未支付的品牌种草项目进行处理
- for _, projectInfo := range projectInfos {
- projectId := projectInfo.ProjectId
- if time.Now().After(projectInfo.RecruitDdl) && projectInfo.ProjectStatus < 4 {
- // 变成失效
- _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
- ProjectId: projectId,
- ProjectStatus: 9,
- FailReason: 1,
- FailAt: time.Now(),
- })
- continue
- }
- if projectInfo.ProjectStatus == 4 && time.Now().After(projectInfo.RecruitDdl) {
- // 变成待支付
- _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
- ProjectId: projectId,
- ProjectStatus: 6,
- })
- continue
- }
- autoTaskId := projectInfo.AutoTaskID
- autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
- dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
- // 失效时间计算:任务截止时间 + 设置的失效自动执行时间
- if projectInfo.AutoFailAt.IsZero() {
- timeInvalid := projectInfo.RecruitDdl.Add(dd)
- dao.Db.Model(&entity.Project{}).Where("project_id = ?", projectId).Updates(&entity.Project{AutoFailAt: timeInvalid})
- projectInfo.AutoFailAt = timeInvalid
- }
- // 超时未支付则变为失效
- if time.Now().After(projectInfo.AutoFailAt) && projectInfo.ProjectStatus == 6 {
- _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
- ProjectId: projectId,
- ProjectStatus: 9,
- FailReason: 1,
- FailAt: time.Now(),
- })
- fmt.Println(fmt.Sprintf("已更新品牌种草项目 %s 状态为超时未支付的失效状态", projectId))
- dao.Db.Model(entity.ProjectTaskInfo{}).Where("project_id = ?", projectId).Updates(entity.ProjectTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
- }
- }
- log.Println("AutoProjectInvalidTask running End, Time :", time.Now())
- }
- // 定时任务2 电商带货失效自动处理
- func AutoSelectionInvalidTask() {
- log.Println("AutoSelectionInvalidTask running Start, Time :", time.Now())
- var selectionInfos []*entity.SelectionInfo
- selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionInfoList(4, "selection_status")
- // 对于所有未支付的电商带货项目进行处理
- for _, selectionInfo := range selectionInfos {
- selectionId := selectionInfo.SelectionID
- autoTaskId := selectionInfo.AutoTaskID
- autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "selection_invalid")
- dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.SelectionInvalid, "") + "h")
- if selectionInfo.AutoFailAt.IsZero() {
- timeInvalid := selectionInfo.PassAt.Add(dd)
- dao.Db.Model(&entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&entity.SelectionInfo{AutoFailAt: timeInvalid})
- selectionInfo.AutoFailAt = timeInvalid
- }
- // 超时未支付则变为失效
- if time.Now().After(selectionInfo.AutoFailAt) && selectionInfo.SelectionStatus == 4 {
- _ = dao.SelectionInfoDAO{}.UpdateSelectionInfo(entity.SelectionInfo{
- SelectionID: selectionId,
- SelectionStatus: 7,
- FailReason: 1,
- FailAt: time.Now(),
- })
- fmt.Println(fmt.Sprintf("已更新电商带货项目 %s 状态为超时未支付的失效状态", selectionId))
- dao.Db.Model(entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(entity.SelectionTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
- }
- }
- log.Println("AutoSelectionInvalidTask running End, Time :", time.Now())
- }
- // 定时任务3 本地生活失效自动处理
- func AutoLocalLifeInvalidTask() {
- log.Println("AutoLocalLifeInvalidTask running Start, Time :", time.Now())
- var localLifeInfos []*entity.LocalLifeInfo
- _ = dao.Db.Model(entity.LocalLifeInfo{}).Where("task_status <= ?", 6).Select("local_id,task_status,recruit_ddl,auto_task_id,auto_fail_at").Find(&localLifeInfos).Error
- // 对于所有未支付的本地生活项目进行处理
- for _, localLifeInfo := range localLifeInfos {
- localId := localLifeInfo.LocalID
- if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus < 4 {
- // 变成失效
- _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
- LocalID: localId,
- TaskStatus: 9,
- FailReason: 1,
- FailAt: time.Now(),
- })
- continue
- }
- if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus == 4 {
- // 变成待支付
- _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
- LocalID: localId,
- TaskStatus: 6,
- })
- continue
- }
- autoTaskId := localLifeInfo.AutoTaskID
- autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
- dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
- // 失效时间计算:任务截止时间 + 设置的失效自动执行时间
- if localLifeInfo.AutoFailAt.IsZero() {
- timeInvalid := localLifeInfo.RecruitDdl.Add(dd)
- dao.Db.Model(&entity.LocalLifeInfo{}).Where("local_id = ?", localId).Updates(&entity.LocalLifeInfo{AutoFailAt: timeInvalid})
- localLifeInfo.AutoFailAt = timeInvalid
- }
- // 超时未支付则变为失效
- if time.Now().After(localLifeInfo.AutoFailAt) && localLifeInfo.TaskStatus == 6 {
- _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
- LocalID: localId,
- TaskStatus: 9,
- FailReason: 1,
- FailAt: time.Now(),
- })
- fmt.Println(fmt.Sprintf("已更新本地生活项目 %s 状态为超时未支付的失效状态", localId))
- dao.Db.Model(entity.LocalLifeTaskInfo{}).Where("local_id = ?", localId).Updates(entity.LocalLifeTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
- }
- }
- log.Println("AutoLocalLifeInvalidTask running End, Time :", time.Now())
- }
|