+ partner.ListOrders
+ AmendMissingOrders
This commit is contained in:
@@ -969,3 +969,122 @@ func (c *OrderManager) GetStoreAfsOrderCountInfo(ctx *jxcontext.Context, storeID
|
||||
globals.SugarLogger.Infof("GetStoreAfsOrderCountInfo storeID:%d failed with error:%v", storeID, err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (c *OrderManager) AmendMissingOrders(ctx *jxcontext.Context, vendorIDs []int, storeID int, fromDate, toDate time.Time, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||
if utils.IsTimeZero(fromDate) {
|
||||
return "", fmt.Errorf("fromDate必须指定")
|
||||
}
|
||||
if len(vendorIDs) == 0 {
|
||||
for vendorID := range partner.PurchasePlatformHandlers {
|
||||
vendorIDs = append(vendorIDs, vendorID)
|
||||
}
|
||||
}
|
||||
type tDateVendorPair struct {
|
||||
QueryDate time.Time
|
||||
VendorID int
|
||||
}
|
||||
fromDate = utils.Time2Date(fromDate)
|
||||
if utils.IsTimeZero(toDate) {
|
||||
toDate = fromDate
|
||||
}
|
||||
toDate = utils.Time2Date(toDate)
|
||||
var dateVendorList []*tDateVendorPair
|
||||
for _, vendorID := range vendorIDs {
|
||||
for tmpDate := fromDate; tmpDate.Sub(toDate) <= 0; tmpDate = tmpDate.Add(24 * time.Hour) {
|
||||
dateVendorList = append(dateVendorList, &tDateVendorPair{
|
||||
QueryDate: tmpDate,
|
||||
VendorID: vendorID,
|
||||
})
|
||||
}
|
||||
}
|
||||
type tOrderVendorPair struct {
|
||||
VendorOrderID string
|
||||
VendorID int
|
||||
}
|
||||
if len(dateVendorList) > 0 {
|
||||
var missingOrderList []*tOrderVendorPair
|
||||
task := tasksch.NewSeqTask("AmendMissingOrders", ctx,
|
||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
db := dao.GetDB()
|
||||
vendorStoreIDMap := make(map[int]string)
|
||||
if storeID > 0 {
|
||||
for _, vendorID := range vendorIDs {
|
||||
storeDetail, err2 := dao.GetStoreDetail(db, storeID, vendorID)
|
||||
if err = err2; err != nil {
|
||||
return "", err
|
||||
}
|
||||
vendorStoreIDMap[vendorID] = storeDetail.VendorStoreID
|
||||
}
|
||||
}
|
||||
task1 := tasksch.NewParallelTask("AmendMissingOrders ListOrders", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
vendorDate := batchItemList[0].(*tDateVendorPair)
|
||||
if handler, _ := partner.GetPurchasePlatformFromVendorID(vendorDate.VendorID).(partner.IPurchasePlatformStoreSkuHandler); handler != nil {
|
||||
orderIDs, err2 := handler.ListOrders(ctx, task, vendorDate.QueryDate, vendorStoreIDMap[vendorDate.VendorID])
|
||||
if err = err2; err == nil && len(orderIDs) > 0 {
|
||||
var orderList []*tOrderVendorPair
|
||||
for _, v := range orderIDs {
|
||||
orderList = append(orderList, &tOrderVendorPair{
|
||||
VendorOrderID: v,
|
||||
VendorID: vendorDate.VendorID,
|
||||
})
|
||||
}
|
||||
retVal = orderList
|
||||
}
|
||||
}
|
||||
return retVal, err
|
||||
}, dateVendorList)
|
||||
tasksch.HandleTask(task1, task, true).Run()
|
||||
orderList, err2 := task1.GetResult(0)
|
||||
if err = err2; err != nil && !isContinueWhenError {
|
||||
return "", err
|
||||
}
|
||||
localOrders, err2 := dao.QueryOrders(db, vendorIDs, storeID, fromDate, toDate.Add(24*time.Hour-time.Second))
|
||||
if err = err2; err != nil {
|
||||
return "", err
|
||||
}
|
||||
localOrderMap := make(map[string]*model.GoodsOrder)
|
||||
for _, v := range localOrders {
|
||||
localOrderMap[jxutils.ComposeUniversalOrderID(v.VendorOrderID, v.VendorID)] = v
|
||||
}
|
||||
|
||||
for _, v := range orderList {
|
||||
pair := v.(*tOrderVendorPair)
|
||||
if localOrderMap[jxutils.ComposeUniversalOrderID(pair.VendorOrderID, pair.VendorID)] == nil {
|
||||
missingOrderList = append(missingOrderList, pair)
|
||||
}
|
||||
}
|
||||
case 1:
|
||||
task2 := tasksch.NewParallelTask("AmendMissingOrders GetOrders", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
pair := batchItemList[0].(*tOrderVendorPair)
|
||||
if handler := partner.GetPurchasePlatformFromVendorID(pair.VendorID); handler != nil {
|
||||
order, err2 := handler.GetOrder(pair.VendorOrderID)
|
||||
if err = err2; err == nil {
|
||||
isDuplicated, err2 := c.SaveOrder(order, false, dao.GetDB())
|
||||
if err2 == nil && !isDuplicated {
|
||||
retVal = []int{1}
|
||||
}
|
||||
}
|
||||
}
|
||||
return retVal, err
|
||||
}, missingOrderList)
|
||||
tasksch.HandleTask(task2, task, true).Run()
|
||||
result, err = task2.GetResult(0)
|
||||
}
|
||||
return result, err
|
||||
}, 2)
|
||||
tasksch.HandleTask(task, nil, true).Run()
|
||||
if !isAsync {
|
||||
result, err2 := task.GetResult(0)
|
||||
if err = err2; err == nil {
|
||||
hint = utils.Int2Str(len(result))
|
||||
}
|
||||
} else {
|
||||
hint = task.GetID()
|
||||
}
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user