Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -1,17 +1,14 @@
|
||||
package tiktok_store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
||||
product_addV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_addV2/request"
|
||||
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"
|
||||
product_editV2_commit_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_editV2_commit/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"
|
||||
sku_syncStock_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_syncStock/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"
|
||||
@@ -308,12 +305,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
|
||||
// spec_prices
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||
// ProductFormatNew 获取商品属性
|
||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param.ProductFormatNew = productFormatNew
|
||||
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||
|
||||
// 获取品牌
|
||||
param.StandardBrandId, err = api.GetSkuBrand(param.CategoryLeafId)
|
||||
@@ -324,6 +316,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
||||
var tiktokResultProductId int64 = 0
|
||||
if _, err = api.GetSkuDetailLocalID("", param.OuterProductId); err != nil { // 线上不存在创建
|
||||
globals.SugarLogger.Debugf("er==============%s", err)
|
||||
globals.SugarLogger.Debugf("er==============param%s", utils.Format4Output(param, false))
|
||||
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
@@ -341,22 +335,39 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
}
|
||||
|
||||
// 创建子商品
|
||||
freightId, err := GetDeliveryTemp(api, vendorStoreID, storeDetail) // 运费模板
|
||||
if err != nil {
|
||||
return nil, err
|
||||
temp, err := dao.QueryStoreBindInfo(storeDetail.ID)
|
||||
if err != nil || temp == nil || temp.TemplateID == 0 {
|
||||
// 运费模板
|
||||
param.FreightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 获取门店限售模板
|
||||
param.SaleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 保存数据库
|
||||
freightTemplate := &model.FreightTemplate{
|
||||
StoreID: storeSku.StoreID,
|
||||
VendorStoreID: storeDetail.VendorStoreID,
|
||||
TemplateID: param.FreightId,
|
||||
WarehouseID: 0,
|
||||
FenceID: "",
|
||||
TradeLimitID: param.SaleLimitId,
|
||||
}
|
||||
dao.WrapAddIDCULDEntity(param, "jxAdmin")
|
||||
dao.CreateEntity(dao.GetDB(), &freightTemplate)
|
||||
} else {
|
||||
param.FreightId = temp.TemplateID
|
||||
param.SaleLimitId = temp.TradeLimitID
|
||||
}
|
||||
param.FreightId = freightId
|
||||
|
||||
param.MainProductId = tiktokResultProductId
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
|
||||
|
||||
// 获取门店限售模板
|
||||
saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param.SaleLimitId = saleLimitId
|
||||
param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||
|
||||
globals.SugarLogger.Debugf("============CreateStoreCommodity:%s", utils.Format4Output(param, false))
|
||||
// 抖店创建子商品
|
||||
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
||||
if err != nil {
|
||||
@@ -413,12 +424,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
|
||||
// spec_prices
|
||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, utils.Str2Int64(storeSku.VendorSkuID), storeSku)
|
||||
// ProductFormatNew 获取商品属性
|
||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param.ProductFormatNew = productFormatNew
|
||||
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||
|
||||
// 获取品牌
|
||||
//brandID, err := api.GetSkuBrand(param.CategoryLeafId)
|
||||
@@ -465,54 +471,6 @@ 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)
|
||||
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)
|
||||
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 {
|
||||
|
||||
@@ -5,7 +5,10 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
|
||||
product_getCatePropertyV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_getCatePropertyV2/response"
|
||||
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"
|
||||
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/model"
|
||||
@@ -14,10 +17,53 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 获取运费模板id,运费模板不存在则创建
|
||||
func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao.StoreDetail) (int64, error) {
|
||||
// todo 获取本地数据模板
|
||||
// CreateSaleTemp 创建限售模板
|
||||
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
||||
// 获取限售模板
|
||||
saleLimitId, _ := api.StoreQuerySaleLimitTemp(storeId)
|
||||
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-商品标
|
||||
TradeLimitPattern: &trade_createTradeLimitTemplate_request.TradeLimitPattern{
|
||||
Minimum: 1, // 1毫克
|
||||
Maximum: 500 * 1000 * 1000, //500千克
|
||||
CumulativeMax: 99999,
|
||||
},
|
||||
TradeLimitSubjectList: []int32{1},
|
||||
}
|
||||
tradeLimitRuleRequestList = append(tradeLimitRuleRequestList, tradeLimitRuleRequest)
|
||||
result, err := api.CreateTradeLimitTemplate(param)
|
||||
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 {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.TradeLimitId, nil
|
||||
}
|
||||
|
||||
// GetDeliveryTemp 获取运费模板id,运费模板不存在则创建
|
||||
func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao.StoreDetail) (int64, error) {
|
||||
// 没有模板是查询线上模板
|
||||
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
|
||||
if freightId == 0 {
|
||||
@@ -28,11 +74,39 @@ func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao
|
||||
ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[0:2]),
|
||||
ProductCity: int64(storeDetail.CityCode),
|
||||
CalculateType: 2,
|
||||
TransferType: 1, // 快递
|
||||
RuleType: 1,
|
||||
FixedAmount: 500,
|
||||
TransferType: 1, // 快递方式-1.快递 目前仅支持1
|
||||
RuleType: 2, // 模板类型-0:阶梯计价 1:固定运费 2:卖家包邮 3:货到付款
|
||||
},
|
||||
Columns: []freightTemplate_create_request.ColumnsItem{
|
||||
{
|
||||
FirstWeight: 0,
|
||||
FirstWeightPrice: 0,
|
||||
FirstNum: 1,
|
||||
FirstNumPrice: 1,
|
||||
AddNum: 1,
|
||||
AddNumPrice: 0.01,
|
||||
RuleAddress: fmt.Sprintf(`{"%s":{"%s":{"%s":[0]}}}`, utils.Int2Str(storeDetail.ProvinceCode), utils.Int2Str(storeDetail.CityCode)[:2], utils.Int2Str(storeDetail.DistrictCode)[:2]),
|
||||
IsOverFree: true,
|
||||
OverAmount: int64(storeDetail.DeliveryFeeDeductionSill),
|
||||
ProvinceInfos: []freightTemplate_create_request.ProvinceInfosItem{
|
||||
{
|
||||
Id: int64(storeDetail.ProvinceCode),
|
||||
Children: []freightTemplate_create_request.ChildrenItem_4{
|
||||
{
|
||||
Id: int64(storeDetail.CityCode),
|
||||
Children: []freightTemplate_create_request.ChildrenItem_5{
|
||||
{
|
||||
Id: int64(storeDetail.DistrictCode),
|
||||
Children: []freightTemplate_create_request.ChildrenItem{
|
||||
{Id: 0},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
},
|
||||
},
|
||||
Columns: nil,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@@ -52,37 +126,31 @@ func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao
|
||||
}
|
||||
|
||||
// GetProductFormatNew 获取物品属性
|
||||
func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (string, error) {
|
||||
func GetProductFormatNew(categoryLeftId int64, vendorOrgCode string) (*product_getCatePropertyV2_response.ProductGetCatePropertyV2Response, error) {
|
||||
category, err := getAPI(vendorOrgCode, 0, "").GetCatePropertyV2(categoryLeftId)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return nil, err
|
||||
}
|
||||
format := make(map[string][]*tiktokShop.ProductFormatNewList, 0)
|
||||
for _, v := range category.Data.Data {
|
||||
if len(v.Options) == 0 {
|
||||
formateNew := &tiktokShop.ProductFormatNewList{
|
||||
Value: 0,
|
||||
Name: "暂不支持",
|
||||
DiyType: 1,
|
||||
}
|
||||
format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||
} else {
|
||||
for _, d := range v.Options {
|
||||
formateNew := &tiktokShop.ProductFormatNewList{
|
||||
Value: utils.Str2Int64(d.Value),
|
||||
Name: d.Name,
|
||||
DiyType: v.DiyType,
|
||||
}
|
||||
format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
productFormatNew, err := json.Marshal(format)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(productFormatNew), nil
|
||||
return category, nil
|
||||
//format := make(map[string][]*tiktokShop.ProductFormatNewList, 0)
|
||||
//for _, v := range category.Data.Data {
|
||||
// if v.Required != 1 { // 必填属性必须填写
|
||||
// continue
|
||||
// }
|
||||
// for _, d := range v.Options {
|
||||
// formateNew := &tiktokShop.ProductFormatNewList{
|
||||
// Value: utils.Str2Int64(d.Value),
|
||||
// Name: d.Name,
|
||||
// DiyType: v.DiyType,
|
||||
// }
|
||||
// format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||
// }
|
||||
//}
|
||||
//productFormatNew, err := json.Marshal(format)
|
||||
//if err != nil {
|
||||
// return "", err
|
||||
//}
|
||||
//return string(productFormatNew), nil
|
||||
}
|
||||
|
||||
// GetTiktokImgList 获取抖音图片链接
|
||||
|
||||
Reference in New Issue
Block a user