例子一
class="ruby" name="code">
module Api
module AobotQuotation
def self.query(body = {})
begin
quotation_client = Savon.client(wsdl: "#{Settings.robot_quotation_url}/QuotePriceService.svc?singleWsdl", log: false, pretty_print_xml: false)
# 0:ok,有结果,-1:未找到合成路径,1:未接收到报价商品信息,2:JCHEM服务异常,3:WCF服务异常
response = quotation_client.call(:get_one_step_price, message: {info: body.to_json})
result = JSON.parse(response.body[:get_one_step_price_response][:get_one_step_price_result])
return result
rescue
return {'Result' => {'ErrCode' => 3}}
end
end
def self.artificial_quotes(body = {})
begin
client = Savon.client(wsdl: "#{Settings.robot_quotation_url}/QuotePriceService.svc?singleWsdl", log: false, pretty_print_xml: false)
# 0:ok,有结果,-1:未找到合成路径,1:未接收到报价商品信息,2:JCHEM服务异常,3:WCF服务异常
response = client.call(:artificial_quotes, message: body)
return response.body[:artificial_quotes_response][:artificial_quotes_result]
rescue
return '接口异常。'
end
end
end
end
--------
module Api
module Aide
def self.query(cas_number: "", product_num: "", ak_num: "")
client = Savon.client(wsdl: "#{Settings.bide_quotation_url}?wsdl", log: false, pretty_print_xml: false)
body = {"CASNumber" => cas_number, "ProductNum" => product_num, "AKNum" => ak_num, "client_id" => Settings.bide_client_id, "client_secret" => Settings.bide_client_secret}
response = client.call(:get_stock_price_purity_data_cn, message: body.as_json)
result = JSON.parse(response.body[:get_stock_price_purity_data_cn_response][:get_stock_price_purity_data_cn_result])
end
def self.get_prices(cas)
result = query(cas_number: cas)
prices = []
if result['ret'].to_i == 0
result['rows'].each do |row|
next if row['Price'].to_f <= 0
package = row['PackSize'].to_f
unit = row['PackSize'].to_s.gsub(/^\d+/, '').downcase
next if package <= 0 || !['g', 'mg', 'kg', 't', 'ml', 'l'].include?(unit)
next if OrderDetail.new.convert_unit(package, unit, 'g').to_f > row['Weight'].to_f
prices << {package: package, unit: QuotationDetail.package_units[unit], price: row['Price'].to_f, art_no: row['ProductNum'], purity: row['Purity']}
end
end
prices
end
end
end
例子二
# Soap
gem 'soap4r'
gem 'savon'
def download_msds
order_item = OrderItem.find(params[:order_item_id])
msds = Msds.new(order_item)
result, flag = msds.generate
send_data msds.render, filename: 'iChemical' << (flag ? '' : '-GT') << '-MSDS-' << order_item.order_item_no << '.pdf',type: "application/pdf", disposition: "attachment"
end
class Msds
def initialize(order_item)
super()
@order_item = order_item
@chemical = order_item.chemical
@result = nil
end
def client
client = Savon.client do
wsdl MSETTING["wsdl_url"]
ssl_verify_mode :none
log true
end
end
def generate
if @order_item.msds_record.present?
@result, flag = complete_modify_msds(@order_item.msds_record)
else
if call_msds[0].nil?
@result, flag = call_fixed_msds
else
@result, flag = call_msds
end
end
end
def call_msds
response = client.call(:generate_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no })
[response.body[:generate_msds_response][:generate_msds_result], true]
end
def call_fixed_msds
response = client.call(:generate_fixed_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no })
[response.body[:generate_fixed_msds_response][:generate_fixed_msds_result], false]
end
def request_modify_msds
response = client.call(:request_modify_msds, message: { cas: @chemical.cas })
response.body[:request_modify_msds_response][:request_modify_msds_result][:string]
end
def complete_modify_msds(msds)
response = client.call(:complete_modify_msds, message: { cas: @chemical.cas, catalogueNo: @chemical.catalog_no, name: msds.name, hazardsIdentification: msds.hazardsIdentification,other: msds.other, purity: msds.purity})
[response.body[:complete_modify_msds_response][:complete_modify_msds_result], true]
end
def render
Base64.strict_decode64(@result).force_encoding('UTF-8')
end
end