From 294786cb4be8cce79eb58afac2d179b0beb92907 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 18 Oct 2018 17:13:43 +0800 Subject: [PATCH] - bug fix for many sync operation. --- business/jxstore/cms/sku.go | 24 +-- business/jxstore/cms/store.go | 12 +- business/jxstore/cms/sync.go | 184 ++++++++++++---------- business/model/model.go | 1 + business/partner/delivery/dada/waybill.go | 6 +- business/partner/delivery/mtps/waybill.go | 6 +- business/partner/purchase/ebai/ebai.go | 7 +- business/partner/purchase/elm/elm.go | 7 +- business/partner/purchase/jd/jd.go | 7 +- business/partner/purchase/jd/sku.go | 1 - business/partner/purchase/jd/store_sku.go | 3 +- conf/app.conf | 1 + controllers/cms_sku.go | 25 ++- main.go | 2 +- routers/commentsRouter_controllers.go | 12 +- 15 files changed, 169 insertions(+), 129 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index bf1bd9e04..97511f12c 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -59,7 +59,7 @@ func AddCategory(cat *model.SkuCategory, userName string) (outCat *model.SkuCate } if err = dao.CreateEntity(nil, cat); err == nil { outCat = cat - err = CurVendorSync.SyncCategory(nil, cat.ID, false, userName) + _, err = CurVendorSync.SyncCategory(nil, cat.ID, false, userName) } return outCat, err } @@ -71,7 +71,7 @@ func UpdateCategory(categoryID int, payload map[string]interface{}, userName str if len(valid) > 0 { db := dao.GetDB() if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, cat, valid, userName, nil, model.FieldJdSyncStatus); err == nil { - err = CurVendorSync.SyncCategory(db, categoryID, false, userName) + _, err = CurVendorSync.SyncCategory(db, categoryID, false, userName) } } return num, err @@ -105,7 +105,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er } } if err == nil { - err = CurVendorSync.SyncReorderCategories(db, parentID, false, userName) + _, err = CurVendorSync.SyncReorderCategories(db, parentID, false, userName) } } } @@ -138,7 +138,7 @@ func DeleteCategory(categoryID int, userName string) (num int64, err error) { return 0, errors.New("还有商品类别使用此类别,不能删除") } if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err == nil && num == 1 { - err = CurVendorSync.SyncCategory(db, cat.ID, false, userName) + _, err = CurVendorSync.SyncCategory(db, cat.ID, false, userName) } } return num, err @@ -354,7 +354,7 @@ func AddSkuName(skuNameExt *model.SkuNameExt, userName string) (outSkuNameExt *m return nil, ErrEntityNotExist } outSkuNameExt = tmpInfo.SkuNames[0] - err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, -1, userName) + _, err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, -1, false, userName) return outSkuNameExt, err } @@ -398,7 +398,7 @@ func UpdateSkuName(nameID int, payload map[string]interface{}, userName string) }, model.FieldJdSyncStatus) if err = err2; err == nil { dao.Commit(db) - err2 = CurVendorSync.SyncSku(db, nameID, -1, userName) + _, err2 = CurVendorSync.SyncSku(db, nameID, -1, false, userName) } } } @@ -433,7 +433,7 @@ func DeleteSkuName(nameID int, userName string) (num int64, err error) { if err2 == nil { dao.Commit(db) if num2 > 0 { - err = CurVendorSync.SyncSku(db, skuName.ID, -1, userName) + _, err = CurVendorSync.SyncSku(db, skuName.ID, -1, false, userName) } return num, err } @@ -453,7 +453,7 @@ func AddSku(nameID int, sku *model.Sku, userName string) (outSkuNameExt *model.S if err = err2; err == nil { if result.TotalCount == 1 { outSkuNameExt = result.SkuNames[0] - err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, sku.ID, userName) + _, err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, sku.ID, false, userName) } else { err = ErrEntityNotExist } @@ -470,7 +470,7 @@ func UpdateSku(skuID int, payload map[string]interface{}, userName string) (num db := dao.GetDB() if num, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, sku, valid, userName, nil, model.FieldJdSyncStatus); err == nil { if num == 1 { - err = CurVendorSync.SyncSku(db, -1, sku.ID, userName) + _, err = CurVendorSync.SyncSku(db, -1, sku.ID, false, userName) } else { err = ErrEntityNotExist } @@ -488,7 +488,7 @@ func DeleteSku(skuID int, userName string) (num int64, err error) { model.FieldJdSyncStatus: model.SyncFlagDeletedMask, }, userName, nil); err == nil { if num == 1 { - err = CurVendorSync.SyncSku(db, -1, sku.ID, userName) + _, err = CurVendorSync.SyncSku(db, -1, sku.ID, false, userName) } else { err = ErrEntityNotExist } @@ -504,7 +504,7 @@ func AddSkuNamePlace(nameID, placeCode int, userName string) (outPlaceBind *mode } dao.WrapAddIDCULEntity(placeBind, userName) if err = dao.CreateEntity(db, placeBind); err == nil { - err = CurVendorSync.SyncSku(db, nameID, -1, userName) + _, err = CurVendorSync.SyncSku(db, nameID, -1, false, userName) } return placeBind, err } @@ -516,7 +516,7 @@ func DeleteSkuNamePlace(nameID, placeCode int, userName string) (num int64, err placeBind.PlaceCode = placeCode if num, err = dao.DeleteEntity(db, placeBind, model.FieldNameID, model.FieldPlaceCode); err == nil { if num == 1 { - err = CurVendorSync.SyncSku(db, nameID, -1, userName) + _, err = CurVendorSync.SyncSku(db, nameID, -1, false, userName) } else { err = ErrEntityNotExist } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 7c56f9876..9ebbba387 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -204,7 +204,7 @@ func UpdateStore(storeID int, payload map[string]interface{}, userName string) ( }, model.FieldSyncStatus) if err = err2; err == nil { dao.Commit(db) - err = CurVendorSync.SyncStore(db, -1, store.ID, false, userName) + _, err = CurVendorSync.SyncStore(db, -1, store.ID, false, userName) } } if err != nil { @@ -257,7 +257,7 @@ func AddStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, storeMap *model.Sto if err = dao.CreateEntity(db, storeMap); err == nil { dao.Commit(db) outStoreMap = storeMap - err = CurVendorSync.SyncStore(db, storeMap.VendorID, storeID, true, userName) + _, err = CurVendorSync.SyncStore(db, storeMap.VendorID, storeID, false, userName) } if err != nil { dao.Rollback(db) @@ -281,7 +281,7 @@ func DeleteStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, userName string) model.FieldStoreID: storeID, model.FieldVendorID: vendorID, }); err == nil && num > 0 { - err = CurVendorSync.SyncStore(db, vendorID, storeID, true, userName) + _, err = CurVendorSync.SyncStore(db, vendorID, storeID, false, userName) } return num, err } @@ -317,7 +317,7 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri } if err == nil && num > 0 { if valid["status"] != nil { - err = CurVendorSync.SyncStore(db, vendorID, storeID, false, userName) + _, err = CurVendorSync.SyncStore(db, vendorID, storeID, false, userName) } } } @@ -398,7 +398,7 @@ func AddStoreCourierMap(db *dao.DaoDB, storeID, vendorID int, storeCourierMap *m if err = dao.CreateEntity(db, storeCourierMap); err == nil { dao.Commit(db) outStoreCourierMap = storeCourierMap - err = CurVendorSync.SyncStore(db, storeCourierMap.VendorID, storeID, true, userName) + _, err = CurVendorSync.SyncStore(db, storeCourierMap.VendorID, storeID, false, userName) } if err != nil { dao.Rollback(db) @@ -420,7 +420,7 @@ func DeleteStoreCourierMap(db *dao.DaoDB, storeID, vendorID int, userName string model.FieldStoreID: storeID, model.FieldVendorID: vendorID, }); err == nil && num > 0 { - err = CurVendorSync.SyncStore(db, vendorID, storeID, true, userName) + _, err = CurVendorSync.SyncStore(db, vendorID, storeID, false, userName) } return num, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 691daae8b..0b065f4b7 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -3,6 +3,7 @@ package cms import ( "errors" "fmt" + "reflect" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/basesch" @@ -12,6 +13,7 @@ import ( "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/api" ) type VendorSync struct { @@ -45,20 +47,27 @@ var ( ) func Init() { + apiMap := map[int]interface{}{ + model.VendorIDJD: api.JdAPI, + model.VendorIDELM: api.ElmAPI, + model.VendorIDEBAI: api.EbaiAPI, + } CurVendorSync.PurchaseHandlers = make(map[int]partner.IPurchasePlatformHandler) for k, v := range basesch.FixedBaseScheduler.PurchasePlatformHandlers { - if multiHandler, ok := v.(partner.IMultipleStoresHandler); ok { - CurVendorSync.MultiStoreVendorIDs = append(CurVendorSync.MultiStoreVendorIDs, k) - CurVendorSync.PurchaseHandlers[k] = &MultiStoreHandlerWrapper{ - IMultipleStoresHandler: multiHandler, + if !reflect.ValueOf(apiMap[k]).IsNil() { + 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)) } - } 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)) } } } @@ -111,48 +120,60 @@ func (v *VendorSync) GetSingleStoreHandler(vendorID int) partner.ISingleStoreHan return nil } -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) { +func (v *VendorSync) syncCategories(multiStoresHandler partner.IMultipleStoresHandler, db *dao.DaoDB, cats []*model.SkuCategory, userName string) (err error) { + syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() + task := tasksch.RunTask("syncCategories", false, nil, len(cats), 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + cat := batchItemList[0].(*model.SkuCategory) + updateFields := []string{syncStatusFieldName} + syncStatus := jxutils.GetObjFieldByName(cat, syncStatusFieldName).(int8) + if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除 + err = multiStoresHandler.DeleteCategory(db, cat, userName) + } else if (syncStatus & model.SyncFlagNewMask) != 0 { // 新增 + err = multiStoresHandler.CreateCategory(db, cat, userName) + updateFields = append(updateFields, multiStoresHandler.GetFieldIDName()) + } else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改 + err = multiStoresHandler.UpdateCategory(db, cat, userName) + } + if err == nil { + jxutils.SetObjFieldByName(cat, syncStatusFieldName, int8(0)) + _, err = dao.UpdateEntity(db, cat, updateFields...) + } + return nil, err + }, cats) + _, err = task.GetResult(0) + return err +} + +func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) { + globals.SugarLogger.Debug(v.MultiStoreVendorIDs) + hint, err = v.LoopMultiStoresVendors(db, "SyncCategory", isAsync, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) - syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() var cats []*model.SkuCategory cond := make(map[string]interface{}) if categoryID > 0 { cond[model.FieldID] = categoryID + } else { + cond[model.FieldLevel] = 1 } err := dao.GetEntitiesByKV(db, &cats, cond, true) if err == nil { - task := tasksch.RunTask("", false, nil, len(cats), 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - for _, v := range batchItemList { - cat := v.(*model.SkuCategory) - updateFields := []string{syncStatusFieldName} - syncStatus := jxutils.GetObjFieldByName(cat, syncStatusFieldName).(int8) - if (syncStatus & model.SyncFlagDeletedMask) != 0 { //删除 - err = multiStoresHandler.DeleteCategory(db, cat, userName) - } else if (syncStatus&model.SyncFlagNewMask) != 0 || isForce { // 新增 - err = multiStoresHandler.CreateCategory(db, cat, userName) - updateFields = append(updateFields, multiStoresHandler.GetFieldIDName()) - } else if (syncStatus & model.SyncFlagModifiedMask) != 0 { // 修改 - err = multiStoresHandler.UpdateCategory(db, cat, userName) - } - if err == nil { - jxutils.SetObjFieldByName(cat, syncStatusFieldName, int8(0)) - _, err = dao.UpdateEntity(db, cat, updateFields...) - } else { - break - } - } - return nil, err - }, cats) - _, err = task.GetResult(0) + err = v.syncCategories(multiStoresHandler, db, cats, userName) + } + if err != nil || categoryID > 0 { + return nil, err + } + cond[model.FieldLevel] = 2 + err = dao.GetEntitiesByKV(db, &cats, cond, true) + if err == nil { + err = v.syncCategories(multiStoresHandler, db, cats, userName) } return nil, err }) - return err + return "", err } -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) { +func (v *VendorSync) SyncReorderCategories(db *dao.DaoDB, categoryID int, isAsync bool, userName string) (hint string, err error) { + hint, err = v.LoopMultiStoresVendors(db, "SyncReorderCategories", isAsync, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { @@ -162,14 +183,14 @@ func (v *VendorSync) SyncReorderCategories(db *dao.DaoDB, categoryID int, isForc } return nil, err2 }) - return err + return "", err } -func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce bool, userName string) (err error) { +func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isAsync bool, userName string) (hint string, err error) { globals.SugarLogger.Debugf("SyncStore, storeID:%d", storeID) - err = v.LoopStoreMap(db, "SyncStore", userName, storeID, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + hint, err = v.LoopStoreMap(db, "SyncStore", isAsync, 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 (vendorID == -1 || vendorID == storeMap.VendorID) && (storeMap.SyncStatus != 0) { if handler := v.GetStoreHandler(storeMap.VendorID); handler != nil { if err = handler.UpdateStore(db, storeID, userName); err == nil { storeMap.SyncStatus = 0 @@ -179,12 +200,12 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce boo } return nil, err }) - return err + return "", err } -func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, userName string) (err error) { +func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isAsync bool, userName string) (hint string, err error) { globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, userName:%s", nameID, skuID, userName) - err = v.LoopMultiStoresVendors(db, "SyncSku", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + hint, err = v.LoopMultiStoresVendors(db, "SyncSku", isAsync, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() var skuList []*model.Sku @@ -199,25 +220,21 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, userName string) if err == nil { // globals.SugarLogger.Debug(utils.Format4Output(skuList, false)) task := tasksch.RunTask("SyncSku", false, nil, len(skuList), 1, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - for _, v := range batchItemList { - sku := v.(*model.Sku) - syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8) - if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) { - updateFields := []string{syncStatusFieldName} - if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除 - err = multiStoresHandler.DeleteSku(db, sku, userName) - } else if syncStatus&model.SyncFlagNewMask != 0 { // 新增 - err = multiStoresHandler.CreateSku(db, sku, userName) - updateFields = append(updateFields, multiStoresHandler.GetFieldIDName()) - } else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改 - err = multiStoresHandler.UpdateSku(db, sku, userName) - } - if err == nil { - jxutils.SetObjFieldByName(sku, syncStatusFieldName, int8(0)) - dao.UpdateEntity(db, sku, updateFields...) - } else { - break - } + sku := batchItemList[0].(*model.Sku) + syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8) + if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) { + updateFields := []string{syncStatusFieldName} + if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除 + err = multiStoresHandler.DeleteSku(db, sku, userName) + } else if syncStatus&model.SyncFlagNewMask != 0 { // 新增 + err = multiStoresHandler.CreateSku(db, sku, userName) + updateFields = append(updateFields, multiStoresHandler.GetFieldIDName()) + } else if syncStatus&model.SyncFlagModifiedMask != 0 { // 修改 + err = multiStoresHandler.UpdateSku(db, sku, userName) + } + if err == nil { + jxutils.SetObjFieldByName(sku, syncStatusFieldName, int8(0)) + dao.UpdateEntity(db, sku, updateFields...) } } return nil, err @@ -226,13 +243,13 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, userName string) } return nil, err }) - return err + return "", err } // func (v *VendorSync) SyncStoresSkus(db *dao.DaoDB, vendorIDs []int, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { globals.SugarLogger.Debug("SyncStoresSkus") - hint, err = v.LoopStoreVendors(db, isAsync, vendorIDs, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + hint, err = v.LoopStoreVendors(db, vendorIDs, "SyncStoresSkus", isAsync, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { handler := v.GetStoreHandler(batchItemList[0].(int)) _, err = handler.SyncStoresSkus(db, storeIDs, skuIDs, false, userName) return nil, err @@ -240,25 +257,31 @@ func (v *VendorSync) SyncStoresSkus(db *dao.DaoDB, vendorIDs []int, storeIDs []i return hint, err } -func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, taskName, userName string, storeID int, handler tasksch.WorkFunc) (err error) { +func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, taskName string, isAsync bool, userName string, storeID int, handler tasksch.WorkFunc) (hint string, err error) { storeMaps, err := GetStoreVendorMaps(db, storeID, -1) if err == nil { task := tasksch.RunManagedTask(taskName, false, nil, len(storeMaps), 1, userName, handler, storeMaps) - _, err = task.GetResult(0) + hint = task.ID + if !isAsync { + _, err = task.GetResult(0) + } } - return makeSyncError(err) + return "", makeSyncError(err) } -func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { +func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName string, isAsync bool, userName string, handler tasksch.WorkFunc) (hint string, err error) { if taskName == "" { taskName = "LoopMultiStoresVendors" } task := tasksch.RunManagedTask(taskName, false, nil, len(v.MultiStoreVendorIDs), 1, userName, handler, v.MultiStoreVendorIDs) - _, err = task.GetResult(0) - return makeSyncError(err) + hint = task.ID + if !isAsync { + _, err = task.GetResult(0) + } + return "", makeSyncError(err) } -func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, isAsync bool, vendorIDs []int, taskName, userName string, handler tasksch.WorkFunc) (hint string, err error) { +func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, vendorIDs []int, taskName string, isAsync bool, userName string, handler tasksch.WorkFunc) (hint string, err error) { if taskName == "" { taskName = "LoopStoreVendors" } @@ -290,7 +313,7 @@ func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, isAsync bool, vendorIDs []i return "", makeSyncError(err) } -func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { +func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName string, isAsync bool, userName string, handler tasksch.WorkFunc) (hint string, err error) { if taskName == "" { taskName = "LoopSingleStoreVendors" } @@ -304,9 +327,12 @@ func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName st parellelCount = 20 } task := tasksch.RunManagedTask(taskName, false, nil, parellelCount, 1, userName, handler, storeMaps) - _, err = task.GetResult(0) + hint = task.ID + if !isAsync { + _, err = task.GetResult(0) + } } - return makeSyncError(err) + return "", makeSyncError(err) } func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, userName string) (err error) { @@ -330,7 +356,7 @@ func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, userName string) (err erro db := dao.GetDB() 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) { + _, err = v.LoopMultiStoresVendors(db, "RefreshSkuIDs", false, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) err := multiStoresHandler.SyncSkusIDMap(db, ids, userName) globals.SugarLogger.Debug(err) diff --git a/business/model/model.go b/business/model/model.go index c2e03c513..903c41a95 100644 --- a/business/model/model.go +++ b/business/model/model.go @@ -30,6 +30,7 @@ const ( FieldEbaiID = "EbaiID" FieldSkuID = "SkuID" + FieldLevel = "Level" ) type ModelIDCUL struct { diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index abae888d3..145435f02 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -32,10 +32,8 @@ type DeliveryHandler struct { } func init() { - if api.DadaAPI != nil { - curDeliveryHandler = new(DeliveryHandler) - scheduler.CurrentScheduler.RegisterDeliveryPlatform(curDeliveryHandler, true) - } + curDeliveryHandler = new(DeliveryHandler) + scheduler.CurrentScheduler.RegisterDeliveryPlatform(curDeliveryHandler, true) } func OnWaybillMsg(msg *dadaapi.CallbackMsg) (retVal *dadaapi.CallbackResponse) { diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index ad418fa5a..298256e76 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -34,10 +34,8 @@ type DeliveryHandler struct { } func init() { - if api.MtpsAPI != nil { - curDeliveryHandler = new(DeliveryHandler) - scheduler.CurrentScheduler.RegisterDeliveryPlatform(curDeliveryHandler, true) - } + curDeliveryHandler = new(DeliveryHandler) + scheduler.CurrentScheduler.RegisterDeliveryPlatform(curDeliveryHandler, true) } func (c *DeliveryHandler) GetVendorID() int { diff --git a/business/partner/purchase/ebai/ebai.go b/business/partner/purchase/ebai/ebai.go index 8ce8c4211..a6a055bf0 100644 --- a/business/partner/purchase/ebai/ebai.go +++ b/business/partner/purchase/ebai/ebai.go @@ -4,7 +4,6 @@ import ( "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals/api" ) var ( @@ -16,10 +15,8 @@ type PurchaseHandler struct { } func init() { - if api.EbaiAPI != nil { - curPurchaseHandler = new(PurchaseHandler) - scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) - } + curPurchaseHandler = new(PurchaseHandler) + scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) } func EbaiBusStatus2JxStatus(ebaiStatus int) int { diff --git a/business/partner/purchase/elm/elm.go b/business/partner/purchase/elm/elm.go index 04725b767..14daa97dc 100644 --- a/business/partner/purchase/elm/elm.go +++ b/business/partner/purchase/elm/elm.go @@ -6,7 +6,6 @@ import ( "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals/api" ) var ( @@ -18,10 +17,8 @@ type PurchaseHandler struct { } func init() { - if api.ElmAPI != nil { - curPurchaseHandler = new(PurchaseHandler) - scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) - } + curPurchaseHandler = new(PurchaseHandler) + scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) } func (c *PurchaseHandler) GetVendorID() int { diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index 7e56534a5..7d1aaeeae 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -5,7 +5,6 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/globals/api" ) var ( @@ -17,10 +16,8 @@ type PurchaseHandler struct { } func init() { - if api.JdAPI != nil { - curPurchaseHandler = new(PurchaseHandler) - scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) - } + curPurchaseHandler = new(PurchaseHandler) + scheduler.CurrentScheduler.RegisterPurchasePlatform(curPurchaseHandler) } func (c *PurchaseHandler) GetVendorID() int { diff --git a/business/partner/purchase/jd/sku.go b/business/partner/purchase/jd/sku.go index 118509a26..c79290c8d 100644 --- a/business/partner/purchase/jd/sku.go +++ b/business/partner/purchase/jd/sku.go @@ -21,7 +21,6 @@ const ( type tSkuInfoExt struct { model.SkuName - Img string JdID int64 `orm:"column(jd_id)"` // 商家类别 JdCategoryID int `orm:"column(jd_category_id)"` // 到家类别 SkuCatID int64 `orm:"column(sku_cat_id)"` // 商家特殊类别 diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index b9b59fcb7..b94e065d9 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -47,7 +47,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ // globals.SugarLogger.Debug(sql, sqlParams) if err = dao.GetRows(db, &storeSkus, sql, sqlParams); err == nil { outStationNo := utils.Int2Str(storeID) - task := tasksch.RunTask("", false, nil, 0, MaxSkuBatchSize, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + task := tasksch.RunTask("SyncStoresSkus inner", false, nil, 0, MaxSkuBatchSize, userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { var skuPriceInfoList []*jdapi.SkuPriceInfo var skuVendibilityList []*jdapi.StockVendibility var skuStockList []*jdapi.SkuStock @@ -79,6 +79,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ if storeSku.DeletedAt != utils.DefaultTimeValue { stock.StockQty = 0 } + skuStockList = append(skuStockList, stock) } } } diff --git a/conf/app.conf b/conf/app.conf index 00a44ea21..27b676ce1 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -97,6 +97,7 @@ disableEbai = true dbConnectStr = "root:WebServer@1@tcp(db1.int.jxc4.com:3306)/jxd_dev_2?charset=utf8mb4&loc=Local&parseTime=true" enableStore = true +enableStoreWrite = true [test] freshFoodServerURL = "http://portal.alpha.int.jxc4.com" diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 496ab7097..04165353a 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -111,6 +111,22 @@ func (c *SkuController) DeleteCategory() { }) } +// @Title 同步商家SKU类别 +// @Description 同步商家SKU类别 +// @Param token header string true "认证token" +// @Param categoryID query int true "SKU类别ID, -1表示所有" +// @Param isAsync query bool false "是否异步" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SyncCategory [put] +func (c *SkuController) SyncCategory() { + c.callSyncCategory(func(params *tSkuSyncCategoryParams) (retVal interface{}, errCode string, err error) { + db := dao.GetDB() + retVal, err = cms.CurVendorSync.SyncCategory(db, params.CategoryID, params.IsAsync, GetUserNameFromToken(params.Token)) + return retVal, "", err + }) +} + // @Title 得到商品信息 // @Description 得到商品信息,如下条件之间是与的关系 // @Param token header string true "认证token" @@ -288,13 +304,14 @@ func (c *SkuController) GetVendorSku() { // @Param token header string true "认证token" // @Param nameID query int true "name ID, -1表示所有" // @Param skuID query int true "sku ID, -1表示所有" +// @Param isAsync query bool false "是否异步" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /SyncSkus [put] -func (c *SkuController) SyncSkus() { - c.callSyncSkus(func(params *tSkuSyncSkusParams) (retVal interface{}, errCode string, err error) { +// @router /SyncSku [put] +func (c *SkuController) SyncSku() { + c.callSyncSku(func(params *tSkuSyncSkuParams) (retVal interface{}, errCode string, err error) { db := dao.GetDB() - err = cms.CurVendorSync.SyncSku(db, params.NameID, params.SkuID, GetUserNameFromToken(params.Token)) + retVal, err = cms.CurVendorSync.SyncSku(db, params.NameID, params.SkuID, params.IsAsync, GetUserNameFromToken(params.Token)) return retVal, "", err }) } diff --git a/main.go b/main.go index 9d2d1466b..8984229eb 100644 --- a/main.go +++ b/main.go @@ -26,9 +26,9 @@ var ( func Init() { // globals.Init() - cms.InitServiceInfo(Version, BuildDate, GitCommit) beegodb.Init() api.Init() + cms.InitServiceInfo(Version, BuildDate, GitCommit) } // 返回true表示非运行服务 diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 57e94fbe7..a34e2e58d 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -329,8 +329,16 @@ func init() { beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], beego.ControllerComments{ - Method: "SyncSkus", - Router: `/SyncSkus`, + Method: "SyncCategory", + Router: `/SyncCategory`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Params: nil}) + + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:SkuController"], + beego.ControllerComments{ + Method: "SyncSku", + Router: `/SyncSku`, AllowHTTPMethods: []string{"put"}, MethodParams: param.Make(), Params: nil})