package jd import ( "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "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/globals" "git.rosy.net.cn/jx-callback/globals/api" ) // 京东到家,以有库存表示关注(认领) func (p *PurchaseHandler) SyncStoreSkus(db *dao.DaoDB, storeIDs []int, skuIDs []int, isForce bool, userName string) (err error) { var storeSkus []*model.StoreSkuBind for _, storeID := range storeIDs { sqlParams := []interface{}{ storeID, } sql := ` SELECT * FROM store_sku_bind WHERE store_id = ? ` if skuIDs != nil && len(skuIDs) > 0 { sql += " AND sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" sqlParams = append(sqlParams, skuIDs) } globals.SugarLogger.Debug(sql, sqlParams) if err = dao.GetRows(db, &storeSkus, sql, sqlParams); err == nil { outStationNo := utils.Int2Str(storeID) task := tasksch.RunTask("", func(batchItemList []interface{}, params ...interface{}) (interface{}, error) { var skuPriceInfoList []*jdapi.SkuPriceInfo var skuVendibilityList []*jdapi.StockVendibility var skuStockList []*jdapi.SkuStock for _, v := range batchItemList { storeSku := v.(*model.StoreSkuBind) if storeSku.JdSyncStatus&model.SyncFlagChangedMask != 0 { if storeSku.JdSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 || isForce { skuPriceInfoList = append(skuPriceInfoList, &jdapi.SkuPriceInfo{ OutSkuId: utils.Int2Str(storeSku.SkuID), Price: storeSku.Price, }) } if storeSku.JdSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 || isForce { vendibility := &jdapi.StockVendibility{ OutSkuId: utils.Int2Str(storeSku.SkuID), DoSale: true, } if storeSku.Status != model.StoreSkuBindStatusNormal { vendibility.DoSale = false } skuVendibilityList = append(skuVendibilityList, vendibility) } if storeSku.JdSyncStatus&(model.SyncFlagDeletedMask|model.SyncFlagNewMask) != 0 || isForce { // 关注或取消关注 stock := &jdapi.SkuStock{ OutSkuId: utils.Int2Str(storeSku.SkuID), StockQty: 9999, } if storeSku.DeletedAt != utils.DefaultTimeValue { stock.StockQty = 0 } } } } if globals.EnableStoreWrite { // todo 以下可以优化为并行操作 if len(skuVendibilityList) > 0 { _, err = api.JdAPI.BatchUpdateVendibility(outStationNo, "", skuVendibilityList, userName) } if err == nil && len(skuPriceInfoList) > 0 { _, err = api.JdAPI.UpdateVendorStationPrice(outStationNo, "", skuPriceInfoList) } if err == nil && len(skuStockList) > 0 { _, err = api.JdAPI.BatchUpdateCurrentQtys(outStationNo, "", skuStockList, userName) } } return nil, err }, nil, 10, 50, userName, storeSkus) if _, err = task.GetResult(0); err == nil { sql := ` UPDATE store_sku_bind SET jd_sync_status = 0 WHERE store_id = ? ` if skuIDs != nil && len(skuIDs) > 0 { sql += " AND sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" } _, err = dao.ExecuteSQL(db, sql, sqlParams) } } } return err }