From 08be46ca0243ed03cae192798b6441a7db56542a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 9 Jan 2020 17:44:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 4 ++-- business/model/dao/store_sku.go | 33 ++++++++++++++++++-------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index a65e65171..72abba655 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -69,7 +69,7 @@ func SyncStoreCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendo rootTask := tasksch.NewSeqTask(fmt.Sprintf("%s SyncStoreCategory step1", model.VendorChineseNames[vendorID]), ctx, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { level := step + 1 - catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level) + catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level, skuIDs) if len(catList) > 0 { num += len(catList) task := tasksch.NewParallelTask(fmt.Sprintf("%s SyncStoreCategory step2, level=%d", model.VendorChineseNames[vendorID], level), @@ -752,7 +752,7 @@ func amendAndPruneStoreStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, v } sku2Delete = nil case 2: - localCatList, err := dao.GetStoreCategories(db, vendorID, storeID, 0, false) + localCatList, err := dao.GetStoreCategories(db, vendorID, storeID, nil, 0, false) if err != nil { return nil, err } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 2204bed55..6b05ec369 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -279,7 +279,7 @@ func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int // 单门店模式厂商适用 // 单纯的从已经创建的store_sku_category_map中,得到相关的同步信息 -func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int, mustDirty bool) (cats []*SkuStoreCatInfo, err error) { +func GetStoreCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int, mustDirty bool) (cats []*SkuStoreCatInfo, err error) { fieldPrefix := ConvertDBFieldPrefix(model.VendorNames[vendorID]) sql := ` SELECT t4.*, @@ -288,16 +288,29 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int, mustDirty b t5p.id parent_map_id, t5p.%s_id parent_vendor_cat_id, t5p.%s_sync_status parent_cat_sync_status FROM store_sku_category_map t5 JOIN sku_category t4 ON t5.category_id = t4.id AND t4.deleted_at = ? + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + } + fieldPrefixParams := []interface{}{fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix} + if len(skuIDs) > 0 { + sql += ` + JOIN ( + SELECT DISTINCT b.category_id + FROM sku a + JOIN sku_name b ON a.name_id = b.id AND b.deleted_at = ? + WHERE 1=1 + AND a.id IN (` + GenQuestionMarks(len(skuIDs)) + `) + AND a.deleted_at = ? + )t6 ON t6.category_id = t4.id + ` + sqlParams = append(sqlParams, utils.DefaultTimeValue, skuIDs, utils.DefaultTimeValue) + } + sql += ` LEFT JOIN sku_category t4p ON t4.parent_id = t4p.id LEFT JOIN store_sku_category_map t5p ON t4p.id = t5p.category_id AND t5.store_id = t5p.store_id AND t5p.deleted_at = ? WHERE t5.store_id = ? AND t5.deleted_at = ?` - fieldPrefixParams := []interface{}{fieldPrefix, fieldPrefix, fieldPrefix, fieldPrefix} - sqlParams := []interface{}{ - utils.DefaultTimeValue, - utils.DefaultTimeValue, - storeID, - utils.DefaultTimeValue, - } + sqlParams = append(sqlParams, utils.DefaultTimeValue, storeID, utils.DefaultTimeValue) if mustDirty { sql += " AND t5.%s_sync_status <> 0" fieldPrefixParams = append(fieldPrefixParams, fieldPrefix) @@ -312,8 +325,8 @@ func GetStoreCategories(db *DaoDB, vendorID, storeID int, level int, mustDirty b return cats, err } -func GetDirtyStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats []*SkuStoreCatInfo, err error) { - return GetStoreCategories(db, vendorID, storeID, level, true) +func GetDirtyStoreCategories(db *DaoDB, vendorID, storeID int, level int, skuIDs []int) (cats []*SkuStoreCatInfo, err error) { + return GetStoreCategories(db, vendorID, storeID, skuIDs, level, true) } // 以store_sku_bind为基础来做同步,正常情况下使用