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)
|
本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1575380,如需转载请自行联系原作者