package ebaiapi import ( "fmt" "strings" "git.rosy.net.cn/baseapi/utils" ) const ( ActivityTypeDirectDown = 2 // 商品直降 ActivityTypeMoneyOff = 8 // 品类满减 ActivityPFBaidu = 1 ActivityPFELM = 2 ActivityPFAll = 4 ActivityConflictShare = 0 ActivityConfilictExclude = 1 ) type ActivitySkuInfo struct { SkuID string `json:"sku_id"` Stock int `json:"stock"` PromotionPrice float32 `json:"special_price"` // 直降用 StoreUserLimit int `json:"store_user_limit"` // 直降用 } type ActivitySkuInfoEx struct { ActivitySkuInfo BaiduShopID int64 `json:"baidu_shop_id"` UpcName string `json:"upc_name"` OriginalPrice float32 `json:"original_price"` } type ActivitySkuInfo4Update struct { ActivitySkuInfo BaiduShopID int64 `json:"baidu_shop_id"` ShopID string `json:"shop_id"` CustomSkuID string `json:"custom_sku_id"` } type ActivityInfo struct { ActivityID int64 `json:"activity_id"` ActivityType int `json:"activity_type"` ActivityName string `json:"activity_name"` SkuList []*ActivitySkuInfoEx `json:"sku_list"` } func (a *API) ActivityCreate(params map[string]interface{}) (activityID int64, err error) { result, err := a.AccessAPI("activity.create", params) if err == nil { return utils.MustInterface2Int64(result.Data.(map[string]interface{})["activity_id"]), nil } return 0, err } func (a *API) ActivityDisable(activityID int64, shopID string, baiduShopID, supplierID int64) (err error) { params := a.genShopIDParams(shopID, baiduShopID, supplierID) params[KeyActivityID] = activityID _, err = a.AccessAPI("activity.disable", params) return err } func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplierID int64) (activityInfo map[string]interface{}, err error) { params := a.genShopIDParams(shopID, baiduShopID, supplierID) params[KeyActivityID] = activityID result, err := a.AccessAPI("activity.get", params) if err == nil { return result.Data.(map[string]interface{}), nil } return nil, err } func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID int64, activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) (successIDs []string, err error) { params := a.genShopIDParams(shopID, baiduShopID, 0) params[KeyActivityID] = activityID skusKey := "activity_skus" if isSkuIDCustom { skusKey = "activity_custom_skus" } params[skusKey] = skuList2Str(activityType, skuList, isSkuIDCustom) result, err := a.AccessAPI("activity.sku.add.batch", params) if err == nil { return strings.Split(result.Data.(string), ","), nil } return nil, err } func skuList2Str(activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) string { skuList2 := []string{} for _, v := range skuList { strList := []string{ v.SkuID, utils.Int2Str(v.Stock), } if activityType == ActivityTypeDirectDown { strList = append(strList, fmt.Sprintf("%.2f", v.PromotionPrice)) strList = append(strList, utils.Int2Str(v.StoreUserLimit)) } skuList2 = append(skuList2, strings.Join(strList, ":")) } return strings.Join(skuList2, ";") } func (a *API) ActivitySkuDeleteBatch(activityID int64, shopID string, baiduShopID int64, skuIDs []string, isSkuIDCustom bool) (successIDs []string, err error) { params := a.genShopIDParams(shopID, baiduShopID, 0) params[KeyActivityID] = activityID skusKey := "sku_id" if isSkuIDCustom { skusKey = "custom_sku_id" } params[skusKey] = strings.Join(skuIDs, ",") result, err := a.AccessAPI("activity.sku.delete.batch", params) if err == nil { return strings.Split(result.Data.(string), ","), nil } return nil, err } func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []string, isSkuIDCustom bool) (activityInfo *ActivityInfo, err error) { params := a.genShopIDParams(shopID, baiduShopID, supplierID) params[KeyActivityID] = activityID if len(skuIDs) > 0 { skusKey := "sku_id" if isSkuIDCustom { skusKey = "custom_sku_id" } params[skusKey] = strings.Join(skuIDs, ",") } pageSize := 100 page := 1 params["page_size"] = pageSize for { var result *ResponseResult params["page"] = page result, err = a.AccessAPI("activity.sku.list", params) if err == nil { resultMap := result.Data.(map[string]interface{}) if activityInfo == nil { activityInfo = &ActivityInfo{ ActivityID: activityID, ActivityType: int(utils.Str2Int64(utils.Interface2String(resultMap["activity_type"]))), ActivityName: utils.Interface2String(resultMap["activity_name"]), } } for _, v := range resultMap["sku_list"].([]interface{}) { skuMap := v.(map[string]interface{}) activityInfo.SkuList = append(activityInfo.SkuList, &ActivitySkuInfoEx{ ActivitySkuInfo: ActivitySkuInfo{ SkuID: utils.Interface2String(skuMap["sku_id"]), Stock: int(utils.Str2Int64(utils.Interface2String(skuMap["stock"]))), PromotionPrice: float32(utils.Interface2Float64WithDefault(skuMap["promotion_price"], 0)), }, BaiduShopID: utils.Str2Int64(utils.Interface2String(skuMap["baidu_shop_id"])), OriginalPrice: float32(utils.Interface2Float64WithDefault(skuMap["original_price"], 0)), UpcName: utils.Interface2String(skuMap["upc_name"]), }) } if len(activityInfo.SkuList) >= int(utils.MustInterface2Int64(resultMap["total"])) { break } page++ } else { break } } return activityInfo, err } func (a *API) ActivitySkuUpdateBatch(activityID int64, actSkuInfoList []*ActivitySkuInfo4Update) (faildInfoList []string, err error) { result, err := a.AccessAPI("activity.sku.update.batch", map[string]interface{}{ KeyActivityID: activityID, "act_sku_info": actSkuInfoList, }) if err == nil { return strings.Split(result.Data.(string), ";"), nil } return nil, err } func (a *API) ActivityUpdate(activityID int64, params map[string]interface{}) (newActivityID int64, err error) { result, err := a.AccessAPI("activity.update", utils.MergeMaps(utils.Params2Map(KeyActivityID, activityID), params)) if err == nil { return utils.MustInterface2Int64(result.Data.(map[string]interface{})["activity_id"]), nil } return 0, err }