695 lines
28 KiB
Go
695 lines
28 KiB
Go
package weimobapi
|
||
|
||
import (
|
||
"fmt"
|
||
"io/ioutil"
|
||
"net/http"
|
||
|
||
"git.rosy.net.cn/baseapi/platformapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
const (
|
||
DeductStockTypePlaceOrder = 1
|
||
DeductStockTypePay = 2
|
||
)
|
||
|
||
const (
|
||
GoodsTypeNormal = 0
|
||
GoodsTypeOversea = 1
|
||
)
|
||
|
||
type PendingSaveB2CGoodsVo struct {
|
||
FreightTemplateId int64 `json:"freightTemplateId"`
|
||
DeliveryTypeIdList []int64 `json:"deliveryTypeIdList"`
|
||
B2cGoodsType int `json:"b2cGoodsType"`
|
||
}
|
||
|
||
type PendingSaveB2CSkuVo struct {
|
||
Weight float32 `json:"weight"`
|
||
Volume float32 `json:"volume"`
|
||
}
|
||
|
||
type PendingSaveSkuVo struct {
|
||
OuterSkuCode string `json:"outerSkuCode"`
|
||
ImageURL string `json:"imageUrl,omitempty"`
|
||
SalePrice float64 `json:"salePrice"`
|
||
OriginalPrice float64 `json:"originalPrice,omitempty"`
|
||
CostPrice float64 `json:"costPrice"`
|
||
EditStockNum int `json:"editStockNum"`
|
||
B2cSku *PendingSaveB2CSkuVo `json:"b2cSku"`
|
||
}
|
||
|
||
type PendingSaveGoodsVo struct {
|
||
Title string `json:"title"`
|
||
OuterGoodsCode string `json:"outerGoodsCode,omitempty"`
|
||
IsMultiSku int `json:"isMultiSku"`
|
||
GoodsImageURL []string `json:"goodsImageUrl"`
|
||
GoodsDesc string `json:"goodsDesc"`
|
||
InitialSales int `json:"initialSales,omitempty"`
|
||
DeductStockType int `json:"deductStockType"`
|
||
IsPutAway int `json:"isPutAway"`
|
||
Sort int `json:"Sort,omitempty"`
|
||
CategoryID int64 `json:"categoryId"`
|
||
B2cGoods []*PendingSaveB2CGoodsVo `json:"b2cGoods"`
|
||
SkuList []*PendingSaveSkuVo `json:"skuList"`
|
||
}
|
||
|
||
type Category struct {
|
||
CategoryID int64 `json:"categoryId"`
|
||
Title string `json:"title"`
|
||
Level int `json:"level"`
|
||
ParentID int64 `json:"parentId"`
|
||
}
|
||
|
||
type GoodsClassify struct {
|
||
ClassifyID int64 `json:"classifyId"`
|
||
ImageURL string `json:"imageUrl"`
|
||
Title string `json:"title"`
|
||
Level int `json:"level"`
|
||
ChildrenClassify []*GoodsClassify `json:"childrenClassify"`
|
||
}
|
||
|
||
type DeliveryType struct {
|
||
DeliveryID int64 `json:"deliveryId"`
|
||
DeliveryTypeName string `json:"deliveryTypeName"`
|
||
DeliveryType int `json:"deliveryType"`
|
||
Selected bool `json:"selected"`
|
||
}
|
||
|
||
type GoodsInfo struct {
|
||
AvaliableStockNum int `json:"avaliableStockNum"`
|
||
DefaultImageURL string `json:"defaultImageUrl"`
|
||
ExistEmptyStock bool `json:"existEmptyStock"`
|
||
GoodsID int64 `json:"goodsId"`
|
||
IsAllStockEmpty bool `json:"isAllStockEmpty"`
|
||
IsCanSell bool `json:"isCanSell"`
|
||
IsExistEmptyStock bool `json:"isExistEmptyStock"`
|
||
IsMultiSku int `json:"isMultiSku"`
|
||
IsPutAway int `json:"isPutAway"`
|
||
MaxPrice float64 `json:"maxPrice"`
|
||
MinPrice float64 `json:"minPrice"`
|
||
PutAwayDate int64 `json:"putAwayDate"`
|
||
PutAwayForBackend int `json:"putAwayForBackend"`
|
||
SalesNum int `json:"salesNum"`
|
||
SortNum int `json:"sortNum"`
|
||
Title string `json:"title"`
|
||
GoodsDetailInfo *GoodsDetailInfo `json:"goodsDetailInfo"`
|
||
}
|
||
|
||
type QueryGoodsListParam struct {
|
||
PageNum int `json:"pageNum"`
|
||
PageSize int `json:"pageSize"`
|
||
OrderBy *OrderByInfo `json:"orderBy,omitempty"`
|
||
QueryParameter *QueryGoodsListRequestVo `json:"queryParameter,omitempty"`
|
||
}
|
||
|
||
type OrderByInfo struct {
|
||
Field string `json:"field"` //排序字段名: sortNum:按照sort字段排序 putAwayDate:按照上下架时间排序 salesNum:按照销量排序 availableStockNum:按照库存排序 price:按照价格排序
|
||
Sort string `json:"sort"` //升降/降序 DESC/ASC,只能是这两个值,不区分大小写
|
||
}
|
||
|
||
type QueryGoodsListRequestVo struct {
|
||
GoodsStatus int `json:"goodsStatus"` //商品状态:0-上架中 1-下架中 2-已售罄
|
||
GoodsClassifyID int `json:"goodsClassifyId"` //分组id
|
||
Search string `json:"search"` //搜索框输入内容商品名称
|
||
}
|
||
|
||
type GoodsDetailInfo struct {
|
||
ArchivesTemplate interface{} `json:"archivesTemplate"`
|
||
B2CGoods *B2CGoods `json:"b2cGoods"`
|
||
CategoryList []*CategoryList `json:"categoryList"`
|
||
DeductStockType int `json:"deductStockType"`
|
||
DefaultImageURL interface{} `json:"defaultImageUrl"`
|
||
GoodsDesc string `json:"goodsDesc"`
|
||
GoodsID int64 `json:"goodsId"`
|
||
GoodsImageURL []string `json:"goodsImageUrl"`
|
||
GoodsSlogan interface{} `json:"goodsSlogan"`
|
||
GoodsVideoImageURL interface{} `json:"goodsVideoImageUrl"`
|
||
GoodsVideoURL interface{} `json:"goodsVideoUrl"`
|
||
InitialSales int `json:"initialSales"`
|
||
IsAllowOversold interface{} `json:"isAllowOversold"`
|
||
IsAssignStore interface{} `json:"isAssignStore"`
|
||
IsAutoCanSell interface{} `json:"isAutoCanSell"`
|
||
IsAutoForbidSell interface{} `json:"isAutoForbidSell"`
|
||
IsCanSell interface{} `json:"isCanSell"`
|
||
IsDeleted bool `json:"isDeleted"`
|
||
IsMemberShipDiscount int `json:"isMemberShipDiscount"`
|
||
IsMultiSku int `json:"isMultiSku"`
|
||
IsPreSell interface{} `json:"isPreSell"`
|
||
IsPutAway int `json:"isPutAway"`
|
||
IsStorePreSell int `json:"isStorePreSell"`
|
||
LimitBuyNum int `json:"limitBuyNum"`
|
||
MaxSalePrice interface{} `json:"maxSalePrice"`
|
||
MinSalePrice interface{} `json:"minSalePrice"`
|
||
OuterGoodsCode string `json:"outerGoodsCode"`
|
||
PointDeductRatio int `json:"pointDeductRatio"`
|
||
PresellGoods interface{} `json:"presellGoods"`
|
||
SaleChannelType interface{} `json:"saleChannelType"`
|
||
SelectedClassifyList []SelectedClassifyList `json:"selectedClassifyList"`
|
||
SelectedGoodsAttrInfoList interface{} `json:"selectedGoodsAttrInfoList"`
|
||
SelectedGoodsAttrList SelectedGoodsAttrList `json:"selectedGoodsAttrList"`
|
||
SelectedGoodsPropInfoList interface{} `json:"selectedGoodsPropInfoList"`
|
||
SelectedGoodsRightsInfoList interface{} `json:"selectedGoodsRightsInfoList"`
|
||
SelectedInnerGoodsPropInfoList interface{} `json:"selectedInnerGoodsPropInfoList"`
|
||
SelectedSaleAttrIDList interface{} `json:"selectedSaleAttrIdList"`
|
||
SelectedSaleAttrInfoList interface{} `json:"selectedSaleAttrInfoList"`
|
||
SelectedSaleAttrList SelectedSaleAttrList `json:"selectedSaleAttrList"`
|
||
SelectedTag interface{} `json:"selectedTag"`
|
||
SellModelType int `json:"sellModelType"`
|
||
SkuList []SkuList `json:"skuList"`
|
||
SkuMap SkuMap `json:"skuMap"`
|
||
Sort int `json:"sort"`
|
||
Source int `json:"source"`
|
||
StartForbidTime interface{} `json:"startForbidTime"`
|
||
StartPutAwayTime interface{} `json:"startPutAwayTime"`
|
||
StartSellTime interface{} `json:"startSellTime"`
|
||
Title string `json:"title"`
|
||
}
|
||
type B2CGoods struct {
|
||
B2CGoodsType int `json:"b2cGoodsType"`
|
||
DeliveryTypeIDList interface{} `json:"deliveryTypeIdList"`
|
||
FreightTemplateID interface{} `json:"freightTemplateId"`
|
||
SelectedFreightTemplate interface{} `json:"selectedFreightTemplate"`
|
||
}
|
||
type CategoryList struct {
|
||
CategoryID int `json:"categoryId"`
|
||
ChildrenCategoryList interface{} `json:"childrenCategoryList"`
|
||
EnableCustom interface{} `json:"enableCustom"`
|
||
IsLeaf interface{} `json:"isLeaf"`
|
||
Title string `json:"title"`
|
||
}
|
||
type ChildrenClassify struct {
|
||
ChildrenClassify interface{} `json:"childrenClassify"`
|
||
ClassifyID int64 `json:"classifyId"`
|
||
GoodsNum interface{} `json:"goodsNum"`
|
||
ImageURL interface{} `json:"imageUrl"`
|
||
IsHot interface{} `json:"isHot"`
|
||
Level interface{} `json:"level"`
|
||
ParentID interface{} `json:"parentId"`
|
||
Title string `json:"title"`
|
||
}
|
||
type SelectedClassifyList struct {
|
||
ChildrenClassify []ChildrenClassify `json:"childrenClassify"`
|
||
ClassifyID int64 `json:"classifyId"`
|
||
GoodsNum interface{} `json:"goodsNum"`
|
||
ImageURL interface{} `json:"imageUrl"`
|
||
IsHot int `json:"isHot"`
|
||
Level interface{} `json:"level"`
|
||
ParentID interface{} `json:"parentId"`
|
||
Title string `json:"title"`
|
||
}
|
||
type SelectedGoodsAttrList struct {
|
||
}
|
||
type SelectedSaleAttrList struct {
|
||
}
|
||
type B2CSku struct {
|
||
Volume float64 `json:"volume"`
|
||
Weight float64 `json:"weight"`
|
||
}
|
||
type SkuList struct {
|
||
AdviseSalePriceMax interface{} `json:"adviseSalePriceMax"`
|
||
AdviseSalePriceMin interface{} `json:"adviseSalePriceMin"`
|
||
AvailableStockNum int `json:"availableStockNum"`
|
||
B2CSku *B2CSku `json:"b2cSku"`
|
||
ChangeGoodsLimitNum int `json:"changeGoodsLimitNum"`
|
||
ChangeStockNum int `json:"changeStockNum"`
|
||
CombineProduct interface{} `json:"combineProduct"`
|
||
CombineProductID interface{} `json:"combineProductId"`
|
||
CostPrice float64 `json:"costPrice"`
|
||
DistributorLimitStock interface{} `json:"distributorLimitStock"`
|
||
GoodsID int64 `json:"goodsId"`
|
||
GoodsLimitNum int `json:"goodsLimitNum"`
|
||
ImageURL interface{} `json:"imageUrl"`
|
||
InStock bool `json:"inStock"`
|
||
IsDeleted bool `json:"isDeleted"`
|
||
IsDisabled bool `json:"isDisabled"`
|
||
LockPriceStatus int `json:"lockPriceStatus"`
|
||
MerchantSalePrice interface{} `json:"merchantSalePrice"`
|
||
OriginalPrice float64 `json:"originalPrice"`
|
||
OuterSkuCode string `json:"outerSkuCode"`
|
||
ProductCode string `json:"productCode"`
|
||
ProductTitle string `json:"productTitle"`
|
||
ProductType int `json:"productType"`
|
||
SalePrice float64 `json:"salePrice"`
|
||
SingleProduct interface{} `json:"singleProduct"`
|
||
SingleProductID interface{} `json:"singleProductId"`
|
||
SingleProductTitle interface{} `json:"singleProductTitle"`
|
||
SkuAttrKey interface{} `json:"skuAttrKey"`
|
||
SkuAttrMap interface{} `json:"skuAttrMap"`
|
||
SkuAttrValueNameList interface{} `json:"skuAttrValueNameList"`
|
||
SkuID int64 `json:"skuId"`
|
||
SkuInfoMap interface{} `json:"skuInfoMap"`
|
||
SupplierStockMax interface{} `json:"supplierStockMax"`
|
||
EditStockNum int `json:"editStockNum"`
|
||
}
|
||
type SingleSku struct {
|
||
AdviseSalePriceMax interface{} `json:"adviseSalePriceMax"`
|
||
AdviseSalePriceMin interface{} `json:"adviseSalePriceMin"`
|
||
AvailableStockNum int `json:"availableStockNum"`
|
||
B2CSku B2CSku `json:"b2cSku"`
|
||
ChangeGoodsLimitNum int `json:"changeGoodsLimitNum"`
|
||
ChangeStockNum int `json:"changeStockNum"`
|
||
CombineProduct interface{} `json:"combineProduct"`
|
||
CombineProductID interface{} `json:"combineProductId"`
|
||
CostPrice float64 `json:"costPrice"`
|
||
DistributorLimitStock interface{} `json:"distributorLimitStock"`
|
||
GoodsID int64 `json:"goodsId"`
|
||
GoodsLimitNum int `json:"goodsLimitNum"`
|
||
ImageURL interface{} `json:"imageUrl"`
|
||
InStock bool `json:"inStock"`
|
||
IsDeleted bool `json:"isDeleted"`
|
||
IsDisabled bool `json:"isDisabled"`
|
||
LockPriceStatus int `json:"lockPriceStatus"`
|
||
MerchantSalePrice interface{} `json:"merchantSalePrice"`
|
||
OriginalPrice float64 `json:"originalPrice"`
|
||
OuterSkuCode string `json:"outerSkuCode"`
|
||
ProductCode string `json:"productCode"`
|
||
ProductTitle string `json:"productTitle"`
|
||
ProductType int `json:"productType"`
|
||
SalePrice float64 `json:"salePrice"`
|
||
SingleProduct interface{} `json:"singleProduct"`
|
||
SingleProductID interface{} `json:"singleProductId"`
|
||
SingleProductTitle interface{} `json:"singleProductTitle"`
|
||
SkuAttrKey interface{} `json:"skuAttrKey"`
|
||
SkuAttrMap interface{} `json:"skuAttrMap"`
|
||
SkuAttrValueNameList interface{} `json:"skuAttrValueNameList"`
|
||
SkuID int64 `json:"skuId"`
|
||
SkuInfoMap interface{} `json:"skuInfoMap"`
|
||
SupplierStockMax interface{} `json:"supplierStockMax"`
|
||
}
|
||
type SkuMap struct {
|
||
SingleSku SingleSku `json:"singleSku"`
|
||
}
|
||
|
||
type UpdateGoodsParam struct {
|
||
Goods *Goods `json:"goods"`
|
||
}
|
||
type Num1 struct {
|
||
Key int `json:"key"`
|
||
}
|
||
type Num3000 struct {
|
||
Key int `json:"key"`
|
||
}
|
||
type SkuAttrMap struct {
|
||
Num1 Num1 `json:"1"`
|
||
Num3000 Num3000 `json:"3000"`
|
||
}
|
||
|
||
type AttrValueList struct {
|
||
Key int `json:"key"`
|
||
}
|
||
|
||
type Goods struct {
|
||
B2CGoods *B2CGoods `json:"b2cGoods"`
|
||
CategoryID int `json:"categoryId"`
|
||
Title string `json:"title"`
|
||
IsMultiSku int `json:"isMultiSku"`
|
||
GoodsTagID int `json:"goodsTagId,omitempty"`
|
||
GoodsDesc string `json:"goodsDesc"`
|
||
InitialSales int `json:"initialSales,omitempty"`
|
||
DeductStockType int `json:"deductStockType,omitempty"`
|
||
IsPutAway int `json:"isPutAway"`
|
||
IsMemberShipDiscount int `json:"isMemberShipDiscount"`
|
||
SkuList []*SkuList `json:"skuList"`
|
||
SelectedGoodsAttrList []SelectedGoodsAttrList `json:"selectedGoodsAttrList,omitempty"`
|
||
SelectedSaleAttrList []SelectedSaleAttrList `json:"selectedSaleAttrList,omitempty"`
|
||
GoodsImageURL []string `json:"goodsImageUrl"`
|
||
SelectedClassifyIDList []int64 `json:"selectedClassifyIdList,omitempty"`
|
||
GoodsID int64 `json:"goodsId"`
|
||
OuterGoodsCode string `json:"outerGoodsCode"`
|
||
PointDeductRatio int `json:"pointDeductRatio"`
|
||
}
|
||
type FindFreightTemplateListInfo struct {
|
||
DefaultFreightTemplate DefaultFreightTemplate `json:"defaultFreightTemplate"`
|
||
FreightTemplateList []FreightTemplateList `json:"freightTemplateList"`
|
||
SelectedFreightTemplate SelectedFreightTemplate `json:"selectedFreightTemplate"`
|
||
}
|
||
type TemplateRuleItemList struct {
|
||
BaseAmount float64 `json:"baseAmount"`
|
||
ExtendAmount float64 `json:"extendAmount"`
|
||
ExtendNumUnit int `json:"extendNumUnit"`
|
||
ExtendVolumeUnit interface{} `json:"extendVolumeUnit"`
|
||
ExtendWeightUnit interface{} `json:"extendWeightUnit"`
|
||
IsDefault int `json:"isDefault"`
|
||
SupportAreaName string `json:"supportAreaName"`
|
||
TemplateRuleItemID int `json:"templateRuleItemId"`
|
||
UpperNum int `json:"upperNum"`
|
||
UpperVolume interface{} `json:"upperVolume"`
|
||
UpperWeight interface{} `json:"upperWeight"`
|
||
}
|
||
type TemplateRuleList struct {
|
||
DeliveryMethodName string `json:"deliveryMethodName"`
|
||
TemplateRuleID int `json:"templateRuleId"`
|
||
TemplateRuleItemList []TemplateRuleItemList `json:"templateRuleItemList"`
|
||
}
|
||
type DefaultFreightTemplate struct {
|
||
CalculateType int `json:"calculateType"`
|
||
IsFree int `json:"isFree"`
|
||
TemplateID int `json:"templateId"`
|
||
TemplateName string `json:"templateName"`
|
||
TemplateRuleList []TemplateRuleList `json:"templateRuleList"`
|
||
}
|
||
type FreightTemplateList struct {
|
||
CalculateType int `json:"calculateType"`
|
||
IsFree int `json:"isFree"`
|
||
TemplateID int `json:"templateId"`
|
||
TemplateName string `json:"templateName"`
|
||
TemplateRuleList interface{} `json:"templateRuleList"`
|
||
}
|
||
type SelectedFreightTemplate struct {
|
||
CalculateType int `json:"calculateType"`
|
||
IsFree int `json:"isFree"`
|
||
TemplateID int `json:"templateId"`
|
||
TemplateName string `json:"templateName"`
|
||
TemplateRuleList []TemplateRuleList `json:"templateRuleList"`
|
||
}
|
||
|
||
func (a *API) QueryGoodsList(queryParam *QueryGoodsListParam) (goodsList []*GoodsInfo, totalCount int, err error) {
|
||
param := make(map[string]interface{})
|
||
if queryParam != nil {
|
||
param = utils.Struct2FlatMap(queryParam)
|
||
}
|
||
result, err := a.AccessAPI("goods/queryGoodsList", param)
|
||
if err == nil {
|
||
data := result.(map[string]interface{})
|
||
totalCount = int(utils.MustInterface2Int64(data["totalCount"]))
|
||
err = utils.Map2StructByJson(data["pageList"], &goodsList, false)
|
||
}
|
||
return goodsList, totalCount, err
|
||
}
|
||
|
||
func (a *API) QueryGoodsDetail(goodsId int64) (goodsDetailInfo *GoodsDetailInfo, err error) {
|
||
apiParams := map[string]interface{}{
|
||
"goodsId": goodsId,
|
||
}
|
||
result, err := a.AccessAPI("goods/queryGoodsDetail", apiParams)
|
||
if err == nil {
|
||
data := result.(map[string]interface{})
|
||
err = utils.Map2StructByJson(data["goods"], &goodsDetailInfo, false)
|
||
return goodsDetailInfo, nil
|
||
// return result.(map[string]interface{})["goods"].(map[string]interface{}), nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
func (a *API) QueryCategoryTree() (retVal []*Category, err error) {
|
||
result, err := a.AccessAPI("category/queryCategoryTree", nil)
|
||
if err == nil {
|
||
categoryList := result.(map[string]interface{})["categoryList"].([]interface{})
|
||
retVal = make([]*Category, len(categoryList))
|
||
for k, v := range categoryList {
|
||
retVal[k] = map2Category(1, 0, v.(map[string]interface{}))
|
||
}
|
||
return retVal, nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
func map2Category(level int, parentID int64, mapData map[string]interface{}) *Category {
|
||
return &Category{
|
||
CategoryID: utils.MustInterface2Int64(mapData["categoryId"]),
|
||
Title: utils.Interface2String(mapData["title"]),
|
||
Level: level,
|
||
ParentID: parentID,
|
||
}
|
||
}
|
||
|
||
func (a *API) QueryChildrenCategory(categoryId int64) (retVal []*Category, err error) {
|
||
result, err := a.AccessAPI("category/queryChildrenCategory", map[string]interface{}{
|
||
"categoryId": categoryId,
|
||
})
|
||
if err == nil {
|
||
categoryList := result.(map[string]interface{})["categoryList"].([]interface{})
|
||
retVal = make([]*Category, len(categoryList))
|
||
for k, v := range categoryList {
|
||
retVal[k] = map2Category(2, categoryId, v.(map[string]interface{}))
|
||
}
|
||
return retVal, nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
func (a *API) QueryClassifyInfoList() (retVal []*GoodsClassify, err error) {
|
||
result, err := a.AccessAPI("goodsClassify/queryClassifyInfoList", nil)
|
||
if err == nil {
|
||
goodsClassifyList := interface2ClassifyList(result.(map[string]interface{})["goodsClassifyList"], nil)
|
||
return goodsClassifyList, nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
func interface2Classify(data interface{}) (clf *GoodsClassify) {
|
||
mapData, ok := data.(map[string]interface{})
|
||
if ok {
|
||
clf = &GoodsClassify{
|
||
ClassifyID: utils.MustInterface2Int64(mapData["classifyId"]),
|
||
ImageURL: utils.Interface2String(mapData["imageUrl"]),
|
||
Title: utils.Interface2String(mapData["title"]),
|
||
Level: int(utils.Interface2Int64WithDefault(mapData["level"], 0)),
|
||
ChildrenClassify: interface2ClassifyList(mapData["childrenClassify"], nil),
|
||
}
|
||
}
|
||
return clf
|
||
}
|
||
|
||
func interface2ClassifyList(data interface{}, interface2CatHandler func(data interface{}) (clf *GoodsClassify)) (clfs []*GoodsClassify) {
|
||
if interface2CatHandler == nil {
|
||
interface2CatHandler = interface2Classify
|
||
}
|
||
maps, ok := data.([]interface{})
|
||
if ok {
|
||
clfs = make([]*GoodsClassify, len(maps))
|
||
for index, v := range maps {
|
||
clfs[index] = interface2CatHandler(v)
|
||
}
|
||
}
|
||
return clfs
|
||
}
|
||
|
||
func (a *API) AddClassify(title string, parentID int64, imageURL string) (goodsClassifyID int64, err error) {
|
||
apiParams := map[string]interface{}{
|
||
"title": title,
|
||
}
|
||
if parentID > 0 {
|
||
apiParams["parentId"] = parentID
|
||
}
|
||
if imageURL != "" {
|
||
apiParams["imageUrl"] = imageURL
|
||
}
|
||
result, err := a.AccessAPI("goodsClassify/addClassify", apiParams)
|
||
if err == nil {
|
||
return utils.MustInterface2Int64(result.(map[string]interface{})["goodsClassifyId"]), nil
|
||
}
|
||
return 0, err
|
||
}
|
||
|
||
func (a *API) UpdateClassify(classifyID int64, title string, imageURL string) (err error) {
|
||
apiParams := map[string]interface{}{
|
||
"title": title,
|
||
"classifyId": classifyID,
|
||
}
|
||
if imageURL != "" {
|
||
apiParams["imageUrl"] = imageURL
|
||
}
|
||
_, err = a.AccessAPI("goodsClassify/updateClassify", apiParams)
|
||
return err
|
||
}
|
||
|
||
func getDataFromCUGoodsResult(result interface{}) (goodsId int64, skuMap map[string]int64, err error) {
|
||
skuMap = make(map[string]int64)
|
||
skuList := result.(map[string]interface{})["skuList"].([]interface{})
|
||
for _, v := range skuList {
|
||
sku := v.(map[string]interface{})
|
||
skuMap[utils.Interface2String(sku[KeyOuterSkuCode])] = utils.MustInterface2Int64(sku[KeySkuID])
|
||
}
|
||
return utils.MustInterface2Int64(result.(map[string]interface{})["goodsId"]), skuMap, nil
|
||
}
|
||
|
||
func (a *API) AddGoods(outerGoodsCode, title string, isMultiSku bool, goodsImageUrl []string, goodsDesc string, isPutAway bool, sort int, categoryId int64, classifyIdList []int64, b2cGoods *PendingSaveB2CGoodsVo, skuList []map[string]interface{}, addParams map[string]interface{}) (goodsId int64, skuMap map[string]int64, err error) {
|
||
goodsInfo := map[string]interface{}{
|
||
"outerGoodsCode": outerGoodsCode,
|
||
"title": title,
|
||
"isMultiSku": utils.Bool2Int(isMultiSku),
|
||
"goodsImageUrl": goodsImageUrl,
|
||
"goodsDesc": goodsDesc,
|
||
"isPutAway": 1 - utils.Bool2Int(isPutAway),
|
||
"sort": sort,
|
||
"categoryId": categoryId,
|
||
"b2cGoods": b2cGoods,
|
||
"skuList": skuList,
|
||
"selectedClassifyIdList": classifyIdList,
|
||
"initialSales": 100,
|
||
}
|
||
mergedMap := utils.MergeMaps(addParams, goodsInfo)
|
||
if _, ok := mergedMap["deductStockType"]; !ok {
|
||
mergedMap["deductStockType"] = DeductStockTypePay
|
||
}
|
||
result, err := a.AccessAPI("goods/addGoods", map[string]interface{}{
|
||
"goods": mergedMap,
|
||
})
|
||
if err == nil {
|
||
return getDataFromCUGoodsResult(result)
|
||
}
|
||
return 0, nil, err
|
||
}
|
||
|
||
func (a *API) AddGoods2(goodsInfo *PendingSaveGoodsVo) (goodsId int64, skuMap map[string]int64, err error) {
|
||
if goodsInfo.DeductStockType == 0 {
|
||
goodsInfo.DeductStockType = DeductStockTypePay
|
||
}
|
||
result, err := a.AccessAPI("goods/addGoods", map[string]interface{}{
|
||
"goods": goodsInfo,
|
||
})
|
||
if err == nil {
|
||
return getDataFromCUGoodsResult(result)
|
||
}
|
||
return 0, nil, err
|
||
}
|
||
|
||
func (a *API) UpdateGoods3(updateGoodsParam *UpdateGoodsParam) (goodsId int64, skuMap map[string]int64, err error) {
|
||
if updateGoodsParam.Goods.DeductStockType == 0 {
|
||
updateGoodsParam.Goods.DeductStockType = DeductStockTypePay
|
||
}
|
||
result, err := a.AccessAPI("goods/updateGoods", map[string]interface{}{
|
||
"goods": updateGoodsParam.Goods,
|
||
})
|
||
if err == nil {
|
||
return getDataFromCUGoodsResult(result)
|
||
}
|
||
return 0, nil, err
|
||
}
|
||
|
||
func (a *API) UpdateGoods(goodsID int64, title string, isMultiSku bool, goodsImageUrl []string, goodsDesc string, isPutAway bool, sort int, categoryId int64, classifyIdList []int64, b2cGoods *PendingSaveB2CGoodsVo, skuList []map[string]interface{}, addParams map[string]interface{}) (goodsId int64, skuMap map[string]int64, err error) {
|
||
goodsInfo := map[string]interface{}{
|
||
"goodsId": goodsID,
|
||
"title": title,
|
||
"isMultiSku": utils.Bool2Int(isMultiSku),
|
||
"goodsImageUrl": goodsImageUrl,
|
||
"goodsDesc": goodsDesc,
|
||
"isPutAway": 1 - utils.Bool2Int(isPutAway),
|
||
"sort": sort,
|
||
"categoryId": categoryId,
|
||
"b2cGoods": b2cGoods,
|
||
"skuList": skuList,
|
||
"selectedClassifyIdList": classifyIdList,
|
||
}
|
||
mergedMap := utils.MergeMaps(addParams, goodsInfo)
|
||
if _, ok := mergedMap["deductStockType"]; !ok {
|
||
mergedMap["deductStockType"] = DeductStockTypePay
|
||
}
|
||
result, err := a.AccessAPI("goods/updateGoods", map[string]interface{}{
|
||
"goods": mergedMap,
|
||
})
|
||
if err == nil {
|
||
return getDataFromCUGoodsResult(result)
|
||
}
|
||
return 0, nil, err
|
||
}
|
||
|
||
func (a *API) UpdateGoods2(goodsInfo *PendingSaveGoodsVo) (goodsId int64, skuMap map[string]int64, err error) {
|
||
if goodsInfo.DeductStockType == 0 {
|
||
goodsInfo.DeductStockType = DeductStockTypePay
|
||
}
|
||
result, err := a.AccessAPI("goods/updateGoods", map[string]interface{}{
|
||
"goods": goodsInfo,
|
||
})
|
||
if err == nil {
|
||
return getDataFromCUGoodsResult(result)
|
||
}
|
||
return 0, nil, err
|
||
}
|
||
|
||
func (a *API) UpdateGoodsShelfStatus(goodsIDs []int64, isPutAway bool) (err error) {
|
||
_, err = a.AccessAPI("goods/updateGoodsShelfStatus", map[string]interface{}{
|
||
"goodsIdList": goodsIDs,
|
||
"isPutAway": 1 - utils.Bool2Int(isPutAway),
|
||
})
|
||
return err
|
||
}
|
||
|
||
func (a *API) UpdateGoodsTitle(goodsID int64, title string) (err error) {
|
||
_, err = a.AccessAPI("goods/updateGoodsTitle", map[string]interface{}{
|
||
"goodsId": goodsID,
|
||
"title": title,
|
||
})
|
||
return err
|
||
}
|
||
|
||
func (a *API) FindDeliveryTypeList(goodsID int64) (retVal []*DeliveryType, err error) {
|
||
apiParams := map[string]interface{}{}
|
||
if goodsID > 0 {
|
||
apiParams["goodsId"] = goodsID
|
||
}
|
||
result, err := a.AccessAPI("goods/findDeliveryTypeList", apiParams)
|
||
if err == nil {
|
||
deliveryTypeList := result.(map[string]interface{})["deliveryTypeList"].([]interface{})
|
||
retVal = make([]*DeliveryType, len(deliveryTypeList))
|
||
for k, v := range deliveryTypeList {
|
||
mapData := v.(map[string]interface{})
|
||
retVal[k] = &DeliveryType{
|
||
DeliveryID: utils.MustInterface2Int64(mapData["deliveryId"]),
|
||
DeliveryType: int(utils.MustInterface2Int64(mapData["deliveryType"])),
|
||
DeliveryTypeName: utils.Interface2String(mapData["deliveryTypeName"]),
|
||
Selected: mapData["selected"].(bool),
|
||
}
|
||
}
|
||
return retVal, nil
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
func (a *API) UploadImg(imgData []byte, name string) (imgURL string, err error) {
|
||
apiParams := map[string]interface{}{
|
||
"file": imgData,
|
||
}
|
||
if name != "" {
|
||
apiParams["name"] = name
|
||
}
|
||
result, err := a.AccessAPI("goodsImage/uploadImg", apiParams)
|
||
if err == nil {
|
||
urlInfo := result.(map[string]interface{})["urlInfo"].([]interface{})
|
||
if len(urlInfo) > 0 {
|
||
urlInfo0 := urlInfo[0].(map[string]interface{})
|
||
if utils.MustInterface2Int64(urlInfo0["legalStatus"]) == 0 {
|
||
return utils.Interface2String(urlInfo0["url"]), nil
|
||
}
|
||
return "", fmt.Errorf("上传的图片:%s不合法", name)
|
||
}
|
||
return "", fmt.Errorf("上传的图片:%s返回为空", name)
|
||
}
|
||
return "", err
|
||
}
|
||
|
||
func (a *API) UploadImgByURL(uploadImgURL string, name string) (imgURL string, err error) {
|
||
response, err := http.Get(uploadImgURL)
|
||
if err == nil {
|
||
defer func() {
|
||
response.Body.Close()
|
||
}()
|
||
if response.StatusCode == http.StatusOK {
|
||
bodyData, err2 := ioutil.ReadAll(response.Body)
|
||
if err = err2; err == nil {
|
||
return a.UploadImg(bodyData, name)
|
||
}
|
||
} else {
|
||
err = platformapi.ErrHTTPCodeIsNot200
|
||
}
|
||
}
|
||
return "", err
|
||
}
|
||
|
||
func (a *API) FindFreightTemplateList(goodsID int64) (freightTemplateListInfo *FindFreightTemplateListInfo, err error) {
|
||
apiParams := map[string]interface{}{}
|
||
if goodsID > 0 {
|
||
apiParams["goodsId"] = goodsID
|
||
}
|
||
result, err := a.AccessAPI("goods/findFreightTemplateList", apiParams)
|
||
if err == nil {
|
||
data := result.(map[string]interface{})
|
||
err = utils.Map2StructByJson(data, &freightTemplateListInfo, false)
|
||
return freightTemplateListInfo, nil
|
||
}
|
||
return nil, err
|
||
}
|