178 lines
4.6 KiB
Go
178 lines
4.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go-common/app/job/main/ugcpay/dao"
|
|
"go-common/app/job/main/ugcpay/model"
|
|
"go-common/library/log"
|
|
)
|
|
|
|
type limitedList interface {
|
|
LimitSize() int
|
|
BeginID(ctx context.Context) (id int64, err error)
|
|
List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error)
|
|
}
|
|
|
|
func runLimitedList(ctx context.Context, ll limitedList, sleep time.Duration, handler func(ctx context.Context, ele interface{}) error) (err error) {
|
|
if ll.LimitSize() <= 0 {
|
|
return
|
|
}
|
|
var (
|
|
id int64
|
|
list = make([]interface{}, ll.LimitSize())
|
|
)
|
|
if id, err = ll.BeginID(ctx); err != nil {
|
|
return
|
|
}
|
|
for len(list) >= ll.LimitSize() {
|
|
if id, list, err = ll.List(ctx, id); err != nil {
|
|
return
|
|
}
|
|
for _, ele := range list {
|
|
if err = handler(ctx, ele); err != nil {
|
|
log.Error("handle failed, ele: %+v, err: %+v", ele, err)
|
|
err = nil
|
|
continue
|
|
}
|
|
if sleep > 0 {
|
|
time.Sleep(sleep)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
type orderPaidLL struct {
|
|
beginTime time.Time
|
|
endTime time.Time
|
|
limit int
|
|
dao *dao.Dao
|
|
}
|
|
|
|
func (o *orderPaidLL) LimitSize() int {
|
|
return o.limit
|
|
}
|
|
|
|
func (o *orderPaidLL) BeginID(ctx context.Context) (id int64, err error) {
|
|
return o.dao.MinIDOrderPaid(ctx, o.beginTime)
|
|
}
|
|
|
|
func (o *orderPaidLL) List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error) {
|
|
var rawList []*model.Order
|
|
if maxID, rawList, err = o.dao.OrderPaidList(ctx, o.beginTime, o.endTime, beginID, o.limit); err != nil {
|
|
return
|
|
}
|
|
log.Info("orderPaidLL beginID: %d, beginTime: %+v, endTime: %+v, limit: %d, size: %d", beginID, o.beginTime, o.endTime, o.limit, len(rawList))
|
|
for _, r := range rawList {
|
|
list = append(list, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
type orderRefundedLL struct {
|
|
beginTime time.Time
|
|
endTime time.Time
|
|
limit int
|
|
dao *dao.Dao
|
|
}
|
|
|
|
func (o *orderRefundedLL) LimitSize() int {
|
|
return o.limit
|
|
}
|
|
|
|
func (o *orderRefundedLL) BeginID(ctx context.Context) (id int64, err error) {
|
|
return o.dao.MinIDOrderRefunded(ctx, o.beginTime)
|
|
}
|
|
|
|
func (o *orderRefundedLL) List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error) {
|
|
var rawList []*model.Order
|
|
if maxID, rawList, err = o.dao.OrderRefundedList(ctx, o.beginTime, o.endTime, beginID, o.limit); err != nil {
|
|
return
|
|
}
|
|
log.Info("orderRefundedLL beginID: %d, beginTime: %+v, endTime: %+v, limit: %d, size: %d", beginID, o.beginTime, o.endTime, o.limit, len(rawList))
|
|
for _, r := range rawList {
|
|
list = append(list, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
type dailyBillLLByVer struct {
|
|
ver int64
|
|
limit int
|
|
dao *dao.Dao
|
|
}
|
|
|
|
func (d *dailyBillLLByVer) LimitSize() int {
|
|
return d.limit
|
|
}
|
|
|
|
func (d *dailyBillLLByVer) BeginID(ctx context.Context) (id int64, err error) {
|
|
return d.dao.MinIDDailyBillByVer(ctx, d.ver)
|
|
}
|
|
|
|
func (d *dailyBillLLByVer) List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error) {
|
|
var rawList []*model.DailyBill
|
|
if maxID, rawList, err = d.dao.DailyBillListByVer(ctx, d.ver, beginID, d.limit); err != nil {
|
|
return
|
|
}
|
|
log.Info("dailyBillLLByVer beginID: %d, ver: %d, limit: %d, size: %d", beginID, d.ver, d.limit, len(rawList))
|
|
for _, r := range rawList {
|
|
list = append(list, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
type dailyBillLLByMonthVer struct {
|
|
monthVer int64
|
|
limit int
|
|
dao *dao.Dao
|
|
}
|
|
|
|
func (d *dailyBillLLByMonthVer) LimitSize() int {
|
|
return d.limit
|
|
}
|
|
|
|
func (d *dailyBillLLByMonthVer) BeginID(ctx context.Context) (id int64, err error) {
|
|
return d.dao.MinIDDailyBillByMonthVer(ctx, d.monthVer)
|
|
}
|
|
|
|
func (d *dailyBillLLByMonthVer) List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error) {
|
|
var rawList []*model.DailyBill
|
|
if maxID, rawList, err = d.dao.DailyBillListByMonthVer(ctx, d.monthVer, beginID, d.limit); err != nil {
|
|
return
|
|
}
|
|
log.Info("dailyBillLLByMonthVer beginID: %d, monthVer: %d, limit: %d, size: %d", beginID, d.monthVer, d.limit, len(rawList))
|
|
for _, r := range rawList {
|
|
list = append(list, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
type monthlyBillLL struct {
|
|
ver int64
|
|
limit int
|
|
dao *dao.Dao
|
|
}
|
|
|
|
func (m *monthlyBillLL) LimitSize() int {
|
|
return m.limit
|
|
}
|
|
|
|
func (m *monthlyBillLL) BeginID(ctx context.Context) (id int64, err error) {
|
|
return m.dao.MinIDMonthlyBill(ctx, m.ver)
|
|
}
|
|
|
|
func (m *monthlyBillLL) List(ctx context.Context, beginID int64) (maxID int64, list []interface{}, err error) {
|
|
var rawList []*model.Bill
|
|
if maxID, rawList, err = m.dao.MonthlyBillList(ctx, m.ver, beginID, m.limit); err != nil {
|
|
return
|
|
}
|
|
log.Info("monthlyBillLL beginID: %d, ver: %d, limit: %d, size: %d", beginID, m.ver, m.limit, len(rawList))
|
|
for _, r := range rawList {
|
|
list = append(list, r)
|
|
}
|
|
return
|
|
}
|