dwd_goods.go 7.8 KB
package dwd

import (
	"context"
	"github.com/gogf/gf/container/garray"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/util/gconv"
)

//商品
type goodsDwd struct {
}

var Goods = &goodsDwd{}

type GoodsListReq struct {
	ScrollId *int `json:"scroll_id,omitempty"`
	PageNum  int  `json:"page_num"`
	PageSize int  `json:"page_size"`
}
type GoodsListRes struct {
	Errno     int            `json:"errno"`
	Errmsg    string         `json:"errmsg"`
	Data      *GoodsListData `json:"data"`
	RequestId string         `json:"request_id"`
	Timestamp int            `json:"timestamp"`
	Signature string         `json:"signature"`
}

type GoodsListData struct {
	List []struct {
		ProductId         int      `json:"product_id"`
		CategoryId        string   `json:"category_id"`
		CategoryName      string   `json:"category_name"`
		Title             string   `json:"title"`
		BrandName         string   `json:"brand_name"`
		Desc              string   `json:"desc"`
		Tags              string   `json:"tags"`
		PlaceOfProduction string   `json:"place_of_production"`
		ItemImgs          []string `json:"item_imgs"`
		MainSkuId         int      `json:"main_sku_id"`
		Enabled           int      `json:"enabled"`
		MainSkuPrice      int      `json:"main_sku_price"`
		MainSkuPic        string   `json:"main_sku_pic"`
		Thumbnail         string   `json:"thumbnail"`
		Type              int      `json:"type"`
		IsInvoice         int      `json:"is_invoice"`
		IsNotExpiredDate  int      `json:"is_not_expired_date"`
		TaxCode           string   `json:"tax_code"`
		TaxRate           int      `json:"tax_rate"`
		Skus              []struct {
			SkuId            int      `json:"sku_id"`
			Stock            int      `json:"stock"`
			ManufacturedDate int      `json:"manufactured_date"`
			ExpiredDate      int      `json:"expired_date"`
			MarketPrice      int      `json:"market_price"`
			Price            int      `json:"price"`
			OutId            string   `json:"out_id"`
			ProductId        int      `json:"product_id"`
			SkuName          string   `json:"sku_name"`
			Thumbnail        string   `json:"thumbnail"`
			Enabled          int      `json:"enabled"`
			DeliveryFee      int      `json:"delivery_fee"`
			SkuImgs          []string `json:"sku_imgs"`
			SaleAttribute    []struct {
				AttributeName  string `json:"attribute_name"`
				AttributeValue string `json:"attribute_value"`
			} `json:"sale_attribute"`
		} `json:"skus"`
	} `json:"list"`
	PageSize int `json:"page_size"`
	TotalCnt int `json:"total_cnt"`
	ScrollId int `json:"scroll_id"`
}

func (*goodsDwd) List(ctx context.Context, req GoodsListReq) (res *GoodsListRes, err error) {
	var method = "goods.list"
	result, err := post(ctx, method, req)
	if err != nil {
		return
	}
	res = &GoodsListRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type GoodsDetailRes struct {
	Errno     int              `json:"errno"`
	Errmsg    string           `json:"errmsg"`
	Data      *GoodsDetailData `json:"data"`
	RequestId string           `json:"request_id"`
	Timestamp int              `json:"timestamp"`
	Signature string           `json:"signature"`
}

type GoodsDetailData struct {
	ProductId         int      `json:"product_id"`
	CategoryId        string   `json:"category_id"`
	CategoryName      string   `json:"category_name"`
	Title             string   `json:"title"`
	BrandName         string   `json:"brand_name"`
	Desc              string   `json:"desc"`
	Tags              string   `json:"tags"`
	PlaceOfProduction string   `json:"place_of_production"`
	ItemImgs          []string `json:"item_imgs"`
	MainSkuId         int      `json:"main_sku_id"`
	Enabled           int      `json:"enabled"`
	MainSkuPrice      int      `json:"main_sku_price"`
	MainSkuPic        string   `json:"main_sku_pic"`
	Thumbnail         string   `json:"thumbnail"`
	Type              int      `json:"type"`
	IsInvoice         int      `json:"is_invoice"`
	IsNotExpiredDate  int      `json:"is_not_expired_date"`
	TaxCode           string   `json:"tax_code"`
	TaxRate           int      `json:"tax_rate"`
	Skus              []struct {
		SkuId            int      `json:"sku_id"`
		Stock            int      `json:"stock"`
		ManufacturedDate int      `json:"manufactured_date"`
		ExpiredDate      int      `json:"expired_date"`
		MarketPrice      int      `json:"market_price"`
		Price            int      `json:"price"`
		OutId            string   `json:"out_id"`
		ProductId        int      `json:"product_id"`
		SkuName          string   `json:"sku_name"`
		Thumbnail        string   `json:"thumbnail"`
		Enabled          int      `json:"enabled"`
		DeliveryFee      int      `json:"delivery_fee"`
		SkuImgs          []string `json:"sku_imgs"`
		SaleAttribute    []struct {
			AttributeName  string `json:"attribute_name"`
			AttributeValue string `json:"attribute_value"`
		} `json:"sale_attribute"`
	} `json:"skus"`
}

//Detail 详情
func (*goodsDwd) Detail(ctx context.Context, GoodsID interface{}) (res *GoodsDetailRes, err error) {
	var method = "goods.detail"
	result, err := post(ctx, method, g.Map{
		"product_id": gconv.Int64(GoodsID),
	})
	if err != nil {
		return
	}
	//g.Log().Info(result.Data)
	res = &GoodsDetailRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type GoodsStockRes struct {
	Errno     int               `json:"errno"`
	Errmsg    string            `json:"errmsg"`
	Data      []*GoodsStockData `json:"data"`
	RequestId string            `json:"request_id"`
	Timestamp int               `json:"timestamp"`
	Signature string            `json:"signature"`
}
type GoodsStockData struct {
	SkuId   int `json:"sku_id"`
	Stock   int `json:"stock"`
	Enabled int `json:"enabled"`
}

//Stock 详情
func (*goodsDwd) Stock(ctx context.Context, skus *garray.Array) (res *GoodsStockRes, err error) {
	var method = "goods.stock"
	result, err := post(ctx, method, g.Map{
		"sku_ids": skus.Join(","),
	})
	if err != nil {
		return
	}
	//g.Log().Info(result.Data)
	res = &GoodsStockRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type GoodsAreaRes struct {
	Errno     int              `json:"errno"`
	Errmsg    string           `json:"errmsg"`
	Data      []*GoodsAreaData `json:"data"`
	RequestId string           `json:"request_id"`
	Timestamp int              `json:"timestamp"`
	Signature string           `json:"signature"`
}

type GoodsAreaData struct {
	SkuId        string `json:"sku_id"`
	DeliveryList []struct {
		ProvinceId   int    `json:"province_id,omitempty"`
		ProvinceName string `json:"province_name,omitempty"`
		CityList     []struct {
			CityId       string `json:"city_id"`
			CityName     string `json:"city_name"`
			DistrictList []struct {
				DistrictId   int    `json:"district_id"`
				DistrictName string `json:"district_name"`
			} `json:"district_list"`
		} `json:"city_list,omitempty"`
		SkuId        int           `json:"sku_id,omitempty"`
		DeliveryList []interface{} `json:"delivery_list,omitempty"`
	} `json:"delivery_list"`
}

//Area 可配送区域
func (*goodsDwd) Area(ctx context.Context, sku interface{}) (res *GoodsAreaRes, err error) {
	var method = "goods.deliveryAreaList"
	result, err := post(ctx, method, g.Map{
		"sku_id": gconv.Int64(sku),
	})
	if err != nil {
		return
	}
	//g.Log().Info(result.Data)
	res = &GoodsAreaRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}