package jd import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/model" "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" ) func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) { switch funcID { case partner.FuncGetStoreSkusBareInfo, partner.FuncUpdateStoreSkusStock, partner.FuncUpdateStoreSkusStatus, partner.FuncUpdateStoreSkusPrice: batchSize = jdapi.MaxStoreSkuBatchSize } return batchSize } func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { var batchSkuInfoList []*jdapi.BaseStockCenterRequest batchSkuList := partner.BareStoreSkuInfoList(inStoreSkuList).GetVendorSkuIDIntList() for _, v := range inStoreSkuList { if !dao.IsVendorThingIDEmpty(v.VendorSkuID) { batchSkuInfoList = append(batchSkuInfoList, &jdapi.BaseStockCenterRequest{ StationNo: vendorStoreID, SkuId: utils.Str2Int64(v.VendorSkuID), }) } } if len(batchSkuInfoList) > 0 { var stockInfo []*jdapi.QueryStockResponse var priceInfo []*jdapi.StorePriceInfo task := tasksch.NewParallelTask("获取京东到家平台门店商品信息", tasksch.NewParallelConfig().SetParallelCount(2), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { subTaskID := batchItemList[0].(int) if subTaskID == 0 { stockInfo, err = api.JdAPI.QueryOpenUseable(batchSkuInfoList) } else { priceInfo, err = api.JdAPI.GetStationInfoList(vendorStoreID, batchSkuList) // globals.SugarLogger.Debug(utils.Format4Output(priceInfo, false)) } return nil, err }, []int{0, 1}) tasksch.HandleTask(task, parentTask, false).Run() _, err = task.GetResult(0) if err == nil { storeSkuMap := make(map[int64]*partner.StoreSkuInfo) for _, v := range inStoreSkuList { storeSkuMap[utils.Str2Int64(v.VendorSkuID)] = v } for _, v := range stockInfo { outStoreSkuList = append(outStoreSkuList, storeSkuMap[v.SkuID]) storeSkuMap[v.SkuID].Status = jdStoreSkuStatus2Jx(v.Vendibility) } for _, v := range priceInfo { storeSkuMap[v.SkuID].VendorPrice = v.Price } } } return outStoreSkuList, err } func jdStoreSkuStatus2Jx(jdStoreSkuStatus int) (jxSkuStatus int) { if jdStoreSkuStatus == 0 { jxSkuStatus = model.SkuStatusNormal } else { jxSkuStatus = model.SkuStatusDontSale } return jxSkuStatus } func jxStoreSkuStatus2Jd(jxStoreSkuStatus int) (isSale bool) { return jxStoreSkuStatus == model.SkuStatusNormal } func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { var skuVendibilityList []*jdapi.StockVendibility for _, v := range storeSkuList { skuVendibilityList = append(skuVendibilityList, &jdapi.StockVendibility{ OutSkuId: utils.Int2Str(v.SkuID), DoSale: jxStoreSkuStatus2Jd(v.Status), }) } if globals.EnableJdStoreWrite { _, err = api.JdAPI.BatchUpdateVendibility("", vendorStoreID, skuVendibilityList, ctx.GetUserName()) } return err } func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { if len(storeSkuList) == 1 { if globals.EnableJdStoreWrite { _, err = api.JdAPI.UpdateStationPrice(utils.Str2Int64WithDefault(storeSkuList[0].VendorSkuID, 0), vendorStoreID, int(storeSkuList[0].VendorPrice)) } } else { var skuPriceInfoList []*jdapi.SkuPriceInfo for _, v := range storeSkuList { skuPriceInfoList = append(skuPriceInfoList, &jdapi.SkuPriceInfo{ OutSkuId: utils.Int2Str(v.SkuID), Price: int(v.VendorPrice), }) } if globals.EnableJdStoreWrite { _, err = api.JdAPI.UpdateVendorStationPrice("", vendorStoreID, skuPriceInfoList) } } return err } func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) { if len(storeSkuList) == 1 { if globals.EnableJdStoreWrite { err = api.JdAPI.UpdateCurrentQty(vendorStoreID, utils.Str2Int64WithDefault(storeSkuList[0].VendorSkuID, 0), storeSkuList[0].Stock) } } else { var skuStockList []*jdapi.SkuStock for _, v := range storeSkuList { skuStockList = append(skuStockList, &jdapi.SkuStock{ OutSkuId: utils.Int2Str(v.SkuID), StockQty: v.Stock, }) } if globals.EnableJdStoreWrite { _, err = api.JdAPI.BatchUpdateCurrentQtys("", vendorStoreID, skuStockList, ctx.GetUserName()) } } return err }