|
|
|
|
@@ -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:
|
|
|
|
|
|