- jd spu support

This commit is contained in:
gazebo
2018-12-11 12:44:41 +08:00
parent 35f1d51e77
commit f7c5e089ff
4 changed files with 147 additions and 14 deletions

View File

@@ -22,7 +22,7 @@ const (
type tSkuInfoExt struct {
model.SkuName
JdID int64 `orm:"column(jd_id)"` // 商家类别
JdCatID int64 `orm:"column(jd_cat_id)"` // 商家类别
JdCategoryID int `orm:"column(jd_category_id)"` // 到家类别
SkuCatID int64 `orm:"column(sku_cat_id)"` // 商家特殊类别
Comment string `orm:"size(255)" json:"comment"`
@@ -108,7 +108,7 @@ func (p *PurchaseHandler) ReorderCategories(db *dao.DaoDB, parentCatID int, user
func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (string, error)) (err error) {
var skuInfoExt tSkuInfoExt
err = dao.GetRow(nil, &skuInfoExt, `
SELECT t2.*, t3.jd_id, t3.jd_category_id, t4.jd_id sku_cat_id
SELECT t2.*, t3.jd_id jd_cat_id, t3.jd_category_id, t4.jd_id sku_cat_id
FROM sku t1
JOIN sku_name t2 ON t1.name_id = t2.id
JOIN sku_category t3 ON t2.category_id = t3.id
@@ -116,7 +116,7 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE
WHERE t1.id = ?
`, sku.ID)
if err == nil {
shopCategories := []int64{skuInfoExt.JdID}
shopCategories := []int64{skuInfoExt.JdCatID}
if skuInfoExt.SkuCatID != 0 {
shopCategories = append(shopCategories, skuInfoExt.SkuCatID)
}
@@ -154,8 +154,12 @@ func (p *PurchaseHandler) cuSku(db *dao.DaoDB, sku *model.Sku, handler func(skuE
func (p *PurchaseHandler) CreateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
return p.cuSku(db, sku, func(skuExt *tSkuInfoExt, price int, skuName string, shopCategories []int64, addParams map[string]interface{}) (vendorSkuID string, err error) {
if globals.EnableStoreWrite {
vendorSkuID, err = api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, 1, true, addParams)
if skuExt.IsSpu == 0 {
if globals.EnableStoreWrite {
vendorSkuID, err = api.JdAPI.AddSku(utils.Int2Str(sku.ID), skuExt.JdCategoryID, shopCategories, skuExt.BrandID, skuName, price, jxutils.IntWeight2Float(sku.Weight), []string{skuExt.Img}, jxStatus2jdStatus(sku.Status), true, addParams)
}
} else {
vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
}
return vendorSkuID, err
})
@@ -188,7 +192,7 @@ func (p *PurchaseHandler) ReadSku(vendorSkuID string) (skuNameExt *model.SkuName
SpecUnit: specUnit,
Weight: jxutils.FloatWeight2Int(float32(utils.MustInterface2Float64(mapData["weight"]))),
JdID: utils.MustInterface2Int64(mapData["skuId"]),
Status: jdStatus2jxStatus(int(utils.MustInterface2Int64(mapData["fixedStatus"]))),
Status: jdStatus2jxStatus(int(utils.MustInterface2Int64(mapData[jdapi.KeyFixedStatus]))),
Comment: comment,
},
}
@@ -236,9 +240,13 @@ func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName stri
params["skuName"] = skuName
params["weight"] = jxutils.IntWeight2Float(sku.Weight)
params["images"] = []string{skuExt.Img}
params["fixedStatus"] = jxStatus2jdStatus(sku.Status)
if globals.EnableStoreWrite {
vendorSkuID, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params)
params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
if skuExt.IsSpu == 0 {
if globals.EnableStoreWrite {
vendorSkuID, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params)
}
} else {
vendorSkuID, err = p.syncSkuNameAsSpu(db, sku, skuExt, price, skuName, shopCategories, addParams)
}
return vendorSkuID, err
})
@@ -246,10 +254,24 @@ func (p *PurchaseHandler) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName stri
func (p *PurchaseHandler) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) {
params := map[string]interface{}{
"fixedStatus": 4,
jdapi.KeyFixedStatus: 4,
}
if globals.EnableStoreWrite {
_, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params)
sql := `
SELECT t2.*
FROM sku t1
JOIN sku_name t2 ON t1.name_id = t2.id
WHERE t1.id = ?
`
var skuExt tSkuInfoExt
err = dao.GetRow(db, &skuExt, sql, sku.ID)
if err == nil {
if skuExt.IsSpu == 0 {
if globals.EnableStoreWrite {
_, err = api.JdAPI.UpdateSku(utils.Int2Str(sku.ID), params)
}
} else {
_, err = p.syncSkuNameAsSpu(db, sku, &skuExt, 0, "", nil, nil)
}
}
return err
}
@@ -305,6 +327,94 @@ func (p *PurchaseHandler) RefreshAllSkusID(ctx *jxcontext.Context, parentTask ta
return rootTask.ID, err
}
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,
}
if sku.JdSyncStatus&model.SyncFlagDeletedMask != 0 { // 删除SKU
err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), utils.Params2Map(jdapi.KeyFixedStatus, 4))
} else if sku.JdSyncStatus&model.SyncFlagNewMask != 0 && skuExt.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, addParams)
if err = err2; err == nil {
vendorSkuID = utils.Int64ToStr(vendorSkuID2)
}
}
} else if sku.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
params := utils.MergeMaps(addParams)
params["categoryId"] = skuExt.JdCategoryID
params["shopCategories"] = shopCategories
params["brandId"] = skuExt.BrandID
params["skuName"] = skuName
params["weight"] = jxutils.IntWeight2Float(sku.Weight)
params["images"] = []string{skuExt.Img}
params[jdapi.KeyFixedStatus] = jxStatus2jdStatus(sku.Status)
if globals.EnableStoreWrite {
err = api.JdAPI.UpdateSkuBaseInfo(utils.Int2Str(skuExt.ID), utils.Int2Str(sku.ID), params)
}
}
if err == nil {
if skuExt.JdSyncStatus&model.SyncFlagDeletedMask != 0 {
sql := `
SELECT COUNT(*) ct
FROM sku t1
WHERE t1.name_id = ? AND (t1.status <> ? OR t1.jd_sync_status <> 0)
`
var count struct {
Ct int
}
if err = dao.GetRow(db, &count, sql, sku.NameID, model.SyncFlagDeletedMask); err != nil {
return "", err
}
if (count.Ct == 0 || count.Ct == 1 && sku.JdSyncStatus&model.SyncFlagDeletedMask != 0) && globals.EnableStoreWrite { // 1就是最后删的那个
err = api.JdAPI.UpdateSpu(utils.Int2Str(skuExt.ID), utils.Params2Map(jdapi.KeyFixedStatus, 4))
}
} else if skuExt.JdSyncStatus&model.SyncFlagNewMask != 0 {
if globals.EnableStoreWrite {
spuName := jxutils.ComposeSpuName(skuExt.Prefix, skuExt.Name, 0)
skus := []map[string]interface{}{
map[string]interface{}{
jdapi.KeyOutSkuId: utils.Int2Str(sku.ID),
jdapi.KeySkuName: skuName,
jdapi.KeyFixedStatus: jxStatus2jdStatus(sku.Status),
jdapi.KeySkuPrice: price,
jdapi.KeyWeight: jxutils.IntWeight2Float(sku.Weight),
jdapi.KeyIsSale: true,
},
}
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)
if err = err2; err == nil {
skuExt.JdID = vendorSpuID
vendorSkuID = utils.Int64ToStr(skuPairs[0].SkuId)
updateFields = append(updateFields, model.FieldJdID)
}
}
}
} else if skuExt.JdSyncStatus&model.SyncFlagModifiedMask != 0 {
params := map[string]interface{}{
"categoryId": skuExt.JdCategoryID,
"shopCategories": shopCategories,
"brandId": skuExt.BrandID,
"skuName": skuName,
"images": []string{skuExt.Img},
jdapi.KeyFixedStatus: jxStatus2jdStatus(skuExt.Status),
}
if globals.EnableStoreWrite {
err = api.JdAPI.UpdateSpu(utils.Int2Str(skuExt.ID), params)
}
}
if err == nil {
if skuExt.JdSyncStatus != 0 {
skuExt.JdSyncStatus = 0
_, err = dao.UpdateEntity(db, &skuExt.SkuName, updateFields...)
}
}
}
return vendorSkuID, err
}
func jdStatus2jxStatus(jdStatus int) (jxStatus int) {
switch jdStatus {
case 1: