热门IT资讯网

ruby考勤分析

发表于:2024-11-30 作者:热门IT资讯网编辑
编辑最后更新 2024年11月30日,BOSS要远程考勤。只有几个人而已。然后用AAU写了一个考勤的,RUBY这个是查询MYSQL,然后发送邮件到人事那边用的(以附件方式发)。代码如下。#!/usr/bin/rubyrequire 'my

BOSS要远程考勤。只有几个人而已。然后用AAU写了一个考勤的,RUBY这个是查询MYSQL,然后发送邮件到人事那边用的(以附件方式发)。代码如下。

#!/usr/bin/rubyrequire 'mysql'require 'time'require 'net/smtp'require 'mailfactory'csv_str = "id,name,start work,get off work,hour\n"day = Time.now.strftime("%Y-%m-%d")filename = "/home/163/check_in/" + Time.now.to_s.split[0] + ".csv"db = Mysql.initdb.options(Mysql::SET_CHARSET_NAME, 'utf8')db = Mysql.real_connect("192.168.1.4", "kq", "123123", "kq123", 3306)db.query("SET NAMES utf8")user = db.query("select * from username")def writefile(str,filename)aFile = File.new(filename,"w")       aFile.puts straFile.closeenddef sendmail(text, file)  mail = MailFactory.new  mail.from = "[email protected]"  mail.subject = text  mail.text = text  mail.attach(file);  mail.to = '[email protected]'  acct = '[email protected]'  domain = "163.com"  pass = '123123'  Net::SMTP.start('smtp.163.com', 25, domain, acct, pass, :login) do |smtp|      smtp.send_message mail.to_s(),'[email protected]','[email protected]'  endendwhile row = user.fetch_row do  next if row[0] == '1'  time_max = db.query("select max(time) from kqtime where time>\"#{day + " 06:00"}\" and time <\"#{day + " 23:00"}\" and userid=#{row[0]}").fetch_row[0]  time_min = db.query("select min(time) from kqtime where time>\"#{day + " 06:00"}\" and time <\"#{day + " 23:00"}\" and userid=#{row[0]}").fetch_row[0]  if time_min.nil? && time_max.nil?    csv_str = csv_str + row[0] + "," + row[1] + ",,,0.0\n"  elsif time_min.nil?    csv_str = csv_str + row[0] + "," + row[1] + "," + time_min.to_s.split[-1][0..-4] + ",,0.0\n"  elsif time_max.nil?    csv_str = csv_str + row[0] + "," + row[1] + ",," + time_max.to_s.split[-1][0..-4] + ",0.0\n"  else    time_ok = Time.parse(time_max.to_s) - Time.parse(time_min.to_s)    min = time_ok % (60)    if time_ok < 3600 && time_min.to_s.split(':')[0][-2..-1].to_i < 13      csv_str = csv_str + row[0] + "," + row[1] + "," + time_min.to_s.split[-1][0..-4] + ",,0.0\n"    elsif time_ok < 3600 && time_max.to_s.split(':')[0][-2..-1].to_i > 13      csv_str = csv_str + row[0] + "," + row[1] + ",," + time_max.to_s.split[-1][0..-4] + ",0.0\n"    else      min = time_ok % (60)      if min < 15        min = time_ok.div(60).div(60)  + 0.0      elsif min >= 15 && min < 45        min = time_ok.div(60).div(60)  + 0.5      elsif min >= 45        min = time_ok.div(60).div(60)  + 1.0      end      csv_str = csv_str + row[0] + "," + row[1] + "," + time_min.to_s.split[-1][0..-4] + "," + time_max.to_s.split[-1][0..-4] + "," + min.to_s +  "\n"    end  endendwritefile(csv_str, filename)sendmail(Time.now.to_s.split[0] + " Check-In", filename)


0