我有一个Ruby文件,可以自动将来自eCommerce站点的客户订单转换为CSV文件。根据不同的产品供应商打印不同的CSV文件。
我需要在不同供应商的订单号末尾添加一个后缀。例如,对于名为"Electric Styles“的供应商,我需要在其订单号的末尾添加一个-ES。因此,像12345这样的未来订单号应该变成12345-ES。
我认为我可能需要向csvgen.rb文件添加一条if/else语句,如下所示:
if(vendor = Electric styles){order-number-ES}我不知道该怎么做。

process2文件:
This script processes the CSV files, it is executed when a CSV is detected in the Dropbox folder by run.rb
# The ~/Dropbox/ORDERS/ARCHIVE/RUNNING/running.csv file contains all orders.
# Electric Styles
cat ~/Dropbox/*.csv | head -1 > ~/Dropbox/ORDERS/ElectricStyles.csv
grep -i -E "Electric Styles" *.csv >> ~/Dropbox/ORDERS/ElectricStyles.csv
awk -F, '{$14=$14*0.0352739619;print}' OFS=, ~/Dropbox/ORDERS/ElectricStyles.csv | awk -F, '{$14=$14==int($14)?int($14):int($14)+1}1' OFS=, | sponge ~/Dropbox/ORDERS/ElectricStyles.csv
cp ~/Dropbox/ORDERS/ElectricStyles.csv ~/Dropbox/ORDERS/ElectricStyles.$now.csv
rm ~/Dropbox/ORDERS/ElectricStyles.csv
cp ~/Dropbox/ORDERS/ElectricStyles*.csv ~/Dropbox/ORDERS/ElectricStyles/
cat ~/Dropbox/ORDERS/ElectricStyles/*.csv | sort -u -r > ~/Dropbox/ORDERS/ElectricStyles/RUNNING/running.csvrun.rb文件:
#!/usr/bin/env ruby
`dropbox start`
while 1 == 1 do
csvexists = !Dir.glob('/root/Dropbox/*.csv').empty?
sleep(10)
`proftpd`
if csvexists == true
sleep(10)
`/root/Dropbox/process2`
else
end
endcsvgen.rb文件:
csvgen.rb
#!/usr/bin/ruby
require 'mechanize'
require 'json'
require 'csv'
def every_n_seconds(n)
loop do
before = Time.now
yield
interval = n-(Time.now-before)
sleep(interval) if interval > 0
end
end
every_n_seconds(86400) do
web = Mechanize.new
auth = web.auth('xxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxx', domain = 'xxxxxxxxxxxx.myshopify.com')
count = /\:(\d*)/.match(web.get("https://xxxxxxxxxxxx.myshopify.com/admin/orders/count.json").body).to_s.gsub(':','').to_i
pages = count / 250 + 1
orders = []
catch :oldorder do
pages.times do |page|
puts page
order = JSON.parse(web.get("https://xxxxxxxxxxx.myshopify.com/admin/orders.json?fields=order_number,created_at,shipping_address,shipping_lines,line_items&page=#{page}&limit=250").body)['orders']
order.each do |order|
date = DateTime.iso8601(order["created_at"]).strftime('%m/%d/%Y')
today = Date.today.strftime('%m/%d/%Y')
yestr = Date.today.prev_day.strftime('%m/%d/%Y')
throw :oldorder if date.to_s != today.to_s && date.to_s != yestr.to_s
# throw :oldorder if order["order_number"] < 10000
cust,ord,ord1 = [],[],[]
unless order["shipping_lines"] == []
cust << order["order_number"]
cust << order["shipping_address"]["first_name"]
cust << order["shipping_address"]["last_name"]
cust << order["shipping_address"]["address1"]
cust << order["shipping_address"]["address2"]
cust << order["shipping_address"]["city"]
cust << order["shipping_address"]["province_code"]
cust << order["shipping_address"]["zip"]
cust << order["shipping_address"]["country_code"]
order["line_items"].each do |product|
ord1 = product["title"],
product["variant_title"],
product["quantity"],
product["vendor"],
product["grams"],
order["shipping_lines"].first["code"],
product["sku"],
date
ord << cust + ord1
end
ord.each do |o|
orders << o
end
end
end
end
end
puts orders.count
`echo "Order Number,Shipping Address First Name,Shipping Address Last Name,Shipping Address Address 1,Shipping Address Address 2,Shipping Address City,Shipping Address Province code,Shipping Address Postal Code,Shipping Address Country code,Product Title,Product Variant Title,Product Quantity,Brand,Product Weight,Shipping Method,Product SKU,Created at" > /root/Dropbox/file.csv`
orders.each do |o|
CSV.open("/root/Dropbox/file.csv", "a+:UTF-8") do |csv|
csv << o
end
end
end发布于 2020-03-30 09:20:55
在您的csvgen.rb中,您需要修改
cust << order["order_number"] 至
cust << "#{order["order_number"]}-ES" 如果每次订单都必须写入-ES。
如果你需要一个动态的order_number,请给出一个CSV文件的示例行。
https://stackoverflow.com/questions/60921857
复制相似问题