BOSS要远程考勤。只有几个人而已。然后用AAU写了一个考勤的,RUBY这个是查询MYSQL,然后发送邮件到人事那边用的(以附件方式发)。代码如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#!/usr/bin/ruby require '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.init db.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 str
aFile.close end def sendmail(text, file)
mail = MailFactory. new
mail.from = "test@163.com"
mail.subject = text
mail.text = text
mail.attach(file);
mail.to = 'you@163.com'
acct = 'test@163.com'
domain = "163.com"
pass = '123123'
Net:: SMTP .start( 'smtp.163.com' , 25 , domain, acct, pass, :login ) do |smtp|
smtp.send_message mail.to_s(), 'test@163.com' , 'you@163.com'
end
end while 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
end
end writefile(csv_str, filename) sendmail( Time .now.to_s.split[ 0 ] + " Check-In" , filename)
|