diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index 58a66c70b..bc93b44be 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -19,7 +19,6 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" - "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "github.com/qiniu/api.v7/storage" @@ -174,14 +173,21 @@ func InitSkuName(ctx *jxcontext.Context, isForce, isAsync, isContinueWhenError b } func InitVendorCategory(ctx *jxcontext.Context, vendorID int) (num int64, err error) { - if handler, ok := partner.PurchasePlatformHandlers[vendorID].(*mtwm.PurchaseHandler); ok { - cats, err2 := handler.GetVendorCategories() + if handler := partner.GetPurchasePlatformFromVendorID(vendorID); handler != nil { + cats, err2 := handler.GetVendorCategories(ctx) if err2 != nil { return num, err2 } db := dao.GetDB() dao.Begin(db) - defer dao.Rollback(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() sql := ` DELETE FROM sku_vendor_category @@ -198,6 +204,8 @@ func InitVendorCategory(ctx *jxcontext.Context, vendorID int) (num int64, err er } dao.Commit(db) num = int64(len(cats)) + } else { + err = fmt.Errorf("找不到平台:%d", vendorID) } return num, err } diff --git a/business/partner/partner.go b/business/partner/partner.go index cfdca6f72..36490ed41 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -183,6 +183,7 @@ type IPurchasePlatformHandler interface { DeleteRemoteStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, isAsync, isContinueWhenError bool) (hint string, err error) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) GetStoreStatus(ctx *jxcontext.Context, vendorStoreID string) (storeStatus int, err error) + GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) } // db *dao.DaoDB, diff --git a/business/partner/purchase/ebai/ebai.go b/business/partner/purchase/ebai/ebai.go index de9c9b6b7..47f1de961 100644 --- a/business/partner/purchase/ebai/ebai.go +++ b/business/partner/purchase/ebai/ebai.go @@ -2,6 +2,7 @@ package ebai import ( "git.rosy.net.cn/baseapi/platformapi/ebaiapi" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" @@ -39,3 +40,40 @@ func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgDa } return imgHint, err } + +func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) { + cats, err := api.EbaiAPI.SkuCategoryList("", level, pid) + if err != nil { + return nil, err + } + for _, v := range cats { + cat := &model.SkuVendorCategory{ + VendorID: model.VendorIDJD, + Name: v.CatName, + Level: level, + VendorCategoryID: v.CatID, + } + cat.LastOperator = "builder" + if level > 1 { + cat.ParentID = v.ParentID + if level == 3 { + cat.IsLeaf = 1 + } + } + vendorCats = append(vendorCats, cat) + if level < 3 { + childVendorCats, err2 := p.getVendorCategories(level+1, utils.Str2Int64(v.CatID)) + if err2 == nil && len(childVendorCats) > 0 { + vendorCats = append(vendorCats, childVendorCats...) + } else { + cat.IsLeaf = 1 + } + } + } + return vendorCats, nil +} + +func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { + vendorCats, err = p.getVendorCategories(1, 0) + return vendorCats, err +} diff --git a/business/partner/purchase/ebai/ebai_test.go b/business/partner/purchase/ebai/ebai_test.go index 48feba97d..37f0870e7 100644 --- a/business/partner/purchase/ebai/ebai_test.go +++ b/business/partner/purchase/ebai/ebai_test.go @@ -1,6 +1,11 @@ package ebai import ( + "testing" + + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + _ "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/defsch" "git.rosy.net.cn/jx-callback/globals/testinit" ) @@ -13,3 +18,11 @@ const ( func init() { testinit.Init() } + +func TestGetVendorCategories(t *testing.T) { + catList, err := new(PurchaseHandler).GetVendorCategories(jxcontext.AdminCtx) + if err != nil { + t.Fatal(err) + } + t.Log(utils.Format4Output(catList, false)) +} diff --git a/business/partner/purchase/elm/elm.go b/business/partner/purchase/elm/elm.go index af089cefe..22424e974 100644 --- a/business/partner/purchase/elm/elm.go +++ b/business/partner/purchase/elm/elm.go @@ -1,6 +1,8 @@ package elm import ( + "fmt" + "git.rosy.net.cn/baseapi/platformapi/elmapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils" @@ -87,3 +89,7 @@ func (c *PurchaseHandler) OnCallbackMsg(msg *elmapi.CallbackMsg) (retVal *elmapi func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, imgURL string, imgData []byte, imgName string) (imgHint string, err error) { return imgHint, err } + +func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { + return nil, fmt.Errorf("平台%s不支持此操作", jxutils.GetVendorName(model.VendorIDELM)) +} diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index ed82a7d52..997bfaad2 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -515,3 +515,42 @@ func jxStatus2jdStatus(jxStatus int) (jdStatus int) { } return jdStatus } + +func (p *PurchaseHandler) getVendorCategories(level int, pid int64) (vendorCats []*model.SkuVendorCategory, err error) { + cats, err := api.JdAPI.QueryChildCategoriesForOP(pid) + if err != nil { + return nil, err + } + for _, v := range cats { + if v.Status == 1 { + cat := &model.SkuVendorCategory{ + VendorID: model.VendorIDJD, + Name: v.Name, + Level: level, + VendorCategoryID: utils.Int64ToStr(v.Id), + } + cat.LastOperator = "builder" + if level > 1 { + cat.ParentID = utils.Int64ToStr(v.ParentId) + if level == 3 { + cat.IsLeaf = 1 + } + } + vendorCats = append(vendorCats, cat) + if level < 3 { + childVendorCats, err2 := p.getVendorCategories(level+1, v.Id) + if err2 == nil && len(childVendorCats) > 0 { + vendorCats = append(vendorCats, childVendorCats...) + } else { + cat.IsLeaf = 1 + } + } + } + } + return vendorCats, nil +} + +func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { + vendorCats, err = p.getVendorCategories(1, 0) + return vendorCats, err +} diff --git a/business/partner/purchase/jd/sku_test.go b/business/partner/purchase/jd/sku_test.go index 6e084943d..9fe92089c 100644 --- a/business/partner/purchase/jd/sku_test.go +++ b/business/partner/purchase/jd/sku_test.go @@ -3,6 +3,8 @@ package jd import ( "testing" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" @@ -53,3 +55,11 @@ func TestReadSku(t *testing.T) { t.Log(string(utils.MustMarshal(skuName))) } } + +func TestGetVendorCategories(t *testing.T) { + catList, err := new(PurchaseHandler).GetVendorCategories(jxcontext.AdminCtx) + if err != nil { + t.Fatal(err.Error()) + } + t.Log(utils.Format4Output(catList, false)) +} diff --git a/business/partner/purchase/mtwm/mtwm.go b/business/partner/purchase/mtwm/mtwm.go index ea4d005a3..4287e7105 100644 --- a/business/partner/purchase/mtwm/mtwm.go +++ b/business/partner/purchase/mtwm/mtwm.go @@ -30,7 +30,7 @@ func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDMTWM } -func (p *PurchaseHandler) GetVendorCategories() (vendorCats []*model.SkuVendorCategory, err error) { +func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { cats, err := api.MtwmAPI.RetailGetSpTagIds() if err != nil { return nil, err @@ -40,10 +40,10 @@ func (p *PurchaseHandler) GetVendorCategories() (vendorCats []*model.SkuVendorCa for i := 0; i < 3; i++ { vendorCatMapList[i] = make(map[string]*model.SkuVendorCategory) for _, v := range cats { - if utils.MustInterface2Int64(v["level"]) == 3 { - namePathList := strings.Split(strings.Trim(utils.Interface2String(v["namePath"]), ","), ",") + if v.Level == 3 { + namePathList := strings.Split(strings.Trim(v.NamePath, ","), ",") if len(namePathList) != 3 { - panic(fmt.Sprintf("%s没有三级结构", v["namePath"])) + panic(fmt.Sprintf("%s没有三级结构", v.NamePath)) } name := namePathList[i] if _, ok := vendorCatMapList[i][name]; !ok { @@ -56,8 +56,8 @@ func (p *PurchaseHandler) GetVendorCategories() (vendorCats []*model.SkuVendorCa vendorCats = append(vendorCats, cat) vendorCatMapList[i][name] = cat if i == 2 { - cat.IsLeaf = int8(1) - cat.VendorCategoryID = utils.Int64ToStr(utils.MustInterface2Int64(v["id"])) + cat.IsLeaf = 1 + cat.VendorCategoryID = utils.Int64ToStr(v.ID) } else { cat.VendorCategoryID = utils.Int2Str(manID) // 非叶子结点编码没有实际使用 manID++ diff --git a/business/partner/purchase/mtwm/mtwm_test.go b/business/partner/purchase/mtwm/mtwm_test.go index 9c87132fb..c9f8e481a 100644 --- a/business/partner/purchase/mtwm/mtwm_test.go +++ b/business/partner/purchase/mtwm/mtwm_test.go @@ -3,6 +3,8 @@ package mtwm import ( "testing" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/baseapi/utils" _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "git.rosy.net.cn/jx-callback/globals/testinit" @@ -13,7 +15,7 @@ func init() { } func TestGetVendorCategories(t *testing.T) { - result, err := new(PurchaseHandler).GetVendorCategories() + result, err := new(PurchaseHandler).GetVendorCategories(jxcontext.AdminCtx) if err != nil { t.Fatal(err) } diff --git a/business/partner/purchase/weimob/wsc/wsc.go b/business/partner/purchase/weimob/wsc/wsc.go index f1b3eea01..3b77d1013 100644 --- a/business/partner/purchase/weimob/wsc/wsc.go +++ b/business/partner/purchase/weimob/wsc/wsc.go @@ -32,7 +32,7 @@ func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDWSC } -func (p *PurchaseHandler) GetVendorCategories() (vendorCats []*model.SkuVendorCategory, err error) { +func (p *PurchaseHandler) GetVendorCategories(ctx *jxcontext.Context) (vendorCats []*model.SkuVendorCategory, err error) { rootCats, err := api.WeimobAPI.QueryCategoryTree() catList := rootCats if err != nil { diff --git a/conf/app.conf b/conf/app.conf index d19d33eb4..09e55aa5a 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -79,7 +79,7 @@ zhongwuAppID = 8000192 zhongwuAppSecret = "29435497822f52f3cf659c65da548a79" [dev] -jdToken = "c8854ef2-f80a-45ee-aceb-dc8014d646f8" +jdToken = "df97f334-f7d8-4b36-9664-5784d8ae0baf" jdAppKey = "06692746f7224695ad4788ce340bc854" jdSecret = "d6b42a35a7414a5490d811654d745c84"