tm_goods.go 11.6 KB
package tm

import (
	"context"
	"encoding/json"
	link "github.com/alibabacloud-go/linkedmall-20220531/v2/client"
	"github.com/alibabacloud-go/tea/tea"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/util/gconv"
)

type goodsTmNew struct {
}

var Goods = goodsTmNew{}

type QueryItemDetailWithDivisionRes struct {
	Code    string `json:"Code"`
	Message string `json:"Message"`
	Model   struct {
		CanSell            bool   `json:"CanSell"`
		CategoryID         int    `json:"CategoryId"`
		CategoryIds        []int  `json:"CategoryIds"`
		City               string `json:"City"`
		Current            string `json:"Current"`
		DescOption         string `json:"DescOption"`
		DescPath           string `json:"DescPath"`
		DistributionMallID string `json:"DistributionMallId"`
		Features           struct {
			DeliveryVersion string `json:"delivery_version"`
			ExtraPeriod     string `json:"extraPeriod"`
			FoodProDate     string `json:"food_pro_date"`
		} `json:"Features"`
		FirstPicURL  string `json:"FirstPicUrl"`
		HasQuantity  bool   `json:"HasQuantity"`
		IforestProps []struct {
			Key   string `json:"key"`
			Value string `json:"value"`
		} `json:"IforestProps"`
		ItemID               int64               `json:"ItemId"`
		ItemImages           []string            `json:"ItemImages"`
		ItemTitle            string              `json:"ItemTitle"`
		ItemTotalSimpleValue string              `json:"ItemTotalSimpleValue"`
		ItemTotalValue       int                 `json:"ItemTotalValue"`
		LmItemCategory       string              `json:"LmItemCategory"`
		LmItemID             string              `json:"LmItemId"`
		MainPicURL           string              `json:"MainPicUrl"`
		MinPrice             int                 `json:"MinPrice"`
		Properties           map[string][]string `json:"Properties"`
		Prov                 string              `json:"Prov"`
		Quantity             int                 `json:"Quantity"`
		ReservePrice         int                 `json:"ReservePrice"`
		SecuredTransactions  int                 `json:"SecuredTransactions"`
		SellerPayPostfee     bool                `json:"SellerPayPostfee"`
		SimpleQuantity       string              `json:"SimpleQuantity"`
		SkuModels            []struct {
			DistributionMallID  string `json:"DistributionMallId"`
			ExtJSON             string `json:"ExtJson"`
			HasQuantity         bool   `json:"HasQuantity"`
			ItemID              int64  `json:"ItemId"`
			LmItemID            string `json:"LmItemId"`
			PriceCent           int    `json:"PriceCent"`
			Quantity            int    `json:"Quantity"`
			ReservePrice        int    `json:"ReservePrice"`
			SimpleQuantity      string `json:"SimpleQuantity"`
			SkuID               int64  `json:"SkuId"`
			SkuPicURL           string `json:"SkuPicUrl"`
			SkuPvs              string `json:"SkuPvs"`
			SkuTitle            string `json:"SkuTitle"`
			Status              int    `json:"Status"`
			SupplierPrice       int    `json:"SupplierPrice"`
			CanNotBeSoldCode    string `json:"CanNotBeSoldCode,omitempty"`
			CanNotBeSoldMassage string `json:"CanNotBeSoldMassage,omitempty"`
		} `json:"SkuModels"`
		SkuPropertys []struct {
			ID     int    `json:"Id"`
			Text   string `json:"Text"`
			Values []struct {
				ID   int64  `json:"Id"`
				Text string `json:"Text"`
			} `json:"Values"`
		} `json:"SkuPropertys"`
		UserType int `json:"UserType"`
	} `json:"Model"`
	RequestID string `json:"RequestId"`
	Success   bool   `json:"Success"`
}

type ListDistributionItemReq struct {
	Page     string `json:"page"`
	Limit    string `json:"limit"`
	LmItemId string `json:"LmItemId"`
}
type ListDistributionItemRes struct {
	Code    string `json:"Code"`
	Message string `json:"Message"`
	Model   []struct {
		CategoryID         int    `json:"CategoryId"`
		CategoryIds        []int  `json:"CategoryIds"`
		City               string `json:"City"`
		Current            string `json:"Current"`
		DescPath           string `json:"DescPath"`
		DistributionMallID string `json:"DistributionMallId"`
		Features           struct {
			DeliveryVersion string `json:"delivery_version"`
			TaxInvoice      string `json:"tax_invoice"`
			TaxRateCode     string `json:"tax_rate_code"`
		} `json:"Features"`
		FirstPicURL  string `json:"FirstPicUrl"`
		HasQuantity  bool   `json:"HasQuantity"`
		IforestProps []struct {
			Key   string `json:"key"`
			Value string `json:"value"`
		} `json:"IforestProps"`
		IsCanSell            bool     `json:"IsCanSell"`
		IsSellerPayPostfee   bool     `json:"IsSellerPayPostfee"`
		ItemID               int64    `json:"ItemId"`
		ItemImages           []string `json:"ItemImages"`
		ItemTitle            string   `json:"ItemTitle"`
		ItemTotalSimpleValue string   `json:"ItemTotalSimpleValue"`
		ItemTotalValue       int      `json:"ItemTotalValue"`
		LmItemAttributeMap   struct {
			TaxInvoice  string `json:"taxInvoice"`
			TaxRateCode string `json:"taxRateCode"`
		} `json:"LmItemAttributeMap"`
		LmItemCategory      string              `json:"LmItemCategory"`
		LmItemID            string              `json:"LmItemId"`
		MainPicURL          string              `json:"MainPicUrl"`
		Properties          map[string][]string `json:"Properties"`
		Prov                string              `json:"Prov"`
		Quantity            int                 `json:"Quantity"`
		ReservedPrice       int                 `json:"ReservedPrice"`
		SecuredTransactions int                 `json:"SecuredTransactions"`
		SimpleQuantity      string              `json:"SimpleQuantity"`
		SkuModels           []struct {
			DistributionMallID string `json:"DistributionMallId"`
			HasQuantity        bool   `json:"HasQuantity"`
			ItemID             int64  `json:"ItemId"`
			LmItemID           string `json:"LmItemId"`
			LmSkuAttributeMap  struct {
				TaxInvoice  string `json:"taxInvoice"`
				TaxRateCode string `json:"taxRateCode"`
			} `json:"LmSkuAttributeMap"`
			PriceCent      int    `json:"PriceCent"`
			Quantity       int    `json:"Quantity"`
			ReservedPrice  int    `json:"ReservedPrice"`
			SimpleQuantity string `json:"SimpleQuantity"`
			SkuID          int    `json:"SkuId"`
			SkuPicURL      string `json:"SkuPicUrl"`
			SkuPvs         string `json:"SkuPvs"`
			Status         int    `json:"Status"`
			SupplierPrice  int    `json:"SupplierPrice"`
		} `json:"SkuModels"`
		UserType    int    `json:"UserType"`
		VideoPicURL string `json:"VideoPicUrl"`
		VideoURL    string `json:"VideoUrl"`
	} `json:"Model"`
	PageNumber int    `json:"PageNumber"`
	PageSize   int    `json:"PageSize"`
	RequestID  string `json:"RequestId"`
	Success    bool   `json:"Success"`
	TotalCount int    `json:"TotalCount"`
}
type QueryItemGuIDeRetailPriceRes struct {
	RequestId string `json:"RequestId"`
	Message   string `json:"Message"`
	Model     []struct {
		SkuModels []struct {
			Status             int    `json:"Status"`
			GuideRetailPrice   int    `json:"GuideRetailPrice"`
			PriceCent          int    `json:"PriceCent"`
			LmItemId           string `json:"LmItemId"`
			SkuId              int64  `json:"SkuId"`
			DistributionMallId string `json:"DistributionMallId"`
			ItemId             int64  `json:"ItemId"`
			ReservedPrice      int    `json:"ReservedPrice"`
		} `json:"SkuModels"`
		ReservedPriceScope    string `json:"ReservedPriceScope"`
		ItemTitle             string `json:"ItemTitle"`
		LmItemId              string `json:"LmItemId"`
		DistributionMallId    string `json:"DistributionMallId"`
		ItemId                int64  `json:"ItemId"`
		GuideRetailPriceScope string `json:"GuideRetailPriceScope"`
		ReservedPrice         int    `json:"ReservedPrice"`
	} `json:"Model"`
	Code    string `json:"Code"`
	Success bool   `json:"Success"`
}

//区域库存商品详情
func (s *goodsTmNew) QueryItemDetailWithDivision(ctx context.Context, addr string, item string) (res *QueryItemDetailWithDivisionRes, err error) {
	client, err := initClient()
	if err != nil {
		return
	}
	if client == nil {
		return
	}
	result, err := client.QueryItemDetailWithDivision(&link.QueryItemDetailWithDivisionRequest{
		DistributionMallId: tea.String(server.DistributionMallId),
		DistributorId:      tea.String(server.DistributorId),
		LmItemId:           tea.String(item),
		DivisionCode:       tea.String(addr),
		TenantId:           tea.String(server.TenantId),
	})
	if result == nil {
		return
	}
	ctx = context.WithValue(ctx, "URI", "QueryItemDetailWithDivision")
	log(ctx, gjson.New(item).MustToJsonString(), result.Body, err)
	if err != nil {
		return
	}
	a, _ := json.Marshal(result.Body)
	if err = json.Unmarshal([]byte(a), &res); err != nil {
		return
	}

	return
}

////商品列表
func (s *goodsTmNew) ListDistributionItem(ctx context.Context, item *ListDistributionItemReq) (res *ListDistributionItemRes, err error) {
	client, err := initClient()
	if err != nil {
		return
	}
	if client == nil {
		return
	}
	result, err := client.ListDistributionItemWithoutCache(&link.ListDistributionItemWithoutCacheRequest{
		DistributionMallId: tea.String(server.DistributionMallId),
		DistributorId:      tea.String(server.DistributorId),
		//LmItemId:           tea.String(item),
		TenantId:   tea.String(server.TenantId),
		PageNumber: tea.Int32(gconv.Int32(item.Page)),
		PageSize:   tea.Int32(gconv.Int32(item.Limit)),
	})
	if result == nil {
		return
	}
	ctx = context.WithValue(ctx, "URI", "ListDistributionItem")
	log(ctx, gjson.New(item).MustToJsonString(), result.Body, err)
	if err != nil {
		return
	}
	a, _ := json.Marshal(result.Body)
	if err = json.Unmarshal([]byte(a), &res); err != nil {
		return
	}

	return
}

//查询零售价
func (s *goodsTmNew) QueryItemGuIDeRetailPrice(ctx context.Context, item []string) (res *QueryItemGuIDeRetailPriceRes, err error) {
	client, err := initClient()
	if err != nil {
		return
	}
	if client == nil {
		return
	}
	result, err := client.QueryItemGuideRetailPrice(&link.QueryItemGuideRetailPriceRequest{
		DistributionMallId: tea.String(server.DistributionMallId),
		DistributorId:      tea.String(server.DistributorId),
		TenantId:           tea.String(server.TenantId),
		LmItemIds:          tea.StringSlice(item),
	})
	if result == nil {
		return
	}
	ctx = context.WithValue(ctx, "URI", "QueryItemGuideRetailPrice")
	log(ctx, gjson.New(item).MustToJsonString(), result.Body, err)
	if err != nil {
		return
	}
	a, _ := json.Marshal(result.Body)
	if err = json.Unmarshal([]byte(a), &res); err != nil {
		return
	}

	return
}

//Detail 详情 todo 该接口正确通过,由于订单部分接口不通过天猫技术不支持对接,后续有时间再自己写
//func (*goodsTmNew) QueryItemDetailWithDivision(ctx context.Context, req string) (res *QueryItemDetailWithDivisionRes, err error) {
//	method := "QueryItemDetailWithDivision"
//	request := g.MapStrStr{
//		"DistributionMallId": server.DistributionMallId,
//		"DistributorId":      server.DistributorId,
//		"LmItemId":           req,
//		"TenantId":           server.TenantId,
//	}
//	result, err := post(ctx, method, request)
//
//	_ = gjson.NewWithOptions(result, gjson.Options{
//				StrNumber: true,
//			}).Scan(&res)
//	return
//}

//todo 部分接口验签通过, 该接口正确通过,由于订单部分接口不通过天猫技术不支持对接,后续有时间再自己写
//func (*goodsTmNew) ListDistributionItem(ctx context.Context, req *ListDistributionItemReq) (res *ListDistributionItemRes, err error) {
//	method := "ListDistributionItem"
//	request := g.MapStrStr{
//				"DistributionMallId": server.DistributionMallId,
//				"DistributorId":      server.DistributorId,
//				//"LmItemId":           req.LmItemId,
//				"TenantId":           server.TenantId,
//				"PageNumber": req.Page,
//				"PageSize": req.Limit,
//	}
//	result, err := post(ctx, method, request)
//	_ = gjson.NewWithOptions(result, gjson.Options{
//		StrNumber: true,
//	}).Scan(&res)
//	return
//}