- putils/store_sku.go用于一些通用实现
This commit is contained in:
@@ -1,78 +1,9 @@
|
|||||||
package cms
|
package cms
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"sort"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func SyncStoreSkuNew(ctx *jxcontext.Context, vendorIDs, storeIDs, nameIDs, skuIDs []int) (hint string, err error) {
|
func SyncStoreSkuNew(ctx *jxcontext.Context, vendorIDs, storeIDs, nameIDs, skuIDs []int) (hint string, err error) {
|
||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, handler partner.ISingleStoreStoreSkuHandler, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) {
|
|
||||||
skuNameList, err := handler.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, nil)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
batchSize := handler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus)
|
|
||||||
task := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllSkus, vendorStoreID:%s", vendorStoreID),
|
|
||||||
tasksch.NewParallelConfig().SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx,
|
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
var skuList []*partner.StoreSkuInfo
|
|
||||||
for _, v := range batchItemList {
|
|
||||||
skuName := v.(*partner.SkuNameInfo)
|
|
||||||
skuList = append(skuList, &partner.StoreSkuInfo{
|
|
||||||
VendorSkuID: skuName.SkuList[0].VendorSkuID,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
err = handler.DeleteStoreSkus(ctx, storeID, vendorStoreID, skuList)
|
|
||||||
return nil, err
|
|
||||||
}, skuNameList)
|
|
||||||
tasksch.HandleTask(task, parentTask, true).Run()
|
|
||||||
_, err = task.GetResult(0)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, handler partner.ISingleStoreStoreSkuHandler, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) {
|
|
||||||
catList, err := handler.GetStoreAllCategories(ctx, storeID, vendorStoreID)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
catListMap := make(map[int][]*partner.BareCategoryInfo)
|
|
||||||
flattedCatList := flatCatList(catList)
|
|
||||||
for _, v := range flattedCatList {
|
|
||||||
catListMap[v.Level] = append(catListMap[v.Level], v)
|
|
||||||
}
|
|
||||||
var levelList []int
|
|
||||||
for k := range catListMap {
|
|
||||||
levelList = append(levelList, k)
|
|
||||||
}
|
|
||||||
sort.Sort(sort.Reverse(sort.IntSlice(levelList)))
|
|
||||||
task1 := tasksch.NewSeqTask(fmt.Sprintf("DeleteStoreAllCategories1, vendorStoreID:%s", vendorStoreID), ctx,
|
|
||||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
|
||||||
task2 := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllCategories2, vendorStoreID:%s", vendorStoreID), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
catInfo := batchItemList[0].(*partner.BareCategoryInfo)
|
|
||||||
err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID)
|
|
||||||
return nil, err
|
|
||||||
}, catListMap[levelList[step]])
|
|
||||||
tasksch.HandleTask(task2, task, true).Run()
|
|
||||||
_, err = task2.GetResult(0)
|
|
||||||
return nil, err
|
|
||||||
}, len(levelList))
|
|
||||||
tasksch.HandleTask(task1, parentTask, true).Run()
|
|
||||||
_, err = task1.GetResult(0)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func flatCatList(catList []*partner.BareCategoryInfo) (flattedCatList []*partner.BareCategoryInfo) {
|
|
||||||
flattedCatList = append(flattedCatList, catList...)
|
|
||||||
for _, v := range catList {
|
|
||||||
flattedCatList = append(flattedCatList, flatCatList(v.Children)...)
|
|
||||||
}
|
|
||||||
return flattedCatList
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,42 +1 @@
|
|||||||
package cms
|
package cms
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDeleteStoreAllSkus(t *testing.T) {
|
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDEBAI).(partner.ISingleStoreStoreSkuHandler)
|
|
||||||
err := DeleteStoreAllSkus(jxcontext.AdminCtx, nil, handler, 2, "2267254343", true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDeleteStoreAllCategories(t *testing.T) {
|
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDEBAI).(partner.ISingleStoreStoreSkuHandler)
|
|
||||||
err := DeleteStoreAllCategories(jxcontext.AdminCtx, nil, handler, 2, "2267254343", true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDeleteStoreAllSkusMtwm(t *testing.T) {
|
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDMTWM).(partner.ISingleStoreStoreSkuHandler)
|
|
||||||
err := DeleteStoreAllSkus(jxcontext.AdminCtx, nil, handler, 2, "2523687", true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestDeleteStoreAllCategoriesMtwm(t *testing.T) {
|
|
||||||
handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDMTWM).(partner.ISingleStoreStoreSkuHandler)
|
|
||||||
err := DeleteStoreAllCategories(jxcontext.AdminCtx, nil, handler, 2, "2523687", true)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ const (
|
|||||||
FuncDeleteStoreSkus = 9
|
FuncDeleteStoreSkus = 9
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MaxStoreSkuStock = 9999
|
||||||
|
UnlimitedStoreSkuStock = -1
|
||||||
|
)
|
||||||
|
|
||||||
type StoreSkuInfo struct {
|
type StoreSkuInfo struct {
|
||||||
SkuID int `json:"skuID,omitempty"`
|
SkuID int `json:"skuID,omitempty"`
|
||||||
VendorSkuID string `json:"vendorSkuID,omitempty"`
|
VendorSkuID string `json:"vendorSkuID,omitempty"`
|
||||||
@@ -108,11 +113,13 @@ type ISingleStoreStoreSkuHandler interface {
|
|||||||
CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
|
CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
|
||||||
UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
|
UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
|
||||||
DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (err error)
|
DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (err error)
|
||||||
|
DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error)
|
||||||
|
|
||||||
GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*BareCategoryInfo, err error)
|
GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*BareCategoryInfo, err error)
|
||||||
CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error)
|
CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error)
|
||||||
UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error)
|
UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error)
|
||||||
DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string) (err error)
|
DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string) (err error)
|
||||||
|
DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildSkuName(skuID int, vendorSkuID string) (skuName *SkuNameInfo) {
|
func BuildSkuName(skuID int, vendorSkuID string) (skuName *SkuNameInfo) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner/putils"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
@@ -16,15 +17,22 @@ var (
|
|||||||
|
|
||||||
type PurchaseHandler struct {
|
type PurchaseHandler struct {
|
||||||
partner.BasePurchasePlatform
|
partner.BasePurchasePlatform
|
||||||
|
putils.DefSingleStorePlatform
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if api.EbaiAPI != nil {
|
if api.EbaiAPI != nil {
|
||||||
CurPurchaseHandler = new(PurchaseHandler)
|
CurPurchaseHandler = New()
|
||||||
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
partner.RegisterPurchasePlatform(CurPurchaseHandler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func New() (obj *PurchaseHandler) {
|
||||||
|
obj = new(PurchaseHandler)
|
||||||
|
obj.ISingleStoreStoreSkuHandler = obj
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
func EbaiBusStatus2JxStatus(ebaiStatus int) int {
|
func EbaiBusStatus2JxStatus(ebaiStatus int) int {
|
||||||
if ebaiStatus == ebaiapi.ShopBusStatusHaveRest || ebaiStatus == ebaiapi.ShopBusStatusSuspended {
|
if ebaiStatus == ebaiapi.ShopBusStatusHaveRest || ebaiStatus == ebaiapi.ShopBusStatusSuspended {
|
||||||
return model.StoreStatusClosed
|
return model.StoreStatusClosed
|
||||||
|
|||||||
@@ -199,52 +199,6 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo) (params map[s
|
|||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) {
|
|
||||||
vendorSkuIDIntList := partner.BareStoreSkuInfoList(inStoreSkuList).GetVendorSkuIDIntList()
|
|
||||||
var vendorSkuList []*ebaiapi.SkuInfo
|
|
||||||
if len(vendorSkuIDIntList) > 1 {
|
|
||||||
task := tasksch.NewParallelTask("获取饿百平台门店商品信息", nil, ctx,
|
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
vendorSkuID := batchItemList[0].(int64)
|
|
||||||
skuInfo, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), &ebaiapi.SkuListParams{
|
|
||||||
SkuID: vendorSkuID,
|
|
||||||
})
|
|
||||||
if err == nil {
|
|
||||||
vendorSkuList = skuInfo.List
|
|
||||||
return skuInfo.List, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}, vendorSkuIDIntList)
|
|
||||||
tasksch.HandleTask(task, parentTask, false).Run()
|
|
||||||
_, err = task.GetResult(0)
|
|
||||||
} else if len(vendorSkuIDIntList) == 1 {
|
|
||||||
skuInfo, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), &ebaiapi.SkuListParams{
|
|
||||||
SkuID: vendorSkuIDIntList[0],
|
|
||||||
})
|
|
||||||
if err = err2; err == nil {
|
|
||||||
vendorSkuList = skuInfo.List
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
storeSkuMap := make(map[int64]*partner.StoreSkuInfo)
|
|
||||||
for _, v := range inStoreSkuList {
|
|
||||||
storeSkuMap[utils.Str2Int64(v.VendorSkuID)] = v
|
|
||||||
}
|
|
||||||
for _, vendorSku := range vendorSkuList {
|
|
||||||
storeSku := storeSkuMap[vendorSku.SkuID]
|
|
||||||
// globals.SugarLogger.Debug(utils.Format4Output(storeSku, false))
|
|
||||||
storeSku.Stock = vendorSku.LeftNum
|
|
||||||
storeSku.Price = vendorSku.SalePrice
|
|
||||||
storeSku.Status = ebaiSkuStatus2Jx(vendorSku.Status)
|
|
||||||
|
|
||||||
outStoreSkuList = append(outStoreSkuList, storeSku)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return outStoreSkuList, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func ebaiSkuStatus2Jx(ebaiSkuStatus int) (jxSkuStatus int) {
|
func ebaiSkuStatus2Jx(ebaiSkuStatus int) (jxSkuStatus int) {
|
||||||
if ebaiSkuStatus == ebaiapi.SkuStatusOnline {
|
if ebaiSkuStatus == ebaiapi.SkuStatusOnline {
|
||||||
jxSkuStatus = model.SkuStatusNormal
|
jxSkuStatus = model.SkuStatusNormal
|
||||||
|
|||||||
@@ -7,11 +7,34 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetStoreAllSkus(t *testing.T) {
|
func TestGetStoreSkusFullInfo(t *testing.T) {
|
||||||
skuNameList, err := new(PurchaseHandler).GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, []int{4256})
|
skuNameList, err := CurPurchaseHandler.GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, []int{4256})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err.Error())
|
t.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
t.Log(utils.Format4Output(skuNameList, false))
|
t.Log(utils.Format4Output(skuNameList, false))
|
||||||
t.Log(len(skuNameList))
|
t.Log(len(skuNameList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetStoreSkusBareInfo(t *testing.T) {
|
||||||
|
storeSkuList, err := CurPurchaseHandler.GetStoreSkusBareInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(storeSkuList, false))
|
||||||
|
t.Log(len(storeSkuList))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteStoreAllSkus(t *testing.T) {
|
||||||
|
err := CurPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteStoreAllCategories(t *testing.T) {
|
||||||
|
err := CurPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner/putils"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,15 +20,22 @@ var (
|
|||||||
|
|
||||||
type PurchaseHandler struct {
|
type PurchaseHandler struct {
|
||||||
partner.BasePurchasePlatform
|
partner.BasePurchasePlatform
|
||||||
|
putils.DefSingleStorePlatform
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if api.MtwmAPI != nil {
|
if api.MtwmAPI != nil {
|
||||||
curPurchaseHandler = new(PurchaseHandler)
|
curPurchaseHandler = New()
|
||||||
partner.RegisterPurchasePlatform(curPurchaseHandler)
|
partner.RegisterPurchasePlatform(curPurchaseHandler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func New() (obj *PurchaseHandler) {
|
||||||
|
obj = new(PurchaseHandler)
|
||||||
|
obj.ISingleStoreStoreSkuHandler = obj
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PurchaseHandler) GetVendorID() int {
|
func (c *PurchaseHandler) GetVendorID() int {
|
||||||
return model.VendorIDMTWM
|
return model.VendorIDMTWM
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -237,47 +237,6 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID i
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) {
|
|
||||||
vendorSkuIDList := partner.BareStoreSkuInfoList(inStoreSkuList).GetVendorSkuIDList()
|
|
||||||
var vendorFoodList []*mtwmapi.AppFood
|
|
||||||
if len(vendorSkuIDList) > 1 {
|
|
||||||
task := tasksch.NewParallelTask("获取饿百平台门店商品信息", nil, ctx,
|
|
||||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
|
||||||
vendorSkuID := batchItemList[0].(string)
|
|
||||||
skuInfo, err := api.MtwmAPI.RetailGet(vendorStoreID, vendorSkuID)
|
|
||||||
if err == nil {
|
|
||||||
vendorFoodList = []*mtwmapi.AppFood{skuInfo}
|
|
||||||
return vendorFoodList, nil
|
|
||||||
}
|
|
||||||
return nil, err
|
|
||||||
}, vendorSkuIDList)
|
|
||||||
tasksch.HandleTask(task, parentTask, false).Run()
|
|
||||||
_, err = task.GetResult(0)
|
|
||||||
} else if len(vendorSkuIDList) == 1 {
|
|
||||||
skuInfo, err2 := api.MtwmAPI.RetailGet(vendorStoreID, vendorSkuIDList[0])
|
|
||||||
if err = err2; err == nil {
|
|
||||||
vendorFoodList = []*mtwmapi.AppFood{skuInfo}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
storeSkuMap := make(map[string]*partner.StoreSkuInfo)
|
|
||||||
for _, v := range inStoreSkuList {
|
|
||||||
storeSkuMap[v.VendorSkuID] = v
|
|
||||||
}
|
|
||||||
for _, foodInfo := range vendorFoodList {
|
|
||||||
vendorSku := foodInfo.SkuList[0]
|
|
||||||
storeSku := storeSkuMap[vendorSku.SkuID]
|
|
||||||
storeSku.Stock = int(utils.Str2Int64WithDefault(vendorSku.Stock, 0))
|
|
||||||
storeSku.Price = jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(vendorSku.Price, 0))
|
|
||||||
storeSku.Status = mtwmSkuStatus2Jx(foodInfo.IsSoldOut)
|
|
||||||
outStoreSkuList = append(outStoreSkuList, storeSku)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return outStoreSkuList, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func mtwmSkuStatus2Jx(mtwmSkuStatus int) (jxSkuStatus int) {
|
func mtwmSkuStatus2Jx(mtwmSkuStatus int) (jxSkuStatus int) {
|
||||||
if mtwmSkuStatus == 0 {
|
if mtwmSkuStatus == 0 {
|
||||||
jxSkuStatus = model.SkuStatusNormal
|
jxSkuStatus = model.SkuStatusNormal
|
||||||
@@ -326,7 +285,7 @@ func vendorSku2Jx(vendorSku *mtwmapi.AppFood) (skuName *partner.SkuNameInfo) {
|
|||||||
VendorSkuID: mtwmSku.SkuID,
|
VendorSkuID: mtwmSku.SkuID,
|
||||||
SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)),
|
SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)),
|
||||||
|
|
||||||
Stock: int(utils.Str2Int64WithDefault(mtwmSku.Stock, 0)),
|
Stock: int(utils.Str2Int64WithDefault(mtwmSku.Stock, partner.UnlimitedStoreSkuStock)),
|
||||||
Price: jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(mtwmSku.Price, 0)),
|
Price: jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(mtwmSku.Price, 0)),
|
||||||
Status: mtwmSkuStatus2Jx(vendorSku.IsSoldOut),
|
Status: mtwmSkuStatus2Jx(vendorSku.IsSoldOut),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetStoreAllSkus(t *testing.T) {
|
func TestGetStoreSkusFullInfo(t *testing.T) {
|
||||||
skuNameList, err := new(PurchaseHandler).GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, 2, "2523687", nil)
|
skuNameList, err := new(PurchaseHandler).GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, 2, "2523687", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@@ -16,3 +16,26 @@ func TestGetStoreAllSkus(t *testing.T) {
|
|||||||
t.Log(utils.Format4Output(skuNameList, false))
|
t.Log(utils.Format4Output(skuNameList, false))
|
||||||
t.Log(len(skuNameList))
|
t.Log(len(skuNameList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetStoreSkusBareInfo(t *testing.T) {
|
||||||
|
storeSkuList, err := curPurchaseHandler.GetStoreSkusBareInfo(jxcontext.AdminCtx, nil, 2, "2523687", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
t.Log(utils.Format4Output(storeSkuList, false))
|
||||||
|
t.Log(len(storeSkuList))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteStoreAllSkus(t *testing.T) {
|
||||||
|
err := curPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, 2, "2523687", true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteStoreAllCategories(t *testing.T) {
|
||||||
|
err := curPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, 2, "2523687", true)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
102
business/partner/putils/store_sku.go
Normal file
102
business/partner/putils/store_sku.go
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
package putils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DefSingleStorePlatform struct {
|
||||||
|
partner.ISingleStoreStoreSkuHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *DefSingleStorePlatform) DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) {
|
||||||
|
skuNameList, err := p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
batchSize := p.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus)
|
||||||
|
task := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllSkus, vendorStoreID:%s", vendorStoreID),
|
||||||
|
tasksch.NewParallelConfig().SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
var skuList []*partner.StoreSkuInfo
|
||||||
|
for _, v := range batchItemList {
|
||||||
|
skuName := v.(*partner.SkuNameInfo)
|
||||||
|
skuList = append(skuList, &partner.StoreSkuInfo{
|
||||||
|
VendorSkuID: skuName.SkuList[0].VendorSkuID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
err = p.DeleteStoreSkus(ctx, storeID, vendorStoreID, skuList)
|
||||||
|
return nil, err
|
||||||
|
}, skuNameList)
|
||||||
|
tasksch.HandleTask(task, parentTask, true).Run()
|
||||||
|
_, err = task.GetResult(0)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *DefSingleStorePlatform) DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) {
|
||||||
|
catList, err := p.GetStoreAllCategories(ctx, storeID, vendorStoreID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
catListMap := make(map[int][]*partner.BareCategoryInfo)
|
||||||
|
flattedCatList := flatCatList(catList)
|
||||||
|
for _, v := range flattedCatList {
|
||||||
|
catListMap[v.Level] = append(catListMap[v.Level], v)
|
||||||
|
}
|
||||||
|
var levelList []int
|
||||||
|
for k := range catListMap {
|
||||||
|
levelList = append(levelList, k)
|
||||||
|
}
|
||||||
|
sort.Sort(sort.Reverse(sort.IntSlice(levelList)))
|
||||||
|
task1 := tasksch.NewSeqTask(fmt.Sprintf("DeleteStoreAllCategories1, vendorStoreID:%s", vendorStoreID), ctx,
|
||||||
|
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
|
task2 := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllCategories2, vendorStoreID:%s", vendorStoreID), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
catInfo := batchItemList[0].(*partner.BareCategoryInfo)
|
||||||
|
err = p.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID)
|
||||||
|
return nil, err
|
||||||
|
}, catListMap[levelList[step]])
|
||||||
|
tasksch.HandleTask(task2, task, true).Run()
|
||||||
|
_, err = task2.GetResult(0)
|
||||||
|
return nil, err
|
||||||
|
}, len(levelList))
|
||||||
|
tasksch.HandleTask(task1, parentTask, true).Run()
|
||||||
|
_, err = task1.GetResult(0)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func flatCatList(catList []*partner.BareCategoryInfo) (flattedCatList []*partner.BareCategoryInfo) {
|
||||||
|
flattedCatList = append(flattedCatList, catList...)
|
||||||
|
for _, v := range catList {
|
||||||
|
flattedCatList = append(flattedCatList, flatCatList(v.Children)...)
|
||||||
|
}
|
||||||
|
return flattedCatList
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *DefSingleStorePlatform) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) {
|
||||||
|
var skuIDs []int
|
||||||
|
isSingle := len(inStoreSkuList) == 1
|
||||||
|
if isSingle {
|
||||||
|
skuIDs = []int{inStoreSkuList[0].SkuID}
|
||||||
|
}
|
||||||
|
globals.SugarLogger.Debug(p)
|
||||||
|
skuNameList, err := p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, skuIDs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, skuName := range skuNameList {
|
||||||
|
storeSkuBareInfo := &skuName.SkuList[0].StoreSkuInfo
|
||||||
|
if isSingle {
|
||||||
|
storeSkuBareInfo.VendorNameID = inStoreSkuList[0].VendorNameID
|
||||||
|
storeSkuBareInfo.VendorSkuID = inStoreSkuList[0].VendorSkuID
|
||||||
|
}
|
||||||
|
outStoreSkuList = append(outStoreSkuList, storeSkuBareInfo)
|
||||||
|
}
|
||||||
|
return outStoreSkuList, err
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user