|
|
|
|
@@ -144,29 +144,30 @@ func (p *PurchaseHandler) FullSyncStoreSkus(ctx *jxcontext.Context, parentTask t
|
|
|
|
|
globals.SugarLogger.Debugf("FullSyncStoreSkus storeID:%d, isContinueWhenError:%t, userName:%s", storeID, isContinueWhenError, userName)
|
|
|
|
|
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
rootTask := tasksch.NewSeqTask("FullSyncStoreSkus", userName, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
switch step {
|
|
|
|
|
case 0:
|
|
|
|
|
err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil)
|
|
|
|
|
// 强制忽略删除SKU错误
|
|
|
|
|
if isContinueWhenError {
|
|
|
|
|
err = nil
|
|
|
|
|
rootTask := tasksch.NewSeqTask("FullSyncStoreSkus", ctx,
|
|
|
|
|
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
switch step {
|
|
|
|
|
case 0:
|
|
|
|
|
err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil)
|
|
|
|
|
// 强制忽略删除SKU错误
|
|
|
|
|
if isContinueWhenError {
|
|
|
|
|
err = nil
|
|
|
|
|
}
|
|
|
|
|
case 1:
|
|
|
|
|
_, err = p.setStoreSkuSyncStatus(ctx, db, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
case 2:
|
|
|
|
|
if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil {
|
|
|
|
|
_, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
}
|
|
|
|
|
case 3:
|
|
|
|
|
err = p.SyncLocalStoreCategory(db, storeID, userName)
|
|
|
|
|
case 4:
|
|
|
|
|
_, err = p.SyncStoreCategory(ctx, rootTask, storeID, false)
|
|
|
|
|
case 5:
|
|
|
|
|
_, err = p.SyncStoreSkus(ctx, rootTask, storeID, nil, false, isContinueWhenError)
|
|
|
|
|
}
|
|
|
|
|
case 1:
|
|
|
|
|
_, err = p.setStoreSkuSyncStatus(ctx, db, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
case 2:
|
|
|
|
|
if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil {
|
|
|
|
|
_, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
}
|
|
|
|
|
case 3:
|
|
|
|
|
err = p.SyncLocalStoreCategory(db, storeID, userName)
|
|
|
|
|
case 4:
|
|
|
|
|
_, err = p.SyncStoreCategory(ctx, rootTask, storeID, false)
|
|
|
|
|
case 5:
|
|
|
|
|
_, err = p.SyncStoreSkus(ctx, rootTask, storeID, nil, false, isContinueWhenError)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 6)
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 6)
|
|
|
|
|
tasksch.AddChild(parentTask, rootTask).Run()
|
|
|
|
|
if !isAsync {
|
|
|
|
|
_, err = rootTask.GetResult(0)
|
|
|
|
|
@@ -180,24 +181,25 @@ func (p *PurchaseHandler) DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTa
|
|
|
|
|
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
var errDeleteSku error
|
|
|
|
|
rootTask := tasksch.NewSeqTask("DeleteRemoteStoreSkus", userName, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
switch step {
|
|
|
|
|
case 0:
|
|
|
|
|
err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil)
|
|
|
|
|
errDeleteSku = err
|
|
|
|
|
// 强制忽略删除SKU错误
|
|
|
|
|
if isContinueWhenError {
|
|
|
|
|
err = nil
|
|
|
|
|
rootTask := tasksch.NewSeqTask("DeleteRemoteStoreSkus", ctx,
|
|
|
|
|
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
switch step {
|
|
|
|
|
case 0:
|
|
|
|
|
err = p.DeleteRemoteSkus(ctx, rootTask, storeID, nil)
|
|
|
|
|
errDeleteSku = err
|
|
|
|
|
// 强制忽略删除SKU错误
|
|
|
|
|
if isContinueWhenError {
|
|
|
|
|
err = nil
|
|
|
|
|
}
|
|
|
|
|
case 1:
|
|
|
|
|
_, err = p.setStoreSkuSyncStatus(ctx, db, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
case 2:
|
|
|
|
|
if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil {
|
|
|
|
|
_, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case 1:
|
|
|
|
|
_, err = p.setStoreSkuSyncStatus(ctx, db, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
case 2:
|
|
|
|
|
if err = p.DeleteRemoteCategories(ctx, rootTask, storeID, nil); err == nil {
|
|
|
|
|
_, err = dao.SetStoreCategorySyncStatus(db, model.VendorIDEBAI, storeID, nil, model.SyncFlagNewMask)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 3)
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 3)
|
|
|
|
|
tasksch.AddChild(parentTask, rootTask).Run()
|
|
|
|
|
if !isAsync {
|
|
|
|
|
_, err = rootTask.GetResult(0)
|
|
|
|
|
@@ -215,58 +217,60 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
|
|
|
|
|
var storeSkuInfoList []*tStoreSkuFullInfo
|
|
|
|
|
var num int64
|
|
|
|
|
strStoreID := utils.Int2Str(storeID)
|
|
|
|
|
rootTask := tasksch.NewSeqTask("SyncStoreSkus饿百1", userName, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
if step == 0 {
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
if storeSkuInfoList, err = p.getDirtyStoreSkus(db, storeID, skuIDs); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if num, err = p.createCatByStoreSkus(ctx, rootTask, db, storeID, storeSkuInfoList); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if num == 0 {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if num != 0 {
|
|
|
|
|
globals.SugarLogger.Infof("SyncStoreSkus 不能创建商品所需的类别, storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName)
|
|
|
|
|
return nil, errors.New("不能创建商品所需的类别")
|
|
|
|
|
}
|
|
|
|
|
} else if step == 1 {
|
|
|
|
|
task := tasksch.NewParallelTask("SyncStoreSkus饿百2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
storeSku := batchItemList[0].(*tStoreSkuFullInfo)
|
|
|
|
|
updateFields := []string{model.FieldEbaiSyncStatus}
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
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))
|
|
|
|
|
// todo 适当处理重复(即已经创建)的情况
|
|
|
|
|
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
|
|
|
|
updateFields = append(updateFields, model.FieldEbaiID)
|
|
|
|
|
}
|
|
|
|
|
} else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 {
|
|
|
|
|
if jxutils.IsFakeID(storeSku.EbaiID) {
|
|
|
|
|
err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID)
|
|
|
|
|
} else {
|
|
|
|
|
if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
|
|
|
|
// err = api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rootTask := tasksch.NewSeqTask("SyncStoreSkus饿百1", ctx,
|
|
|
|
|
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
if step == 0 {
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
|
if storeSkuInfoList, err = p.getDirtyStoreSkus(db, storeID, skuIDs); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if num, err = p.createCatByStoreSkus(ctx, rootTask, db, storeID, storeSkuInfoList); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if num == 0 {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if err == nil {
|
|
|
|
|
storeSku.EbaiSyncStatus = 0
|
|
|
|
|
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
|
|
|
|
|
if num != 0 {
|
|
|
|
|
globals.SugarLogger.Infof("SyncStoreSkus 不能创建商品所需的类别, storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName)
|
|
|
|
|
return nil, errors.New("不能创建商品所需的类别")
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, storeSkuInfoList)
|
|
|
|
|
tasksch.AddChild(rootTask, task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 2)
|
|
|
|
|
} else if step == 1 {
|
|
|
|
|
task := tasksch.NewParallelTask("SyncStoreSkus饿百2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
|
|
|
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
storeSku := batchItemList[0].(*tStoreSkuFullInfo)
|
|
|
|
|
updateFields := []string{model.FieldEbaiSyncStatus}
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
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))
|
|
|
|
|
// todo 适当处理重复(即已经创建)的情况
|
|
|
|
|
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
|
|
|
|
updateFields = append(updateFields, model.FieldEbaiID)
|
|
|
|
|
}
|
|
|
|
|
} else if storeSku.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 {
|
|
|
|
|
if jxutils.IsFakeID(storeSku.EbaiID) {
|
|
|
|
|
err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID)
|
|
|
|
|
} else {
|
|
|
|
|
if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
|
|
|
|
// err = api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if err == nil {
|
|
|
|
|
storeSku.EbaiSyncStatus = 0
|
|
|
|
|
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, storeSkuInfoList)
|
|
|
|
|
tasksch.AddChild(rootTask, task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 2)
|
|
|
|
|
tasksch.AddChild(parentTask, rootTask).Run()
|
|
|
|
|
if !isAsync {
|
|
|
|
|
_, err = rootTask.GetResult(0)
|
|
|
|
|
@@ -274,7 +278,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
|
|
|
|
|
return rootTask.ID, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (p *PurchaseHandler) GetAllRemoteSkus(storeID int) (skus []map[string]interface{}, err error) {
|
|
|
|
|
func (p *PurchaseHandler) GetAllRemoteSkus(ctx *jxcontext.Context, storeID int, parentTask tasksch.ITask) (skus []map[string]interface{}, err error) {
|
|
|
|
|
page1, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), utils.Params2Map("pagesize", MaxPageSize))
|
|
|
|
|
if err == nil {
|
|
|
|
|
skus = append(skus, page1.List...)
|
|
|
|
|
@@ -283,19 +287,20 @@ func (p *PurchaseHandler) GetAllRemoteSkus(storeID int) (skus []map[string]inter
|
|
|
|
|
for i := 2; i <= page1.Pages; i++ {
|
|
|
|
|
pages[i-2] = i
|
|
|
|
|
}
|
|
|
|
|
task := tasksch.NewParallelTask("GetAllRemoteSkus", nil, "", func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
callParams := map[string]interface{}{
|
|
|
|
|
"pagesize": MaxPageSize,
|
|
|
|
|
"page": batchItemList[0],
|
|
|
|
|
}
|
|
|
|
|
pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams)
|
|
|
|
|
if err2 == nil {
|
|
|
|
|
return pageSku.List, err2
|
|
|
|
|
}
|
|
|
|
|
globals.SugarLogger.Debug(utils.Format4Output(callParams, false))
|
|
|
|
|
return nil, err2
|
|
|
|
|
}, pages)
|
|
|
|
|
task.Run()
|
|
|
|
|
task := tasksch.NewParallelTask("GetAllRemoteSkus", nil, ctx,
|
|
|
|
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
callParams := map[string]interface{}{
|
|
|
|
|
"pagesize": MaxPageSize,
|
|
|
|
|
"page": batchItemList[0],
|
|
|
|
|
}
|
|
|
|
|
pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams)
|
|
|
|
|
if err2 == nil {
|
|
|
|
|
return pageSku.List, err2
|
|
|
|
|
}
|
|
|
|
|
globals.SugarLogger.Debug(utils.Format4Output(callParams, false))
|
|
|
|
|
return nil, err2
|
|
|
|
|
}, pages)
|
|
|
|
|
tasksch.HandleTask(task, parentTask, false).Run()
|
|
|
|
|
result, err2 := task.GetResult(0)
|
|
|
|
|
if err = err2; err == nil {
|
|
|
|
|
for _, v := range result {
|
|
|
|
|
@@ -311,7 +316,7 @@ func (p *PurchaseHandler) DeleteRemoteSkus(ctx *jxcontext.Context, parentTask ta
|
|
|
|
|
globals.SugarLogger.Debugf("DeleteRemoteSkus饿百 storeID:%d", storeID)
|
|
|
|
|
|
|
|
|
|
if vendorSkuIDs == nil {
|
|
|
|
|
result, err2 := p.GetAllRemoteSkus(storeID)
|
|
|
|
|
result, err2 := p.GetAllRemoteSkus(ctx, storeID, parentTask)
|
|
|
|
|
if err = err2; err == nil {
|
|
|
|
|
vendorSkuIDs = make([]string, len(result))
|
|
|
|
|
for k, v := range result {
|
|
|
|
|
@@ -319,16 +324,17 @@ func (p *PurchaseHandler) DeleteRemoteSkus(ctx *jxcontext.Context, parentTask ta
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
task := tasksch.NewParallelTask("DeleteRemoteSkus", tasksch.NewParallelConfig().SetBatchSize(100).SetIsContinueWhenError(true), "", func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
strList := make([]string, len(batchItemList))
|
|
|
|
|
for k, v := range batchItemList {
|
|
|
|
|
strList[k] = v.(string)
|
|
|
|
|
}
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
err = api.EbaiAPI.SkuDelete(utils.Int2Str(storeID), strings.Join(strList, ","))
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, vendorSkuIDs)
|
|
|
|
|
task := tasksch.NewParallelTask("DeleteRemoteSkus", tasksch.NewParallelConfig().SetBatchSize(100).SetIsContinueWhenError(true), ctx,
|
|
|
|
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
strList := make([]string, len(batchItemList))
|
|
|
|
|
for k, v := range batchItemList {
|
|
|
|
|
strList[k] = v.(string)
|
|
|
|
|
}
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
err = api.EbaiAPI.SkuDelete(utils.Int2Str(storeID), strings.Join(strList, ","))
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, vendorSkuIDs)
|
|
|
|
|
tasksch.AddChild(parentTask, task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
return err
|
|
|
|
|
@@ -347,12 +353,13 @@ func (p *PurchaseHandler) DeleteRemoteCategories(ctx *jxcontext.Context, parentT
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
task := tasksch.NewParallelTask("DeleteRemoteCategories", tasksch.NewParallelConfig().SetIsContinueWhenError(true), "", func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryDelete(strStoreID, batchItemList[0].(int64))
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, vendorCatIDs)
|
|
|
|
|
task := tasksch.NewParallelTask("DeleteRemoteCategories", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx,
|
|
|
|
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryDelete(strStoreID, batchItemList[0].(int64))
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, vendorCatIDs)
|
|
|
|
|
tasksch.AddChild(parentTask, task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
return err
|
|
|
|
|
@@ -465,9 +472,10 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
|
|
|
|
|
globals.SugarLogger.Debugf("SyncOneStoreCategories storeID:%d, userName:%s", storeID, userName)
|
|
|
|
|
|
|
|
|
|
db := dao.GetDB()
|
|
|
|
|
rootTask := tasksch.NewSeqTask("ebai SyncStoreCategory", userName, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
level := step + 1
|
|
|
|
|
sql := `
|
|
|
|
|
rootTask := tasksch.NewSeqTask("ebai SyncStoreCategory", ctx,
|
|
|
|
|
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
|
|
|
level := step + 1
|
|
|
|
|
sql := `
|
|
|
|
|
SELECT t2.*, t1.name, t1.parent_id, t1.level, t1.type, t1.seq, t2p.ebai_id parent_ebai_id
|
|
|
|
|
FROM sku_category t1
|
|
|
|
|
LEFT JOIN sku_category t1p ON t1.parent_id = t1p.id
|
|
|
|
|
@@ -475,45 +483,46 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
|
|
|
|
|
LEFT JOIN store_sku_category_map t2p ON t1p.id = t2p.category_id AND t2p.store_id = ? AND t2p.deleted_at = ?
|
|
|
|
|
WHERE t1.level = ? AND t1.deleted_at = ?
|
|
|
|
|
`
|
|
|
|
|
var catList []*tStoreCatInfo
|
|
|
|
|
sqlParams := []interface{}{
|
|
|
|
|
storeID,
|
|
|
|
|
storeID,
|
|
|
|
|
utils.DefaultTimeValue,
|
|
|
|
|
level,
|
|
|
|
|
utils.DefaultTimeValue,
|
|
|
|
|
}
|
|
|
|
|
if err = dao.GetRows(db, &catList, sql, sqlParams...); err == nil {
|
|
|
|
|
strStoreID := utils.Int2Str(storeID)
|
|
|
|
|
task := tasksch.NewParallelTask("SyncStoreCategory", nil, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
updateFields := []string{model.FieldEbaiSyncStatus}
|
|
|
|
|
catInfo := batchItemList[0].(*tStoreCatInfo)
|
|
|
|
|
// globals.SugarLogger.Debug(utils.Format4Output(catInfo, false))
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
if catInfo.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryDelete(strStoreID, catInfo.EbaiID)
|
|
|
|
|
} else if catInfo.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // 新增
|
|
|
|
|
ebaiID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, formatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
|
|
|
|
|
if err = err2; err == nil {
|
|
|
|
|
catInfo.EbaiID = ebaiID
|
|
|
|
|
updateFields = append(updateFields, model.FieldEbaiID)
|
|
|
|
|
var catList []*tStoreCatInfo
|
|
|
|
|
sqlParams := []interface{}{
|
|
|
|
|
storeID,
|
|
|
|
|
storeID,
|
|
|
|
|
utils.DefaultTimeValue,
|
|
|
|
|
level,
|
|
|
|
|
utils.DefaultTimeValue,
|
|
|
|
|
}
|
|
|
|
|
if err = dao.GetRows(db, &catList, sql, sqlParams...); err == nil {
|
|
|
|
|
strStoreID := utils.Int2Str(storeID)
|
|
|
|
|
task := tasksch.NewParallelTask("SyncStoreCategory", nil, ctx,
|
|
|
|
|
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
|
|
|
updateFields := []string{model.FieldEbaiSyncStatus}
|
|
|
|
|
catInfo := batchItemList[0].(*tStoreCatInfo)
|
|
|
|
|
// globals.SugarLogger.Debug(utils.Format4Output(catInfo, false))
|
|
|
|
|
if globals.EnableStoreWrite && globals.EnableEbaiStoreWrite {
|
|
|
|
|
if catInfo.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryDelete(strStoreID, catInfo.EbaiID)
|
|
|
|
|
} else if catInfo.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // 新增
|
|
|
|
|
ebaiID, err2 := api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, formatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
|
|
|
|
|
if err = err2; err == nil {
|
|
|
|
|
catInfo.EbaiID = ebaiID
|
|
|
|
|
updateFields = append(updateFields, model.FieldEbaiID)
|
|
|
|
|
}
|
|
|
|
|
} else if catInfo.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, formatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if catInfo.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
|
|
|
|
|
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, formatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if err == nil {
|
|
|
|
|
db2 := dao.GetDB()
|
|
|
|
|
catInfo.EbaiSyncStatus = 0
|
|
|
|
|
_, err = dao.UpdateEntity(db2, &catInfo.StoreSkuCategoryMap, updateFields...)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, catList)
|
|
|
|
|
rootTask.AddChild(task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 2)
|
|
|
|
|
if err == nil {
|
|
|
|
|
db2 := dao.GetDB()
|
|
|
|
|
catInfo.EbaiSyncStatus = 0
|
|
|
|
|
_, err = dao.UpdateEntity(db2, &catInfo.StoreSkuCategoryMap, updateFields...)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, catList)
|
|
|
|
|
rootTask.AddChild(task).Run()
|
|
|
|
|
_, err = task.GetResult(0)
|
|
|
|
|
}
|
|
|
|
|
return nil, err
|
|
|
|
|
}, 2)
|
|
|
|
|
tasksch.AddChild(parentTask, rootTask).Run()
|
|
|
|
|
if !isAsync {
|
|
|
|
|
_, err = rootTask.GetResult(0)
|
|
|
|
|
|