You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
10 KiB
320 lines
10 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"time" |
|
|
|
"go-common/app/job/main/growup/conf" |
|
"go-common/app/job/main/growup/dao" |
|
"go-common/app/job/main/growup/dao/charge" |
|
"go-common/app/job/main/growup/dao/dataplatform" |
|
"go-common/app/job/main/growup/dao/email" |
|
"go-common/app/job/main/growup/dao/income" |
|
"go-common/app/job/main/growup/dao/tag" |
|
"go-common/app/job/main/growup/service/ctrl" |
|
|
|
"go-common/library/log" |
|
"go-common/library/queue/databus" |
|
) |
|
|
|
// Service struct |
|
type Service struct { |
|
conf *conf.Config |
|
dao *dao.Dao |
|
email *email.Dao |
|
dp *dataplatform.Dao |
|
tag *tag.Dao |
|
income *income.Dao |
|
charge *charge.Dao |
|
// databus sub |
|
arcSub *databus.Databus |
|
} |
|
|
|
// New fn |
|
func New(c *conf.Config, executor ctrl.Executor) (s *Service) { |
|
s = &Service{ |
|
conf: c, |
|
dao: dao.New(c), |
|
email: email.New(c), |
|
dp: dataplatform.New(c), |
|
tag: tag.New(c), |
|
income: income.New(c), |
|
charge: charge.New(c), |
|
arcSub: databus.New(c.ArchiveSub), |
|
} |
|
|
|
// init task status service |
|
taskSvr = &taskService{ |
|
dao: s.dao, |
|
dp: s.dp, |
|
} |
|
log.Info("service start") |
|
executor.Submit( |
|
s.checkExpired, |
|
s.updateDateBlacklist, |
|
s.sendMail, |
|
s.updateCheat, |
|
s.mailTagIncome, |
|
s.calCreativeActivity, |
|
s.updateUpInfoVideo, |
|
s.creativeBudget, |
|
s.checkAvBreach, |
|
s.checkUpPunish, |
|
s.archiveConsume, |
|
s.syncIncomeBubbleMetaTask, |
|
s.snapshotIncomeBubbleTask, |
|
) |
|
return s |
|
} |
|
|
|
// check the account state of video up |
|
func (s *Service) checkExpired(ctx context.Context) { |
|
for { |
|
// up_info_video |
|
s.expiredCheck(0, 5, 0, "up_info_video") // check all expired from quit to default |
|
s.expiredCheck(0, 7, 3, "up_info_video") // check all expired from forbidden to signed |
|
s.expiredCheck(1, 4, 0, "up_info_video") // check ugc expired from reject to default |
|
s.expiredCheck(2, 4, 1, "up_info_video") // check pgc expired from reject to pre-audit |
|
|
|
// up_info_column |
|
s.expiredCheck(0, 5, 0, "up_info_column") // check all expired from quit to default |
|
s.expiredCheck(0, 7, 3, "up_info_column") // check all expired from forbidden to signed |
|
s.expiredCheck(1, 4, 0, "up_info_column") // check ugc expired from reject to default |
|
s.expiredCheck(2, 4, 1, "up_info_column") // check pgc expired from reject to pre-audit |
|
time.Sleep(NextDay(0, 0, 0)) |
|
} |
|
} |
|
|
|
// updateDateBlacklist update blacklist at 17:00 every day |
|
func (s *Service) updateDateBlacklist(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(17, 0, 0)) |
|
msg := "" |
|
log.Info("Exec growup-job updateDateBlacklist begin:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
err := s.UpdateBlacklist(context.TODO()) |
|
if err != nil { |
|
msg = fmt.Sprintf("UpdateBlacklist error(%v)", err) |
|
} else { |
|
msg = "Success" |
|
} |
|
err = s.email.SendMail(time.Now(), msg, "创作激励同步黑名单%d年%d月%d日", "[email protected]", "[email protected]", "[email protected]") |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("Exec growup-job updateDateBlacklist end:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) updateUpInfoVideo(ctx context.Context) { |
|
var mailReceivers []string |
|
for _, v := range s.conf.Mail.Send { |
|
if v.Type == 4 { |
|
mailReceivers = v.Addr |
|
break |
|
} |
|
} |
|
for { |
|
time.Sleep(NextDay(11, 0, 0)) |
|
log.Info("Exec growup-job updateUpInfoVideo begin:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
msg := "" |
|
err := s.UpdateUpInfo(context.TODO()) |
|
if err != nil { |
|
msg = fmt.Sprintf("s.UpdateUpInfo error(%v)", err) |
|
} else { |
|
msg, err = s.autoExamination(context.TODO()) |
|
if err != nil { |
|
msg = fmt.Sprintf("s.autoExamination error(%v)", err) |
|
} |
|
} |
|
err = s.email.SendMail(time.Now(), msg, "创作激励自动过审%d年%d月%d日", mailReceivers...) |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("Exec growup-job updateUpInfoVideo end:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) sendMail(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(12, 0, 0)) |
|
log.Info("Exec growup-job sendMail begin:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
s.CombineMails() |
|
log.Info("Exec growup-job sendMail end:%v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) updateCheat(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(13, 0, 0)) |
|
log.Info("Exec growup-job updateCheat begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
s.CheatStatistics(context.TODO(), t) |
|
log.Info("Exec growup-job updateCheat end: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) mailTagIncome(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(19, 30, 0)) |
|
log.Info("Exec growup-job mailTagIncome begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
s.sendTagIncome(context.TODO(), date) |
|
log.Info("End growup-job mailTagIncome: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) calCreativeActivity(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(15, 30, 0)) |
|
msg := "" |
|
log.Info("Exec growup-job calCreativeActivity begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
err := s.CreativeActivity(context.TODO(), date) |
|
if err != nil { |
|
msg = fmt.Sprintf("calCreativeActivity error(%v)", err) |
|
} else { |
|
msg = "Success" |
|
} |
|
err = s.email.SendMail(date, msg, "创作激励活动每日计算%d年%d月%d日", "[email protected]", "[email protected]", "[email protected]") |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job calCreativeActivity: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) creativeBudget(ctx context.Context) { |
|
for { |
|
time.Sleep(NextDay(20, 0, 0)) |
|
msg := "" |
|
log.Info("Exec growup-job creativeBudget begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
err := s.CreativeBudget(context.TODO(), date) |
|
if err != nil { |
|
msg = fmt.Sprintf("creativeBudget error(%v)", err) |
|
} else { |
|
msg = "Success" |
|
} |
|
err = s.email.SendMail(date, msg, "创作激励预算每日计算%d年%d月%d日", "[email protected]", "[email protected]", "[email protected]") |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job creativeBudget: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) checkAvBreach(ctx context.Context) { |
|
var mailReceivers []string |
|
for _, v := range s.conf.Mail.Send { |
|
if v.Type == 4 { |
|
mailReceivers = v.Addr |
|
break |
|
} |
|
} |
|
for { |
|
time.Sleep(NextDay(0, 0, 0)) |
|
log.Info("Exec growup-job check and auto breach av begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-48 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
msg, err := s.autoAvBreach(context.TODO(), date.Format(_layout)) |
|
if err != nil { |
|
msg = fmt.Sprintf("autoAvBreach error(%v)", err) |
|
} |
|
err = s.email.SendMail(date, msg, "创作激励自制转转载每日扣除%d年%d月%d日", mailReceivers...) |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job autoAvBreach: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) checkUpPunish(ctx context.Context) { |
|
var mailReceivers []string |
|
for _, v := range s.conf.Mail.Send { |
|
if v.Type == 4 { |
|
mailReceivers = v.Addr |
|
break |
|
} |
|
} |
|
for { |
|
time.Sleep(NextDay(10, 0, 0)) |
|
if time.Now().Weekday() != time.Monday { |
|
continue |
|
} |
|
log.Info("Exec growup-job checkUpPunish begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
msg, err := s.autoUpPunish(context.TODO()) |
|
if err != nil { |
|
msg = fmt.Sprintf("s.autoUpPunish error(%v)", err) |
|
} |
|
err = s.email.SendMail(time.Now(), msg, "创作激励自制转转载处罚%d年%d月%d日", mailReceivers...) |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job checkUpPunish: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) syncIncomeBubbleMetaTask(ctx context.Context) { |
|
for { |
|
msg := "ok" |
|
time.Sleep(NextDay(12, 0, 0)) |
|
log.Info("Exec growup-job syncIncomeBubbleMetaTask begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
err := s.SyncIncomeBubbleMetaTask(context.TODO(), date) |
|
if err != nil { |
|
msg = fmt.Sprintf("s.syncIncomeBubbleMetaTask error(%v)", err) |
|
} |
|
err = s.email.SendMail(time.Now(), msg, "创作激励同步动态转发抽奖%d年%d月%d日", "[email protected]", "[email protected]", "[email protected]") |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job syncIncomeBubbleMetaTask: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
func (s *Service) snapshotIncomeBubbleTask(ctx context.Context) { |
|
for { |
|
msg := "ok" |
|
time.Sleep(NextDay(19, 0, 0)) |
|
log.Info("Exec growup-job snapshotIncomeBubbleTask begin: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
t := time.Now().Add(-24 * time.Hour) |
|
date := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) |
|
err := s.SnapshotBubbleIncomeTask(context.TODO(), date) |
|
if err != nil { |
|
msg = fmt.Sprintf("s.snapshotIncomeBubbleTask error(%v)", err) |
|
} |
|
err = s.email.SendMail(time.Now(), msg, "创作激励动态转发抽奖收入同步%d年%d月%d日", "[email protected]", "[email protected]", "[email protected]") |
|
if err != nil { |
|
log.Error("s.email.SendMail error(%v)", err) |
|
} |
|
log.Info("End growup-job snapshotIncomeBubbleTask: %v", time.Now().Format("2006-01-02 15:04:05")) |
|
} |
|
} |
|
|
|
// NextDay next day x hours |
|
func NextDay(hour, min, second int) time.Duration { |
|
n := time.Now() |
|
d := time.Date(n.Year(), n.Month(), n.Day(), hour, min, second, 0, n.Location()) |
|
for !d.After(n) { |
|
d = d.AddDate(0, 0, 1) |
|
} |
|
return time.Until(d) |
|
} |
|
|
|
// Close close the service |
|
func (s *Service) Close() { |
|
s.dao.Close() |
|
s.tag.Close() |
|
s.income.Close() |
|
s.charge.Close() |
|
} |
|
|
|
// Ping check server ok. |
|
func (s *Service) Ping(c context.Context) (err error) { |
|
return s.dao.Ping(c) |
|
}
|
|
|