定时跑sql生成xlsx文件发邮件给客户

本文介绍了一个使用Gemwhenever实现的定时任务案例,该任务每天凌晨1点执行,通过rake任务生成前一天的订单报表,并将报表以邮件形式发送出去。报表包括订单统计和产品日报两个部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


# 基于Gem whenever的定时脚本

set :output, "/log/cron_log.log"

every 1.day, :at => '1:00 am' do
rake "report:dayly_orders"
end


# rake任务

namespace :report do
task dayly_orders: :environment do

search_time = (Time.now - 1.days).strftime("%Y-%m-%d 00:00:00")
# 发送邮件
ReportMailer.dayly_report_mail(search_time).deliver

end
end
# 邮件设置

def dayly_report_mail(search_time)
attachments['订单统计'<< '-' << search_time.to_s << '.xlsx'] = SqlToXlsx.order_dayly_report
attachments['产品日报'<< '-' << search_time.to_s << '.xlsx'] = SqlToXlsx.product_dayly_report
mail(:to=> "123@qq.com" , :cc =>"123@qq.com" ,:subject => "售订单统计")
end

# 生成报表

class SqlToXlsx

def self.order_dayly_report
# 定义SQL
sql = <<-SQL
-------
SQL
# 解析SQL
columns = %w{订单日期 客户订单编号 收货联系人电话 }
reports = execute_sql(sql)
# 生成EXCELL
to_xlsx(columns,reports)
end

def self.execute_sql(sql)
#执行报表sql查询
cullent_attributes = ActiveRecord::Base.connection.execute(sql)
end

def self.to_xlsx(columns,reports,search_time)
# 生成EXCELL
file = Spreadsheet::Workbook.new

list = file.create_worksheet :name =>Time.now
list.row(0).concat columns

reports.each_with_index { |report, i|
list.row(i+1).concat report
}

xls_report = StringIO.new
file.write xls_report
xls_report.string
end

end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值