Files
jx-callback/business/partner/purchase/ebai/ebai.go
苏尹岚 0ce761b01e aa
2021-03-02 11:22:58 +08:00

160 lines
3.9 KiB
Go

package ebai
import (
"sync"
"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"
"git.rosy.net.cn/jx-callback/business/partner/putils"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
const (
EbaiSupplierIDsc = "1921188187760"
EbaiSupplierIDc4 = "22267134648"
EbaiSupplierIDhc = "2233065879"
EbaiSupplierIDgy = "2267230126"
)
var (
EbaiSupplierIDMap = map[string]string{
EbaiSupplierIDsc: "饿百商超",
EbaiSupplierIDc4: "饿百菜市",
EbaiSupplierIDhc: "饿百好菜",
EbaiSupplierIDgy: "饿百果园",
}
)
var (
CurPurchaseHandler *PurchaseHandler
)
type PurchaseHandler struct {
partner.BasePurchasePlatform
putils.DefSingleStorePlatform
shopList []*ebaiapi.ShopInfo
locker sync.RWMutex
}
func init() {
if api.EbaiAPI != nil {
CurPurchaseHandler = New()
partner.RegisterPurchasePlatform(CurPurchaseHandler)
}
}
func New() (obj *PurchaseHandler) {
obj = new(PurchaseHandler)
obj.ISingleStoreStoreSkuHandler = obj
return obj
}
func EbaiBusStatus2JxStatus(ebaiStatus int) int {
if ebaiStatus == ebaiapi.ShopBusStatusHaveRest {
return model.StoreStatusClosed
}
if ebaiStatus == ebaiapi.ShopBusStatusSuspended {
return model.StoreStatusDisabled
}
return model.StoreStatusOpened
}
func (p *PurchaseHandler) GetVendorID() int {
return model.VendorIDEBAI
}
func (p *PurchaseHandler) UploadImg(ctx *jxcontext.Context, vendorOrgCode, imgURL string, imgData []byte, imgName string, imgType int) (imgHint string, err error) {
globals.SugarLogger.Debugf("ebai UploadImg imgURL:%s, imgName:%s, imgType:%d", imgURL, imgName, imgType)
if globals.EnableEbaiStoreWrite {
if imgType == model.ImgTypeMain {
imgHint, err = api.EbaiAPI.PictureUpload(imgURL, imgData)
} else if imgType == model.ImgTypeDesc {
imgHint, err = api.EbaiAPI.SkuUploadRTF(p.getShopID4UploadRTF(), ebaiapi.BuildRFTFromImgs(imgURL))
}
} else {
imgHint = imgURL + ".ebai"
}
return imgHint, err
}
func getShopIDFromList(shopList []*ebaiapi.ShopInfo) (shopID string) {
if len(shopList) > 0 {
shopID = shopList[0].ShopID
}
return shopID
}
func (p *PurchaseHandler) getShopID4UploadRTF() (shopID string) {
var shopList []*ebaiapi.ShopInfo
p.locker.RLock()
shopList = p.shopList
p.locker.RUnlock()
if len(shopList) > 0 {
return getShopIDFromList(shopList)
}
p.locker.Lock()
shopList = p.shopList
if len(shopList) > 0 {
p.locker.Unlock()
return getShopIDFromList(shopList)
}
defer p.locker.Unlock()
shopList, err := api.EbaiAPI.ShopList(ebaiapi.SysStatusAll)
if err == nil {
if len(shopList) > 0 {
p.shopList = shopList
shopID = getShopIDFromList(shopList)
} else {
// p.shopList = []*ebaiapi.ShopInfo{
// &ebaiapi.ShopInfo{
// ShopID: "",
// },
// }
}
}
return shopID
}
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.VendorIDEBAI,
Name: v.CatName,
Level: level,
VendorCategoryID: v.CatID,
}
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
}