- refactor ebai SyncStoreSkus
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package ebai
|
package ebai
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -74,14 +75,7 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) {
|
||||||
userName := ctx.GetUserName()
|
|
||||||
globals.SugarLogger.Debugf("SyncStoreSkus storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName)
|
|
||||||
db := dao.GetDB()
|
|
||||||
|
|
||||||
if err = p.SyncLocalStoreCategory(db, storeID, userName); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
sql := `
|
sql := `
|
||||||
SELECT t8.price_percentage, t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status,
|
SELECT t8.price_percentage, t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status,
|
||||||
t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, t3.img,
|
t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, t3.img,
|
||||||
@@ -114,70 +108,101 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks
|
|||||||
sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")"
|
||||||
sqlParams = append(sqlParams, skuIDs)
|
sqlParams = append(sqlParams, skuIDs)
|
||||||
}
|
}
|
||||||
strStoreID := utils.Int2Str(storeID)
|
err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...)
|
||||||
var storeSkuInfoList []*tStoreSkuFullInfo
|
return storeSkuInfoList, err
|
||||||
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
|
}
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(storeSkuInfoList, false))
|
|
||||||
catList2Add := make(map[int]int)
|
func (p *PurchaseHandler) createCatByStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkuInfoList []*tStoreSkuFullInfo) (num int64, err error) {
|
||||||
for _, storeSku := range storeSkuInfoList {
|
catList2Add := make(map[int]int)
|
||||||
if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
|
for _, storeSku := range storeSkuInfoList {
|
||||||
if storeSku.ParentCatEbaiID == 0 {
|
if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 {
|
||||||
catList2Add[storeSku.ParentCatID] = 1
|
if storeSku.ParentCatEbaiID == 0 {
|
||||||
}
|
catList2Add[storeSku.ParentCatID] = 1
|
||||||
if storeSku.CatEbaiID == 0 {
|
}
|
||||||
catList2Add[storeSku.CatID] = 1
|
if storeSku.CatEbaiID == 0 {
|
||||||
}
|
catList2Add[storeSku.CatID] = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
num = int64(len(catList2Add))
|
||||||
|
if num > 0 {
|
||||||
for k := range catList2Add {
|
for k := range catList2Add {
|
||||||
if err = dao.AddStoreCategoryMap(db, storeID, k, model.VendorIDEBAI, "", model.SyncFlagNewMask, userName); err != nil {
|
if err = dao.AddStoreCategoryMap(db, storeID, k, model.VendorIDEBAI, "", model.SyncFlagNewMask, ctx.GetUserName()); err != nil {
|
||||||
return "", err
|
return 0, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, err = p.SyncStoreCategory(ctx, parentTask, storeID, false); err != nil {
|
if _, err = p.SyncStoreCategory(ctx, parentTask, storeID, false); err != nil {
|
||||||
return "", err
|
return 0, err
|
||||||
}
|
|
||||||
if err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...); err == nil {
|
|
||||||
task := tasksch.NewParallelTask("SyncStoreSkus skus", 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}
|
|
||||||
isCreate := false
|
|
||||||
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))
|
|
||||||
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
|
||||||
updateFields = append(updateFields, model.FieldEbaiID)
|
|
||||||
isCreate = true
|
|
||||||
// 创建SKU后马上绑定分类,会失败,所以延迟绑定
|
|
||||||
time.AfterFunc(3*time.Second, func() {
|
|
||||||
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 {
|
|
||||||
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 {
|
|
||||||
if isCreate {
|
|
||||||
storeSku.EbaiSyncStatus = model.SyncFlagModifiedMask
|
|
||||||
} else {
|
|
||||||
storeSku.EbaiSyncStatus = 0
|
|
||||||
}
|
|
||||||
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}, storeSkuInfoList)
|
|
||||||
tasksch.AddChild(parentTask, task).Run()
|
|
||||||
_, err = task.GetResult(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return num, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
userName := ctx.GetUserName()
|
||||||
|
globals.SugarLogger.Debugf("SyncStoreSkus storeID:%d, skuIDs:%v, isContinueWhenError:%t, userName:%s", storeID, skuIDs, isContinueWhenError, userName)
|
||||||
|
db := dao.GetDB()
|
||||||
|
|
||||||
|
if err = p.SyncLocalStoreCategory(db, storeID, userName); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
strStoreID := utils.Int2Str(storeID)
|
||||||
|
var storeSkuInfoList []*tStoreSkuFullInfo
|
||||||
|
var num int64
|
||||||
|
for i := 0; i < 3; i++ {
|
||||||
|
if storeSkuInfoList, err = p.getDirtyStoreSkus(db, storeID, skuIDs); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if num, err = p.createCatByStoreSkus(ctx, parentTask, db, storeID, storeSkuInfoList); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if num == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if num != 0 {
|
||||||
|
return "", errors.New("不能创建商品所需的类别")
|
||||||
|
}
|
||||||
|
|
||||||
|
task := tasksch.NewParallelTask("SyncStoreSkus skus", 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}
|
||||||
|
isCreate := false
|
||||||
|
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))
|
||||||
|
if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil {
|
||||||
|
updateFields = append(updateFields, model.FieldEbaiID)
|
||||||
|
isCreate = true
|
||||||
|
// 创建SKU后马上绑定分类,会失败,所以延迟绑定
|
||||||
|
time.AfterFunc(3*time.Second, func() {
|
||||||
|
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 {
|
||||||
|
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 {
|
||||||
|
if isCreate {
|
||||||
|
storeSku.EbaiSyncStatus = model.SyncFlagModifiedMask
|
||||||
|
} else {
|
||||||
|
storeSku.EbaiSyncStatus = 0
|
||||||
|
}
|
||||||
|
_, err = dao.UpdateEntity(nil, &storeSku.StoreSkuBind, updateFields...)
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}, storeSkuInfoList)
|
||||||
|
tasksch.AddChild(parentTask, task).Run()
|
||||||
|
_, err = task.GetResult(0)
|
||||||
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user