go-common/app/job/main/ugcpay/service/service.go
2019-04-22 18:49:16 +08:00

133 lines
3.2 KiB
Go

package service
import (
"context"
"math/rand"
"time"
"go-common/app/job/main/ugcpay/conf"
"go-common/app/job/main/ugcpay/dao"
"go-common/app/job/main/ugcpay/service/pay"
"go-common/library/queue/databus"
"github.com/robfig/cron"
)
var (
ctx = context.Background()
)
// Service struct
type Service struct {
c *conf.Config
dao *dao.Dao
binlogMQ *databus.Databus
elecBinlogMQ *databus.Databus
cron *cron.Cron
pay *pay.Pay
taskLog *taskLog
}
// New init
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
binlogMQ: databus.New(c.BinlogMQ),
elecBinlogMQ: databus.New(c.ElecBinlogMQ),
cron: cron.New(),
pay: &pay.Pay{
ID: conf.Conf.Biz.Pay.ID,
Token: conf.Conf.Biz.Pay.Token,
RechargeShellNotifyURL: conf.Conf.Biz.Pay.RechargeCallbackURL,
},
}
s.taskLog = &taskLog{
d: s.dao,
}
// 创建日账单任务
taskBillDaily := &taskBillDaily{
dao: s.dao,
pay: s.pay,
rnd: rand.New(rand.NewSource(time.Now().Unix())),
dayOffset: conf.Conf.Biz.Task.DailyBillOffset,
namePrefix: conf.Conf.Biz.Task.DailyBillPrefix,
tl: s.taskLog,
}
if err := s.cron.AddFunc(conf.Conf.Biz.Cron.TaskDailyBill, s.wrapDisProc(taskBillDaily)); err != nil {
panic(err)
}
// 创建up虚拟账户入账任务
taskAccountUser := &taskAccountUser{
dao: s.dao,
taskPre: taskBillDaily, // 前置任务
dayOffset: conf.Conf.Biz.Task.DailyBillOffset,
namePrefix: conf.Conf.Biz.Task.AccountUserPrefix,
tl: s.taskLog,
}
if err := s.cron.AddFunc(conf.Conf.Biz.Cron.TaskAccountUser, s.wrapDisProc(taskAccountUser)); err != nil {
panic(err)
}
// 创建资金池入账任务
taskAccountBiz := &taskAccountBiz{
dao: s.dao,
taskPre: taskBillDaily, // 前置任务
dayOffset: conf.Conf.Biz.Task.DailyBillOffset,
namePrefix: conf.Conf.Biz.Task.AccountBizPrefix,
tl: s.taskLog,
}
if err := s.cron.AddFunc(conf.Conf.Biz.Cron.TaskAccountBiz, s.wrapDisProc(taskAccountBiz)); err != nil {
panic(err)
}
// 创建月账单任务
taskBillMonthly := &taskBillMonthly{
dao: s.dao,
rnd: rand.New(rand.NewSource(time.Now().Unix())),
monthOffset: conf.Conf.Biz.Task.MonthBillOffset,
namePrefix: conf.Conf.Biz.Task.MonthBillPrefix,
tl: s.taskLog,
}
if err := s.cron.AddFunc(conf.Conf.Biz.Cron.TaskMonthlyBill, s.wrapDisProc(taskBillMonthly)); err != nil {
panic(err)
}
// 创建转贝壳任务
taskRechargeShell := &taskRechargeShell{
dao: s.dao,
pay: s.pay,
rnd: rand.New(rand.NewSource(time.Now().Unix())),
monthOffset: conf.Conf.Biz.Task.RechargeShellOffset,
namePrefix: conf.Conf.Biz.Task.RechargeShellPrefix,
tl: s.taskLog,
}
if err := s.cron.AddFunc(conf.Conf.Biz.Cron.TaskRechargeShell, s.wrapDisProc(taskRechargeShell)); err != nil {
panic(err)
}
s.cron.Start()
go s.binlogproc()
go s.elecbinlogproc()
// go s.repairOrderUser() 修复订单用
return s
}
// Ping Service
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Close Service
func (s *Service) Close() {
s.dao.Close()
}