diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 1c8942eec..392b46311 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -30,6 +30,12 @@ type tSkuInfoExt struct { Comment string `orm:"size(255)" json:"comment"` } +var ( + skuAddParamsKeyList = []string{ + jdapi.KeyUpcCode, + } +) + func (p *PurchaseHandler) CreateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { var jdPid int64 if cat.ParentID != 0 { @@ -123,9 +129,10 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE `, sku.ID) if err == nil { shopCategories := []int64{skuInfoExt.JdCatID} - if skuInfoExt.SkuCatID != 0 { - shopCategories = append(shopCategories, skuInfoExt.SkuCatID) - } + // SPU只支持SPU的商家分类,不支持单独SKU的,去除SKU的分类 + // if skuInfoExt.SkuCatID != 0 { + // shopCategories = append(shopCategories, skuInfoExt.SkuCatID) + // } if skuInfoExt.JdCategoryID == 0 { skuInfoExt.JdCategoryID = DefJdCategoryID } @@ -339,8 +346,22 @@ func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask ta return rootTask.ID, err } +func splitAddParams(addParams map[string]interface{}) (spuAddParams, skuAddParams map[string]interface{}) { + if addParams != nil { + spuAddParams = make(map[string]interface{}) + skuAddParams = make(map[string]interface{}) + for _, key := range skuAddParamsKeyList { + if _, ok := addParams[key]; ok { + skuAddParams[key] = addParams[key] + } else { + spuAddParams[key] = addParams[key] + } + } + } + return spuAddParams, skuAddParams +} + // 这个处理JD SPU,补丁形式 -// addParams是SPU的附加参数而不是SKU func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) { updateFields := []string{ model.FieldJdSyncStatus, @@ -351,6 +372,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt // 这样写的原因是在sync里面已经把数据全部取出来了,在这个函数里对于数据库的改动不能体现,打个补丁 skuNameJdID := skuExt.JdID globals.SugarLogger.Debugf("syncSkuNameAsSpu1 sku.id=%d, bareSkuName:%s, skuName:%s, skuNameJdID:%d", sku.ID, skuExt.Name, skuName, skuNameJdID) + spuAddParams, skuAddParams := splitAddParams(addParams) if jxutils.IsFakeID(skuNameJdID) { tmpSkuName := &model.SkuName{} tmpSkuName.ID = skuExt.ID @@ -366,7 +388,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, jdapi.SkuFixedStatusDeleted)) } else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 { // 非首次新增SKU if globals.EnableStoreWrite { - vendorSkuID2, err2 := api.JdAPI.AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), nil) + vendorSkuID2, err2 := api.JdAPI.AppendSku(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), skuAddParams) if err = err2; err == nil { vendorSkuID = utils.Int64ToStr(vendorSkuID2) } @@ -378,11 +400,8 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status) params[jdapi.KeyWeight] = jxutils.IntWeight2Float(sku.Weight) params[jdapi.KeySkuPrice] = price - if skuExt.Upc != "" { - params[jdapi.KeyUpcCode] = skuExt.Upc - } if globals.EnableStoreWrite { - err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), params) + err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.MergeMaps(params, skuAddParams)) } } } @@ -418,12 +437,9 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt jdapi.FakeKeySpecAttr: composeSkuSpec(sku.SpecQuality, sku.SpecUnit, skuExt.Unit), }, } - // todo 我们把upc放在skuName上,京东是在sku上,但多于一种规格的应该都不需要UPC,暂时先这样 - if skuExt.Upc != "" { - skus[0][jdapi.KeyUpcCode] = skuExt.Upc - } + skus[0] = utils.MergeMaps(skus[0], skuAddParams) if globals.EnableStoreWrite { - vendorSpuID, skuPairs, err2 := api.JdAPI.AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), addParams, skus) + vendorSpuID, skuPairs, err2 := api.JdAPI.AddSpu(utils.Int2Str(skuExt.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, spuName, []string{skuExt.Img}, jxStatus2jdStatus(skuExt.Status), spuAddParams, skus) if err = err2; err == nil { skuExt.JdID = vendorSpuID vendorSkuID = utils.Int64ToStr(skuPairs[0].SkuId) @@ -439,7 +455,7 @@ func (p *PurchaseHandler) syncSkuNameAsSpu(db *dao.DaoDB, sku *model.Sku, skuExt jdapi.KeyBrandId: skuExt.BrandID, jdapi.KeyImages: []string{skuExt.Img}, jdapi.KeyFixedStatus: jxStatus2jdStatus(skuExt.Status), - }, addParams) + }, spuAddParams) if globals.EnableStoreWrite { err = api.JdAPI.UpdateSpu(utils.Int2Str(skuExt.ID), params) }