This commit is contained in:
邹宗楠
2022-12-12 09:33:24 +08:00
parent cec915fda9
commit 632c96f059
14 changed files with 432 additions and 89 deletions

View File

@@ -209,6 +209,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
if err = getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID).DeleteStoreCommodity(utils.Str2Int64(v.VendorSkuID)); err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "删除主商品")...)
}
dao.DeleteThingToTiktokMapList(model.VendorIDDD, v.VendorMainId)
}
}
if len(failedList) > 0 {
@@ -282,28 +283,29 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
for _, v := range storeSkuList {
// 更新主品 (暂不支持渠道主商品)
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
// Price: v.VendorPrice,
// SkuId: utils.Str2Int64(v.VendorSkuAttrId),
// ProductId: utils.Str2Int64(v.VendorMainId),
//})
//if err != nil {
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格异常")...)
//} else {
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格正常")...)
//}
// 更新子品
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
Price: v.VendorPrice,
SkuId: utils.Str2Int64(v.VendorSonSkuID),
ProductId: utils.Str2Int64(v.VendorSkuID),
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
ProductId: utils.Str2Int64(v.VendorMainId),
})
if err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格异常")...)
} else {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格正常")...)
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新主品价格异常")...)
}
// 更新子品
if _, err := api.BatchApplyStoreProductPrice(utils.Str2Int64(v.VendorMainId)); err != nil {
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "同步子品价格异常")...)
}
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
// Price: v.VendorPrice,
// SkuId: utils.Str2Int64(v.VendorSonSkuID),
// ProductId: utils.Str2Int64(v.VendorSkuID),
//})
//if err != nil {
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格异常")...)
//} else {
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新价格正常")...)
//}
}
if len(failedList) > 0 {

View File

@@ -14,6 +14,7 @@ import (
product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/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"
superm_product_batchRedistributeStoreProduct_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/superm_product_batchRedistributeStoreProduct/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"
@@ -134,7 +135,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
continue
}
param := &product_addV2_request.ProductAddV2Param{
Name: utils.LimitUTF8StringLen(storeSku.SkuName, mtwmapi.MaxSkuNameCharCount*2),
Name: utils.LimitUTF8StringLen(storeSku.SkuName, 90),
PayType: tiktokShop.TiktokPayType1,
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
Weight: utils.Int2Float64(storeSku.Weight),
@@ -151,9 +152,9 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
}
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
if len(param.Name) < 23 {
param.Name += " 推荐产品 "
param.Name += "【惊喜到家】"
}
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
param.Name = param.Name[0:90]
@@ -162,7 +163,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
// 获取上传图,商品轮播图
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
if err != nil {
return nil, err
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
continue
}
param.Pic = img
param.Description = detailImg
@@ -173,10 +175,15 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
} else if len(param.Pic) != 0 { // 自动推导分类id
param.CategoryLeafId = api.GetRecommendCategory(strings.Split(img, "|"))
}
if storeSku.VendorVendorCatID != 0 && param.CategoryLeafId == 0 {
param.CategoryLeafId = storeSku.VendorVendorCatID
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
// 但是不太实用,导致商品类目错误被暂停营业等
//if storeSku.VendorVendorCatID != 0 && param.CategoryLeafId == 0 {
// param.CategoryLeafId = storeSku.VendorVendorCatID
//}
if param.CategoryLeafId == 0 {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
continue
}
// 是否支持七天无理由
if api.GetProductUpdateRule(param.CategoryLeafId) {
param.Supply7dayReturn = 1
@@ -196,43 +203,14 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
param.ProductFormatNew = storeSku.TiktokAttribute
} else {
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
if err != nil {
return nil, err
}
}
// 获取品牌
//param.StandardBrandId, err = api.GetSkuBrand(param.CategoryLeafId)
//if err != nil {
// return nil, err
//}
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
var tiktokResultProductId int64 = 0
// 获取本地存储映射关系
localThing, err := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID))
if len(localThing) == 0 { // 线上不存在创建
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
}
tiktokResultProductId = tiktokResult.ProductId
var attrId []string
for _, v := range tiktokResult.Sku {
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
}
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
err = dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId)
} else {
storeSku.VendorMainId = localThing[0].VendorThingID
storeSku.VendorSkuAttrId = localThing[0].Remark // 属性id skuID
tiktokResultProductId = utils.Str2Int64(localThing[0].VendorThingID)
}
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
// 创建子商品
temp, err := dao.QueryStoreBindInfo(storeDetail.Store.ID)
if err != nil || temp == nil || temp.ID == 0 {
@@ -283,12 +261,33 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
}
}
param.MainProductId = tiktokResultProductId
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
var tiktokResultProductId int64 = 0
// 获取本地存储映射关系,获取本地主商品id是否存在
localThing, err := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID))
if len(localThing) == 0 { // 线上不存在创建
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
}
param.StoreId = utils.Str2Int64(vendorStoreID)
// 抖店创建子商品
tiktokResultChildren, err := api.CreateStoreCommodity(param)
tiktokResultProductId = tiktokResult.ProductId
var attrId []string
for _, v := range tiktokResult.Sku {
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
}
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
err = dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId)
} else {
storeSku.VendorMainId = localThing[0].VendorThingID
storeSku.VendorSkuAttrId = localThing[0].Remark // 属性id skuID
tiktokResultProductId = utils.Str2Int64(localThing[0].VendorThingID)
}
// 上面说明要么已经创建了主商品,要么已经重新创建了主商品,将该商品同步到子门店就可以了.
childrenProductId, err := api.CreateSubProduct(param.MainProductId, utils.Str2Int64(vendorStoreID))
if err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
if storeSku.VendorSkuID == "" {
@@ -296,13 +295,29 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
}
continue
}
var attrId2 []string
for _, v := range tiktokResultChildren.Sku {
attrId2 = append(attrId2, utils.Int64ToStr(v.SkuId))
}
storeSku.VendorSonSkuID = strings.Join(attrId2, ",") // 属性id skuID
storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId) // 子商品主id
storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // 属性id skuID
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
//param.MainProductId = tiktokResultProductId
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResultProductId, storeSku)
//
//param.StoreId = utils.Str2Int64(vendorStoreID)
//// 抖店创建子商品
//tiktokResultChildren, err := api.CreateStoreCommodity(param)
//if err != nil {
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
// if storeSku.VendorSkuID == "" {
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
// }
// continue
//}
//var attrId2 []string
//for _, v := range tiktokResultChildren.Sku {
// attrId2 = append(attrId2, utils.Int64ToStr(v.SkuId))
//}
//storeSku.VendorSonSkuID = strings.Join(attrId2, ",") // 属性id skuID
//storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId) // 子商品主id
//storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
}
} else {
syncType = "更新商品"
@@ -312,7 +327,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
}
// 更新商品(目前只更新子商品,主商品暂不支持)
param := &product_editV2_request.ProductEditV2Param{
Name: storeSku.Name,
Name: utils.LimitUTF8StringLen(storeSku.SkuName, 90),
PayType: tiktokShop.TiktokPayType1,
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
Weight: utils.Int2Float64(storeSku.Weight),
@@ -334,7 +349,10 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
}
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + storeSku.SpecUnit + " "
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
if len(param.Name) < 23 {
param.Name += "【惊喜到家】"
}
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
param.Name = param.Name[0:90]
}
@@ -342,7 +360,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
// 获取上传图,商品轮播图
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
if err != nil {
return nil, err
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
continue
}
param.Pic = img
param.Description = detailImg
@@ -360,7 +379,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
if err != nil {
return nil, err
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
continue
}
} else {
param.ProductFormatNew = storeSku.TiktokAttribute
@@ -381,28 +401,40 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
param.ProductId = utils.Str2Int64(storeSku.VendorMainId)
param.MainProductId = utils.Str2Int64(storeSku.VendorMainId)
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, param.MainProductId, storeSku)
param.ProductId = utils.Str2Int64(storeSku.VendorSkuID)
param.StoreId = utils.Str2Int64(vendorStoreID)
if err := api.EditStoreCommodity(param); err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
continue
}
param.ProductId = utils.Str2Int64(storeSku.VendorSkuID)
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, tiktokResult.ProductId, storeSku)
// 获取门店限售模板
//saleLimitId, err := CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
//if err != nil {
// return nil, err
//}
//param.SaleLimitId = saleLimitId
param.StoreId = utils.Str2Int64(vendorStoreID)
// 抖店创建商品
if err := api.EditStoreCommodity(param); err != nil {
// 门店商品同步,先删除同步商品,在重新分配该商品
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
MainProductId: param.MainProductId,
AddStoreIds: nil,
DelStoreIds: []int64{param.StoreId},
}); err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
continue
}
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
MainProductId: param.MainProductId,
AddStoreIds: []int64{param.StoreId},
DelStoreIds: nil,
}); err != nil {
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
continue
}
//if err := api.EditStoreCommodity(param); err != nil {
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
// continue
//}
}
return
}