From 2b46e8c5614e591f5ffdf16ce99a9af3f4ee7cba Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 20 May 2019 14:59:07 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A4=84=E7=90=86=E5=88=A0=E9=99=A4SKU?= =?UTF-8?q?=E6=88=96SKUNAME=E5=90=8E=EF=BC=8C=E5=90=8C=E6=AD=A5=E9=A5=BF?= =?UTF-8?q?=E7=99=BE=E9=97=A8=E5=BA=97=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/model/model.go | 4 +- business/partner/purchase/ebai/store_sku.go | 63 +++++++++++++-------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/business/model/model.go b/business/model/model.go index de48a6173..3404b69da 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -68,8 +68,8 @@ const ( SyncFlagNewMask = 2 SyncFlagDeletedMask = 4 - SyncFlagSaleMask = 8 - SyncFlagPriceMask = 16 + SyncFlagSaleMask = 8 // 改了门店商品价格必须设置此标志 + SyncFlagPriceMask = 16 // 改了门店商品可售状态必须设置此标志 SyncFlagSpecMask = 32 SyncFlagStoreSkuOnlyMask = SyncFlagSaleMask | SyncFlagPriceMask diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 51fe733a9..90cca63a2 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "strings" + "time" "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" @@ -23,7 +24,6 @@ const ( type tStoreSkuFullInfo struct { model.StoreSkuBind - SkuID int `orm:"column(sku_id)"` NameID int `orm:"column(name_id)"` SpecQuality float32 `json:"specQuality"` @@ -82,7 +82,7 @@ var ( func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) { sql := ` - SELECT t8.price_percentage, t1.*, t2.id sku_id, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status, + SELECT t8.price_percentage, t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status, t3.id name_id, t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, IF(t3.img_ebai <> '', t3.img_ebai, t3.img) img, t3.upc, t3.desc_img_ebai, t4.name cat_name, t4.ebai_price_percentage cat_price_percentage, t4.id cat_id, t4.level cat_level, t5.ebai_id cat_ebai_id, @@ -91,14 +91,14 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ FROM store_sku_bind t1 LEFT JOIN sku t2 ON t1.sku_id = t2.id AND t2.deleted_at = ? AND t2.status = ? LEFT JOIN sku_name t3 ON t2.name_id = t3.id AND t3.deleted_at = ? AND t3.status = ? - JOIN sku_category t4 ON t3.category_id = t4.id + LEFT JOIN sku_category t4 ON t3.category_id = t4.id LEFT JOIN sku_category t4p ON t4p.id = t4.parent_id LEFT JOIN store_sku_category_map t5 ON t5.store_id = t1.store_id AND t5.category_id = t4.id AND t5.deleted_at = ? LEFT JOIN store_sku_category_map t5p ON t5p.store_id = t1.store_id AND t5p.category_id = t4p.id AND t5p.deleted_at = ? LEFT JOIN sku_vendor_category cat1 ON t4.ebai_category_id = cat1.vendor_category_id AND cat1.vendor_id = ? LEFT JOIN sku_vendor_category cat2 ON cat1.parent_id = cat2.vendor_category_id AND cat1.vendor_id = ? JOIN store_map t8 ON t8.store_id = t1.store_id AND t8.vendor_id = ? AND t8.deleted_at = ? - WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0) + WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0 OR (t1.deleted_at = ? AND t3.id IS NULL)) ` sqlParams := []interface{}{ utils.DefaultTimeValue, @@ -112,6 +112,7 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ model.VendorIDEBAI, utils.DefaultTimeValue, storeID, + utils.DefaultTimeValue, } if len(skuIDs) > 0 { sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" @@ -125,7 +126,7 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ func (p *PurchaseHandler) createCatByStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkuInfoList []*tStoreSkuFullInfo) (num int64, err error) { catList2Add := make(map[int]int) for _, storeSku := range storeSkuInfoList { - if storeSku.SkuID != 0 && storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreSkuModifiedMask) != 0 { + if storeSku.CatID != 0 && storeSku.EbaiSyncStatus&(model.SyncFlagNewMask|model.SyncFlagStoreSkuModifiedMask) != 0 { if storeSku.ParentCatEbaiID == 0 && storeSku.ParentCatID != 0 { catList2Add[storeSku.ParentCatID] = 1 } @@ -251,27 +252,43 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks storeSku := batchItemList[0].(*tStoreSkuFullInfo) updateFields := []string{model.FieldEbaiSyncStatus} if globals.EnableEbaiStoreWrite { - if storeSku.SkuID == 0 || storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { - if storeSku.EbaiSyncStatus&model.SyncFlagNewMask == 0 && storeSku.EbaiID != 0 { + if storeSku.NameID == 0 || storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { + if storeSku.EbaiSyncStatus&model.SyncFlagNewMask == 0 && !jxutils.IsFakeID(storeSku.EbaiID) { err = api.EbaiAPI.SkuDelete(strStoreID, utils.Int64ToStr(storeSku.EbaiID)) } - } else if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { - // globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false)) - // todo 适当处理重复(即已经创建)的情况 - if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil { - updateFields = append(updateFields, model.FieldEbaiID) - } else if storeSku.EbaiID = ebaiapi.GetEbaiSkuIDFromError(err); storeSku.EbaiID > 0 { - // globals.SugarLogger.Debugf("SyncStoreSkus test storeSku.EbaiID:%d, err:%v", storeSku.EbaiID, err) - updateFields = append(updateFields, model.FieldEbaiID) - _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)) - } - } else if storeSku.EbaiSyncStatus&model.SyncFlagStoreSkuModifiedMask != 0 { - if jxutils.IsFakeID(storeSku.EbaiID) { - err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID) - } else { - if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil { - // err = api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID)) + if err == nil { + if utils.IsTimeZero(storeSku.DeletedAt) { + storeSku.DeletedAt = time.Now() + updateFields = append(updateFields, model.FieldDeletedAt) } + if !jxutils.IsFakeID(storeSku.EbaiID) { + storeSku.EbaiID = 0 + updateFields = append(updateFields, model.FieldEbaiID) + } + } + } else { + if storeSku.Img != "" { + if storeSku.EbaiSyncStatus&model.SyncFlagNewMask != 0 { + // globals.SugarLogger.Debug(utils.Format4Output(genSkuParamsFromStoreSkuInfo(storeSku), false)) + // todo 适当处理重复(即已经创建)的情况 + if storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil { + updateFields = append(updateFields, model.FieldEbaiID) + } else if storeSku.EbaiID = ebaiapi.GetEbaiSkuIDFromError(err); storeSku.EbaiID > 0 { + // globals.SugarLogger.Debugf("SyncStoreSkus test storeSku.EbaiID:%d, err:%v", storeSku.EbaiID, err) + updateFields = append(updateFields, model.FieldEbaiID) + _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)) + } + } else if storeSku.EbaiSyncStatus&model.SyncFlagStoreSkuModifiedMask != 0 { + if jxutils.IsFakeID(storeSku.EbaiID) { + err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID) + } else { + if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err == nil { + // err = api.EbaiAPI.SkuShopCategoryMap(strStoreID, storeSku.EbaiID, utils.Int64ToStr(storeSku.CatEbaiID)) + } + } + } + } else { + err = fmt.Errorf("SKUANME%d:%s没有图片,同步失败", storeSku.NameID, storeSku.Name) } } }