diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 885f74beb..6fce78896 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -229,6 +229,17 @@ func UpdateStoreSku(storeID int, skuBindInfo *StoreSkuBindInfo, userName string) } func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName string) (num int64, err error) { + skuIDs, err := updateStoreSkusWithoutSync(storeID, skuBindInfos, userName) + if err == nil { + db := dao.GetDB() + err = CurVendorSync.SyncStoresSkus(db, []int{storeID}, skuIDs, false, userName) + return int64(len(skuIDs)), err + } + return 0, err +} + +func updateStoreSkusWithoutSync(storeID int, skuBindInfos []*StoreSkuBindInfo, userName string) (needSyncSkus []int, err error) { + var num int64 db := dao.GetDB() needSyncIDMap := make(map[int]int) dao.Begin(db) @@ -284,7 +295,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str globals.SugarLogger.Debug(utils.Format4Output(skuBind, false)) if err = dao.CreateEntity(db, skuBind); err != nil { dao.Rollback(db) - return 0, err + return nil, err } num = 1 } @@ -299,7 +310,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask, }, userName, nil); err != nil { dao.Rollback(db) - return 0, err + return nil, err } } else { needUpdate := false @@ -336,7 +347,7 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str dao.WrapUpdateULEntity(skuBind, userName) if num, err = dao.UpdateEntity(db, skuBind); err != nil { dao.Rollback(db) - return 0, err + return nil, err } } } @@ -347,12 +358,28 @@ func UpdateStoreSkus(storeID int, skuBindInfos []*StoreSkuBindInfo, userName str } } else { dao.Rollback(db) - return 0, err + return nil, err } } dao.Commit(db) skuIDs := jxutils.IntMap2List(needSyncIDMap) - err = CurVendorSync.SyncStoreSku(db, storeID, skuIDs, false, userName) + return skuIDs, err +} + +func UpdateStoresSkus(storeIDs []int, skuBindInfos []*StoreSkuBindInfo, userName string) (num int64, err error) { + for _, storeID := range storeIDs { + if _, err = updateStoreSkusWithoutSync(storeID, skuBindInfos, userName); err != nil { + return 0, err + } + } + skuIDs := make([]int, 0) + for _, v := range skuBindInfos { + for _, v2 := range v.Skus { + skuIDs = append(skuIDs, v2.SkuID) + } + } + db := dao.GetDB() + err = CurVendorSync.SyncStoresSkus(db, storeIDs, skuIDs, false, userName) return int64(len(skuIDs)), err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 302ee44ac..ee886e465 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -44,7 +44,7 @@ func Init() { } func (v *VendorSync) SyncCategory(db *dao.DaoDB, categoryID int, isForce bool, userName string) (err error) { - err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + err = v.LoopMultiStoresVendors(db, "SyncCategory", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) var cats []*model.SkuCategory cond := make(map[string]interface{}) @@ -82,7 +82,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) { - err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + err = v.LoopMultiStoresVendors(db, "SyncReorderCategories", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) err2 := multiStoresHandler.ReorderCategories(db, categoryID, userName) if err2 == nil { @@ -97,7 +97,7 @@ func (v *VendorSync) SyncReorderCategories(db *dao.DaoDB, categoryID int, isForc func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID, storeID int, isForce bool, userName string) (err error) { globals.SugarLogger.Debugf("SyncStore, storeID:%d", storeID) - err = v.LoopStoreMap(db, 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) if (vendorID == -1 || vendorID == storeMap.VendorID) && (isForce || storeMap.SyncStatus != 0) { if handler := GetPurchaseHandler(storeMap.VendorID); handler != nil { @@ -114,7 +114,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) { globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, isForce:%t, userName:%s", nameID, skuID, isForce, userName) - err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + err = v.LoopMultiStoresVendors(db, "SyncSku", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) var skuList []*model.Sku cond := make(map[string]interface{}) @@ -158,29 +158,41 @@ func (v *VendorSync) SyncSku(db *dao.DaoDB, nameID, skuID int, isForce bool, use } // -func (v *VendorSync) SyncStoreSku(db *dao.DaoDB, storeID int, skuIDs []int, isForce bool, userName string) (err error) { - globals.SugarLogger.Debug("SyncStoreSku") - err = v.LoopStoreMap(db, storeID, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { - storeMap := batchItemList[0].(*model.StoreMap) - if handler := GetPurchaseHandler(storeMap.VendorID); handler != nil { - err = handler.SyncStoreSkus(db, []int{storeID}, skuIDs, isForce, userName) +func (v *VendorSync) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) { + globals.SugarLogger.Debug("SyncStoresSkus") + err = v.LoopStoreVendors(db, "SyncStoresSkus", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + vendorID := batchItemList[0].(int) + if handler := GetPurchaseHandler(vendorID); handler != nil { + err = handler.SyncStoreSkus(db, storeIDs, skuIDs, isForce, userName) } return nil, err }) return err } -func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, storeID int, handler tasksch.WorkFunc) (err error) { +func (v *VendorSync) LoopStoreMap(db *dao.DaoDB, taskName, userName string, storeID int, handler tasksch.WorkFunc) (err error) { storeMaps, err := GetStoreVendorMaps(db, storeID, -1) if err == nil { - task := tasksch.RunTask("LoopStoreMap", false, nil, len(storeMaps), 1, "", handler, storeMaps) + task := tasksch.RunManagedTask(taskName, false, nil, len(storeMaps), 1, userName, handler, storeMaps) _, err = task.GetResult(0) } return makeSyncError(err) } -func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, handler tasksch.WorkFunc) (err error) { - task := tasksch.RunTask("LoopMultiStoresVendors", false, nil, len(MultiStoresVendorHandlers), 1, "", handler, MultiStoresVendorHandlers) +func (v *VendorSync) LoopMultiStoresVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { + task := tasksch.RunManagedTask(taskName, false, nil, len(MultiStoresVendorHandlers), 1, userName, handler, MultiStoresVendorHandlers) + _, err = task.GetResult(0) + return makeSyncError(err) +} + +func (v *VendorSync) LoopStoreVendors(db *dao.DaoDB, taskName, userName string, handler tasksch.WorkFunc) (err error) { + vendorIDs := make([]int, len(basesch.FixedBaseScheduler.PurchasePlatformHandlers)) + index := 0 + for k := range basesch.FixedBaseScheduler.PurchasePlatformHandlers { + vendorIDs[index] = k + index++ + } + task := tasksch.RunManagedTask(taskName, false, nil, len(vendorIDs), 1, userName, handler, vendorIDs) _, err = task.GetResult(0) return makeSyncError(err) } @@ -225,7 +237,7 @@ func (v *VendorSync) RefreshSkuIDs(nameID, skuID int, isForce bool, userName str db := dao.GetDB() if err = dao.GetRows(db, &ids, sql, sqlParams); err == nil { // globals.SugarLogger.Debug(utils.Format4Output(ids, false)) - err = v.LoopMultiStoresVendors(db, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { + err = v.LoopMultiStoresVendors(db, "RefreshSkuIDs", userName, func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := batchItemList[0].(partner.IMultipleStoresHandler) err := multiStoresHandler.SyncSkusIDMap(db, ids, userName) globals.SugarLogger.Debug(err) diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index cb540feb6..92a9bf147 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -101,3 +101,24 @@ func (c *StoreSkuController) SyncStoreSkus() { return retVal, "", err }) } + +// @Title 批量修改多商家商品绑定 +// @Description 批量修改多商家商品绑定 +// @Param token header string true "认证token" +// @Param storeIDs formData string true "门店ID列表" +// @Param payload formData string true "json数据,StoreSkuBindInfo对象数组" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateStoresSkus [put] +func (c *StoreSkuController) UpdateStoresSkus() { + c.callUpdateStoresSkus(func(params *tStoreSkuUpdateStoresSkusParams) (retVal interface{}, errCode string, err error) { + var storeIDs []int + var skuBindInfos []*cms.StoreSkuBindInfo + if err = utils.UnmarshalUseNumber([]byte(params.StoreIDs), &storeIDs); err == nil { + if err = utils.UnmarshalUseNumber([]byte(params.Payload), &skuBindInfos); err == nil { + retVal, err = cms.UpdateStoresSkus(storeIDs, skuBindInfos, GetUserNameFromToken(params.Token)) + } + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index feb38a2e0..fd4bfaa93 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -455,6 +455,14 @@ func init() { MethodParams: param.Make(), Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], + beego.ControllerComments{ + Method: "UpdateStoresSkus", + Router: `/UpdateStoresSkus`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:TaskController"], beego.ControllerComments{ Method: "GetTasks",