1
This commit is contained in:
@@ -93,9 +93,9 @@ const (
|
|||||||
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
|
SyncFlagSeqMask = 64 // 门店商家分类下的排序顺序
|
||||||
|
|
||||||
// combine
|
// combine
|
||||||
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask
|
SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask | SyncFlagStockMask // 同步标志存储仅Sku掩码
|
||||||
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask
|
SyncFlagStoreSkuModifiedMask = SyncFlagStoreSkuOnlyMask | SyncFlagModifiedMask // 同步标志存储Sku修改掩码
|
||||||
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask
|
SyncFlagChangedMask = SyncFlagSpecMask | SyncFlagNewMask | SyncFlagDeletedMask | SyncFlagStoreSkuModifiedMask // 同步标志已更改掩码
|
||||||
)
|
)
|
||||||
|
|
||||||
func IsSyncStatusNew(syncStatus int8) bool {
|
func IsSyncStatusNew(syncStatus int8) bool {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
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_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request"
|
product_listV2_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/request"
|
||||||
@@ -76,62 +75,6 @@ func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
|
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
|
||||||
//level := 1
|
|
||||||
//if storeCat.ParentCatName != "" {
|
|
||||||
// level = 2
|
|
||||||
//}
|
|
||||||
//originName := ""
|
|
||||||
//catName := storeCat.Name
|
|
||||||
//catCode := storeCat.ID
|
|
||||||
//
|
|
||||||
//subCatName := ""
|
|
||||||
//subCatCode := 0
|
|
||||||
//if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 {
|
|
||||||
// // 修改一级分类
|
|
||||||
// originName = storeCat.VendorCatID
|
|
||||||
//}
|
|
||||||
//if level == 2 { // 二级分类
|
|
||||||
// // 创建二级分类
|
|
||||||
// originName = storeCat.ParentVendorCatID
|
|
||||||
// catName = storeCat.ParentCatName
|
|
||||||
// catCode = storeCat.ParentID
|
|
||||||
// subCatName = storeCat.Name
|
|
||||||
// subCatCode = storeCat.ID
|
|
||||||
// if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 {
|
|
||||||
// // 修改二级分类
|
|
||||||
// originName = storeCat.VendorCatID
|
|
||||||
// catName = storeCat.Name
|
|
||||||
// catCode = storeCat.ID
|
|
||||||
// subCatName = ""
|
|
||||||
// subCatCode = 0
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//if catName == "" {
|
|
||||||
// panic("catName is empty")
|
|
||||||
//}
|
|
||||||
//catName = utils.FilterEmoji(catName)
|
|
||||||
//subCatName = utils.FilterEmoji(subCatName)
|
|
||||||
// vendorStoreID, originName, catCode, catName, subCatCode, subCatName, storeCat.Seq)
|
|
||||||
//if globals.EnableMtwmStoreWrite {
|
|
||||||
// // err = api.MtwmAPI.RetailCatUpdate2(vendorStoreID, tryCatName2Code(originName), originName, catCode2Str(catCode), catName, catCode2Str(subCatCode), subCatName, storeCat.Seq)
|
|
||||||
// param4Update := &mtwmapi.Param4UpdateCat{
|
|
||||||
// CategoryCodeOrigin: tryCatName2Code(originName),
|
|
||||||
// CategoryNameOrigin: originName,
|
|
||||||
// CategoryCode: catCode2Str(catCode),
|
|
||||||
// SecondaryCategoryCode: catCode2Str(subCatCode),
|
|
||||||
// SecondaryCategoryName: subCatName,
|
|
||||||
// Sequence: storeCat.Seq,
|
|
||||||
// }
|
|
||||||
// err = getAPI(storeCat.VendorOrgCode, storeID, vendorStoreID).RetailCatUpdate(vendorStoreID, catName, param4Update)
|
|
||||||
// if storeCat.CatSyncStatus&model.SyncFlagNewMask == 0 && p.IsErrCategoryNotExist(err) && originName != "" { // 修改分类名,但分类不存在
|
|
||||||
// storeCat.CatSyncStatus |= model.SyncFlagNewMask
|
|
||||||
// err = p.CreateStoreCategory(ctx, storeID, vendorStoreID, storeCat)
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//if err == nil {
|
|
||||||
// // storeCat.VendorCatID = utils.FilterEmoji(storeCat.Name)
|
|
||||||
// storeCat.VendorCatID = utils.Int2Str(storeCat.ID)
|
|
||||||
//}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,23 +83,6 @@ func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID in
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) {
|
func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string, level int) (err error) {
|
||||||
//if false {
|
|
||||||
// if globals.EnableMtwmStoreWrite {
|
|
||||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatDelete(vendorStoreID, tryCatName2Code(vendorCatID), vendorCatID)
|
|
||||||
// }
|
|
||||||
//} else {
|
|
||||||
// var catCodes []string
|
|
||||||
// if catCode := tryCatName2Code(vendorCatID); catCode != "" {
|
|
||||||
// catCodes = []string{catCode}
|
|
||||||
// }
|
|
||||||
// if globals.EnableMtwmStoreWrite {
|
|
||||||
// if level == 1 {
|
|
||||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatSkuBatchDelete2(ctx.GetTrackInfo(), vendorStoreID, catCodes, []string{vendorCatID}, nil, nil, nil)
|
|
||||||
// } else {
|
|
||||||
// err = getAPI(getStoreVendorOrgCode(storeID), storeID, vendorStoreID).RetailCatSkuBatchDelete2(ctx.GetTrackInfo(), vendorStoreID, nil, nil, catCodes, []string{vendorCatID}, nil)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,22 +107,12 @@ func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
|
|||||||
// }
|
// }
|
||||||
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, false)
|
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, false)
|
||||||
// if err == nil && vendorStoreID == specialStoreID {
|
|
||||||
// for i := 0; i < 2; i++ {
|
|
||||||
// p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, duplicateStoreSkuList(storeSkuList, i+1), true)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
return failedList, err
|
return failedList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateStoreSkus 门店创建商品
|
// CreateStoreSkus 门店创建商品
|
||||||
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, true)
|
failedList, err = p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, storeSkuList, true)
|
||||||
//if err == nil && vendorStoreID == specialStoreID {
|
|
||||||
// for i := 0; i < 2; i++ {
|
|
||||||
// p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, duplicateStoreSkuList(storeSkuList, i+1), true)
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
return failedList, err
|
return failedList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +123,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err = getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID).DeleteStoreCommodity(utils.Str2Int64(v.VendorSkuID)); err != nil {
|
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], "删除主商品")...)
|
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "删除子商品")...)
|
||||||
}
|
}
|
||||||
dao.DeleteThingToTiktokMapList(model.VendorIDDD, v.VendorMainId)
|
dao.DeleteThingToTiktokMapList(model.VendorIDDD, v.VendorMainId)
|
||||||
}
|
}
|
||||||
@@ -224,16 +140,16 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
|||||||
if status == model.SkuStatusNormal { // 下架
|
if status == model.SkuStatusNormal { // 下架
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
// 子品商品id获取skuId
|
// 子品商品id获取skuId
|
||||||
childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
//childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
//}
|
||||||
if len(childrenSku.SpecPrices) <= 0 {
|
//if len(childrenSku.SpecPrices) <= 0 {
|
||||||
return nil, errors.New("子品商品详情获取失败")
|
// return nil, errors.New("子品商品详情获取失败")
|
||||||
}
|
//}
|
||||||
|
|
||||||
param := &sku_syncStock_request.SkuSyncStockParam{
|
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
SkuId: childrenSku.SpecPrices[0].SkuId,
|
//SkuId: childrenSku.SpecPrices[0].SkuId,
|
||||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||||
Incremental: false,
|
Incremental: false,
|
||||||
IdempotentId: "",
|
IdempotentId: "",
|
||||||
@@ -241,23 +157,22 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
|||||||
OutWarehouseId: vendorStoreID,
|
OutWarehouseId: vendorStoreID,
|
||||||
}
|
}
|
||||||
if err := api.UpdateSkuStock(param); err != nil {
|
if err := api.UpdateSkuStock(param); err != nil {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品,库存值最大化.%s", utils.Format4Output(param, false)))...)
|
||||||
} else {
|
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} else { // 上架
|
} else { // 上架
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
// 子品商品id获取skuId
|
// 子品商品id获取skuId
|
||||||
childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
//childrenSku, err := api.GetSkuDetail(v.VendorSkuID, "")
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
//}
|
||||||
if len(childrenSku.SpecPrices) <= 0 {
|
//if len(childrenSku.SpecPrices) <= 0 {
|
||||||
return nil, errors.New("子品商品详情获取失败")
|
// return nil, errors.New("子品商品详情获取失败")
|
||||||
}
|
//}
|
||||||
param := &sku_syncStock_request.SkuSyncStockParam{
|
param := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
SkuId: childrenSku.SpecPrices[0].SkuId,
|
//SkuId: childrenSku.SpecPrices[0].SkuId,
|
||||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||||
Incremental: false,
|
Incremental: false,
|
||||||
IdempotentId: "",
|
IdempotentId: "",
|
||||||
@@ -265,9 +180,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
|||||||
OutWarehouseId: vendorStoreID,
|
OutWarehouseId: vendorStoreID,
|
||||||
}
|
}
|
||||||
if err := api.UpdateSkuStock(param); err != nil {
|
if err := api.UpdateSkuStock(param); err != nil {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品异常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("下架商品,库存值为0失败.%s", utils.Format4Output(param, false)))...)
|
||||||
} else {
|
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架商品正常,添加固定库存.%s", utils.Format4Output(param, false)))...)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,20 +195,20 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr
|
|||||||
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
// 更新主品 (暂不支持渠道主商品)
|
// 更新子品价格
|
||||||
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||||
Price: v.VendorPrice,
|
Price: v.VendorPrice,
|
||||||
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
//SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
||||||
ProductId: utils.Str2Int64(v.VendorMainId),
|
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
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 {
|
//if _, err := api.BatchApplyStoreProductPrice(utils.Str2Int64(v.VendorMainId)); err != nil {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "同步子品价格异常")...)
|
// failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "同步子品价格异常")...)
|
||||||
}
|
//}
|
||||||
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
//err = api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||||
// Price: v.VendorPrice,
|
// Price: v.VendorPrice,
|
||||||
// SkuId: utils.Str2Int64(v.VendorSonSkuID),
|
// SkuId: utils.Str2Int64(v.VendorSonSkuID),
|
||||||
@@ -308,9 +221,9 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(failedList) > 0 {
|
//if len(failedList) > 0 {
|
||||||
err = nil
|
// err = nil
|
||||||
}
|
//}
|
||||||
return failedList, err
|
return failedList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,22 +231,25 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg
|
|||||||
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrgCode string, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
||||||
tiktokApi := getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID)
|
tiktokApi := getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID)
|
||||||
for _, v := range storeSkuList {
|
for _, v := range storeSkuList {
|
||||||
err := tiktokApi.UpdateSkuStock(&sku_syncStock_request.SkuSyncStockParam{
|
stockNum := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
//SkuId: utils.Str2Int64(v.VendorSkuAttrId),
|
||||||
ProductId: utils.Str2Int64(v.VendorSkuID),
|
ProductId: utils.Str2Int64(v.VendorSkuID),
|
||||||
Incremental: false,
|
Incremental: false,
|
||||||
IdempotentId: "",
|
IdempotentId: "",
|
||||||
StockNum: int64(v.Stock),
|
StockNum: int64(v.Stock),
|
||||||
OutWarehouseId: vendorStoreID,
|
OutWarehouseId: vendorStoreID,
|
||||||
})
|
}
|
||||||
if err != nil {
|
if stockNum.StockNum == 0 {
|
||||||
|
stockNum.StockNum = 99999
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tiktokApi.UpdateSkuStock(stockNum); err != nil {
|
||||||
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(v, err, storeID, model.VendorChineseNames[model.VendorIDDD], "更新库存错误")...)
|
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], "更新库存正常")...)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return p.UpdateStoreSkusPrice(ctx, vendorOrgCode, storeID, vendorStoreID, storeSkuList)
|
return failedList, err
|
||||||
|
//return p.UpdateStoreSkusPrice(ctx, vendorOrgCode, storeID, vendorStoreID, storeSkuList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
|
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ import (
|
|||||||
product_listV2_response "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/product_listV2/response"
|
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_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"
|
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"
|
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"
|
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"
|
||||||
@@ -178,7 +179,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
// param.CategoryLeafId = storeSku.VendorVendorCatID
|
// param.CategoryLeafId = storeSku.VendorVendorCatID
|
||||||
//}
|
//}
|
||||||
if param.CategoryLeafId == 0 {
|
if param.CategoryLeafId == 0 {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, errors.New("当前商品本地未设置抖音分类/抖音推荐分类查询错误"), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 是否支持七天无理由
|
// 是否支持七天无理由
|
||||||
@@ -201,14 +202,14 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
} else {
|
} else {
|
||||||
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
|
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
|
||||||
param.FreightId, param.SaleLimitId, err = getFreightIdAndSaleLimitId(api, db, storeDetail, vendorStoreID)
|
param.FreightId, param.SaleLimitId, err = getFreightIdAndSaleLimitId(api, db, storeDetail, vendorStoreID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,18 +224,19 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
globals.SugarLogger.Debugf("========result %s", utils.Format4Output(tiktokResult, false))
|
globals.SugarLogger.Debugf("========result %s", utils.Format4Output(tiktokResult, false))
|
||||||
globals.SugarLogger.Debugf("========err %s", utils.Format4Output(err, false))
|
globals.SugarLogger.Debugf("========err %s", utils.Format4Output(err, false))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "本地不存在,线上也不存在", model.ThingTypeSku, model.SyncFlagNewMask); err != nil {
|
if err := dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, "本地不存在,线上也不存在", model.ThingTypeSku, model.SyncFlagNewMask); err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
}
|
}
|
||||||
|
|
||||||
var attrId []string
|
var attrId []string
|
||||||
for _, v := range tiktokResult.Sku {
|
for _, v := range tiktokResult.Sku {
|
||||||
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
||||||
}
|
}
|
||||||
|
storeSku.SkuSyncStatus = model.SyncFlagNewMask
|
||||||
storeSku.VendorMainId = utils.Int64ToStr(tiktokResult.ProductId)
|
storeSku.VendorMainId = utils.Int64ToStr(tiktokResult.ProductId)
|
||||||
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
||||||
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品
|
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品
|
||||||
@@ -243,43 +245,51 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
// 本地不存在,线上存在.直接创建子商品保存本地同步记录
|
// 本地不存在,线上存在.直接创建子商品保存本地同步记录
|
||||||
var childrenProductId int64 = 0
|
var childrenProductId int64 = 0
|
||||||
if mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPass && mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPassNotPutOn {
|
if mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPass && mainOrderDetail.CheckStatus != tiktokShop.SkuCheckStatusPassNotPutOn {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, fmt.Errorf("主商品审核中或审核失败:[%d]", storeSku.SkuID), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, fmt.Errorf("主商品审核中或审核失败:[%d]", storeSku.SkuID), storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
childrenProductId, err = api.CreateSubProduct(mainOrderDetail.MainProductId, utils.Str2Int64(vendorStoreID))
|
childrenProductId, err = api.CreateSubProduct(mainOrderDetail.MainProductId, utils.Str2Int64(vendorStoreID))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
if storeSku.VendorSkuID == "" {
|
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), mainOrderDetail.ProductIdStr, storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId, model.ThingTypeSku, 0); err != nil {
|
if err := dao.CreateThingMap(int64(storeSku.SkuID), mainOrderDetail.ProductIdStr, storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId, model.ThingTypeSku, 0); err != nil {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
if storeSku.VendorSkuID == "" {
|
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
storeSku.VendorMainId = mainOrderDetail.ProductIdStr
|
storeSku.VendorMainId = mainOrderDetail.ProductIdStr
|
||||||
var attrId []string
|
var attrId []string
|
||||||
for _, v := range mainOrderDetail.SpecPrices {
|
for _, v := range mainOrderDetail.SpecPrices {
|
||||||
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
attrId = append(attrId, utils.Int64ToStr(v.SkuId))
|
||||||
}
|
}
|
||||||
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
||||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
if childrenProductId > 0 {
|
||||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||||
|
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||||
|
storeSku.SkuSyncStatus = 0
|
||||||
|
failedList = upDateChildrenPriceStockLaunch(api, storeSku, childrenProductId, vendorStoreID, syncType)
|
||||||
|
} else {
|
||||||
|
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||||
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID) // 子商品主id
|
||||||
|
storeSku.SkuSyncStatus = model.SyncFlagNewMask
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
globals.SugarLogger.Debugf("========result %s", "本地存在,直接创建子商品")
|
globals.SugarLogger.Debugf("========result %s", "本地存在,直接创建子商品")
|
||||||
// 主商品存在,直接同步子商品
|
// 主商品存在,直接同步子商品
|
||||||
childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID))
|
childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID))
|
||||||
if err != nil {
|
if err != nil || childrenProductId == 0 {
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
if storeSku.VendorSkuID == "" {
|
storeSku.SkuSyncStatus = model.SyncFlagNewMask
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||||
}
|
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||||
|
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 同步价格,库存,上架
|
||||||
|
failedList = upDateChildrenPriceStockLaunch(api, storeSku, childrenProductId, vendorStoreID, syncType)
|
||||||
|
storeSku.SkuSyncStatus = 0
|
||||||
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
||||||
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
||||||
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
||||||
@@ -355,34 +365,6 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// 门店商品同步,先删除同步商品,在重新分配该商品
|
|
||||||
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)
|
|
||||||
if err := dao.CreateThingMap(int64(storeSku.SkuID), storeSku.VendorMainId, storeDetail.VendorOrgCode+"|"+vendorStoreID, storeSku.VendorSkuAttrId, model.ThingTypeSku, model.SyncFlagNewMask); err != nil {
|
|
||||||
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
||||||
if storeSku.VendorSkuID == "" {
|
|
||||||
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -393,8 +375,33 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|||||||
return failedList, err
|
return failedList, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func createChildrenProduct() {
|
func upDateChildrenPriceStockLaunch(api *tiktokShop.API, storeSku *dao.StoreSkuSyncInfo, childrenProductId int64, vendorStoreID, syncType string) (failedList []*partner.StoreSkuInfoWithErr) {
|
||||||
|
// 同步价格
|
||||||
|
if err := api.EditPrice(&sku_editPrice_request.SkuEditPriceParam{
|
||||||
|
Price: storeSku.VendorPrice,
|
||||||
|
ProductId: childrenProductId,
|
||||||
|
}); err != nil {
|
||||||
|
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||||
|
}
|
||||||
|
// 同步库存
|
||||||
|
paramStock := &sku_syncStock_request.SkuSyncStockParam{
|
||||||
|
ProductId: childrenProductId,
|
||||||
|
Incremental: false,
|
||||||
|
IdempotentId: "",
|
||||||
|
StockNum: int64(storeSku.Stock),
|
||||||
|
OutWarehouseId: vendorStoreID,
|
||||||
|
}
|
||||||
|
if paramStock.StockNum == 0 {
|
||||||
|
paramStock.StockNum = 99999
|
||||||
|
}
|
||||||
|
if err := api.UpdateSkuStock(paramStock); err != nil {
|
||||||
|
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("子商品添加固定库存.%s", err.Error()))...)
|
||||||
|
}
|
||||||
|
// 上架
|
||||||
|
if err := api.LaunchProduct(childrenProductId); err != nil {
|
||||||
|
failedList = append(failedList, putils.GetErrMsg2FailedSingleList(storeSku, err, storeSku.StoreID, model.VendorChineseNames[model.VendorIDDD], fmt.Sprintf("上架子商品异常.%s", err.Error()))...)
|
||||||
|
}
|
||||||
|
return failedList
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFreightIdAndSaleLimitId(api *tiktokShop.API, db *dao.DaoDB, storeDetail *dao.StoreDetail, vendorStoreID string) (freightId, saleLimitId int64, err error) {
|
func getFreightIdAndSaleLimitId(api *tiktokShop.API, db *dao.DaoDB, storeDetail *dao.StoreDetail, vendorStoreID string) (freightId, saleLimitId int64, err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user