|
|
|
|
@@ -1,16 +1,15 @@
|
|
|
|
|
package tiktok_store
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
|
|
|
|
freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"
|
|
|
|
|
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"
|
|
|
|
|
shop_bindStoreFreight_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/shop_bindStoreFreight/request"
|
|
|
|
|
sku_editPrice_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/sku_editPrice/request"
|
|
|
|
|
tiktokShop "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
|
|
|
|
|
"regexp"
|
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
|
|
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
|
|
|
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
|
|
|
|
|
@@ -20,6 +19,8 @@ import (
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/partner"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/business/partner/putils"
|
|
|
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
|
|
|
"math/rand"
|
|
|
|
|
"regexp"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
@@ -245,6 +246,8 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
|
|
|
|
// p.createOrUpdateStoreSkus(ctx, storeID, vendorStoreID, duplicateStoreSkuList(storeSkuList, i+1), true)
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
globals.SugarLogger.Debugf("============CreateStoreSkus===============%s", utils.Format4Output(failedList, false))
|
|
|
|
|
globals.SugarLogger.Debugf("============CreateStoreSkus===============%s", err)
|
|
|
|
|
return failedList, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -253,17 +256,44 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
|
|
|
|
|
func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isCreate bool) (failedList []*partner.StoreSkuInfoWithErr, err error) {
|
|
|
|
|
var syncType string
|
|
|
|
|
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDDD, "")
|
|
|
|
|
api := getAPI(storeSkuList[0].VendorOrgCode, storeID, vendorStoreID)
|
|
|
|
|
freightId, err := api.GetStoreFreight(int64(storeID))
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
api := getAPI(storeDetail.VendorOrgCode, storeID, vendorStoreID)
|
|
|
|
|
globals.SugarLogger.Debug("=============", storeDetail.VendorOrgCode)
|
|
|
|
|
globals.SugarLogger.Debugf("api===============%v", utils.Format4Output(api, false))
|
|
|
|
|
freightId, _ := api.GetStoreBindTemp(utils.Str2Int64(vendorStoreID))
|
|
|
|
|
if freightId == 0 {
|
|
|
|
|
// 创建门店运费模板
|
|
|
|
|
temp, err := api.FreightTemplateCreate(&freightTemplate_create_request.FreightTemplateCreateParam{
|
|
|
|
|
Template: &freightTemplate_create_request.Template{
|
|
|
|
|
TemplateName: storeDetail.Name + "_" + utils.Int64ToStr(rand.Int63n(int64(storeID))) + "_系统模板",
|
|
|
|
|
ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[0:2]),
|
|
|
|
|
ProductCity: int64(storeDetail.CityCode),
|
|
|
|
|
CalculateType: 2,
|
|
|
|
|
TransferType: 1, // 快递
|
|
|
|
|
RuleType: 1,
|
|
|
|
|
FixedAmount: 500,
|
|
|
|
|
},
|
|
|
|
|
Columns: nil,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
// 绑定门店运费模板
|
|
|
|
|
err = api.BindFreightTemplate(&shop_bindStoreFreight_request.ShopBindStoreFreightParam{
|
|
|
|
|
StoreId: utils.Str2Int64(vendorStoreID),
|
|
|
|
|
FreightId: temp.TemplateId,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
freightId = temp.TemplateId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if isCreate {
|
|
|
|
|
syncType = "创建商品"
|
|
|
|
|
for _, storeSku := range storeSkuList {
|
|
|
|
|
// 创建商品
|
|
|
|
|
param := &product_addV2_request.ProductAddV2Param{
|
|
|
|
|
CategoryLeafId: utils.Str2Int64(storeSku.VendorCatID),
|
|
|
|
|
CategoryLeafId: utils.Str2Int64(storeSku.SkuVendorMapCatID),
|
|
|
|
|
Name: storeSku.Name,
|
|
|
|
|
PayType: tiktokShop.TiktokPayType1,
|
|
|
|
|
ReduceType: tiktokShop.SkuReduceTypePayMakeOrder,
|
|
|
|
|
@@ -284,13 +314,13 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取上传图,商品轮播图
|
|
|
|
|
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
|
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
param.Pic = img
|
|
|
|
|
// 商品详情图
|
|
|
|
|
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeSku.DescImg)
|
|
|
|
|
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
@@ -308,6 +338,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
|
param.SpecPrices = GetSpecPrices(param.Specs, storeSku)
|
|
|
|
|
// ProductFormatNew
|
|
|
|
|
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
|
|
|
|
globals.SugarLogger.Debug("创建=============productFormatNew", productFormatNew)
|
|
|
|
|
globals.SugarLogger.Debug("创建=============productFormatNew err", err)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
@@ -348,13 +380,13 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取上传图,商品轮播图
|
|
|
|
|
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
|
img, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
param.Pic = img
|
|
|
|
|
// 商品详情图
|
|
|
|
|
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeSku.DescImg)
|
|
|
|
|
img2, err := GetTiktokImgList(utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
@@ -372,6 +404,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
|
param.SpecPrices = GetSpecPrices(param.Specs, storeSku)
|
|
|
|
|
// ProductFormatNew
|
|
|
|
|
productFormatNew, err := GetProductFormatNew(param.CategoryLeafId, storeDetail.VendorOrgCode)
|
|
|
|
|
globals.SugarLogger.Debug("更新=============productFormatNew", productFormatNew)
|
|
|
|
|
globals.SugarLogger.Debug("更新=============productFormatNew err", err)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
@@ -468,36 +502,44 @@ 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) {
|
|
|
|
|
api := getAPI(vendorOrgCode, storeID, vendorStoreID)
|
|
|
|
|
for _, v := range storeSkuList {
|
|
|
|
|
param := &product_editV2_request.ProductEditV2Param{}
|
|
|
|
|
param.ProductId = utils.Str2Int64(v.VendorSkuID)
|
|
|
|
|
param.Specs = "净重|" + fmt.Sprintf("%f", v.SpecQuality) + v.SpecUnit
|
|
|
|
|
|
|
|
|
|
skuSize := make([]*tiktokShop.SpecDetailList, 0, 0)
|
|
|
|
|
detail1 := strings.Split(param.Specs, "^")
|
|
|
|
|
name1 := strings.Split(strings.Split(detail1[0], "|")[1], ",")
|
|
|
|
|
for i := 0; i < len(name1); i++ {
|
|
|
|
|
sku := &tiktokShop.SpecDetailList{
|
|
|
|
|
SpecDetailName1: name1[i],
|
|
|
|
|
StockNum: v.Stock,
|
|
|
|
|
Price: int(v.VendorPrice),
|
|
|
|
|
Code: utils.Int2Str(v.SkuID),
|
|
|
|
|
StepStockNum: 0,
|
|
|
|
|
SupplierID: "",
|
|
|
|
|
OuterSkuID: utils.Int2Str(v.NameID),
|
|
|
|
|
DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
|
|
|
|
{InfoType: "weight", InfoUnit: v.SpecUnit, InfoValue: fmt.Sprintf("%f", v.SpecQuality)},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
skuSize = append(skuSize, sku)
|
|
|
|
|
//param := &product_editV2_request.ProductEditV2Param{}
|
|
|
|
|
//param.ProductId = utils.Str2Int64(v.VendorSkuID)
|
|
|
|
|
//param.Specs = "净重|" + fmt.Sprintf("%f", v.SpecQuality) + v.SpecUnit
|
|
|
|
|
//
|
|
|
|
|
//skuSize := make([]*tiktokShop.SpecDetailList, 0, 0)
|
|
|
|
|
//detail1 := strings.Split(param.Specs, "^")
|
|
|
|
|
//name1 := strings.Split(strings.Split(detail1[0], "|")[1], ",")
|
|
|
|
|
//for i := 0; i < len(name1); i++ {
|
|
|
|
|
// sku := &tiktokShop.SpecDetailList{
|
|
|
|
|
// SpecDetailName1: name1[i],
|
|
|
|
|
// StockNum: v.Stock,
|
|
|
|
|
// Price: int(v.VendorPrice),
|
|
|
|
|
// Code: utils.Int2Str(v.SkuID),
|
|
|
|
|
// StepStockNum: 0,
|
|
|
|
|
// SupplierID: "",
|
|
|
|
|
// OuterSkuID: utils.Int2Str(v.NameID),
|
|
|
|
|
// DeliveryInfos: []*tiktokShop.DeliveryInfos{
|
|
|
|
|
// {InfoType: "weight", InfoUnit: v.SpecUnit, InfoValue: fmt.Sprintf("%f", v.SpecQuality)},
|
|
|
|
|
// },
|
|
|
|
|
// }
|
|
|
|
|
// skuSize = append(skuSize, sku)
|
|
|
|
|
//}
|
|
|
|
|
//data, _ := json.Marshal(skuSize)
|
|
|
|
|
//param.SpecPrices = string(data)
|
|
|
|
|
param := &sku_editPrice_request.SkuEditPriceParam{
|
|
|
|
|
Price: v.VendorPrice,
|
|
|
|
|
Code: "",
|
|
|
|
|
SkuId: 0,
|
|
|
|
|
OutSkuId: int64(v.SkuID),
|
|
|
|
|
ProductId: utils.Str2Int64(v.VendorSkuID),
|
|
|
|
|
//OutProductId: int64(v.SkuID),
|
|
|
|
|
}
|
|
|
|
|
data, _ := json.Marshal(skuSize)
|
|
|
|
|
param.SpecPrices = string(data)
|
|
|
|
|
|
|
|
|
|
err := api.EditStoreCommodity(param)
|
|
|
|
|
err := api.EditPrice(param)
|
|
|
|
|
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], "更新价格异常")...)
|
|
|
|
|
} 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], "更新价格正常")...)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|