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.
177 lines
4.6 KiB
177 lines
4.6 KiB
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 |
|
}
|
|
|