@@ -955,14 +955,14 @@ func (v *VendorSync) SyncStoreSkusFromYb(ctx *jxcontext.Context, storeIDs []int,
func syncStoreSkusFromYb ( ctx * jxcontext . Context , storeID , vendorID int , vendorStoreID string , isAsync , isContinueWhenError bool ) ( hint string , err error ) {
var (
db = dao . GetDB ( )
localSkuMap = make ( map [ string ] * dao . StoreSkuSyncInfo )
vendorSkuMap = make ( map [ string ] * partner . SkuNameInfo )
skuBindInfosDel [ ] * StoreSkuBindInfo
skuBindInfosUpt [ ] * StoreSkuBindInfo
addList [ ] * partner . SkuNameInfo
updateList [ ] * partner . SkuNameInfo
deleteList [ ] * dao . StoreSkuSyncInfo
db = dao . GetDB ( )
localSkuMap = make ( map [ string ] * dao . StoreSkuSyncInfo )
vendorSkuMap = make ( map [ string ] * partner . SkuNameInfo )
// skuBindInfosDel []* StoreSkuBindInfo
// skuBindInfosUpt []* StoreSkuBindInfo
addList [ ] * partner . SkuNameInfo
updateList [ ] * partner . SkuNameInfo
deleteList [ ] * dao . StoreSkuSyncInfo
)
handler , _ := partner . GetPurchasePlatformFromVendorID ( vendorID ) . ( partner . ISingleStoreStoreSkuHandler )
@@ -992,101 +992,102 @@ func syncStoreSkusFromYb(ctx *jxcontext.Context, storeID, vendorID int, vendorSt
deleteList = append ( deleteList , v )
}
}
// fmt. Println( "remoteSkuList", len( remoteSkuList) )
// fmt. Println( "addList", len( addList) )
// fmt. Println( "updateList", len(updateList) )
taskSeqFunc := func ( task * tasksch . SeqTask , step int , params ... interface { } ) ( result interface { } , err error ) {
store , _ := dao . GetStoreDetail ( db , storeID , vendorID )
switch step {
case 0 :
if len ( addList ) > 0 {
taskFunc := func ( task * tasksch . ParallelTask , batchItemList [ ] interface { } , params ... interface { } ) ( retVal interface { } , err error ) {
var (
v = batchItemList [ 0 ] . ( * partner . SkuNameInfo )
upc = v . YbBarCode
)
err = AddSkuNameByUpc ( ctx , upc , store , v )
if err != nil {
task . AddFailedList ( putils . GetErrMsg2FailedSingleList ( nil , err , storeID , model . VendorChineseNames [ vendorID ] , "根据upc创建京西商品" ) )
}
return retVal , err
}
taskParallel := tasksch . NewParallelTask ( "创建商品" , tasksch . NewParallelConfig ( ) . SetIsContinueWhenError ( true ) , ctx , taskFunc , addList )
tasksch . Hand leTask( taskParallel , task , true ) . Run ( )
_ , err = taskParallel . GetResult ( 0 )
}
case 1 :
if len ( deleteList ) > 0 {
taskFunc := func ( task * tasksch . ParallelTask , batchI tem List [ ] interface { } , params ... interface { } ) ( retVal interface { } , err error ) {
var (
v = batchItemList [ 0 ] . ( * dao . StoreSkuSyncInfo )
)
skuBindInfo := & StoreSkuBindInfo {
NameID : v . NameID ,
IsFocus : - 1 ,
}
retVal = [ ] * StoreSkuBindInfo { skuBindInfo }
return retVal , err
}
taskParallel := tasksch . NewParallelTask ( "删除商品" , tasksch . NewParallelConfig ( ) . SetIsContinueWhenError ( true ) , ctx , taskFunc , deleteList )
tasksch . Hand leTask( taskParallel , task , true ) . Run ( )
resultDel , _ := taskParallel . GetResult ( 0 )
for _ , v := range resultDel {
skuBindInfosDel = append ( skuBindInfosDel , v . ( * StoreSkuBindInfo ) )
}
_ , err = updateStoresSkusWithoutSync ( ctx , db , [ ] int { storeID } , skuBindInfosDel , false , false )
}
case 2 :
if len ( updateList ) > 0 {
taskFunc := func ( task * tasksch . ParallelTask , batchItemList [ ] interface { } , params ... interface { } ) ( retVal interface { } , err error ) {
var (
v = batchItemList [ 0 ] . ( * partner . SkuNameInfo )
skuBindInfo = & StoreSkuBindInfo { }
storeSkus [ ] * dao . StoreSkuExt
pricePercentagePack [ ] * model . PricePercentageItem
)
sql := `
SELECT a.*, c.id name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
JOIN sku_name c ON c.id = b.name_id
WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ?
`
sqlParams := [ ] interface { } { storeID , v . SkuList [ 0 ] . VendorSkuID , utils . DefaultTimeValue }
err = dao . GetRows ( db , & st ore Skus , sql , sqlParams )
if len ( storeSkus ) > 0 {
if storeSkus [ 0 ] . YbPrice != int ( v . SkuList [ 0 ] . VendorPrice ) {
err = jxutils . Strings2Objs ( store . PricePercentagePackStr , & pricePercentagePack )
skuBindInfo . UnitPrice = jxutils . CaculateJxPriceByPricePack ( pricePercentagePack , 0 , int ( v . SkuList [ 0 ] . VendorPrice ) )
}
} else {
return retVal , fmt . Errorf ( "未查询到门店商品, yb_id [%v]" , v . SkuList [ 0 ] . VendorSkuID )
}
if v . SkuList [ 0 ] . Stock < 1 {
skuBindInfo . IsSale = model . StoreSkuBindStatusDontSale
} else {
skuBindInfo . IsSale = model . StoreSkuBindStatusNormal
}
skuBindInfo . NameID = storeSkus [ 0 ] . NameID
retVal = [ ] * StoreSkuBindInfo { skuBindInfo }
return retVal , err
}
taskParallel := tasksch . NewParallelTask ( "更新商品价格和库存" , tasksch . NewParallelConfig ( ) . SetIsContinueWhenError ( true ) , ctx , taskFunc , updateList )
tasksch . Hand leTask( taskParallel , task , true ) . Run ( )
resultUpt , _ := taskParallel . GetResult ( 0 )
for _ , v := range resultUpt {
skuBindInfosUpt = append ( skuBindInfosUpt , v . ( * StoreSkuBindInfo ) )
}
_ , err = updateStoresSkusWithoutSync ( ctx , db , [ ] int { storeID } , skuBindInfosUpt , false , false )
}
case 3 :
_ , err = CurVendorSync . SyncStoresSkus2 ( jxcontext . AdminCtx , nil , 0 , db , [ ] int { 0 , 1 , 3 } , nil , false , nil , nil , 0 , true , true )
}
return result , err
}
taskSeq := tasksch . NewSeqTask2 ( "同步银豹商品到京西" , ctx , true , taskSeqFunc , 3 )
tasksch . HandleTask ( taskSeq , nil , true ) . Run ( )
hint = taskSeq . GetID ( )
fmt . Println( "remoteSkuList", len ( remoteSkuList) )
fmt . Println( "addList", len ( addList) )
fmt . Println( "updateList", utils . Format4Output ( updateList , false ) )
fmt . Println ( "deleteList" , utils . Format4Output ( deleteList , false ) )
// taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
// store, _ := dao.GetStoreDetail(db, storeID, vendorID)
// switch step {
// case 0:
// if len(addList) > 0 {
// taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// var (
// v = batchItemList[0].(*partner.SkuNameInfo)
// upc = v.YbBarCode
// )
// err = AddSkuNameByUpc(ctx, upc, store, v)
// if err != nil {
// task.AddFailedList(putils.GetErrMsg2FailedSingleList(nil, err, storeID, model.VendorChineseNames[vendorID], "根据upc创建京西商品"))
// }
// return retVal, err
// }
// taskParallel := tasksch.NewParal lel Task("创建商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, addList )
// tasksch.HandleTask(taskParallel, task, true).Run( )
// _, err = taskParallel.GetResult(0)
// }
// case 1:
// if len(dele teList) > 0 {
// taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// var (
// v = batchItemList[0].(*dao.StoreSkuSyncInfo )
// )
// skuBindInfo := &StoreSkuBindInfo{
// NameID: v.NameID ,
// IsFocus: -1,
// }
// retVal = []*StoreSkuBindInfo{skuBindInfo}
// return retVal, err
// }
// taskParallel := tasksch.NewParal lel Task("删除商品", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, deleteList )
// tasksch.HandleTask(taskParallel, task, true).Run( )
// resultDel, _ := taskParallel.GetResult(0)
// for _, v := range resultDel {
// skuBindInfosDel = append(skuBindInfosDel, v.(*StoreSkuBindInfo))
// }
// _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosDel, false, false)
// }
// case 2:
// if len(updateList) > 0 {
// taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
// var (
// v = batchItemList[0].(*partner.SkuNameInfo)
// skuBindInfo = &StoreSkuBindInfo{}
// storeSkus []*dao.StoreSkuExt
// pricePercentagePack []*model.PricePercentageItem
// )
// sql := `
// SELECT a.*, c.id name_id
// FROM store_sku_bind a
// JOIN sku b ON a.sku_id = b.id
// JOIN sku_name c ON c.id = b.name_id
// WHERE a.store_id = ? AND a.yb_id = ? AND a.deleted_at = ?
// `
// sqlParams := []interface{}{storeID, v.SkuList[0].Vend orSkuID, utils.DefaultTimeValue}
// err = dao.GetRows(db, &storeSkus, sql, sqlParams)
// if len(storeSkus) > 0 {
// if storeSkus[0].YbPrice != int(v.SkuList[0].VendorPrice) {
// err = jxutils.Strings2Objs(store.PricePercentagePackStr, &pricePercentagePack )
// skuBindInfo.UnitPrice = jxutils.CaculateJxPriceByPricePack(pricePercentagePack, 0, int(v.SkuList[0].VendorPrice))
// }
// } else {
// return retVal, fmt.Errorf("未查询到门店商品, yb_id [%v]", v.SkuList[0].VendorSkuID)
// }
// if v.SkuList[0].Stock < 1 {
// skuBindInfo.IsSale = model.StoreSkuBindStatusDontSale
// } else {
// skuBindInfo.IsSale = model.StoreSkuBindStatusNormal
// }
// skuBindInfo.NameID = storeSkus[0].NameID
// retVal = []*StoreSkuBindInfo{skuBindInfo}
// return retVal, err
// }
// taskParallel := tasksch.NewParal lel Task("更新商品价格和库存", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, taskFunc, updateList )
// tasksch.HandleTask(taskParallel, task, true).Run( )
// resultUpt, _ := taskParallel.GetResult(0)
// for _, v := range resultUpt {
// skuBindInfosUpt = append(skuBindInfosUpt, v.(*StoreSkuBindInfo))
// }
// _, err = updateStoresSkusWithoutSync(ctx, db, []int{storeID}, skuBindInfosUpt, false, false)
// }
// case 3:
// _, err = CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, []int{0, 1, 3}, nil, false, nil, nil, 0, true, true)
// }
// return result, err
// }
// taskSeq := tasksch.NewSeqTask2("同步银豹商品到京西", ctx, true, taskSeqFunc, 3 )
// tasksch.HandleTask(taskSeq, nil, true).Run( )
// hint = taskSeq.GetID()
return hint , err
}
@@ -1118,9 +1119,13 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, storeSkus []*model
stock = 9999
}
storeSku2 , _ := dao . GetStoresSkusInfo ( db , [ ] int { storeMap . StoreID } , [ ] int { storeSku . SkuID } )
if storeSku . JdsID != 0 && len ( storeSku2 ) > 0 {
if storeSku . Status != storeSku2 [ 0 ] . Status && storeMap . VendorStoreID != "" {
err = api . JdShopAPI . UpdateSkuSiteStock ( storeSku . JdsID , stock , utils . Str2Int ( storeMap . VendorStoreID ) )
if storeSku . JdsID != 0 {
if len ( storeSku2 ) > 0 {
if storeSku . Status != storeSku2 [ 0 ] . Status && storeMap . VendorStoreID != "" {
err = api . JdShopAPI . UpdateSkuSiteStock ( storeSku . JdsID , stock , utils . Str2Int ( storeMap . VendorStoreID ) )
}
} else {
err = api . JdShopAPI . UpdateSkuSiteStock ( storeSku . JdsID , 0 , utils . Str2Int ( storeMap . VendorStoreID ) )
}
}
}