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) { 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 } func (p *PurchaseHandler) GetOrderRider(vendorOrgCode, vendorStoreID string, param map[string]interface{}) (err error) { selfStatus := 0 switch param["logistics_status"].(int) { case 0: selfStatus = 2 // 2:配送待分配 case 12: selfStatus = 3 // 骑士接单 case 15: selfStatus = 8 // 骑士到店 case 20: selfStatus = 20 // 骑手送出 case 40: selfStatus = 30 // 配送完成 default: selfStatus = 7 // 配送异常 } param2 := &ebaiapi.PushRiderInfo{ DistributorId: 201, OrderId: param["order_id"].(string), State: 21, SelfStatus: selfStatus, SelfStatusDesc: param["logistics_context"].(string), DistributorInfoDTO: ebaiapi.DistributorInfoDTO{ DistributorTypeId: "99999", DistributorName: "商家自行配送", }, Knight: ebaiapi.Knight{ Id: utils.Str2Int64(param["order_id"].(string)), Name: param["courier_name"].(string), Phone: param["courier_phone"].(string), }, } return api.EbaiAPI.OrderselfDeliveryStateSync2(param2) }