+ partner.ListOrders

+ AmendMissingOrders
This commit is contained in:
gazebo
2019-07-18 18:46:14 +08:00
parent 9db41bb15a
commit d5752381c7
10 changed files with 309 additions and 5 deletions

View File

@@ -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
}