From 297f0a125f168476e8f2b2ce6efd469fdd4cdc14 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 12 Oct 2018 11:41:16 +0800 Subject: [PATCH] - purchase platform handler interceptor. --- business/jxstore/cms/cms.go | 3 +- business/jxstore/cms/sync.go | 95 +++++++++++++++++++++++++++++------- 2 files changed, 79 insertions(+), 19 deletions(-) diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index a9723624e..5a8cb0a10 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -20,8 +20,7 @@ const ( ) var ( - CurVendorSync VendorSync - serviceInfo map[string]interface{} + serviceInfo map[string]interface{} ) func InitServiceInfo(version, buildDate, gitCommit string) { diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 2cb8d1961..7812c1a51 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -15,6 +15,9 @@ import ( ) type VendorSync struct { + MultiStoreVendorIDs []int + SingleStoreVendorIDs []int + PurchaseHandlers map[int]partner.IPurchasePlatformHandler } type SyncError struct { @@ -22,9 +25,18 @@ type SyncError struct { Message string `json:"message"` } +// 对于多门店平台接口的通用处理 +type MultiStoreHandlerWrapper struct { + partner.IMultipleStoresHandler +} + +// 对于单门店平台接口的通用处理 +type SingleStoreHandlerWrapper struct { + partner.ISingleStoreHandler +} + var ( - MultiStoreVendorIDs []int - SingleStoreVendorIDs []int + CurVendorSync VendorSync ) var ( @@ -33,20 +45,69 @@ var ( ) func Init() { + CurVendorSync.PurchaseHandlers = make(map[int]partner.IPurchasePlatformHandler) for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers { - if _, ok := v.(partner.IMultipleStoresHandler); ok { - MultiStoreVendorIDs = append(MultiStoreVendorIDs, k) - } else if _, ok := v.(partner.ISingleStoreHandler); ok { - SingleStoreVendorIDs = append(SingleStoreVendorIDs, k) + if multiHandler, ok := v.(partner.IMultipleStoresHandler); ok { + CurVendorSync.MultiStoreVendorIDs = append(CurVendorSync.MultiStoreVendorIDs, k) + CurVendorSync.PurchaseHandlers[k] = &MultiStoreHandlerWrapper{ + IMultipleStoresHandler: multiHandler, + } + } else if singleHandler, ok := v.(partner.ISingleStoreHandler); ok { + CurVendorSync.SingleStoreVendorIDs = append(CurVendorSync.SingleStoreVendorIDs, k) + CurVendorSync.PurchaseHandlers[k] = &SingleStoreHandlerWrapper{ + ISingleStoreHandler: singleHandler, + } } else { panic(fmt.Sprintf("platform:%d type is wrong!", k)) } } } +func (p *MultiStoreHandlerWrapper) DeleteCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { + if jxutils.IsFakeID(cat.JdID) { + return nil + } + return p.IMultipleStoresHandler.DeleteCategory(db, cat, userName) +} + +func (p *MultiStoreHandlerWrapper) UpdateCategory(db *dao.DaoDB, cat *model.SkuCategory, userName string) (err error) { + if jxutils.IsFakeID(cat.JdID) { + globals.SugarLogger.Warnf("UpdateCategory fakeid cat:%s should not get here", utils.Format4Output(cat, true)) + return nil + } + return p.IMultipleStoresHandler.UpdateCategory(db, cat, userName) +} + +func (p *MultiStoreHandlerWrapper) DeleteSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { + if jxutils.IsFakeID(sku.JdID) { + return nil + } + return p.IMultipleStoresHandler.DeleteSku(db, sku, userName) +} + +func (p *MultiStoreHandlerWrapper) UpdateSku(db *dao.DaoDB, sku *model.Sku, userName string) (err error) { + if jxutils.IsFakeID(sku.JdID) { + globals.SugarLogger.Warnf("UpdateSku fakeid sku:%s should not get here", utils.Format4Output(sku, true)) + return nil + } + return p.IMultipleStoresHandler.UpdateSku(db, sku, userName) +} + +func (v *VendorSync) GetStoreHandler(vendorID int) partner.IPurchasePlatformHandler { + return v.PurchaseHandlers[vendorID] +} + +func (v *VendorSync) GetMultiStoreHandler(vendorID int) partner.IMultipleStoresHandler { + return v.PurchaseHandlers[vendorID].(partner.IMultipleStoresHandler) +} + +func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHandler { + return v.PurchaseHandlers[vendorID].(partner.ISingleStoreHandler) +} + func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) { err = v.LoopMultiStoresVendors(db, "SyncCategory", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler) + multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() var cats []*model.SkuCategory cond := make(map[string]interface{}) @@ -86,7 +147,7 @@ func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, u func (v *VendorSync) SyncReorderCategories(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) { err = v.LoopMultiStoresVendors(db, "SyncReorderCategories", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler) + multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { cat := &model.SkuCategory{} @@ -103,7 +164,7 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce boo err = v.LoopStoreMap(db, "SyncStore", userName, storeID, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { storeMap := batchItemList[0].(*model.StoreMap) if (vendorID == -1 || vendorID == storeMap.VendorID) && (isForce || storeMap.SyncStatus != 0) { - if handler := GetPurchaseHandler(storeMap.VendorID); handler != nil { + if handler := v.GetStoreHandler(storeMap.VendorID); handler != nil { if err = handler.UpdateStore(db, storeID, userName); err == nil { storeMap.SyncStatus = 0 _, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) @@ -118,7 +179,7 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce boo func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, userName string) (err error) { globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, isForce:%t, userName:%s", nameID, skuID, isForce, userName) err = v.LoopMultiStoresVendors(db, "SyncSku", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler) + multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() var skuList []*model.Sku cond := make(map[string]interface{}) @@ -166,7 +227,7 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use func (v *VendorSync) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) { globals.SugarLogger.Debug("SyncStoresSkus") err = v.LoopStoreVendors(db, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - handler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)) + handler := v.GetStoreHandler(batchItemList[0].(int)) err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName) return nil, err }) @@ -186,7 +247,7 @@ func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName st if taskName == "" { taskName = "LoopMultiStoresVendors" } - task := tasksch.RunManagedTask(taskName, false, nil, len(MultiStoreVendorIDs), 1, userName, handler, MultiStoreVendorIDs) + task := tasksch.RunManagedTask(taskName, false, nil, len(v.MultiStoreVendorIDs), 1, userName, handler, v.MultiStoreVendorIDs) _, err = task.GetResult(0) return makeSyncError(err) } @@ -195,9 +256,9 @@ func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, taskName, userName string, if taskName == "" { taskName = "LoopStoreVendors" } - allHandlers := make([]int, len(MultiStoreVendorIDs)+len(SingleStoreVendorIDs)) - copy(allHandlers, MultiStoreVendorIDs) - copy(allHandlers[len(MultiStoreVendorIDs):], SingleStoreVendorIDs) + allHandlers := make([]int, len(v.MultiStoreVendorIDs)+len(v.SingleStoreVendorIDs)) + copy(allHandlers, v.MultiStoreVendorIDs) + copy(allHandlers[len(v.MultiStoreVendorIDs):], v.SingleStoreVendorIDs) task := tasksch.RunManagedTask(taskName, false, nil, len(allHandlers), 1, userName, handler, allHandlers) _, err = task.GetResult(0) return makeSyncError(err) @@ -211,7 +272,7 @@ func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName st if err = dao.GetRows(db, &storeMaps, ` SELECT * FROM store_map - WHERE vendor_id IN (`+dao.GenQuestionMarks(len(SingleStoreVendorIDs))+")", SingleStoreVendorIDs); err == nil { + WHERE vendor_id IN (`+dao.GenQuestionMarks(len(v.SingleStoreVendorIDs))+")", v.SingleStoreVendorIDs); err == nil { parellelCount := len(storeMaps) if parellelCount > 20 { parellelCount = 20 @@ -244,7 +305,7 @@ func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName str if err = dao.GetRows(db, &ids, sql, sqlParams); err == nil { // globals.SugarLogger.Debug(utils.Format4Output(ids, false)) err = v.LoopMultiStoresVendors(db, "RefreshSkuIDs", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler) + multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) err := multiStoresHandler.SyncSkusIDMap(db, ids, userName) globals.SugarLogger.Debug(err) return nil, err