- SyncJdStoreProducts
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
"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"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
|
|
||||||
@@ -1593,3 +1594,21 @@ func GetVendorStoreSkusInfo(ctx *jxcontext.Context, storeID int, vendorIDs, skuI
|
|||||||
}
|
}
|
||||||
return skuVendorMap, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
task = tasksch.NewParallelTask(taskName, tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, handler, loopInfoList)
|
||||||
tasksch.HandleTask(task, nil, isManageIt).Run()
|
tasksch.HandleTask(task, nil, isManageIt).Run()
|
||||||
if !isAsync {
|
if !isAsync {
|
||||||
if _, err = task.GetResult(0); err == nil {
|
resultList, err2 := task.GetResult(0)
|
||||||
hint = "1" // todo 暂时这样
|
if err = err2; err == nil {
|
||||||
|
if len(resultList) == 0 {
|
||||||
|
hint = "1" // todo 暂时这样
|
||||||
|
} else {
|
||||||
|
hint = jxutils.TaskResult2Hint(resultList)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hint = task.GetID()
|
hint = task.GetID()
|
||||||
|
|||||||
@@ -559,3 +559,12 @@ func UploadExportContent(content []byte, key string) (downloadURL string, err er
|
|||||||
}
|
}
|
||||||
return downloadURL, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -276,3 +276,41 @@ func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksc
|
|||||||
}
|
}
|
||||||
return storeSkuList, err
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -368,3 +368,24 @@ func (c *StoreSkuController) RefreshStoresSkuByVendor() {
|
|||||||
return retVal, "", err
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1285,6 +1285,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "SyncStoresSkus",
|
Method: "SyncStoresSkus",
|
||||||
|
|||||||
Reference in New Issue
Block a user