diff --git a/business/jxutils/tasksch/parallel_task.go b/business/jxutils/tasksch/parallel_task.go index 6aae8e859..cc18202e4 100644 --- a/business/jxutils/tasksch/parallel_task.go +++ b/business/jxutils/tasksch/parallel_task.go @@ -126,6 +126,9 @@ func (task *ParallelTask) Run() { chanRetVal = err goto end } + task.locker.Lock() + task.DetailErrList = append(task.DetailErrList, err) + task.locker.Unlock() } } } @@ -176,9 +179,8 @@ func (task *ParallelTask) Run() { task.Result = taskResult task.TerminatedAt = time.Now() task.locker.Unlock() - - globals.SugarLogger.Debugf("ParallelTask.Run %s, result:%v, err:%v", task.Name, taskResult, taskErr) - + globals.SugarLogger.Debugf("ParallelTask.Run %s, err:%v", task.Name, taskErr) + // globals.SugarLogger.Debugf("ParallelTask.Run %s, result:%v, err:%v", task.Name, taskResult, taskErr) close(task.subFinishChan) if task.resultHandler != nil { diff --git a/business/jxutils/tasksch/sequence_task.go b/business/jxutils/tasksch/sequence_task.go index 873459744..7cd6e7480 100644 --- a/business/jxutils/tasksch/sequence_task.go +++ b/business/jxutils/tasksch/sequence_task.go @@ -45,6 +45,9 @@ func (task *SeqTask) Run() { if !task.IsContinueWhenError { break } + task.locker.Lock() + task.DetailErrList = append(task.DetailErrList, err) + task.locker.Unlock() } else if result != nil { taskResult = append(taskResult, utils.Interface2Slice(result)...) } diff --git a/business/jxutils/tasksch/task.go b/business/jxutils/tasksch/task.go index 9fc352262..207899be7 100644 --- a/business/jxutils/tasksch/task.go +++ b/business/jxutils/tasksch/task.go @@ -61,9 +61,10 @@ type BaseTask struct { FailedJobCount int `json:"failedJobCount"` Status int `json:"status"` - Result []interface{} `json:"result"` - Err error `json:"err"` - Children TaskList `json:"children"` + Result []interface{} `json:"result"` + Err error `json:"err"` + Children TaskList `json:"children"` + DetailErrList []error `json:"detailErrList"` finishChan chan int C <-chan int `json:"-"` diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index fda2c8028..678d3f7b1 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -136,16 +136,21 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks task := tasksch.NewParallelTask("SyncStoreSkus skus", nil, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeSku := batchItemList[0].(*tStoreSkuFullInfo) updateFields := []string{model.FieldEbaiSyncStatus} + isCreate := false if globals.EnableStoreWrite { if storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID)) } else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false)) if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil { - // todo 创建SKU后马上绑定分类,会失败,待解决 updateFields = append(updateFields, model.FieldEbaiID) + isCreate = true + // 创建SKU后马上绑定分类,会失败,所以延迟绑定 time.AfterFunc(3*time.Second, func() { - api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID)) + if err := api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID)); err == nil { + storeSku.EbaiSyncStatus = 0 + dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...) + } }) } } else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { @@ -155,7 +160,11 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks } } if err == nil { - storeSku.EbaiSyncStatus = 0 + if isCreate { + storeSku.EbaiSyncStatus = model.SyncFlagModifiedMask + } else { + storeSku.EbaiSyncStatus = 0 + } _, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...) } return nil, err