From d7b93b8bf2820953f1c171db526e52b4848b03c6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 16 Oct 2018 11:52:40 +0800 Subject: [PATCH] - remove many useless isForce parameters. - isSync to isAsync. --- business/jxstore/cms/sku.go | 18 ++++----- business/jxstore/cms/store_sku.go | 4 +- business/jxstore/cms/sync.go | 40 ++++++++++++++----- business/partner/partner.go | 2 +- business/partner/purchase/ebai/store_sku.go | 10 ++--- .../partner/purchase/ebai/store_sku_test.go | 2 +- business/partner/purchase/elm/store_sku.go | 4 +- business/partner/purchase/jd/store_sku.go | 13 +++--- controllers/cms_sku.go | 8 ++-- controllers/cms_store_sku.go | 21 ++++++---- 10 files changed, 74 insertions(+), 48 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 5620b542a..bf1bd9e04 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -112,7 +112,7 @@ func ReorderCategories(parentID int, categoryIDs []int, userName string) (err er return err } -func DeleteCategory(categoryID int, isForce bool, userName string) (num int64, err error) { +func DeleteCategory(categoryID int, userName string) (num int64, err error) { cat := &model.SkuCategory{} cat.ID = categoryID var countInfos []*struct{ Ct int } @@ -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, false, userName) + err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, -1, 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, false, userName) + err2 = CurVendorSync.SyncSku(db, nameID, -1, 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, false, userName) + err = CurVendorSync.SyncSku(db, skuName.ID, -1, 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, false, userName) + err = CurVendorSync.SyncSku(db, outSkuNameExt.SkuName.ID, sku.ID, 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, false, userName) + err = CurVendorSync.SyncSku(db, -1, sku.ID, 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, false, userName) + err = CurVendorSync.SyncSku(db, -1, sku.ID, 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, false, userName) + err = CurVendorSync.SyncSku(db, nameID, -1, 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, false, userName) + err = CurVendorSync.SyncSku(db, nameID, -1, userName) } else { err = ErrEntityNotExist } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7c1772b27..0606f240b 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -235,7 +235,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str skuIDs, err := updateStoreSkusWithoutSync(storeID, skuBindInfos, userName) if err == nil { db := dao.GetDB() - err = CurVendorSync.SyncStoresSkus(db, []int{storeID}, skuIDs, false, userName) + _, err = CurVendorSync.SyncStoresSkus(db, nil, []int{storeID}, skuIDs, false, userName) return int64(len(skuIDs)), err } return 0, err @@ -382,7 +382,7 @@ func UpdateStoresSkus(storeIDs []int, skuBindInfos []*StoreSkuBindInfo, userName } } db := dao.GetDB() - err = CurVendorSync.SyncStoresSkus(db, storeIDs, skuIDs, false, userName) + _, err = CurVendorSync.SyncStoresSkus(db, nil, storeIDs, skuIDs, false, userName) return int64(len(skuIDs)), err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 7812c1a51..169183c43 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -176,8 +176,8 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce boo return err } -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) +func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, userName 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) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) syncStatusFieldName := multiStoresHandler.GetFieldSyncStatusName() @@ -196,7 +196,7 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use for _, v := range batchItemList { sku := v.(*model.Sku) syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8) - if (skuID == -1 || skuID == sku.ID) && (isForce || syncStatus != 0) { + if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) { updateFields := []string{syncStatusFieldName} if syncStatus&model.SyncFlagDeletedMask != 0 { // 删除 err = multiStoresHandler.DeleteSku(db, sku, userName) @@ -224,14 +224,14 @@ 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, vendorIDs []int, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { globals.SugarLogger.Debug("SyncStoresSkus") - err = v.LoopStoreVendors(db, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + hint, err = v.LoopStoreVendors(db, isAsync, vendorIDs, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { handler := v.GetStoreHandler(batchItemList[0].(int)) - err = handler.SyncStoresSkus(db, storeIDs, skuIDs, isForce, userName) + _, err = handler.SyncStoresSkus(db, storeIDs, skuIDs, false, userName) return nil, err }) - return err + return hint, err } func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, taskName, userName string, storeID int, handler tasksch.WorkFunc) (err error) { @@ -252,16 +252,36 @@ func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName st 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, isAsync bool, vendorIDs []int, taskName, userName string, handler tasksch.WorkFunc) (hint string, err error) { if taskName == "" { taskName = "LoopStoreVendors" } + var vendorIDMap map[int]int + if len(vendorIDs) != 0 { + vendorIDMap = make(map[int]int) + for _, v := range vendorIDs { + vendorIDMap[v] = 1 + } + } allHandlers := make([]int, len(v.MultiStoreVendorIDs)+len(v.SingleStoreVendorIDs)) copy(allHandlers, v.MultiStoreVendorIDs) copy(allHandlers[len(v.MultiStoreVendorIDs):], v.SingleStoreVendorIDs) + if vendorIDMap != nil { + count := 0 + for _, v := range allHandlers { + if vendorIDMap[v] == 1 { + allHandlers[count] = v + count++ + } + } + allHandlers = allHandlers[:count] + } task := tasksch.RunManagedTask(taskName, false, nil, len(allHandlers), 1, userName, handler, allHandlers) + if isAsync { + return task.ID, nil + } _, err = task.GetResult(0) - return makeSyncError(err) + return "", makeSyncError(err) } func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { @@ -283,7 +303,7 @@ func (v *VendorSync) LoopSingleStoreVendors(db *dao.DaoDB, taskName, userName st return makeSyncError(err) } -func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName string) (err error) { +func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, userName string) (err error) { sql := ` SELECT t1.id FROM sku t1 diff --git a/business/partner/partner.go b/business/partner/partner.go index 1d21a4286..4c5db5c34 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -75,7 +75,7 @@ type IPurchasePlatformHandler interface { // OpenStore(vendorStoreID string, userName string) error // CloseStore(vendorStoreID, closeNotice, userName string) error - SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error) + SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) GetVendorID() int GetFieldIDName() string diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 620cb32c8..cbfbb68c0 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -71,17 +71,17 @@ var ( } ) -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error) { +func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { for _, storeID := range storeIDs { - err = p.syncOneStoreSkus(db, storeID, skuIDs, isSync, userName) + err = p.syncOneStoreSkus(db, storeID, skuIDs, isAsync, userName) if err != nil { break } } - return err + return hint, err } -func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int, isSync bool, userName string) (err error) { +func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int, isAsync bool, userName string) (err error) { globals.SugarLogger.Debugf("syncOneStoreSkus storeID:%d, skuIDs:%v, userName:%s", storeID, skuIDs, userName) doThing := func() (err error) { @@ -172,7 +172,7 @@ func (p *PurchaseHandler) syncOneStoreSkus(db *dao.DaoDB, storeID int, skuIDs [] } return err } - if isSync { + if !isAsync { err = doThing() } else { go doThing() diff --git a/business/partner/purchase/ebai/store_sku_test.go b/business/partner/purchase/ebai/store_sku_test.go index d10b43e32..4fa58da5e 100644 --- a/business/partner/purchase/ebai/store_sku_test.go +++ b/business/partner/purchase/ebai/store_sku_test.go @@ -10,7 +10,7 @@ import ( func TestSyncStoresSkus(t *testing.T) { db := dao.GetDB() - err := new(PurchaseHandler).SyncStoresSkus(db, []int{100077}, []int{7}, false, "autotest") + _, err := new(PurchaseHandler).SyncStoresSkus(db, []int{100077}, []int{7}, false, "autotest") if err != nil { t.Fatal(err.Error()) } diff --git a/business/partner/purchase/elm/store_sku.go b/business/partner/purchase/elm/store_sku.go index e6fd4e091..cd848ccc4 100644 --- a/business/partner/purchase/elm/store_sku.go +++ b/business/partner/purchase/elm/store_sku.go @@ -16,6 +16,6 @@ func (p *PurchaseHandler) ReadStoreSku(storeID, skuID int) (skuNameExt *model.Sk return nil, nil } -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isSync bool, userName string) (err error) { - return nil +func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { + return hint, err } diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index f933bdfa6..b9b59fcb7 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -22,7 +22,7 @@ type tStoreSkuBindExt struct { } // 京东到家,以有库存表示关注(认领) -func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) { +func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isAsync bool, userName string) (hint string, err error) { parallelCount := 1 if len(skuIDs) < MaxSkuBatchSize { parallelCount = 10 @@ -55,13 +55,13 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ for _, v := range batchItemList { storeSku := v.(*tStoreSkuBindExt) if storeSku.JdSyncStatus&model.SyncFlagChangedMask != 0 { - if storeSku.JdSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 || isForce { + if storeSku.JdSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 { skuPriceInfoList = append(skuPriceInfoList, &jdapi.SkuPriceInfo{ OutSkuId: utils.Int2Str(storeSku.SkuID), Price: jxutils.CaculateSkuVendorPrice(storeSku.Price, storeSku.PricePercentage), }) } - if storeSku.JdSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 || isForce { + if storeSku.JdSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 { vendibility := &jdapi.StockVendibility{ OutSkuId: utils.Int2Str(storeSku.SkuID), DoSale: true, @@ -71,7 +71,7 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ } skuVendibilityList = append(skuVendibilityList, vendibility) } - if storeSku.JdSyncStatus&(model.SyncFlagDeletedMask|model.SyncFlagNewMask) != 0 || isForce { // 关注或取消关注 + if storeSku.JdSyncStatus&(model.SyncFlagDeletedMask|model.SyncFlagNewMask) != 0 { // 关注或取消关注 stock := &jdapi.SkuStock{ OutSkuId: utils.Int2Str(storeSku.SkuID), StockQty: MaxStockQty, @@ -111,6 +111,9 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ return nil, err }, storeIDs) + if isAsync { + return task.ID, nil + } _, err = task.GetResult(0) - return err + return "", err } diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 0f3cd5e83..496ab7097 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -106,7 +106,7 @@ func (c *SkuController) ReorderCategories() { // @router /DeleteCategory [delete] func (c *SkuController) DeleteCategory() { c.callDeleteCategory(func(params *tSkuDeleteCategoryParams) (retVal interface{}, errCode string, err error) { - retVal, err = cms.DeleteCategory(params.CategoryID, false, GetUserNameFromToken(params.Token)) + retVal, err = cms.DeleteCategory(params.CategoryID, GetUserNameFromToken(params.Token)) return retVal, "", err }) } @@ -288,14 +288,13 @@ 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 isForce 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) { db := dao.GetDB() - err = cms.CurVendorSync.SyncSku(db, params.NameID, params.SkuID, params.IsForce, GetUserNameFromToken(params.Token)) + err = cms.CurVendorSync.SyncSku(db, params.NameID, params.SkuID, GetUserNameFromToken(params.Token)) return retVal, "", err }) } @@ -305,13 +304,12 @@ func (c *SkuController) SyncSkus() { // @Param token header string true "认证token" // @Param nameID query int true "name ID, -1表示所有" // @Param skuID query int true "sku ID, -1表示所有" -// @Param isForce query bool false "是否强制刷新,缺省为否" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /RefreshSkuIDs [put] func (c *SkuController) RefreshSkuIDs() { c.callRefreshSkuIDs(func(params *tSkuRefreshSkuIDsParams) (retVal interface{}, errCode string, err error) { - err = cms.CurVendorSync.RefreshSkuIDs(params.NameID, params.SkuID, false, GetUserNameFromToken(params.Token)) + err = cms.CurVendorSync.RefreshSkuIDs(params.NameID, params.SkuID, GetUserNameFromToken(params.Token)) return retVal, "", err }) } diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index f1a4fbd2a..2b8927d66 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -78,8 +78,8 @@ func (c *StoreSkuController) UpdateStoreSkus() { // @Description 同步商家商品信息 // @Param token header string true "认证token" // @Param storeIDs formData string true "门店ID列表" -// @Param vendorID formData int true "厂商ID" -// @Param isSync formData bool true "是否同步操作" +// @Param vendorIDs formData string true "厂商ID列表" +// @Param isAsync formData bool true "是否异步操作" // @Param skuIDs formData string false "SKU ID列表,缺省为全部" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult @@ -89,14 +89,19 @@ func (c *StoreSkuController) SyncStoresSkus() { db := dao.GetDB() var storeIDs []int var skuIDs []int - if err = utils.UnmarshalUseNumber([]byte(params.StoreIDs), &storeIDs); err == nil { - if params.SkuIDs != "" { - err = utils.UnmarshalUseNumber([]byte(params.SkuIDs), &skuIDs) - } - if err == nil { - err = cms.CurVendorSync.GetStoreHandler(params.VendorID).SyncStoresSkus(db, storeIDs, skuIDs, params.IsSync, GetUserNameFromToken(params.Token)) + var vendorIDs []int + if err = utils.UnmarshalUseNumber([]byte(params.StoreIDs), &storeIDs); err != nil { + return retVal, "", err + } + if err = utils.UnmarshalUseNumber([]byte(params.VendorIDs), &vendorIDs); err != nil { + return retVal, "", err + } + if params.SkuIDs != "" { + if err = utils.UnmarshalUseNumber([]byte(params.SkuIDs), &skuIDs); err != nil { + return retVal, "", err } } + retVal, err = cms.CurVendorSync.SyncStoresSkus(db, vendorIDs, storeIDs, skuIDs, params.IsAsync, GetUserNameFromToken(params.Token)) return retVal, "", err }) }