Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package tiktok_store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
|
||||
@@ -8,7 +9,9 @@ import (
|
||||
product_detail_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_detail/response"
|
||||
product_editV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_editV2/request"
|
||||
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
|
||||
shop_bindStoreSaleLimit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreSaleLimit/request"
|
||||
sku_editPrice_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_editPrice/request"
|
||||
trade_createTradeLimitTemplate_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/trade_createTradeLimitTemplate/request"
|
||||
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
@@ -254,11 +257,10 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
||||
// 对于多门店平台来说,storeSkuList中只有SkuID与VendorSkuID有意义
|
||||
// 抖店的商品只管创建,创建接口会返回成功,但是审核的时候不一定成功.当前系统无法判定此商品是否已经创建过了!
|
||||
func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isCreate bool) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
globals.SugarLogger.Debug("==============vendorStoreID", vendorStoreID)
|
||||
var syncType string
|
||||
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDDD, "")
|
||||
api := getAPI(storeDetail.VendorOrgCode, storeID, vendorStoreID)
|
||||
globals.SugarLogger.Debug("=============", storeDetail.VendorOrgCode)
|
||||
globals.SugarLogger.Debugf("api===============%v", utils.Format4Output(api, false))
|
||||
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
|
||||
if freightId == 0 {
|
||||
// 创建门店运费模板
|
||||
@@ -291,13 +293,12 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
if isCreate {
|
||||
syncType = "创建商品"
|
||||
for _, storeSku := range storeSkuList {
|
||||
// 创建商品
|
||||
// 创建子商品
|
||||
param := &product_addV2_request.ProductAddV2Param{
|
||||
CategoryLeafId: utils.Str2Int64(storeSku.SkuVendorMapCatID),
|
||||
Name: storeSku.Name,
|
||||
PayType: tiktokShop.TiktokPayType1,
|
||||
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
||||
FreightId: freightId,
|
||||
Weight: utils.Int2Float64(storeSku.Weight),
|
||||
DeliveryDelayDay: tiktokShop.DeliveryDelayDayToDay,
|
||||
PresellType: tiktokShop.SendGoodsTypeNow,
|
||||
@@ -309,10 +310,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
SellChannel: []int64{0},
|
||||
StartSaleType: 0,
|
||||
PickupMethod: "0",
|
||||
StoreId: int64(storeSku.StoreID),
|
||||
MainProductId: int64(storeSku.NameID),
|
||||
}
|
||||
|
||||
// param.AccountTemplateId = ""
|
||||
// 获取上传图,商品轮播图
|
||||
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
||||
if err != nil {
|
||||
@@ -335,8 +334,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
}
|
||||
|
||||
// spec_prices
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, storeSku)
|
||||
// ProductFormatNew
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||
// ProductFormatNew 获取商品属性
|
||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
||||
globals.SugarLogger.Debug("创建=============productFormatNew", productFormatNew)
|
||||
globals.SugarLogger.Debug("创建=============productFormatNew err", err)
|
||||
@@ -344,15 +343,44 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
return nil, err
|
||||
}
|
||||
param.ProductFormatNew = productFormatNew
|
||||
globals.SugarLogger.Debug("创建=============param", utils.Format4Output(param, false))
|
||||
|
||||
// 抖店创建商品
|
||||
tiktokResult, err := api.CreateStoreCommodity(param)
|
||||
// 获取品牌
|
||||
brandID, err := api.GetSkuBrand(param.CategoryLeafId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param.StandardBrandId = brandID
|
||||
|
||||
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
continue
|
||||
}
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(tiktokResult.ProductId)
|
||||
globals.SugarLogger.Debugf("tiktokResult main ===%s", utils.Format4Output(tiktokResult, false))
|
||||
|
||||
// 创建子商品
|
||||
param.FreightId = freightId
|
||||
param.MainProductId = tiktokResult.ProductId
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResult.ProductId, storeSku)
|
||||
// 获取门店限售模板
|
||||
saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
globals.SugarLogger.Debug("==22213123131231231", saleLimitId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param.SaleLimitId = saleLimitId
|
||||
param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
// 抖店创建商品
|
||||
globals.SugarLogger.Debugf("zishangping=============%s", utils.Format4Output(param, false))
|
||||
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||
continue
|
||||
}
|
||||
storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId)
|
||||
}
|
||||
} else {
|
||||
syncType = "更新商品"
|
||||
@@ -401,7 +429,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
}
|
||||
|
||||
// spec_prices
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, storeSku)
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||
// ProductFormatNew
|
||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
||||
globals.SugarLogger.Debug("更新=============productFormatNew", productFormatNew)
|
||||
@@ -427,6 +455,57 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
return failedList, err
|
||||
}
|
||||
|
||||
// CreateSaleTemp 创建限售模板
|
||||
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
||||
// 获取限售模板
|
||||
saleLimitId, _ := api.StoreQuerySaleLimitTemp(storeId)
|
||||
globals.SugarLogger.Debug("==========saleLimitId1", saleLimitId)
|
||||
if saleLimitId != 0 {
|
||||
return saleLimitId, nil
|
||||
}
|
||||
|
||||
// 创建限售模板
|
||||
param := &trade_createTradeLimitTemplate_request.TradeCreateTradeLimitTemplateParam{
|
||||
StoreId: storeId,
|
||||
TradeLimitRuleRequestList: []trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{},
|
||||
}
|
||||
tradeLimitRuleRequestList := make([]trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem, 0)
|
||||
tradeLimitRuleRequest := trade_createTradeLimitTemplate_request.TradeLimitRuleRequestListItem{
|
||||
TradeLimitModel: 1, // 限购模型 1-重量,2-数量,3-地区,4-金额
|
||||
TradeLimitResource: 2, // 限购资源类别1-抖店,2-门店,3-商品ID,4-sku,5-类目,6-活动,7-商品标
|
||||
TradeLimitResourceObject: nil,
|
||||
TradeLimitPattern: &trade_createTradeLimitTemplate_request.TradeLimitPattern{
|
||||
Minimum: 1, // 1毫克
|
||||
Maximum: 500 * 1000 * 1000, //500千克
|
||||
CumulativeMax: 99999,
|
||||
},
|
||||
TimePeriod: nil,
|
||||
TradeLimitSubjectList: []int32{1},
|
||||
}
|
||||
tradeLimitRuleRequestList = append(tradeLimitRuleRequestList, tradeLimitRuleRequest)
|
||||
result, err := api.CreateTradeLimitTemplate(param)
|
||||
globals.SugarLogger.Debug("==========err2222", err)
|
||||
globals.SugarLogger.Debug("==========result222", utils.Format4Output(result, false))
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if result.TradeLimitId == 0 {
|
||||
return 0, errors.New("限售模板创建错误,联系管理员")
|
||||
}
|
||||
|
||||
// 绑定限售模板
|
||||
if err := api.BindStoreSaleLimit(&shop_bindStoreSaleLimit_request.ShopBindStoreSaleLimitParam{
|
||||
StoreId: storeId,
|
||||
SaleLimitId: result.TradeLimitId,
|
||||
}); err != nil {
|
||||
globals.SugarLogger.Debug("==========BindStoreSaleLimit", err)
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.TradeLimitId, nil
|
||||
}
|
||||
|
||||
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||
if globals.EnableDdStoreWrite {
|
||||
for _, v := range storeSkuList {
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
// GetProductFormatNew 获取物品属性
|
||||
func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (string, error) {
|
||||
category, err := getAPI(vendorOrgCode, 0, "").GetCatePropertyV2(categoryLeftId)
|
||||
globals.SugarLogger.Debug("========productFormatNewDATA==============", utils.Format4Output(category, false))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -26,7 +27,7 @@ func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (string, er
|
||||
Name: d.Name,
|
||||
DiyType: v.DiyType,
|
||||
}
|
||||
format[utils.Int64ToStr(v.CategoryId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||
format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||
}
|
||||
}
|
||||
productFormatNew, err := json.Marshal(format)
|
||||
@@ -67,7 +68,7 @@ func GetTiktokImgList(storeId, appOrgCode string, img ...string) (string, error)
|
||||
}
|
||||
|
||||
// GetSpecPrices 解析属性和规格参数
|
||||
func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
func GetSpecPrices(specs, storeId string, mainSkuId int64, localSku *dao.StoreSkuSyncInfo) string {
|
||||
skuSize := make([]*tiktokShop.SpecDetailList, 0, 0)
|
||||
detail1 := strings.Split(specs, "^")
|
||||
if len(detail1) > 3 {
|
||||
@@ -79,7 +80,6 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
for i := 0; i < len(name1); i++ {
|
||||
sku := &tiktokShop.SpecDetailList{
|
||||
SpecDetailName1: name1[i],
|
||||
StockNum: localSku.Stock,
|
||||
Price: int(localSku.VendorPrice),
|
||||
Code: utils.Int2Str(localSku.SkuID),
|
||||
StepStockNum: 0,
|
||||
@@ -89,6 +89,13 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
||||
},
|
||||
}
|
||||
if mainSkuId == 0 {
|
||||
sku.StockNum = 0
|
||||
} else {
|
||||
sku.StockNum = 0
|
||||
sku.SkuType = 1
|
||||
sku.StockNumMap = map[string]int64{storeId: int64(localSku.Stock)}
|
||||
}
|
||||
skuSize = append(skuSize, sku)
|
||||
}
|
||||
case 2:
|
||||
@@ -99,7 +106,6 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
sku := &tiktokShop.SpecDetailList{
|
||||
SpecDetailName1: name1[i],
|
||||
SpecDetailName2: name2[j],
|
||||
StockNum: localSku.Stock,
|
||||
Price: int(localSku.UnitPrice),
|
||||
Code: utils.Int2Str(localSku.SkuID),
|
||||
StepStockNum: 0,
|
||||
@@ -109,6 +115,13 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
||||
},
|
||||
}
|
||||
if mainSkuId == 0 {
|
||||
sku.StockNum = 0
|
||||
} else {
|
||||
sku.StockNum = 0
|
||||
sku.SkuType = 1
|
||||
sku.StockNumMap = map[string]int64{storeId: int64(localSku.Stock)}
|
||||
}
|
||||
skuSize = append(skuSize, sku)
|
||||
}
|
||||
}
|
||||
@@ -123,7 +136,6 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
SpecDetailName1: name1[i],
|
||||
SpecDetailName2: name2[j],
|
||||
SpecDetailName3: name3[k],
|
||||
StockNum: localSku.Stock,
|
||||
Price: int(localSku.UnitPrice),
|
||||
Code: utils.Int2Str(localSku.SkuID),
|
||||
StepStockNum: 0,
|
||||
@@ -133,6 +145,13 @@ func GetSpecPrices(specs string, localSku *dao.StoreSkuSyncInfo) string {
|
||||
{InfoType: "weight", InfoUnit: localSku.SpecUnit, InfoValue: fmt.Sprintf("%f", localSku.SpecQuality)},
|
||||
},
|
||||
}
|
||||
if mainSkuId == 0 {
|
||||
sku.StockNum = 0
|
||||
} else {
|
||||
sku.StockNum = 0
|
||||
sku.SkuType = 1
|
||||
sku.StockNumMap = map[string]int64{storeId: int64(localSku.Stock)}
|
||||
}
|
||||
skuSize = append(skuSize, sku)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user