- refactor sync.

This commit is contained in:
gazebo
2018-10-12 09:16:17 +08:00
parent 6133998e54
commit b70c9c55fb

View File

@@ -23,7 +23,7 @@ type SyncError struct {
} }
var ( var (
MultiStoresVendorHandlers []partner.IMultipleStoresHandler MultiStoreVendorIDs []int
SingleStoreVendorIDs []int SingleStoreVendorIDs []int
) )
@@ -34,8 +34,8 @@ var (
func Init() { func Init() {
for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers { for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers {
if multiHandler, ok := v.(partner.IMultipleStoresHandler); ok { if _, ok := v.(partner.IMultipleStoresHandler); ok {
MultiStoresVendorHandlers = append(MultiStoresVendorHandlers, multiHandler) MultiStoreVendorIDs = append(MultiStoreVendorIDs, k)
} else if _, ok := v.(partner.ISingleStoreHandler); ok { } else if _, ok := v.(partner.ISingleStoreHandler); ok {
SingleStoreVendorIDs = append(SingleStoreVendorIDs, k) SingleStoreVendorIDs = append(SingleStoreVendorIDs, k)
} else { } else {
@@ -46,7 +46,7 @@ func Init() {
func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) { 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) { err = v.LoopMultiStoresVendors(db, "SyncCategory", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName()
var cats []*model.SkuCategory var cats []*model.SkuCategory
cond := make(map[string]interface{}) cond := make(map[string]interface{})
@@ -86,7 +86,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) { 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) { err = v.LoopMultiStoresVendors(db, "SyncReorderCategories", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
if err2 == nil { if err2 == nil {
cat := &model.SkuCategory{} cat := &model.SkuCategory{}
@@ -118,7 +118,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) { 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) 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) { err = v.LoopMultiStoresVendors(db, "SyncSku", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName()
var skuList []*model.Sku var skuList []*model.Sku
cond := make(map[string]interface{}) cond := make(map[string]interface{})
@@ -166,10 +166,8 @@ 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) { func (v *VendorSync) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) {
globals.SugarLogger.Debug("SyncStoresSkus") globals.SugarLogger.Debug("SyncStoresSkus")
err = v.LoopStoreVendors(db, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { err = v.LoopStoreVendors(db, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
vendorID := batchItemList[0].(int) handler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int))
if handler := GetPurchaseHandler(vendorID); handler != nil {
err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName) err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName)
}
return nil, err return nil, err
}) })
return err return err
@@ -185,19 +183,22 @@ func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, taskName, userName string, stor
} }
func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) {
task := tasksch.RunManagedTask(taskName, false, nil, len(MultiStoresVendorHandlers), 1, userName, handler, MultiStoresVendorHandlers) if taskName == "" {
taskName = "LoopMultiStoresVendors"
}
task := tasksch.RunManagedTask(taskName, false, nil, len(MultiStoreVendorIDs), 1, userName, handler, MultiStoreVendorIDs)
_, err = task.GetResult(0) _, err = task.GetResult(0)
return makeSyncError(err) return makeSyncError(err)
} }
func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) {
vendorIDs := make([]int, len(basesch.FixedBaseScheduler.PurchasePlatformHandlers)) if taskName == "" {
index := 0 taskName = "LoopStoreVendors"
for k := range basesch.FixedBaseScheduler.PurchasePlatformHandlers {
vendorIDs[index] = k
index++
} }
task := tasksch.RunManagedTask(taskName, false, nil, len(vendorIDs), 1, userName, handler, vendorIDs) allHandlers := make([]int, len(MultiStoreVendorIDs)+len(SingleStoreVendorIDs))
copy(allHandlers, MultiStoreVendorIDs)
copy(allHandlers[len(MultiStoreVendorIDs):], SingleStoreVendorIDs)
task := tasksch.RunManagedTask(taskName, false, nil, len(allHandlers), 1, userName, handler, allHandlers)
_, err = task.GetResult(0) _, err = task.GetResult(0)
return makeSyncError(err) return makeSyncError(err)
} }
@@ -243,7 +244,7 @@ func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName str
if err = dao.GetRows(db, &ids, sql, sqlParams); err == nil { if err = dao.GetRows(db, &ids, sql, sqlParams); err == nil {
// globals.SugarLogger.Debug(utils.Format4Output(ids, false)) // globals.SugarLogger.Debug(utils.Format4Output(ids, false))
err = v.LoopMultiStoresVendors(db, "RefreshSkuIDs", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { err = v.LoopMultiStoresVendors(db, "RefreshSkuIDs", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) multiStoresHandler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
err := multiStoresHandler.SyncSkusIDMap(db, ids, userName) err := multiStoresHandler.SyncSkusIDMap(db, ids, userName)
globals.SugarLogger.Debug(err) globals.SugarLogger.Debug(err)
return nil, err return nil, err