- purchase platform handler interceptor.
This commit is contained in:
@@ -20,8 +20,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
CurVendorSync VendorSync
|
serviceInfo map[string]interface{}
|
||||||
serviceInfo map[string]interface{}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitServiceInfo(version, buildDate, gitCommit string) {
|
func InitServiceInfo(version, buildDate, gitCommit string) {
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type VendorSync struct {
|
type VendorSync struct {
|
||||||
|
MultiStoreVendorIDs []int
|
||||||
|
SingleStoreVendorIDs []int
|
||||||
|
PurchaseHandlers map[int]partner.IPurchasePlatformHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncError struct {
|
type SyncError struct {
|
||||||
@@ -22,9 +25,18 @@ type SyncError struct {
|
|||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 对于多门店平台接口的通用处理
|
||||||
|
type MultiStoreHandlerWrapper struct {
|
||||||
|
partner.IMultipleStoresHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对于单门店平台接口的通用处理
|
||||||
|
type SingleStoreHandlerWrapper struct {
|
||||||
|
partner.ISingleStoreHandler
|
||||||
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
MultiStoreVendorIDs []int
|
CurVendorSync VendorSync
|
||||||
SingleStoreVendorIDs []int
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -33,20 +45,69 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func Init() {
|
func Init() {
|
||||||
|
CurVendorSync.PurchaseHandlers = make(map[int]partner.IPurchasePlatformHandler)
|
||||||
for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers {
|
for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers {
|
||||||
if _, ok := v.(partner.IMultipleStoresHandler); ok {
|
if multiHandler, ok := v.(partner.IMultipleStoresHandler); ok {
|
||||||
MultiStoreVendorIDs = append(MultiStoreVendorIDs, k)
|
CurVendorSync.MultiStoreVendorIDs = append(CurVendorSync.MultiStoreVendorIDs, k)
|
||||||
} else if _, ok := v.(partner.ISingleStoreHandler); ok {
|
CurVendorSync.PurchaseHandlers[k] = &MultiStoreHandlerWrapper{
|
||||||
SingleStoreVendorIDs = append(SingleStoreVendorIDs, k)
|
IMultipleStoresHandler: multiHandler,
|
||||||
|
}
|
||||||
|
} else if singleHandler, ok := v.(partner.ISingleStoreHandler); ok {
|
||||||
|
CurVendorSync.SingleStoreVendorIDs = append(CurVendorSync.SingleStoreVendorIDs, k)
|
||||||
|
CurVendorSync.PurchaseHandlers[k] = &SingleStoreHandlerWrapper{
|
||||||
|
ISingleStoreHandler: singleHandler,
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
panic(fmt.Sprintf("platform:%d type is wrong!", k))
|
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) {
|
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 := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
|
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int))
|
||||||
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 +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) {
|
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 := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
|
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int))
|
||||||
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
|
||||||
if err2 == nil {
|
if err2 == nil {
|
||||||
cat := &model.SkuCategory{}
|
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) {
|
err = v.LoopStoreMap(db, "SyncStore", userName, storeID, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) {
|
||||||
storeMap := batchItemList[0].(*model.StoreMap)
|
storeMap := batchItemList[0].(*model.StoreMap)
|
||||||
if (vendorID == -1 || vendorID == storeMap.VendorID) && (isForce || storeMap.SyncStatus != 0) {
|
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 {
|
if err = handler.UpdateStore(db, storeID, userName); err == nil {
|
||||||
storeMap.SyncStatus = 0
|
storeMap.SyncStatus = 0
|
||||||
_, err = dao.UpdateEntity(db, storeMap, model.FieldSyncStatus)
|
_, 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) {
|
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 := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
|
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int))
|
||||||
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,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) {
|
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) {
|
||||||
handler := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int))
|
handler := v.GetStoreHandler(batchItemList[0].(int))
|
||||||
err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName)
|
err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName)
|
||||||
return nil, err
|
return nil, err
|
||||||
})
|
})
|
||||||
@@ -186,7 +247,7 @@ func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName st
|
|||||||
if taskName == "" {
|
if taskName == "" {
|
||||||
taskName = "LoopMultiStoresVendors"
|
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)
|
_, err = task.GetResult(0)
|
||||||
return makeSyncError(err)
|
return makeSyncError(err)
|
||||||
}
|
}
|
||||||
@@ -195,9 +256,9 @@ func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, taskName, userName string,
|
|||||||
if taskName == "" {
|
if taskName == "" {
|
||||||
taskName = "LoopStoreVendors"
|
taskName = "LoopStoreVendors"
|
||||||
}
|
}
|
||||||
allHandlers := make([]int, len(MultiStoreVendorIDs)+len(SingleStoreVendorIDs))
|
allHandlers := make([]int, len(v.MultiStoreVendorIDs)+len(v.SingleStoreVendorIDs))
|
||||||
copy(allHandlers, MultiStoreVendorIDs)
|
copy(allHandlers, v.MultiStoreVendorIDs)
|
||||||
copy(allHandlers[len(MultiStoreVendorIDs):], SingleStoreVendorIDs)
|
copy(allHandlers[len(v.MultiStoreVendorIDs):], v.SingleStoreVendorIDs)
|
||||||
task := tasksch.RunManagedTask(taskName, false, nil, len(allHandlers), 1, userName, handler, allHandlers)
|
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)
|
||||||
@@ -211,7 +272,7 @@ func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName st
|
|||||||
if err = dao.GetRows(db, &storeMaps, `
|
if err = dao.GetRows(db, &storeMaps, `
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM store_map
|
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)
|
parellelCount := len(storeMaps)
|
||||||
if parellelCount > 20 {
|
if parellelCount > 20 {
|
||||||
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 {
|
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 := basesch.FixedBaseScheduler.GetPurchasePlatformFromVendorID(batchItemList[0].(int)).(partner.IMultipleStoresHandler)
|
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int))
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user