|
|
|
@@ -151,28 +151,20 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
PickupMethod: "0",
|
|
|
|
PickupMethod: "0",
|
|
|
|
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
|
|
|
|
OuterProductId: utils.Int2Str(storeSku.SkuID), // 本地skuId为外部商品id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
globals.SugarLogger.Debugf("=======================1")
|
|
|
|
|
|
|
|
globals.SugarLogger.Debugf("=======================param %s", utils.Format4Output(param, false))
|
|
|
|
|
|
|
|
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
|
|
|
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
|
|
|
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
|
|
|
|
param.Name += "【惊喜到家】"
|
|
|
|
if len(param.Name) < 23 {
|
|
|
|
|
|
|
|
param.Name += "【惊喜到家】"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
|
|
|
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
|
|
|
param.Name = param.Name[0:90]
|
|
|
|
param.Name = param.Name[0:90]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取上传图,商品轮播图
|
|
|
|
// 获取上传图,商品轮播图
|
|
|
|
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
img, detailImg, err := GetTiktokImgList(api, utils.Int2Str(storeSku.StoreID), storeDetail.VendorOrgCode, storeSku.DescImg, storeSku.ImgOrigin, storeSku.Img2, storeSku.Img3, storeSku.Img4, storeSku.Img5)
|
|
|
|
globals.SugarLogger.Debugf("=======================img %s", img)
|
|
|
|
|
|
|
|
globals.SugarLogger.Debugf("=======================detailImg %s", detailImg)
|
|
|
|
|
|
|
|
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)
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param.Pic = img
|
|
|
|
param.Pic = img
|
|
|
|
param.Description = detailImg
|
|
|
|
param.Description = detailImg
|
|
|
|
globals.SugarLogger.Debugf("=======================2")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 部分商品没有所属的分类,直接跳过!
|
|
|
|
// 部分商品没有所属的分类,直接跳过!
|
|
|
|
if storeSku.SkuVendorMapCatID != "" {
|
|
|
|
if storeSku.SkuVendorMapCatID != "" {
|
|
|
|
@@ -180,7 +172,6 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
} else if len(param.Pic) != 0 { // 自动推导分类id
|
|
|
|
} else if len(param.Pic) != 0 { // 自动推导分类id
|
|
|
|
param.CategoryLeafId = api.GetRecommendCategory(strings.Split(img, "|"))
|
|
|
|
param.CategoryLeafId = api.GetRecommendCategory(strings.Split(img, "|"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
globals.SugarLogger.Debugf("=======================3")
|
|
|
|
|
|
|
|
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
|
|
|
|
// 这个情况是原有商品不存在和推荐查询不到类目id是,使用京西类目和抖音类目的绑定关系
|
|
|
|
// 但是不太实用,导致商品类目错误被暂停营业等
|
|
|
|
// 但是不太实用,导致商品类目错误被暂停营业等
|
|
|
|
//if storeSku.VendorVendorCatID != 0 && param.CategoryLeafId == 0 {
|
|
|
|
//if storeSku.VendorVendorCatID != 0 && param.CategoryLeafId == 0 {
|
|
|
|
@@ -196,7 +187,6 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
param.Supply7dayReturn = 0
|
|
|
|
param.Supply7dayReturn = 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
globals.SugarLogger.Debugf("=======================4")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// weight_unit 目前抖音只支持g和kg两种
|
|
|
|
// weight_unit 目前抖音只支持g和kg两种
|
|
|
|
param.WeightUnit = tiktokShop.WeightUint_G
|
|
|
|
param.WeightUnit = tiktokShop.WeightUint_G
|
|
|
|
@@ -215,138 +205,92 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
|
|
|
|
param.StandardBrandId = 789194134 // 默认品牌京西菜市 596120136
|
|
|
|
globals.SugarLogger.Debugf("=======================5")
|
|
|
|
param.FreightId, param.SaleLimitId, err = getFreightIdAndSaleLimitId(api, db, storeDetail, vendorStoreID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
temp, err := dao.QueryStoreBindInfo(storeDetail.Store.ID)
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
if err != nil || temp == nil || temp.ID == 0 {
|
|
|
|
continue
|
|
|
|
// 运费模板
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
err = dao.CreateEntity(db, freightTemplate)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if temp.TemplateID != 0 {
|
|
|
|
|
|
|
|
param.FreightId = temp.TemplateID
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 运费模板
|
|
|
|
|
|
|
|
param.FreightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
temp.TemplateID = param.FreightId
|
|
|
|
|
|
|
|
_, err = dao.UpdateEntity(db, temp, "TemplateID")
|
|
|
|
|
|
|
|
dao.FreightTemplateMap[temp.StoreID] = temp
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if temp.TradeLimitID != 0 {
|
|
|
|
|
|
|
|
param.SaleLimitId = temp.TradeLimitID
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 获取门店限售模板
|
|
|
|
|
|
|
|
param.SaleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
temp.TradeLimitID = param.SaleLimitId
|
|
|
|
|
|
|
|
_, err = dao.UpdateEntity(db, temp, "TradeLimitID")
|
|
|
|
|
|
|
|
dao.FreightTemplateMap[temp.StoreID] = temp
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
globals.SugarLogger.Debugf("=======================6")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
|
|
|
// 根据本地商品id获取线上商品是否存在,存在则只创建子商品
|
|
|
|
var tiktokResultProductId int64 = 0
|
|
|
|
|
|
|
|
// 获取本地存储映射关系,获取本地主商品id是否存在
|
|
|
|
// 获取本地存储映射关系,获取本地主商品id是否存在
|
|
|
|
localThing, err := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID))
|
|
|
|
localThing, err := dao.GetThingToTiktokMapList(db, model.VendorIDDD, int64(storeSku.SkuID))
|
|
|
|
if len(localThing) == 0 {
|
|
|
|
if len(localThing) == 0 {
|
|
|
|
// 看看本地保存了没,没有的话可能该商品没创建主商品!查查线上有没有
|
|
|
|
|
|
|
|
mainOrderDetail, err := api.GetSkuDetailLocalID("", utils.Int2Str(storeSku.SkuID))
|
|
|
|
mainOrderDetail, err := api.GetSkuDetailLocalID("", utils.Int2Str(storeSku.SkuID))
|
|
|
|
if err != nil || mainOrderDetail == nil || mainOrderDetail.ProductIdStr == "" {
|
|
|
|
if err != nil || mainOrderDetail == nil || mainOrderDetail.ProductIdStr == "" {
|
|
|
|
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品
|
|
|
|
tiktokResult, err := api.CreateStoreCommodity(param) // 创建主商品,同步主商品
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if err := dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId, model.ThingTypeSku, model.SyncFlagNewMask); err != nil {
|
|
|
|
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
|
|
|
|
}
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
tiktokResultProductId = tiktokResult.ProductId
|
|
|
|
|
|
|
|
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.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
|
|
|
storeSku.VendorMainId = mainOrderDetail.ProductIdStr
|
|
|
|
err = dao.CreateThingMap(int64(storeSku.SkuID), utils.Int64ToStr(tiktokResult.ProductId), storeDetail.VendorOrgCode, storeSku.VendorSkuAttrId)
|
|
|
|
storeSku.VendorSkuAttrId = strings.Join(attrId, ",") // 属性id skuID
|
|
|
|
|
|
|
|
storeSku.VendorSonSkuID = utils.Int2Str(storeSku.SkuID) // 还没同步子商品
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 本地不存在,线上存在.直接创建子商品保存本地同步记录
|
|
|
|
|
|
|
|
var childrenProductId int64 = 0
|
|
|
|
|
|
|
|
var syncStatus int8 = 0
|
|
|
|
|
|
|
|
if mainOrderDetail.CheckStatus == 3 {
|
|
|
|
|
|
|
|
childrenProductId, err = api.CreateSubProduct(mainOrderDetail.MainProductId, utils.Str2Int64(vendorStoreID))
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
syncStatus = model.SyncFlagNewMask
|
|
|
|
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, 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+"|"+vendorStoreID, storeSku.VendorSkuAttrId, model.ThingTypeSku, syncStatus); err != nil {
|
|
|
|
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, 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
|
|
|
|
tiktokResultProductId = mainOrderDetail.ProductId
|
|
|
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
|
|
|
|
|
|
|
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
storeSku.VendorMainId = localThing[0].VendorThingID
|
|
|
|
if localThing[0].SyncStatus != model.NO {
|
|
|
|
storeSku.VendorSkuAttrId = localThing[0].Remark // 属性id skuID
|
|
|
|
|
|
|
|
tiktokResultProductId = utils.Str2Int64(localThing[0].VendorThingID)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
param.MainProductId = tiktokResultProductId
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 上面说明要么已经创建了主商品,要么已经重新创建了主商品,将该商品同步到子门店就可以了.
|
|
|
|
|
|
|
|
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 == "" {
|
|
|
|
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
continue
|
|
|
|
// 主商品存在,直接同步子商品
|
|
|
|
|
|
|
|
childrenProductId, err := api.CreateSubProduct(utils.Str2Int64(localThing[0].VendorThingID), utils.Str2Int64(vendorStoreID))
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
|
|
|
|
if storeSku.VendorSkuID == "" {
|
|
|
|
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // (属性id skuID方案一)(自商品的商品id方案二)
|
|
|
|
|
|
|
|
storeSku.VendorSkuID = utils.Int64ToStr(childrenProductId) // 子商品主id
|
|
|
|
|
|
|
|
storeSku.VendorMainId = localThing[0].VendorThingID // 商品主id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
storeSku.VendorSonSkuID = utils.Int64ToStr(childrenProductId) // 属性id skuID(自商品的商品id)
|
|
|
|
|
|
|
|
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(子商品的属性id)
|
|
|
|
|
|
|
|
//storeSku.VendorSkuID = utils.Int64ToStr(tiktokResultChildren.ProductId) // 子商品主id
|
|
|
|
|
|
|
|
//storeSku.VendorMainId = utils.Int64ToStr(tiktokResultProductId) // 商品主id
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
syncType = "更新商品"
|
|
|
|
syncType = "更新商品"
|
|
|
|
for _, storeSku := range storeSkuList {
|
|
|
|
for _, storeSku := range storeSkuList {
|
|
|
|
if storeSku.StoreSkuStatus != 1 { // 未可售的商品不参与修改
|
|
|
|
if storeSku.StoreSkuStatus != model.YES { // 未可售的商品不参与修改
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 更新商品(目前只更新子商品,主商品暂不支持)
|
|
|
|
|
|
|
|
|
|
|
|
// 更新主商品,在同步到子门店,考虑审核时间
|
|
|
|
param := &product_editV2_request.ProductEditV2Param{
|
|
|
|
param := &product_editV2_request.ProductEditV2Param{
|
|
|
|
Name: utils.LimitUTF8StringLen(storeSku.SkuName, 90),
|
|
|
|
Name: utils.LimitUTF8StringLen(storeSku.SkuName, 90),
|
|
|
|
PayType: tiktokShop.TiktokPayType1,
|
|
|
|
PayType: tiktokShop.TiktokPayType1,
|
|
|
|
@@ -370,10 +314,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
|
|
|
if len(param.Name) < 23 { // 中文字符一个汉字三个长度符号/数字/字母两个长度,商品名称不能大于
|
|
|
|
param.Name += utils.Float64ToStr(float64(storeSku.SpecQuality)) + "/" + storeSku.SpecUnit
|
|
|
|
param.Name += "【惊喜到家】"
|
|
|
|
if len(param.Name) < 23 {
|
|
|
|
|
|
|
|
param.Name += "【惊喜到家】"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
|
|
|
} else if len(param.Name) > 90 { // 抖音最大60个字符,三十个汉字
|
|
|
|
param.Name = param.Name[0:90]
|
|
|
|
param.Name = param.Name[0:90]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -386,16 +327,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param.Pic = img
|
|
|
|
param.Pic = img
|
|
|
|
param.Description = detailImg
|
|
|
|
param.Description = detailImg
|
|
|
|
|
|
|
|
|
|
|
|
// weight_unit 目前抖音只支持g和kg两种
|
|
|
|
|
|
|
|
//switch storeSku.Unit {
|
|
|
|
|
|
|
|
//case "g", "ml", "G", "ML":
|
|
|
|
|
|
|
|
param.WeightUnit = tiktokShop.WeightUint_G
|
|
|
|
param.WeightUnit = tiktokShop.WeightUint_G
|
|
|
|
//case "kg", "l", "L", "KG":
|
|
|
|
|
|
|
|
// param.WeightUnit = tiktokShop.WeightUint_G
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, 0, storeSku)
|
|
|
|
|
|
|
|
// 获取商品的属性
|
|
|
|
// 获取商品的属性
|
|
|
|
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
|
|
|
if storeSku.TiktokAttribute == "" || storeSku.TiktokAttribute == "{}" {
|
|
|
|
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
|
|
|
param.ProductFormatNew, err = MakeProductFormatNew(api, int64(storeSku.NameID), param.CategoryLeafId)
|
|
|
|
@@ -406,19 +339,10 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
|
|
|
param.ProductFormatNew = storeSku.TiktokAttribute
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取品牌
|
|
|
|
// 获取品牌
|
|
|
|
param.StandardBrandId = 789194134 // 默认品牌京西菜市
|
|
|
|
param.StandardBrandId = 789194134 // 默认品牌京西菜市
|
|
|
|
|
|
|
|
|
|
|
|
//tiktokResult, err := api.EditStoreCommodity(param) // 创建主商品
|
|
|
|
|
|
|
|
//if err != nil {
|
|
|
|
|
|
|
|
// failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
|
|
|
|
// storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
|
|
|
|
// continue
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 修改商品
|
|
|
|
// 修改商品
|
|
|
|
//param.FreightId = freightId
|
|
|
|
|
|
|
|
param.ProductId = utils.Str2Int64(storeSku.VendorMainId)
|
|
|
|
param.ProductId = utils.Str2Int64(storeSku.VendorMainId)
|
|
|
|
param.MainProductId = utils.Str2Int64(storeSku.VendorMainId)
|
|
|
|
param.MainProductId = utils.Str2Int64(storeSku.VendorMainId)
|
|
|
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, param.MainProductId, storeSku)
|
|
|
|
param.SpecPrices = GetSpecPrices(param.Specs, vendorStoreID, param.MainProductId, storeSku)
|
|
|
|
@@ -441,6 +365,7 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 主商品修改之后需要审核,审核通过之后在分配
|
|
|
|
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
|
|
|
|
if _, err := api.BatchRedistributeStoreProduct(&superm_product_batchRedistributeStoreProduct_request.TaskParams{
|
|
|
|
MainProductId: param.MainProductId,
|
|
|
|
MainProductId: param.MainProductId,
|
|
|
|
AddStoreIds: []int64{param.StoreId},
|
|
|
|
AddStoreIds: []int64{param.StoreId},
|
|
|
|
@@ -448,13 +373,13 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
}); err != nil {
|
|
|
|
}); err != nil {
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
storeSku.VendorSkuID = utils.Int2Str(storeSku.SkuID)
|
|
|
|
continue
|
|
|
|
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)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//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
|
|
|
|
return
|
|
|
|
@@ -466,6 +391,64 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
|
|
|
return failedList, err
|
|
|
|
return failedList, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func createChildrenProduct() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func getFreightIdAndSaleLimitId(api *tiktokShop.API, db *dao.DaoDB, storeDetail *dao.StoreDetail, vendorStoreID string) (freightId, saleLimitId int64, err error) {
|
|
|
|
|
|
|
|
temp, err := dao.QueryStoreBindInfo(storeDetail.Store.ID)
|
|
|
|
|
|
|
|
if err != nil || temp == nil || temp.ID == 0 {
|
|
|
|
|
|
|
|
// 运费模板
|
|
|
|
|
|
|
|
freightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return 0, 0, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取门店限售模板
|
|
|
|
|
|
|
|
saleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return 0, 0, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 保存数据库
|
|
|
|
|
|
|
|
freightTemplate := &model.FreightTemplate{
|
|
|
|
|
|
|
|
StoreID: storeDetail.Store.ID,
|
|
|
|
|
|
|
|
VendorStoreID: storeDetail.VendorStoreID,
|
|
|
|
|
|
|
|
TemplateID: freightId,
|
|
|
|
|
|
|
|
WarehouseID: 0,
|
|
|
|
|
|
|
|
FenceID: "",
|
|
|
|
|
|
|
|
TradeLimitID: saleLimitId,
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
err = dao.CreateEntity(db, freightTemplate)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if temp.TemplateID != 0 {
|
|
|
|
|
|
|
|
freightId = temp.TemplateID
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 运费模板
|
|
|
|
|
|
|
|
freightId, err = GetDeliveryTemp(api, vendorStoreID, storeDetail)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return 0, 0, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
temp.TemplateID = freightId
|
|
|
|
|
|
|
|
_, err = dao.UpdateEntity(db, temp, "TemplateID")
|
|
|
|
|
|
|
|
dao.FreightTemplateMap[temp.StoreID] = temp
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if temp.TradeLimitID != 0 {
|
|
|
|
|
|
|
|
saleLimitId = temp.TradeLimitID
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 获取门店限售模板
|
|
|
|
|
|
|
|
saleLimitId, err = CreateSaleTemp(utils.Str2Int64(vendorStoreID), api)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return 0, 0, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
temp.TradeLimitID = saleLimitId
|
|
|
|
|
|
|
|
_, err = dao.UpdateEntity(db, temp, "TradeLimitID")
|
|
|
|
|
|
|
|
dao.FreightTemplateMap[temp.StoreID] = temp
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return freightId, saleLimitId, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// CreateSaleTemp 创建限售模板
|
|
|
|
// CreateSaleTemp 创建限售模板
|
|
|
|
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
|
|
|
func CreateSaleTemp(storeId int64, api *tiktokShop.API) (int64, error) {
|
|
|
|
// 获取限售模板
|
|
|
|
// 获取限售模板
|
|
|
|
|