auto_task_invalid.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package schedule
  2. import (
  3. "fmt"
  4. "github.com/caixw/lib.go/conv"
  5. "log"
  6. "time"
  7. "youngee_m_api/app/dao"
  8. "youngee_m_api/app/entity"
  9. )
  10. //func AutoTaskInvalid() error {
  11. // // 新建一个定时任务对象
  12. // crontab := cron.New(cron.WithSeconds()) // 精确到秒
  13. // spec := "0 */5 * * * ?" //cron表达式,每5分钟一次
  14. // // "0 0 12 * * ?" 每天中午12点执行
  15. //
  16. // // 添加定时任务
  17. // // 定时任务1 品牌种草失效自动处理
  18. // _, err1 := crontab.AddFunc(spec, AutoProjectInvalidTask)
  19. // if err1 != nil {
  20. // return err1
  21. // }
  22. // // 定时任务2 电商带货失效自动处理
  23. // _, err2 := crontab.AddFunc(spec, AutoSelectionInvalidTask)
  24. // if err2 != nil {
  25. // return err2
  26. // }
  27. // // 定时任务3 本地生活失效自动处理
  28. // _, err3 := crontab.AddFunc(spec, AutoLocalLifeInvalidTask)
  29. // if err3 != nil {
  30. // return err3
  31. // }
  32. //
  33. // // 启动定时器
  34. // crontab.Start()
  35. // // 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制
  36. // //select {} //阻塞主线程停止
  37. // return nil
  38. //}
  39. // 定时任务1 品牌种草失效自动处理
  40. func AutoProjectInvalidTask() {
  41. log.Println("AutoProjectInvalidTask running Start, Time :", time.Now())
  42. var projectInfos []*entity.Project
  43. _ = 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
  44. // 对于所有未支付的品牌种草项目进行处理
  45. for _, projectInfo := range projectInfos {
  46. projectId := projectInfo.ProjectId
  47. if time.Now().After(projectInfo.RecruitDdl) && projectInfo.ProjectStatus < 4 {
  48. // 变成失效
  49. _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
  50. ProjectId: projectId,
  51. ProjectStatus: 9,
  52. FailReason: 1,
  53. FailAt: time.Now(),
  54. })
  55. continue
  56. }
  57. if projectInfo.ProjectStatus == 4 && time.Now().After(projectInfo.RecruitDdl) {
  58. // 变成待支付
  59. _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
  60. ProjectId: projectId,
  61. ProjectStatus: 6,
  62. })
  63. continue
  64. }
  65. autoTaskId := projectInfo.AutoTaskID
  66. autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
  67. dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
  68. // 失效时间计算:任务截止时间 + 设置的失效自动执行时间
  69. if projectInfo.AutoFailAt.IsZero() {
  70. timeInvalid := projectInfo.RecruitDdl.Add(dd)
  71. dao.Db.Model(&entity.Project{}).Where("project_id = ?", projectId).Updates(&entity.Project{AutoFailAt: timeInvalid})
  72. projectInfo.AutoFailAt = timeInvalid
  73. }
  74. // 超时未支付则变为失效
  75. if time.Now().After(projectInfo.AutoFailAt) && projectInfo.ProjectStatus == 6 {
  76. _ = dao.ProjectDAO{}.UpdateProject(entity.Project{
  77. ProjectId: projectId,
  78. ProjectStatus: 9,
  79. FailReason: 1,
  80. FailAt: time.Now(),
  81. })
  82. fmt.Println(fmt.Sprintf("已更新品牌种草项目 %s 状态为超时未支付的失效状态", projectId))
  83. dao.Db.Model(entity.ProjectTaskInfo{}).Where("project_id = ?", projectId).Updates(entity.ProjectTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
  84. }
  85. }
  86. log.Println("AutoProjectInvalidTask running End, Time :", time.Now())
  87. }
  88. // 定时任务2 电商带货失效自动处理
  89. func AutoSelectionInvalidTask() {
  90. log.Println("AutoSelectionInvalidTask running Start, Time :", time.Now())
  91. var selectionInfos []*entity.SelectionInfo
  92. selectionInfos, _ = dao.SelectionInfoDAO{}.GetSelectionInfoList(4, "selection_status")
  93. // 对于所有未支付的电商带货项目进行处理
  94. for _, selectionInfo := range selectionInfos {
  95. selectionId := selectionInfo.SelectionID
  96. autoTaskId := selectionInfo.AutoTaskID
  97. autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "selection_invalid")
  98. dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.SelectionInvalid, "") + "h")
  99. if selectionInfo.AutoFailAt.IsZero() {
  100. timeInvalid := selectionInfo.PassAt.Add(dd)
  101. dao.Db.Model(&entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(&entity.SelectionInfo{AutoFailAt: timeInvalid})
  102. selectionInfo.AutoFailAt = timeInvalid
  103. }
  104. // 超时未支付则变为失效
  105. if time.Now().After(selectionInfo.AutoFailAt) && selectionInfo.SelectionStatus == 4 {
  106. _ = dao.SelectionInfoDAO{}.UpdateSelectionInfo(entity.SelectionInfo{
  107. SelectionID: selectionId,
  108. SelectionStatus: 7,
  109. FailReason: 1,
  110. FailAt: time.Now(),
  111. })
  112. fmt.Println(fmt.Sprintf("已更新电商带货项目 %s 状态为超时未支付的失效状态", selectionId))
  113. dao.Db.Model(entity.SelectionInfo{}).Where("selection_id = ?", selectionId).Updates(entity.SelectionTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
  114. }
  115. }
  116. log.Println("AutoSelectionInvalidTask running End, Time :", time.Now())
  117. }
  118. // 定时任务3 本地生活失效自动处理
  119. func AutoLocalLifeInvalidTask() {
  120. log.Println("AutoLocalLifeInvalidTask running Start, Time :", time.Now())
  121. var localLifeInfos []*entity.LocalLifeInfo
  122. _ = 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
  123. // 对于所有未支付的本地生活项目进行处理
  124. for _, localLifeInfo := range localLifeInfos {
  125. localId := localLifeInfo.LocalID
  126. if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus < 4 {
  127. // 变成失效
  128. _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
  129. LocalID: localId,
  130. TaskStatus: 9,
  131. FailReason: 1,
  132. FailAt: time.Now(),
  133. })
  134. continue
  135. }
  136. if time.Now().After(localLifeInfo.RecruitDdl) && localLifeInfo.TaskStatus == 4 {
  137. // 变成待支付
  138. _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
  139. LocalID: localId,
  140. TaskStatus: 6,
  141. })
  142. continue
  143. }
  144. autoTaskId := localLifeInfo.AutoTaskID
  145. autoTaskInfo := dao.InfoAutoTaskDao{}.GetValueByIdFieldName(autoTaskId, "invalid")
  146. dd, _ := time.ParseDuration(conv.MustString(autoTaskInfo.Invalid, "") + "h")
  147. // 失效时间计算:任务截止时间 + 设置的失效自动执行时间
  148. if localLifeInfo.AutoFailAt.IsZero() {
  149. timeInvalid := localLifeInfo.RecruitDdl.Add(dd)
  150. dao.Db.Model(&entity.LocalLifeInfo{}).Where("local_id = ?", localId).Updates(&entity.LocalLifeInfo{AutoFailAt: timeInvalid})
  151. localLifeInfo.AutoFailAt = timeInvalid
  152. }
  153. // 超时未支付则变为失效
  154. if time.Now().After(localLifeInfo.AutoFailAt) && localLifeInfo.TaskStatus == 6 {
  155. _ = dao.LocalLifeDao{}.UpdateLocal(entity.LocalLifeInfo{
  156. LocalID: localId,
  157. TaskStatus: 9,
  158. FailReason: 1,
  159. FailAt: time.Now(),
  160. })
  161. fmt.Println(fmt.Sprintf("已更新本地生活项目 %s 状态为超时未支付的失效状态", localId))
  162. dao.Db.Model(entity.LocalLifeTaskInfo{}).Where("local_id = ?", localId).Updates(entity.LocalLifeTaskInfo{TaskStage: 3, CompleteStatus: 3, CompleteDate: time.Now()})
  163. }
  164. }
  165. log.Println("AutoLocalLifeInvalidTask running End, Time :", time.Now())
  166. }