321 lines
10 KiB
Go
321 lines
10 KiB
Go
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日", "shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com")
|
|
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日", "shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com")
|
|
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日", "shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com")
|
|
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日", "shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com")
|
|
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日", "shaozhenyu@bilibili.com", "gaopeng@bilibili.com", "limengqing@bilibili.com")
|
|
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)
|
|
}
|