class SapModel::Product
Public Class Methods
find_product(source, id)
click to toggle source
根据来源,id获得单个商品 @note 根据来源,id获得单个商品 @param source [string]
# File lib/sap_model/product.rb, line 18 def self.find_product(source, id) Sap::Product.new(source).find(id) end
find_product_attachment(source, id, attachment_id)
click to toggle source
根据来源,id获得单个商品图片 @note 根据来源,id获得单个商品图片 @param source [string]
# File lib/sap_model/product.rb, line 30 def self.find_product_attachment(source, id, attachment_id) Sap::Product.new(source).find_attachment(id, attachment_id) end
get_products(source)
click to toggle source
根据来源获得所有商品 @note 根据来源获得所有商品 @param source [string]
# File lib/sap_model/product.rb, line 10 def self.get_products(source) Sap::Product.new(source).list end
new_or_update_all_product_info()
click to toggle source
根据来源从sap接口获得的商品保存与更新在云店家和上下架信息(定时任务) @note 根据来源从sap接口获得的商品保存与更新在云店家和上下架信(定时任务)
# File lib/sap_model/product.rb, line 178 def self.new_or_update_all_product_info shop_ids_map = Sap::Product.new('').check_function_and_shop shop_ids_map.keys.each do |k| shop_ids = shop_ids_map[k].each do |shop_id| Rails.logger.info "new_or_update_all_product_info.....来源#{k}定时任务开始" self.new_or_update_all_products_by_source(k, shop_id) SapModel::SalesChannel.update_products_status(k, shop_id) Rails.logger.info "new_or_update_all_product_info.....来源#{k}定时任务结束" end end end
new_or_update_all_products_by_source(source, shop_id)
click to toggle source
根据来源从sap接口获得的所有商品保存在云店家 @note 根据来源从sap接口获得的所有商品保存在云店家 @param source [string]
# File lib/sap_model/product.rb, line 96 def self.new_or_update_all_products_by_source(source, shop_id) products = Sap::Product.new(source).list products.each do |product| params = self.query(product, source, shop_id) sku_ids = product.try(:skus).map(&:id) specification = [] if sku_ids.present? sku_ids.each do |id| sku = SapModel::Sku.find_sku(source,id) options = SapModel::Sku.query(sku, source) specification = specification<<options Rails.logger.info "........specification: #{specification}......" end end self.new_or_update_product(source, product, params, specification) end end
new_or_update_product(source, product, params, specification)
click to toggle source
根据来源从sap接口获得的商品保存在云店家(子方法) @note 根据来源从sap接口获得的商品保存在云店家(子方法) @param source [string] @param sap_product [sap_product]
# File lib/sap_model/product.rb, line 120 def self.new_or_update_product(source, product, params, specification) yun_product = ::Product.where(art_no: product.try(:code)).last # product_category_grade_1 = ProductCategory.where(source: source, grade: ProductCategory::Grade::THREE).last.try(:id) category_name = product.try(:category).try(:name) category = ProductCategory.where(source: source, name: category_name).last default_category = ProductCategory.where(source: source, grade: ProductCategory::Grade::ONE).last product_category1_id = default_category.try(:id) product_category2_id = nil product_category_id = nil if category.present? grade = category.try(:grade) if grade == ProductCategory::Grade::ONE product_category1_id = category.try(:id) elsif grade == ProductCategory::Grade::TWO product_category2_id = category.try(:id) product_category1_id = category.parent.try(:id) elsif grade == ProductCategory::Grade::THREE product_category_id = category.try(:id) product_category2_id = category.parent.try(:id) product_category1_id = category.parent.parent.try(:id) end end Rails.logger.info "#product_category1_id#{product_category1_id}" # Rails.logger.info "#product_category2_id#{product_category2_id}" # Rails.logger.info "#product_category_id#{product_category_id}" options = { product_category_grade_1: product_category1_id } if product_category2_id.present? options.merge!(product_category_grade_2: product_category2_id) end if product_category_id.present? options.merge!(product_category_grade_3: product_category_id) end if yun_product.present? params = {product: params, specification: specification, id: yun_product.id} is_sap_product = true ::Product.update_product_for_fesco(params, options, is_sap_product) yun_product.total_inventory_quantity = yun_product.try(:product_variants).map{|p| p.inventory_quantity}.sum yun_product.save! Rails.logger.info ".....update_sap_product........." else result, product =::Product.add_product_for_fesco(params, options, specification) product.total_inventory_quantity = product.try(:product_variants).map{|p| p.inventory_quantity}.sum product.save! Rails.logger.info ".....add_sap_product........." ::Product.create!(options) end rescue => e yloge e, "更新' 商品code #{product.try(:code)},art_no#{product.try(:art_no)}, 失败" end
new_or_update_product_by_source_and_id(source, id, shop_id)
click to toggle source
根据来源从sap接口获得的商品和商品规格保存在云店家 @note 根据来源从sap接口获得的商品和商品规格保存在云店家 @param source [string] @param id [Integer]
# File lib/sap_model/product.rb, line 63 def self.new_or_update_product_by_source_and_id(source, id, shop_id) product = Sap::Product.new(source).find(id) Rails.logger.info "#{product}...product" if product.kind_of? Hash # products.each do |product| params = self.query(product, source, shop_id) sku_ids = product.try(:skus).map(&:id) specification = [] total_inventory_quantity = 0 if sku_ids.present? sku_ids.each do |id| sku = SapModel::Sku.find_sku(source, id) options = SapModel::Sku.query(sku, source) specification = specification<<options total_inventory_quantity += options[:inventory_quantity] Rails.logger.info "........specification: #{specification}......" Rails.logger.info "total_inventory_quantity...........#{total_inventory_quantity}" end end Rails.logger.info "paramsaaa...........#{params}" params.merge!(total_inventory_quantity: total_inventory_quantity) Rails.logger.info "paramsbbb...........#{params}" self.new_or_update_product(source, product, params, specification) # end end rescue => e yloge e, "更新' 商品失败 " end
post_disableVariant(source, id)
click to toggle source
# File lib/sap_model/product.rb, line 22 def self.post_disableVariant(source, id) Sap::Product.new(source).posts(id) end
query(product, source, shop_id)
click to toggle source
为从sap接口获得的商品和商品规格保存在云店家分装参数 @note 为从sap接口获得的商品和商品规格保存在云店家分装参数 @param sap_product [sap_product]
# File lib/sap_model/product.rb, line 37 def self.query(product, source, shop_id) # if product.try(:status) == 'Active' # status = ::Product::Status::Published # else # status = ::Product::Status::Closed # end # shop_id = Shop.where(source: source, shop_type: Shop::ShopType::SHOP, status: Shop::Status::Open).last.id { art_no: product.try(:code), name: product.try(:name), product_type: product.try(:product_type), usefor: ProductDetail::Usefor::Product_Intro, source: source, shop_id: shop_id, settling_accounts_type: ::Product::SettlingAccountsType::CASH_AND_POINT, act_id: '0' #sap商品先设为包邮的 } end