From db85de745458cbd043f0222edef792f7facd2b4c Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 11 Dec 2019 22:30:32 +0800 Subject: [PATCH] +FullSyncVendorStuff --- business/jxstore/cms/sku.go | 30 ++-- business/jxstore/cms/sync.go | 6 +- business/jxstore/cms/sync2.go | 220 ++++++++++++++++++++++++-- business/partner/partner.go | 4 +- business/partner/purchase/jd/sku2.go | 14 +- business/partner/purchase/jx/sku.go | 4 +- controllers/cms_sync.go | 17 ++ routers/commentsRouter_controllers.go | 9 ++ 8 files changed, 263 insertions(+), 41 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index a7910e7a4..fb8f1d072 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -118,7 +118,7 @@ func AddCategory(ctx *jxcontext.Context, cat *model.SkuCategory, userName string dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(cat.ID), model.ThingTypeCategory); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(cat.ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return nil, err } @@ -156,7 +156,7 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -250,7 +250,7 @@ func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, dao.Rollback(db) return err } - if err = OnUpdateThing(ctx, db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return err } @@ -302,7 +302,7 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx, db, int64(categoryID), model.ThingTypeCategory); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } @@ -685,7 +685,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -699,7 +699,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -798,7 +798,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf dao.Rollback(db) return 0, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -835,7 +835,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf return 0, err } - if err = OnUpdateThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -898,7 +898,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int if err = err2; err == nil { for _, v := range skuList { sku := &v.Sku - if err = OnDeleteThing(ctx, db, int64(v.ID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(v.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -912,7 +912,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int } } - if err = OnDeleteThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } @@ -961,7 +961,7 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) dao.Rollback(db) return nil, err } - if err = OnCreateThing(ctx, db, int64(sku.ID), model.ThingTypeSku); err != nil { + if err = OnCreateThing(ctx, db, nil, int64(sku.ID), model.ThingTypeSku); err != nil { dao.Rollback(db) return nil, err } @@ -1022,7 +1022,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } return 0, err } - if err = OnUpdateThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1087,7 +1087,7 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e dao.Rollback(db) return 0, err } - if err = OnDeleteThing(ctx, db, int64(skuID), model.ThingTypeSku); err != nil { + if err = OnDeleteThing(ctx, db, nil, int64(skuID), model.ThingTypeSku); err != nil { dao.Rollback(db) return 0, err } @@ -1167,7 +1167,7 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str dao.Rollback(db) return nil, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return nil, err } @@ -1197,7 +1197,7 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName } return 0, err } - if err = OnUpdateThing(ctx, db, int64(nameID), model.ThingTypeSkuName); err != nil { + if err = OnUpdateThing(ctx, db, nil, int64(nameID), model.ThingTypeSkuName); err != nil { dao.Rollback(db) return 0, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 3e4a711c3..02244463a 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -139,7 +139,7 @@ func (v *VendorSync) oldSyncCategory(ctx *jxcontext.Context, db *dao.DaoDB, cate globals.SugarLogger.Debug("SyncCategory") hint, err = v.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("同步分类信息:%d", categoryID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) var cats []*model.SkuCategory cond := make(map[string]interface{}) if categoryID > 0 { @@ -173,7 +173,7 @@ func (v *VendorSync) SyncReorderCategories(ctx *jxcontext.Context, db *dao.DaoDB func (v *VendorSync) oldSyncReorderCategories(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) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { @@ -260,7 +260,7 @@ func (v *VendorSync) oldSyncSkus(ctx *jxcontext.Context, db *dao.DaoDB, nameIDs 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) { var resultList []interface{} - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := v.GetMultiStoreHandler(vendorInfo.VendorID) syncStatusFieldName := dao.GetSyncStatusStructField(model.VendorNames[multiStoresHandler.GetVendorID()]) dbField := dao.ConvertDBFieldPrefix(model.VendorNames[multiStoresHandler.GetVendorID()]) diff --git a/business/jxstore/cms/sync2.go b/business/jxstore/cms/sync2.go index 2cdb89960..0dcbcf384 100644 --- a/business/jxstore/cms/sync2.go +++ b/business/jxstore/cms/sync2.go @@ -12,10 +12,11 @@ import ( "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" "git.rosy.net.cn/jx-callback/globals" ) -type tMultiStoreVendorInfo struct { +type MultiStoreVendorInfo struct { VendorID int OrgCode string } @@ -24,12 +25,12 @@ func CombineVendorIDAndOrgCode(vendorID int, orgCode string) string { return fmt.Sprintf("%d-%s", vendorID, orgCode) } -func getMultiStoreVendorInfoList() (list []*tMultiStoreVendorInfo) { +func getMultiStoreVendorInfoList() (list []*MultiStoreVendorInfo) { vendorIDs := partner.GetMultiStoreVendorIDs() for _, vendorID := range vendorIDs { orgCodeList := partner.CurAPIManager.GetAppOrgCodeList(vendorID) for _, v := range orgCodeList { - list = append(list, &tMultiStoreVendorInfo{ + list = append(list, &MultiStoreVendorInfo{ VendorID: vendorID, OrgCode: v, }) @@ -51,7 +52,7 @@ func SyncCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs if model.IsSyncStatusDelete(catVendorInfo.CatSyncStatus) { //删除 if !dao.IsVendorThingIDEmpty(catVendorInfo.VendorCatID) && model.IsSyncStatusNeedDelete(catVendorInfo.CatSyncStatus) { - err = multiStoresHandler.DeleteCategory2(ctx, catVendorInfo) + err = multiStoresHandler.DeleteCategory2(ctx, catVendorInfo.VendorOrgCode, catVendorInfo.VendorCatID) } } else if model.IsSyncStatusNew(catVendorInfo.CatSyncStatus) { // 新增 err = multiStoresHandler.CreateCategory2(ctx, catVendorInfo) @@ -94,7 +95,7 @@ func SyncSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs []int, if model.IsSyncStatusDelete(skuVendorInfo.SkuSyncStatus) { //删除 if !dao.IsVendorThingIDEmpty(skuVendorInfo.VendorSkuID) && model.IsSyncStatusNeedDelete(skuVendorInfo.SkuSyncStatus) { - err = multiStoresHandler.DeleteSku2(ctx, skuVendorInfo) + err = multiStoresHandler.DeleteSku2(ctx, skuVendorInfo.VendorOrgCode, storeSkuSyncInfo2Bare(skuVendorInfo)) } } else if model.IsSyncStatusNew(skuVendorInfo.SkuSyncStatus) { // 新增 err = multiStoresHandler.CreateSku2(ctx, skuVendorInfo) @@ -127,7 +128,7 @@ func SyncReorderCategories(ctx *jxcontext.Context, parentCatID int, isAsync bool db := dao.GetDB() hint, err = CurVendorSync.LoopMultiStoresVendors(ctx, db, fmt.Sprintf("分类重排序:%d", parentCatID), isAsync, false, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - vendorInfo := batchItemList[0].(*tMultiStoreVendorInfo) + vendorInfo := batchItemList[0].(*MultiStoreVendorInfo) multiStoresHandler := CurVendorSync.GetMultiStoreHandler(vendorInfo.VendorID) if multiStoresHandler != nil { catList, err2 := dao.GetSkuCategoryWithVendor(db, []int{vendorInfo.VendorID}, []string{vendorInfo.OrgCode}, parentCatID, nil, false) @@ -152,12 +153,19 @@ func SyncReorderCategories(ctx *jxcontext.Context, parentCatID int, isAsync bool return hint, err } -func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func getThingMap(db *dao.DaoDB, thingMap *model.ThingMap) (err error) { + return dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt) +} + +func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -176,12 +184,15 @@ func OnCreateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy return err } -func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -189,14 +200,14 @@ func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy VendorOrgCode: v.OrgCode, } thingMap.DeletedAt = utils.DefaultTimeValue - if err2 := dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err2 == nil { + if err2 := getThingMap(db, thingMap); err2 == nil { thingMap.SyncStatus |= model.SyncFlagModifiedMask thingMap.LastOperator = ctx.GetUserName() _, err2 = dao.UpdateEntity(db, thingMap) errList.AddErr(err2) updateThingMapEntity(db, thingMap) - } else if !dao.IsNoRowsError(err2) { + } else { errList.AddErr(err2) } } @@ -206,12 +217,15 @@ func OnUpdateThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy return err } -func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingType int8) (err error) { +func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, vendorInfoList []*MultiStoreVendorInfo, thingID int64, thingType int8) (err error) { if thingType == model.ThingTypeSkuName { return nil } + if len(vendorInfoList) == 0 { + vendorInfoList = getMultiStoreVendorInfoList() + } errList := errlist.New() - for _, v := range getMultiStoreVendorInfoList() { + for _, v := range vendorInfoList { thingMap := &model.ThingMap{ ThingID: thingID, ThingType: thingType, @@ -219,7 +233,7 @@ func OnDeleteThing(ctx *jxcontext.Context, db *dao.DaoDB, thingID int64, thingTy VendorOrgCode: v.OrgCode, } thingMap.DeletedAt = utils.DefaultTimeValue - if err2 := dao.GetEntity(db, thingMap, "ThingID", "ThingType", "VendorID", "VendorOrgCode", model.FieldDeletedAt); err2 == nil { + if err2 := getThingMap(db, thingMap); err2 == nil { if model.IsSyncStatusNew(thingMap.SyncStatus) { thingMap.SyncStatus = 0 thingMap.DeletedAt = time.Now() @@ -318,3 +332,179 @@ func updateThingMapEntity(db *dao.DaoDB, thingMap *model.ThingMap) { dao.UpdateEntity(db, sku, "JdID", "JdSyncStatus") } } + +func amendAndPruneVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, isAsync, isContinueWhenError bool, opType int, isForceUpdate bool) (hint string, err error) { + handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) + if handler == nil { + return "", fmt.Errorf("平台:%s不支持此操作", model.VendorChineseNames[vendorID]) + } + db := dao.GetDB() + vendorInfo := []*MultiStoreVendorInfo{ + &MultiStoreVendorInfo{ + VendorID: vendorID, + OrgCode: vendorOrgCode, + }, + } + var sku2Delete []*partner.StoreSkuInfo + var cat2Delete []*partner.BareCategoryInfo + task := tasksch.NewParallelTask(fmt.Sprintf("平台:%s,账号:%s上的商品与商家分类", model.VendorChineseNames[vendorID], vendorOrgCode), + tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + step := batchItemList[0].(int) + switch step { + case 0: + localSkuList, err := dao.GetSkusWithVendor(db, []int{vendorID}, []string{vendorOrgCode}, nil, nil, false) + if err != nil { + return nil, err + } + localSkuMap := make(map[string]*dao.StoreSkuSyncInfo) + for _, v := range localSkuList { + if v.VendorSkuID != "" { + localSkuMap[v.VendorSkuID] = v + } + } + + remoteSkuList, err2 := handler.GetSkus(ctx, vendorOrgCode, 0, "") + if err = err2; err == nil { + remoteSkuMap := make(map[string]int) + for _, v := range remoteSkuList { + if vendorSkuID := v.SkuList[0].VendorSkuID; vendorSkuID != "" { + if localSkuMap[vendorSkuID] == nil { + sku2Delete = append(sku2Delete, &partner.StoreSkuInfo{ + SkuID: v.SkuList[0].SkuID, + VendorSkuID: vendorSkuID, + }) + } else { + remoteSkuMap[vendorSkuID] = 1 + } + } else if v.VendorNameID != "" { + sku2Delete = append(sku2Delete, &partner.StoreSkuInfo{ + SkuID: v.NameID, + VendorSkuID: v.VendorNameID, + }) + } + } + + if opType == AmendPruneOnlyAmend || opType == AmendPruneAll { + for _, v := range localSkuList { + if v.BindID != 0 { + if !model.IsSyncStatusDelete(v.SkuSyncStatus) { + if remoteSkuMap[v.VendorSkuID] == 0 { + if !model.IsSyncStatusNew(v.SkuSyncStatus) { + OnCreateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } else if isForceUpdate { + OnUpdateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } + } else { + OnCreateThing(ctx, db, vendorInfo, int64(v.SkuID), model.ThingTypeSku) + } + } + } + } + case 1: + if (opType == AmendPruneOnlyPrune || opType == AmendPruneAll) && len(sku2Delete) > 0 { + _, err = putils.FreeBatchStoreSkuInfo("删除商品", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { + if err = handler.DeleteSku2(ctx, vendorOrgCode, batchedStoreSkuList[0]); err == nil { + successCount = 1 + } + return nil, successCount, err + }, ctx, task, sku2Delete, 1, isContinueWhenError) + } + sku2Delete = nil + case 2: + localCatList, err := dao.GetSkuCategoryWithVendor(db, []int{vendorID}, []string{vendorOrgCode}, -1, nil, false) + if err != nil { + return nil, err + } + localCatMap := make(map[string]*dao.SkuStoreCatInfo) + for _, v := range localCatList { + localCatMap[v.VendorCatID] = v + localCatMap[v.Name] = v + localCatMap[utils.Int2Str(v.ID)] = v + } + + remoteCatList, err2 := handler.GetAllCategories(ctx, vendorOrgCode) + if err = err2; err == nil { + remoteCatMap := make(map[string]int) + cat2Delete = checkRemoteCatExist(remoteCatMap, localCatMap, remoteCatList) + + for _, v := range localCatList { + if v.MapID != 0 { + if !model.IsSyncStatusDelete(v.CatSyncStatus) { + if remoteCatMap[v.VendorCatID] == 0 { + if !model.IsSyncStatusNew(v.CatSyncStatus) { + OnCreateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } else if isForceUpdate && !model.IsSyncStatusUpdate(v.CatSyncStatus) { + OnUpdateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } + } else { + OnCreateThing(ctx, db, vendorInfo, int64(v.ID), model.ThingTypeCategory) + } + } + } + case 3: + if (opType == AmendPruneOnlyPrune || opType == AmendPruneAll) && len(cat2Delete) > 0 { + for i := 0; i < 2; i++ { + level := 2 - i + var levelCat2Delete []*partner.BareCategoryInfo + for _, v := range cat2Delete { + if v.Level == level { + levelCat2Delete = append(levelCat2Delete, v) + } + } + if len(levelCat2Delete) > 0 { + task4Delete := tasksch.NewParallelTask(fmt.Sprintf("删除商家分类,level:%d", level), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + cat := batchItemList[0].(*partner.BareCategoryInfo) + err = handler.DeleteCategory2(ctx, vendorOrgCode, cat.VendorCatID) + return nil, err + }, levelCat2Delete) + tasksch.HandleTask(task4Delete, task, true).Run() + _, err = task4Delete.GetResult(0) + } + } + } + cat2Delete = nil + } + return nil, err + }, []int{0, 1, 2, 3}) + tasksch.HandleTask(task, parentTask, true).Run() + if !isAsync { + _, err = task.GetResult(0) + hint = "1" + } else { + hint = task.ID + } + return hint, err +} + +func FullSyncVendorStuff(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID int, vendorOrgCode string, isAsync, isContinueWhenError bool) (hint string, err error) { + multiStoreHandler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IMultipleStoresHandler) + if multiStoreHandler == nil { + return "", fmt.Errorf("vendorID:%d不是多门店平台", vendorID) + } + task := tasksch.NewParallelTask("FullSyncStoreSkuNew", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + step := batchItemList[0].(int) + switch step { + case 0: + _, err = amendAndPruneVendorStuff(ctx, task, vendorID, vendorOrgCode, false, isContinueWhenError, AmendPruneAll, false) + case 1: + _, err = SyncCategories(ctx, task, []int{vendorID}, []string{vendorOrgCode}, nil, false) + case 2: + _, err = SyncSkus(ctx, task, []int{vendorID}, []string{vendorOrgCode}, nil, nil, false) + } + return retVal, err + }, []int{0, 1, 2}) + tasksch.HandleTask(task, parentTask, true).Run() + if !isAsync { + _, err = task.GetResult(0) + } else { + hint = task.GetID() + } + return hint, err +} diff --git a/business/partner/partner.go b/business/partner/partner.go index f7983c454..f9146c15d 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -163,7 +163,7 @@ type IMultipleStoresHandler interface { CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) - DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) + DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) ReorderCategories2(ctx *jxcontext.Context, vendorOrgCode, vendorParentCatID string, vendorCatIDList []string) (err error) // sku @@ -174,7 +174,7 @@ type IMultipleStoresHandler interface { // ReadSku(ctx *jxcontext.Context, vendorOrgCode, vendorSkuID string) (skuNameExt *model.SkuNameExt, err error) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) - DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) + DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *StoreSkuInfo) (err error) // RefreshAllSkusID(ctx *jxcontext.Context, parentTask tasksch.ITask, isAsync bool) (hint string, err error) diff --git a/business/partner/purchase/jd/sku2.go b/business/partner/purchase/jd/sku2.go index bf82c3bfa..857cc5c33 100644 --- a/business/partner/purchase/jd/sku2.go +++ b/business/partner/purchase/jd/sku2.go @@ -70,6 +70,7 @@ func (p *PurchaseHandler) GetAllCategories(ctx *jxcontext.Context, vendorOrgCode } func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { + globals.SugarLogger.Debugf("CreateCategory2 cat:%s", utils.Format4Output(cat, true)) if globals.EnableJdStoreWrite { result, err2 := getAPI(cat.VendorOrgCode).AddShopCategory(utils.Str2Int64(cat.ParentVendorCatID), cat.Name, int(cat.Level), cat.Seq, ctx.GetUserName()) if err = err2; err == nil { @@ -84,15 +85,17 @@ func (p *PurchaseHandler) CreateCategory2(ctx *jxcontext.Context, cat *dao.SkuSt } func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { + globals.SugarLogger.Debugf("UpdateCategory2 cat:%s", utils.Format4Output(cat, true)) if globals.EnableJdStoreWrite { err = getAPI(cat.VendorOrgCode).UpdateShopCategory(utils.Str2Int64(cat.VendorCatID), cat.Name) } return err } -func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { +func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) { + globals.SugarLogger.Debugf("DeleteCategory2 vendorOrgCode:%s, vendorCatID:%s", vendorOrgCode, vendorCatID) if globals.EnableJdStoreWrite { - err = getAPI(cat.VendorOrgCode).DelShopCategory(utils.Str2Int64(cat.VendorCatID)) + err = getAPI(vendorOrgCode).DelShopCategory(utils.Str2Int64(vendorCatID)) } return err } @@ -171,6 +174,7 @@ func skuInfo2Param(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (param *jd } func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { + globals.SugarLogger.Debugf("CreateSku2 sku:%s", utils.Format4Output(sku, true)) param := skuInfo2Param(ctx, sku) if globals.EnableJdStoreWrite { sku.VendorSkuID, err = getAPI(sku.VendorOrgCode).AddSku2(param) @@ -181,6 +185,7 @@ func (p *PurchaseHandler) CreateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy } func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { + globals.SugarLogger.Debugf("UpdateSku2 sku:%s", utils.Format4Output(sku, true)) param := skuInfo2Param(ctx, sku) if globals.EnableJdStoreWrite { _, err = getAPI(sku.VendorOrgCode).UpdateSku2(param) @@ -188,14 +193,15 @@ func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy return err } -func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { +func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *partner.StoreSkuInfo) (err error) { + globals.SugarLogger.Debugf("DeleteSku2 vendorOrgCode:%s, sku:%s", vendorOrgCode, utils.Format4Output(sku, true)) param := &jdapi.OpSkuParam{ TraceID: ctx.GetTrackInfo(), OutSkuID: utils.Int2Str(sku.SkuID), FixedStatus: jdapi.SkuFixedStatusDeleted, } if globals.EnableJdStoreWrite { - _, err = getAPI(sku.VendorOrgCode).UpdateSku2(param) + _, err = getAPI(vendorOrgCode).UpdateSku2(param) } return err } diff --git a/business/partner/purchase/jx/sku.go b/business/partner/purchase/jx/sku.go index 416c61241..7673a1423 100644 --- a/business/partner/purchase/jx/sku.go +++ b/business/partner/purchase/jx/sku.go @@ -37,7 +37,7 @@ func (p *PurchaseHandler) UpdateCategory2(ctx *jxcontext.Context, cat *dao.SkuSt return err } -func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, cat *dao.SkuStoreCatInfo) (err error) { +func (p *PurchaseHandler) DeleteCategory2(ctx *jxcontext.Context, vendorOrgCode, vendorCatID string) (err error) { return err } @@ -69,7 +69,7 @@ func (p *PurchaseHandler) UpdateSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSy return err } -func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, sku *dao.StoreSkuSyncInfo) (err error) { +func (p *PurchaseHandler) DeleteSku2(ctx *jxcontext.Context, vendorOrgCode string, sku *partner.StoreSkuInfo) (err error) { return err } diff --git a/controllers/cms_sync.go b/controllers/cms_sync.go index a7f06c3bb..77f08bbb7 100644 --- a/controllers/cms_sync.go +++ b/controllers/cms_sync.go @@ -201,3 +201,20 @@ func (c *SyncController) AddCreateFlagForJxStoreSku() { return retVal, "", err }) } + +// @Title 初始化多门店平台商品库(及商家分类) +// @Description 初始化多门店平台商品库(及商家分类) +// @Param token header string true "认证token" +// @Param vendorID formData int true "平台ID(京东0 美团1 饿百3)" +// @Param vendorOrgCode formData string true "平台账号" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /FullSyncVendorStuff [post] +func (c *SyncController) FullSyncVendorStuff() { + c.callFullSyncVendorStuff(func(params *tSyncFullSyncVendorStuffParams) (retVal interface{}, errCode string, err error) { + retVal, err = cms.FullSyncVendorStuff(params.Ctx, nil, params.VendorID, params.VendorOrgCode, params.IsAsync, params.IsContinueWhenError) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ceaa9b5f6..470fa157d 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1755,6 +1755,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], + beego.ControllerComments{ + Method: "FullSyncVendorStuff", + Router: `/FullSyncVendorStuff`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SyncController"], beego.ControllerComments{ Method: "PruneMissingStoreSkus",