LoopMultiStoresVendors引入OrgCode

This commit is contained in:
gazebo
2019-12-03 18:27:53 +08:00
parent 457bd4b0a2
commit 55fdde9be2
4 changed files with 30 additions and 23 deletions

View File

@@ -38,6 +38,11 @@ type SingleStoreHandlerWrapper struct {
partner.ISingleStoreHandler partner.ISingleStoreHandler
} }
type tMultiStoreVendorInfo struct {
VendorID int
OrgCode string
}
var ( var (
CurVendorSync VendorSync CurVendorSync VendorSync
) )
@@ -96,6 +101,20 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan
return nil return nil
} }
func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) {
vendorIDs := partner.GetMultiStoreVendorIDs()
for _, vendorID := range vendorIDs {
orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID)
for _, v := range orgCodeList {
list = append(list, &tMultiStoreVendorInfo{
VendorID: vendorID,
OrgCode: v,
})
}
}
return list
}
func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) { func (v *VendorSync) syncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) {
multiStoresHandler := v.GetMultiStoreHandler(vendorID) multiStoresHandler := v.GetMultiStoreHandler(vendorID)
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[vendorID]) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[vendorID])
@@ -132,7 +151,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor
globals.SugarLogger.Debug("SyncCategory") globals.SugarLogger.Debug("SyncCategory")
hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false, hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
vendorID := batchItemList[0].(int) vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo)
var cats []*model.SkuCategory var cats []*model.SkuCategory
cond := make(map[string]interface{}) cond := make(map[string]interface{})
if categoryID > 0 { if categoryID > 0 {
@@ -142,7 +161,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor
} }
err := dao.GetEntitiesByKV(db, &cats, cond, true) err := dao.GetEntitiesByKV(db, &cats, cond, true)
if err == nil { if err == nil {
err = v.syncCategories(ctx, t, vendorID, db, cats, userName) err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
} }
if err != nil || categoryID > 0 { if err != nil || categoryID > 0 {
return nil, err return nil, err
@@ -150,7 +169,7 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor
cond[model.FieldLevel] = 2 cond[model.FieldLevel] = 2
err = dao.GetEntitiesByKV(db, &cats, cond, true) err = dao.GetEntitiesByKV(db, &cats, cond, true)
if err == nil { if err == nil {
err = v.syncCategories(ctx, t, vendorID, db, cats, userName) err = v.syncCategories(ctx, t, vendorInfo.VendorID, db, cats, userName)
} }
return nil, err return nil, err
}) })
@@ -159,7 +178,8 @@ func (v *VendorSync) SyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, categor
func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) { func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) {
hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo)
multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName)
if err2 == nil { if err2 == nil {
cat := &model.SkuCategory{} cat := &model.SkuCategory{}
@@ -236,8 +256,8 @@ func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []i
return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt, return v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步商品信息, nameIDs:%v, skuIDs:%v", nameIDs, skuIDs), isAsync, isManagedIt,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
var resultList []interface{} var resultList []interface{}
vendorID := batchItemList[0].(int) vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo)
multiStoresHandler := v.GetMultiStoreHandler(vendorID) multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID)
syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()])
dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()]) dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()])
skuMap := make(map[int]bool) skuMap := make(map[int]bool)
@@ -266,7 +286,7 @@ func (v *VendorSync) SyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs []i
err := dao.GetRows(db, &skuNameList, sql, sqlParams...) err := dao.GetRows(db, &skuNameList, sql, sqlParams...)
if err == nil && len(skuNameList) > 0 { if err == nil && len(skuNameList) > 0 {
// todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题 // todo 同一skuName下的sku顺序处理的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题
task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorID]), tasksch.NewParallelConfig().SetParallelCount(10).SetIsContinueWhenError(isContinueWhenError), ctx, task := tasksch.NewParallelTask(fmt.Sprintf("处理平台%s", model.VendorChineseNames[vendorInfo.VendorID]), tasksch.NewParallelConfig().SetParallelCount(10).SetIsContinueWhenError(isContinueWhenError), ctx,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) {
var resultList []interface{} var resultList []interface{}
skuName := batchItemList[0].(*model.SkuName) skuName := batchItemList[0].(*model.SkuName)
@@ -562,7 +582,7 @@ func (v *VendorSync) LoopStoresMap(ctx *jxcontext.Context, db *dao.DaoDB, taskNa
} }
func (v *VendorSync) LoopMultiStoresVendors(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync bool, isManageIt bool, handler tasksch.WorkFunc) (hint string, err error) { func (v *VendorSync) LoopMultiStoresVendors(ctx *jxcontext.Context, db *dao.DaoDB, taskName string, isAsync bool, isManageIt bool, handler tasksch.WorkFunc) (hint string, err error) {
task := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, partner.GetMultiStoreVendorIDs()) task := tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, getMultiStoreVendorInfoList())
tasksch.HandleTask(task, nil, isManageIt).Run() tasksch.HandleTask(task, nil, isManageIt).Run()
if !isAsync { if !isAsync {
result, err2 := task.GetResult(0) result, err2 := task.GetResult(0)

View File

@@ -2,7 +2,6 @@ package partner
type IAPIManager interface { type IAPIManager interface {
GetAPI(vendorID int, appOrgCode string) interface{} GetAPI(vendorID int, appOrgCode string) interface{}
GetAPIList(vendorID int) []interface{}
GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string)
} }

View File

@@ -30,9 +30,9 @@ func GetAPIByToken(token string) (apiObj *jdapi.API) {
if token == "" { if token == "" {
apiObj = getAPI("") apiObj = getAPI("")
} else { } else {
apiList := partner.CurAPIManager.GetAPIList(model.VendorIDJD) apiList := partner.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD)
for _, v := range apiList { for _, v := range apiList {
jdAPI := v.(*jdapi.API) jdAPI := partner.CurAPIManager.GetAPI(model.VendorIDJD, v).(*jdapi.API)
if jdAPI.GetToken() == token { if jdAPI.GetToken() == token {
apiObj = jdAPI apiObj = jdAPI
break break

View File

@@ -38,18 +38,6 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{})
return pfAPI return pfAPI
} }
func (a *APIManager) GetAPIList(vendorID int) (pfAPIList []interface{}) {
switch vendorID {
case model.VendorIDJD:
pfAPIList = []interface{}{api.JdAPI}
case model.VendorIDMTWM:
pfAPIList = []interface{}{api.MtwmAPI}
case model.VendorIDEBAI:
pfAPIList = []interface{}{api.EbaiAPI}
}
return pfAPIList
}
func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) { func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) {
switch vendorID { switch vendorID {
case model.VendorIDJD: case model.VendorIDJD: