Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop
This commit is contained in:
@@ -435,10 +435,8 @@ func updateStoreSku(db *dao.DaoDB, vendorID int, storeSkuList []*dao.StoreSkuSyn
|
||||
} else {
|
||||
updateItemList := make([]*dao.KVUpdateItem, len(storeSkuList))
|
||||
for k, v := range storeSkuList {
|
||||
//globals.SugarLogger.Debugf("======skusyncStatus %s", utils.Format4Output(v, false))
|
||||
updateItemList[k] = sku2Update(vendorID, v, syncStatus)
|
||||
}
|
||||
//globals.SugarLogger.Debugf("========updateItemList=== %s", utils.Format4Output(updateItemList, false))
|
||||
num, err = dao.BatchUpdateEntityByKV(db, updateItemList)
|
||||
if vendorID == model.VendorIDYB {
|
||||
err = updateYbOhterSku(db, storeSkuList)
|
||||
|
||||
@@ -171,6 +171,12 @@ func UpdateSkuNameTiktokAttr(db *DaoDB, id int64, attr string) {
|
||||
sql := ` UPDATE sku_name SET tiktok_attribute = ? WHERE id = ? `
|
||||
ExecuteSQL(db, sql, []interface{}{attr, id}...)
|
||||
}
|
||||
|
||||
func UpdateSkuNameTiktokBrandName(db *DaoDB, upc, brandName, brandId string) {
|
||||
sql := ` UPDATE sku_name SET upc_brand_name = ?,upc_tiktok_brand_id = ? WHERE upc = ? `
|
||||
ExecuteSQL(db, sql, []interface{}{brandName, brandId, upc}...)
|
||||
}
|
||||
|
||||
func GetSkuNames(db *DaoDB, nameIDs []int, upcs []string, name string, isExd bool) (skuNameList []*model.SkuName, err error) {
|
||||
sql := `
|
||||
SELECT t1.*
|
||||
|
||||
@@ -96,19 +96,21 @@ type StoreSkuSyncInfo struct {
|
||||
ExPrefixEnd *time.Time
|
||||
|
||||
// NameID int `orm:"column(name_id)"`
|
||||
VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
|
||||
Name string
|
||||
Unit string
|
||||
Upc string
|
||||
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
NameStatus int
|
||||
SellCities []string
|
||||
NameCategoryID int `orm:"column(name_category_id)"`
|
||||
TiktokAttribute string `orm:"column(tiktok_attribute)"`
|
||||
YbNameSuffix string //银豹的商品条码后缀
|
||||
YbBarCode string //银豹的商品条码
|
||||
JdsStockSwitch int
|
||||
PreparationTime int
|
||||
VendorNameID string `orm:"column(vendor_name_id)"` // 暂时无用
|
||||
Name string
|
||||
Unit string
|
||||
Upc string
|
||||
UpcBrandName string `orm:"column(upc_brand_name)" json:"upcBrandName"` // upc商品时使用(品牌名称)
|
||||
UpcTiktokBrandId string `orm:"column(upc_tiktok_brand_id)" json:"upcTiktokBrandId"` // upc商品时使用(抖音品牌id)
|
||||
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
NameStatus int
|
||||
SellCities []string
|
||||
NameCategoryID int `orm:"column(name_category_id)"`
|
||||
TiktokAttribute string `orm:"column(tiktok_attribute)"`
|
||||
YbNameSuffix string //银豹的商品条码后缀
|
||||
YbBarCode string //银豹的商品条码
|
||||
JdsStockSwitch int
|
||||
PreparationTime int
|
||||
|
||||
// 平台相关的图片信息
|
||||
Img string
|
||||
@@ -571,7 +573,7 @@ func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty boo
|
||||
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.*,
|
||||
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,t3.upc_brand_name,t3.upc_tiktok_brand_id,
|
||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||
IF(t15.%s <> '', t15.%s, t3.img3) img3,
|
||||
@@ -708,7 +710,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.store_id, t1.deleted_at bind_deleted_at, t1.stock,
|
||||
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.tiktok_attribute,
|
||||
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,t3.upc_brand_name,t3.upc_tiktok_brand_id,
|
||||
IF(t11.%s <> '', t11.%s, t3.img) img,
|
||||
IF(t12.%s <> '', t12.%s, t3.img2) img2,
|
||||
IF(t13.%s <> '', t13.%s, t3.desc_img) desc_img,
|
||||
|
||||
@@ -159,54 +159,40 @@ func (*SkuCategory) TableUnique() [][]string {
|
||||
|
||||
type SkuName struct {
|
||||
ModelIDCULD
|
||||
|
||||
Prefix string `orm:"size(255)" json:"prefix"`
|
||||
Name string `orm:"size(255)" json:"name"`
|
||||
|
||||
ExPrefix string `orm:"size(255)" json:"exPrefix"`
|
||||
ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"`
|
||||
ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"`
|
||||
ExVendorID int `orm:"column(ex_vendor_id)" json:"exVendorID"`
|
||||
|
||||
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
||||
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
|
||||
JdCategoryID int64 `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
|
||||
|
||||
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
Unit string `orm:"size(8)" json:"unit"`
|
||||
SpecQuality float32 `json:"-"` // 为份必然为500,这个主要作用只是用于确保SkuName的唯一性
|
||||
SpecUnit string `orm:"size(8)" json:"-"` // 为份必然为克,这个主要作用只是用于确保SkuName的唯一性
|
||||
Price int `json:"price"` // 单位为分,标准价,不为份的就为实际标准价,为份的为每市斤价,实际还要乘质量。todo 为份的确定必须有质量
|
||||
|
||||
Img string `orm:"size(512)" json:"img"`
|
||||
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
|
||||
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
|
||||
Img4 string `orm:"size(512)" json:"img4"` //第三张图片
|
||||
Img5 string `orm:"size(512)" json:"img5"` //第三张图片
|
||||
|
||||
ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
|
||||
ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
|
||||
// ImgEbai string `orm:"size(255)" json:"imgEbai"` // 饿百图片地址
|
||||
// ImgHashCode string `orm:"size(255);index" json:"img_hash_code"`
|
||||
|
||||
DescImg string `orm:"size(255)" json:"descImg"` // 商品详情图片描述
|
||||
// DescImgEbai string `orm:"size(255)" json:"descImgEbai"` // 饿百的商品详情图片描述RTF
|
||||
|
||||
Upc *string `orm:"size(20)"`
|
||||
Status int `orm:"default(1)" json:"status"` // skuname状态,取值同sku.Status
|
||||
IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU
|
||||
|
||||
// JdID int64 `orm:"column(jd_id);null;index" json:"jdID"`
|
||||
// JdSyncStatus int8 `orm:"default(2)" json:"jdSyncStatus"`
|
||||
|
||||
// LinkID int `orm:"column(link_id);null;index" json:"linkID"`
|
||||
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
|
||||
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"` //京东商城总库存
|
||||
PreparationTime int `orm:"default(1)" json:"preparationTime"` //商品准备时长
|
||||
BestSeller int `json:"bestSeller"` //畅销品 0不是 1是
|
||||
Video string `json:"video"` //商品视频地址
|
||||
VideoID string `orm:"column(video_id)" json:"videoID"` //商品视频美团ID
|
||||
TiktokAttribute string `orm:"column(tiktok_attribute);size(1024)" json:"tiktokAttribute"` //抖音分类属性的存储
|
||||
Prefix string `orm:"size(255)" json:"prefix"`
|
||||
Name string `orm:"size(255)" json:"name"`
|
||||
ExPrefix string `orm:"size(255)" json:"exPrefix"`
|
||||
ExPrefixBegin *time.Time `orm:"null" json:"exPrefixBegin"`
|
||||
ExPrefixEnd *time.Time `orm:"null" json:"exPrefixEnd"`
|
||||
ExVendorID int `orm:"column(ex_vendor_id)" json:"exVendorID"`
|
||||
BrandID int `orm:"column(brand_id);default(0)" json:"brandID"` // todo,此属性暂时没有使用,且有问题,应该是不同平台都有一个brandid
|
||||
CategoryID int `orm:"column(category_id);index" json:"categoryID"` // 标准类别
|
||||
JdCategoryID int64 `orm:"column(jd_category_id)" json:"jdCategoryID"` // 这个是指对应的京东商品类别
|
||||
IsGlobal int8 `orm:"default(1)" json:"isGlobal"` // 是否是全部(全国)可见,如果否的话,可见性由SkuPlace决定
|
||||
Unit string `orm:"size(8)" json:"unit"`
|
||||
SpecQuality float32 `json:"-"` // 为份必然为500,这个主要作用只是用于确保SkuName的唯一性
|
||||
SpecUnit string `orm:"size(8)" json:"-"` // 为份必然为克,这个主要作用只是用于确保SkuName的唯一性
|
||||
Price int `json:"price"` // 单位为分,标准价,不为份的就为实际标准价,为份的为每市斤价,实际还要乘质量。todo 为份的确定必须有质量
|
||||
Img string `orm:"size(512)" json:"img"`
|
||||
Img2 string `orm:"size(512)" json:"img2"` // 第二张图片
|
||||
Img3 string `orm:"size(512)" json:"img3"` //第三张图片
|
||||
Img4 string `orm:"size(512)" json:"img4"` //第三张图片
|
||||
Img5 string `orm:"size(512)" json:"img5"` //第三张图片
|
||||
ImgWatermark string `orm:"size(512)" json:"imgWatermark"` //图片水印
|
||||
ImgMix string `orm:"size(512)" json:"imgMix"` //图片混合水印的图片
|
||||
DescImg string `orm:"size(255)" json:"descImg"` // 商品详情图片描述
|
||||
Upc *string `orm:"size(20)"` // 标品upc码
|
||||
UpcBrandName string `orm:"column(upc_brand_name);size(16)" json:"upcBrandName"` // upc标品的品牌名称
|
||||
UpcTiktokBrandId string `orm:"column(upc_tiktok_brand_id);size(16)" json:"upcTiktokBrandId"` // 根据upc码获取到的抖音品牌id
|
||||
Status int `orm:"default(1)" json:"status"` // skuname状态,取值同sku.Status
|
||||
IsSpu int8 `orm:"column(is_spu)" json:"isSpu"` // 用于指明是否SKUNAME当成SPU
|
||||
YbNameSuffix string `json:"ybNameSuffix"` //银豹商品后缀
|
||||
JdsStockSwitch int8 `orm:"default(1)" json:"jdsStockSwitch"` //京东商城总库存
|
||||
PreparationTime int `orm:"default(1)" json:"preparationTime"` //商品准备时长
|
||||
BestSeller int `json:"bestSeller"` //畅销品 0不是 1是
|
||||
Video string `json:"video"` //商品视频地址
|
||||
VideoID string `orm:"column(video_id)" json:"videoID"` //商品视频美团ID
|
||||
TiktokAttribute string `orm:"column(tiktok_attribute);size(1024)" json:"tiktokAttribute"` //抖音分类属性的存储
|
||||
}
|
||||
|
||||
func (*SkuName) TableUnique() [][]string {
|
||||
|
||||
@@ -157,11 +157,35 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in
|
||||
SecondaryCategoryName: subCatName,
|
||||
Sequence: storeCat.Seq,
|
||||
}
|
||||
err = getAPI(storeCat.VendorOrgCode, storeID, vendorStoreID).RetailCatUpdate(vendorStoreID, catName, param4Update)
|
||||
api := getAPI(storeCat.VendorOrgCode, storeID, vendorStoreID)
|
||||
err = api.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 && strings.Contains(err.Error(), "门店内存在重复的分类:") {
|
||||
globals.SugarLogger.Debugf("==========err %s", err.Error())
|
||||
storeCategoryList, err2 := api.RetailCatList(vendorStoreID)
|
||||
globals.SugarLogger.Debugf("==========err2 %v", err2)
|
||||
globals.SugarLogger.Debugf("==========err %s", utils.Format4Output(storeCategoryList, false))
|
||||
if err2 != nil {
|
||||
err = err2
|
||||
} else {
|
||||
for _, v := range storeCategoryList {
|
||||
globals.SugarLogger.Debugf("storeCategoryList==========err %s", err.Error())
|
||||
if len(v.Children) > 0 {
|
||||
for _, c := range v.Children {
|
||||
if strings.Contains(c.Name, err.Error()) {
|
||||
api.RetailCatDelete(vendorStoreID, "", c.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
if strings.Contains(v.Name, err.Error()) {
|
||||
api.RetailCatDelete(vendorStoreID, "", v.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
// storeCat.VendorCatID = utils.FilterEmoji(storeCat.Name)
|
||||
|
||||
@@ -311,7 +311,7 @@ func (c *PurchaseHandler) onOrderMsg(msgId, orderId string, msg interface{}) (re
|
||||
if err := partner.CurOrderManager.OnOrderNew(order, status); err != nil {
|
||||
return tiktokShop.Err2CallbackResponse(err, "")
|
||||
}
|
||||
orderMap, err := c.getOrderMap("", orderId, "")
|
||||
orderMap, err := c.getOrderMap(utils.Int64ToStr(appOrgCode), orderId, "")
|
||||
utils.CallFuncAsync(func() {
|
||||
switch msgId {
|
||||
case tiktokShop.CallbackPayOrderMsgTagId:
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi/jdapi"
|
||||
"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"
|
||||
@@ -26,6 +27,7 @@ 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"
|
||||
"git.rosy.net.cn/jx-callback/globals/api/apimanager"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -247,7 +249,8 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI
|
||||
updateParam.Pic = param.Pic
|
||||
updateParam.Description = param.Description
|
||||
updateParam.WeightUnit = tiktokShop.WeightUint_G
|
||||
updateParam.StandardBrandId = param.StandardBrandId // 默认品牌京西菜市
|
||||
updateParam.StandardBrandId, err = getTiktokBrandId(api, db, storeSku.Upc, storeSku.UpcBrandName, storeSku.UpcTiktokBrandId, updateParam.CategoryLeafId)
|
||||
|
||||
updateParam.ProductId = mainOrderDetail.ProductId
|
||||
updateParam.MainProductId = mainProductId
|
||||
updateParam.SpecPrices = param.SpecPrices
|
||||
@@ -462,7 +465,13 @@ func makeMainProductSku(db *dao.DaoDB, api *tiktokShop.API, storeSku *dao.StoreS
|
||||
return
|
||||
}
|
||||
}
|
||||
param.StandardBrandId = 596120136 // 默认品牌京西菜市 596120136
|
||||
|
||||
param.StandardBrandId, err = getTiktokBrandId(api, db, storeSku.Upc, storeSku.UpcBrandName, storeSku.UpcTiktokBrandId, param.CategoryLeafId)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
return
|
||||
}
|
||||
|
||||
param.FreightId, param.SaleLimitId, err = getFreightIdAndSaleLimitId(api, db, storeDetail, vendorStoreID)
|
||||
if err != nil {
|
||||
failedList = putils.GetErrMsg2FailedSingleList(storeSku, err, storeID, model.VendorChineseNames[model.VendorIDDD], syncType)
|
||||
@@ -471,6 +480,49 @@ func makeMainProductSku(db *dao.DaoDB, api *tiktokShop.API, storeSku *dao.StoreS
|
||||
return
|
||||
}
|
||||
|
||||
func getTiktokBrandId(api *tiktokShop.API, db *dao.DaoDB, upc, upcBrandName, upcTiktokBrandId string, categoryLeafId int64) (int64, error) {
|
||||
if upc == "" { // 默认品牌京西菜市 596120136
|
||||
return 596120136, nil
|
||||
} else if upc != "" && upcBrandName != "" && upcTiktokBrandId != "" {
|
||||
return utils.Str2Int64(upcTiktokBrandId), nil
|
||||
} else if upc != "" && upcBrandName != "" && upcTiktokBrandId == "" {
|
||||
standardBrandId, err := api.GetSkuBrand(categoryLeafId, upcBrandName)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
dao.UpdateSkuNameTiktokBrandName(db, upc, upcBrandName, utils.Int64ToStr(standardBrandId))
|
||||
return standardBrandId, nil
|
||||
} else if upc != "" && upcBrandName == "" && upcTiktokBrandId == "" {
|
||||
brandName, err := getBrandByBrandName(upc)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
standardBrandId, err := api.GetSkuBrand(categoryLeafId, brandName)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
dao.UpdateSkuNameTiktokBrandName(db, upc, brandName, utils.Int64ToStr(standardBrandId))
|
||||
return standardBrandId, nil
|
||||
}
|
||||
return 0, errors.New("getTiktokBrandId 获取抖音品牌id异常")
|
||||
}
|
||||
|
||||
func getBrandByBrandName(upcCode string) (string, error) {
|
||||
apijd := apimanager.CurAPIManager.GetAPI(model.VendorIDJD, "320406").(*jdapi.API)
|
||||
result, err := apijd.GetJdUpcCodeByName("", upcCode, 1, 5)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if len(result) != model.YES {
|
||||
return "", fmt.Errorf("upc码[%s],获取商品不唯一", upcCode)
|
||||
}
|
||||
|
||||
if result[0].BrandName != "" {
|
||||
return result[0].BrandName, nil
|
||||
}
|
||||
return strings.Split(result[0].OriginalName, " ")[0], nil
|
||||
}
|
||||
|
||||
func loadMainProductId(api *tiktokShop.API, storeSku *dao.StoreSkuSyncInfo, mainProductId string) *product_detail_response.ProductDetailData {
|
||||
// 这有可能获取的值主商品也有可能是子商品,我们需要的是主商品id和状态
|
||||
mainOrderDetailProductId, err := api.GetSkuDetail(mainProductId, "")
|
||||
|
||||
Reference in New Issue
Block a user