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)