Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -688,7 +688,7 @@ func GetSkuNames(ctx *jxcontext.Context, keyword string, isBySku, isQueryMidPric
|
|||||||
// return nil, err
|
// return nil, err
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
skuVendorCats, _ := dao.GetSkuVendorCategoryMaps(db, []int{skuName.ID}, []int{model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJDShop, model.VendorIDJD}, nil)
|
skuVendorCats, _ := dao.GetSkuVendorCategoryMaps(db, []int{skuName.ID}, []int{model.VendorIDMTWM, model.VendorIDEBAI, model.VendorIDJDShop, model.VendorIDJD, model.VendorIDDD}, nil)
|
||||||
if len(skuVendorCats) > 0 {
|
if len(skuVendorCats) > 0 {
|
||||||
for _, v := range skuVendorCats {
|
for _, v := range skuVendorCats {
|
||||||
if v.VendorID == model.VendorIDJD {
|
if v.VendorID == model.VendorIDJD {
|
||||||
|
|||||||
@@ -450,7 +450,6 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag
|
|||||||
var skus []*dao.StoreSkuSyncInfo
|
var skus []*dao.StoreSkuSyncInfo
|
||||||
if isFull {
|
if isFull {
|
||||||
skus, err = dao.GetFullStoreSkus(db, vendorID, storeID)
|
skus, err = dao.GetFullStoreSkus(db, vendorID, storeID)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
skus, err = dao.GetStoreSkus(db, vendorID, storeID, skuIDs)
|
skus, err = dao.GetStoreSkus(db, vendorID, storeID, skuIDs)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1568,7 +1568,7 @@ func GetStoreBrandInfos(storeID int) (date *BrandInfos, err error) {
|
|||||||
// 查询FreightTemplate
|
// 查询FreightTemplate
|
||||||
func QueryStoreBindInfo(storeID int) (*model.FreightTemplate, error) {
|
func QueryStoreBindInfo(storeID int) (*model.FreightTemplate, error) {
|
||||||
var (
|
var (
|
||||||
sqlParams = []interface{}{}
|
sqlParams []interface{}
|
||||||
bindInfo *model.FreightTemplate
|
bindInfo *model.FreightTemplate
|
||||||
)
|
)
|
||||||
sql := "SELECT a.store_id,a.vendor_store_id,a.template_id,a.warehouse_id,a.fence_id,a.trade_limit_id FROM freight_template a "
|
sql := "SELECT a.store_id,a.vendor_store_id,a.template_id,a.warehouse_id,a.fence_id,a.trade_limit_id FROM freight_template a "
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ type StoreSkuSyncInfo struct {
|
|||||||
NameStatus int
|
NameStatus int
|
||||||
SellCities []string
|
SellCities []string
|
||||||
NameCategoryID int `orm:"column(name_category_id)"`
|
NameCategoryID int `orm:"column(name_category_id)"`
|
||||||
|
TiktokAttribute string `orm:"column(tiktok_attribute)"`
|
||||||
YbNameSuffix string //银豹的商品条码后缀
|
YbNameSuffix string //银豹的商品条码后缀
|
||||||
YbBarCode string //银豹的商品条码
|
YbBarCode string //银豹的商品条码
|
||||||
JdsStockSwitch int
|
JdsStockSwitch int
|
||||||
@@ -568,7 +569,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
|||||||
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,t1.vendor_sku_attr_id,t1.vendor_main_id,
|
%s vendor_sku_id, t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,t1.vendor_sku_attr_id,t1.vendor_main_id,
|
||||||
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t1.jds_ware_id, t1.stock, t1.mt_ladder_box_price,
|
t1.store_id, t1.deleted_at bind_deleted_at,t1.status_sale_begin,t1.status_sale_end, t1.jds_ware_id, t1.stock, t1.mt_ladder_box_price,
|
||||||
t2.*,
|
t2.*,
|
||||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.category_id name_category_id, t3.yb_name_suffix,
|
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.category_id name_category_id, t3.yb_name_suffix,t3.tiktok_attribute,
|
||||||
t3.jds_stock_switch, t3.preparation_time, t3.img_watermark, t3.ex_vendor_id, t3.img img_origin,
|
t3.jds_stock_switch, t3.preparation_time, t3.img_watermark, t3.ex_vendor_id, t3.img img_origin,
|
||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||||
@@ -711,7 +712,7 @@ func GetFullStoreSkus(db *DaoDB, vendorID, storeID int) (skus []*StoreSkuSyncInf
|
|||||||
t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
|
t1.%s_sync_status sku_sync_status, t1.%s_price vendor_price, t1.%s_lock_time lock_time,
|
||||||
t1.store_id, t1.deleted_at bind_deleted_at, t1.stock,
|
t1.store_id, t1.deleted_at bind_deleted_at, t1.stock,
|
||||||
t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id,
|
t2.*, t2.id sku_id, t2m.vendor_thing_id vendor_sku_id,
|
||||||
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id,
|
t3.id name_id, t3.prefix, t3.name, t3.unit, t3.upc, t3.status name_status, t3.ex_prefix, t3.ex_prefix_begin, t3.ex_prefix_end, t3.category_id name_category_id,t3.tiktok_attribute,
|
||||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||||
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
||||||
|
|||||||
@@ -199,12 +199,13 @@ type SkuName struct {
|
|||||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||||
|
|
||||||
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
||||||
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
|
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
|
||||||
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"` //京东商城总库存
|
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"` //京东商城总库存
|
||||||
PreparationTime int `orm:"default(1)" json:"preparationTime"` //商品准备时长
|
PreparationTime int `orm:"default(1)" json:"preparationTime"` //商品准备时长
|
||||||
BestSeller int `json:"bestSeller"` //畅销品 0不是 1是
|
BestSeller int `json:"bestSeller"` //畅销品 0不是 1是
|
||||||
Video string `json:"video"` //商品视频地址
|
Video string `json:"video"` //商品视频地址
|
||||||
VideoID string `orm:"column(video_id)" json:"videoID"` //商品视频美团ID
|
VideoID string `orm:"column(video_id)" json:"videoID"` //商品视频美团ID
|
||||||
|
TiktokAttribute string `orm:"column(tiktok_attribute);size(512)" json:"tiktok_attribute"` //抖音分类属性的存储
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*SkuName) TableUnique() [][]string {
|
func (*SkuName) TableUnique() [][]string {
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
package tiktok_store
|
package tiktok_store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
"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_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_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_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"
|
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_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"
|
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"
|
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
@@ -308,12 +305,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
|
|
||||||
// spec_prices
|
// spec_prices
|
||||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
||||||
// ProductFormatNew 获取商品属性
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
param.ProductFormatNew = productFormatNew
|
|
||||||
|
|
||||||
// 获取品牌
|
// 获取品牌
|
||||||
param.StandardBrandId, err = api.GetSkuBrand(param.CategoryLeafId)
|
param.StandardBrandId, err = api.GetSkuBrand(param.CategoryLeafId)
|
||||||
@@ -324,6 +316,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
||||||
var tiktokResultProductId int64 = 0
|
var tiktokResultProductId int64 = 0
|
||||||
if _, err = api.GetSkuDetailLocalID("", param.OuterProductId); err != nil { // 线上不存在创建
|
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) // 创建主商品
|
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
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) // 运费模板
|
temp, err := dao.QueryStoreBindInfo(storeDetail.ID)
|
||||||
if err != nil {
|
if err != nil || temp == nil || temp.TemplateID == 0 {
|
||||||
return nil, err
|
// 运费模板
|
||||||
|
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.MainProductId = tiktokResultProductId
|
||||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
|
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)
|
param.StoreId = utils.Str2Int64(vendorStoreID)
|
||||||
|
globals.SugarLogger.Debugf("============CreateStoreCommodity:%s", utils.Format4Output(param, false))
|
||||||
// 抖店创建子商品
|
// 抖店创建子商品
|
||||||
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
tiktokResultChildren, err := api.CreateStoreCommodity(param)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -413,12 +424,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
|
|
||||||
// spec_prices
|
// spec_prices
|
||||||
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, utils.Str2Int64(storeSku.VendorSkuID), storeSku)
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, utils.Str2Int64(storeSku.VendorSkuID), storeSku)
|
||||||
// ProductFormatNew 获取商品属性
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
||||||
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
param.ProductFormatNew = productFormatNew
|
|
||||||
|
|
||||||
// 获取品牌
|
// 获取品牌
|
||||||
//brandID, err := api.GetSkuBrand(param.CategoryLeafId)
|
//brandID, err := api.GetSkuBrand(param.CategoryLeafId)
|
||||||
@@ -465,54 +471,6 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
return failedList, err
|
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) {
|
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
if globals.EnableDdStoreWrite {
|
if globals.EnableDdStoreWrite {
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
|
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_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"
|
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
||||||
"git.rosy.net.cn/baseapi/utils"
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
@@ -14,10 +17,53 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 获取运费模板id,运费模板不存在则创建
|
// CreateSaleTemp 创建限售模板
|
||||||
func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao.StoreDetail) (int64, error) {
|
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
||||||
// todo 获取本地数据模板
|
// 获取限售模板
|
||||||
|
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))
|
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
|
||||||
if freightId == 0 {
|
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]),
|
ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[0:2]),
|
||||||
ProductCity: int64(storeDetail.CityCode),
|
ProductCity: int64(storeDetail.CityCode),
|
||||||
CalculateType: 2,
|
CalculateType: 2,
|
||||||
TransferType: 1, // 快递
|
TransferType: 1, // 快递方式-1.快递 目前仅支持1
|
||||||
RuleType: 1,
|
RuleType: 2, // 模板类型-0:阶梯计价 1:固定运费 2:卖家包邮 3:货到付款
|
||||||
FixedAmount: 500,
|
},
|
||||||
|
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 {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@@ -52,37 +126,31 @@ func GetDeliveryTemp(api *tiktokShop.API, vendorStoreID string, storeDetail *dao
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetProductFormatNew 获取物品属性
|
// 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)
|
category, err := getAPI(vendorOrgCode, 0, "").GetCatePropertyV2(categoryLeftId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
format := make(map[string][]*tiktokShop.ProductFormatNewList, 0)
|
return category, nil
|
||||||
for _, v := range category.Data.Data {
|
//format := make(map[string][]*tiktokShop.ProductFormatNewList, 0)
|
||||||
if len(v.Options) == 0 {
|
//for _, v := range category.Data.Data {
|
||||||
formateNew := &tiktokShop.ProductFormatNewList{
|
// if v.Required != 1 { // 必填属性必须填写
|
||||||
Value: 0,
|
// continue
|
||||||
Name: "暂不支持",
|
// }
|
||||||
DiyType: 1,
|
// for _, d := range v.Options {
|
||||||
}
|
// formateNew := &tiktokShop.ProductFormatNewList{
|
||||||
format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
// Value: utils.Str2Int64(d.Value),
|
||||||
} else {
|
// Name: d.Name,
|
||||||
for _, d := range v.Options {
|
// DiyType: v.DiyType,
|
||||||
formateNew := &tiktokShop.ProductFormatNewList{
|
// }
|
||||||
Value: utils.Str2Int64(d.Value),
|
// format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
||||||
Name: d.Name,
|
// }
|
||||||
DiyType: v.DiyType,
|
//}
|
||||||
}
|
//productFormatNew, err := json.Marshal(format)
|
||||||
format[utils.Int64ToStr(v.PropertyId)] = append(format[utils.Int64ToStr(v.CategoryId)], formateNew)
|
//if err != nil {
|
||||||
}
|
// return "", err
|
||||||
}
|
//}
|
||||||
|
//return string(productFormatNew), nil
|
||||||
}
|
|
||||||
productFormatNew, err := json.Marshal(format)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(productFormatNew), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTiktokImgList 获取抖音图片链接
|
// GetTiktokImgList 获取抖音图片链接
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||||
"git.rosy.net.cn/jx-callback/business/model"
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/partner/purchase/tiktok_store"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"github.com/astaxie/beego/server/web"
|
"github.com/astaxie/beego/server/web"
|
||||||
)
|
)
|
||||||
@@ -736,6 +737,21 @@ func (c *SkuController) GetSkuNamesNew() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Title 根据分类id获取平台属性值
|
||||||
|
// @Description 根据分类id获取平台属性值
|
||||||
|
// @Param token header string true "认证token"
|
||||||
|
// @Param categoryId query int64 false "抖音分类id"
|
||||||
|
// @Param vendorOrgCode query string false "默认的平台id(现在是测试门店id/后面改成京西的id)"
|
||||||
|
// @Success 200 {object} controllers.CallResult
|
||||||
|
// @Failure 200 {object} controllers.CallResult
|
||||||
|
// @router /GetTiktokCategoryValue [get]
|
||||||
|
func (c *SkuController) GetTiktokCategoryValue() {
|
||||||
|
c.callGetTiktokCategoryValue(func(params *tSkuGetTiktokCategoryValueParams) (interface{}, string, error) {
|
||||||
|
data, err := tiktok_store.GetProductFormatNew(int64(params.CategoryId), params.VendorOrgCode)
|
||||||
|
return data, "", err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// @Title 更新美团到京东分类映射
|
// @Title 更新美团到京东分类映射
|
||||||
// @Description 更新美团到京东分类映射
|
// @Description 更新美团到京东分类映射
|
||||||
// @Param token header string true "认证token"
|
// @Param token header string true "认证token"
|
||||||
|
|||||||
@@ -1845,6 +1845,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: nil})
|
Params: nil})
|
||||||
|
|
||||||
|
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
|
web.ControllerComments{
|
||||||
|
Method: "GetTiktokCategoryValue",
|
||||||
|
Router: `/GetTiktokCategoryValue`,
|
||||||
|
AllowHTTPMethods: []string{"get"},
|
||||||
|
MethodParams: param.Make(),
|
||||||
|
Filters: nil,
|
||||||
|
Params: nil})
|
||||||
|
|
||||||
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"],
|
||||||
web.ControllerComments{
|
web.ControllerComments{
|
||||||
Method: "UpdateMtCatToJd",
|
Method: "UpdateMtCatToJd",
|
||||||
|
|||||||
Reference in New Issue
Block a user