diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 8e9644b8f..6be9aff3d 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -10,6 +10,7 @@ import ( "time" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/business/partner" @@ -1593,3 +1594,21 @@ func GetVendorStoreSkusInfo(ctx *jxcontext.Context, storeID int, vendorIDs, skuI } return skuVendorMap, err } + +func SyncJdStoreProducts(ctx *jxcontext.Context, storeIDs, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { + db := dao.GetDB() + isManageIt := len(storeIDs) != 1 || len(skuIDs) == 0 || len(skuIDs) > 8 + hint, err = CurVendorSync.LoopStoresMap(ctx, db, fmt.Sprintf("京东商家商品状态同步:%v", storeIDs), isAsync, isManageIt, []int{model.VendorIDJD}, storeIDs, + func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + loopMapInfo := batchItemList[0].(*LoopStoreMapInfo) + if handler := partner.GetPurchasePlatformFromVendorID(loopMapInfo.VendorID); handler != nil { + jdHandler := handler.(*jd.PurchaseHandler) + hint, err2 := jdHandler.SyncStoreProducts(ctx, t, loopMapInfo.StoreMapList[0].StoreID, skuIDs, false, isContinueWhenError) + if err = err2; err == nil { + retVal = []interface{}{hint} + } + } + return retVal, partner.AddVendorInfo2Err(err, loopMapInfo.VendorID) + }, isContinueWhenError) + return hint, err +} diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 397a5d21c..77a870a9f 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -538,8 +538,13 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, db *dao.DaoDB, taskN task = tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, loopInfoList) tasksch.HandleTask(task, nil, isManageIt).Run() if !isAsync { - if _, err = task.GetResult(0); err == nil { - hint = "1" // todo 暂时这样 + resultList, err2 := task.GetResult(0) + if err = err2; err == nil { + if len(resultList) == 0 { + hint = "1" // todo 暂时这样 + } else { + hint = jxutils.TaskResult2Hint(resultList) + } } } else { hint = task.GetID() diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 2159aee2c..ddc97f612 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -559,3 +559,12 @@ func UploadExportContent(content []byte, key string) (downloadURL string, err er } return downloadURL, err } + +func TaskResult2Hint(resultList []interface{}) (hint string) { + strList := make([]string, len(resultList)) + for k, v := range resultList { + strList[k] = fmt.Sprint(v) + } + hint = strings.Join(strList, ",") + return hint +} diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index 2ff16815f..ade2deaf1 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -276,3 +276,41 @@ func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksc } return storeSkuList, err } + +func (p *PurchaseHandler) SyncStoreProducts(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { + globals.SugarLogger.Debugf("jd SyncStoreProducts, storeID:%d", storeID) + db := dao.GetDB() + storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJD) + if err != nil { + return "", err + } + storeSkuList, err := dao.GetStoreSkus2(db, model.VendorIDJD, storeID, skuIDs, false) + if err != nil { + return "", err + } + task := tasksch.NewParallelTask("SyncStoreProducts京东", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + storeSku := batchItemList[0].(*dao.StoreSkuSyncInfo) + if storeSku.VendorSkuID != "" && storeSku.StoreSkuStatus == model.SkuStatusNormal { + if globals.EnableJdStoreWrite { + synchronized, err2 := api.JdAPI.SyncProduct(storeDetail.VendorStoreID, storeSku.VendorSkuID) + if err = err2; err == nil && synchronized { + retVal = []int{1} + } + } else { + retVal = []int{1} + } + } + return retVal, err + }, storeSkuList) + tasksch.HandleTask(task, parentTask, true).Run() + if !isAsync { + result, err2 := task.GetResult(0) + if err = err2; err == nil { + hint = utils.Int2Str(len(result)) + } + } else { + hint = task.GetID() + } + return hint, err +} diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index d98b7a13f..3d9b15e86 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -368,3 +368,24 @@ func (c *StoreSkuController) RefreshStoresSkuByVendor() { return retVal, "", err }) } + +// @Title 京东商家商品状态同步 +// @Description 京东商家商品状态同步 +// @Param token header string true "认证token" +// @Param storeIDs formData string true "门店ID列表" +// @Param skuIDs formData string false "SKU ID列表,缺省为全部" +// @Param isAsync formData bool false "是否异步操作" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SyncJdStoreProducts [put] +func (c *StoreSkuController) SyncJdStoreProducts() { + c.callSyncJdStoreProducts(func(params *tStoreSkuSyncJdStoreProductsParams) (retVal interface{}, errCode string, err error) { + var storeIDList, skuIDList []int + err = jxutils.Strings2Objs(params.StoreIDs, &storeIDList, params.SkuIDs, &skuIDList) + if err == nil { + retVal, err = cms.SyncJdStoreProducts(params.Ctx, storeIDList, skuIDList, params.IsAsync, params.IsContinueWhenError) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index f937d1ed6..b754f2694 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1285,6 +1285,15 @@ func init() { Filters: nil, 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: "SyncJdStoreProducts", + Router: `/SyncJdStoreProducts`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + 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: "SyncStoresSkus",