Hướng dẫn tạo mail cảnh báo tự động trên wak.

Các File cần tạo

1.Tạo thread trong thư mục conf/thread
2. NotificationHelper.dic
3.mail_sender.thread

Cách làm

Để minh họa cho cách làm =>sẽ cùng giải quyết bài toán sau :
Mail cảnh báo cho người dùng rằng đã đăng nhập quá 5 lần trên vào hệ thống

SELECT DISTINCT(ads.user_id),
  adu.FULL_NAME,adu.user_name,
   COUNT(session_id),
  NVL(adu.email,'truongnv1@ftl.vn')
FROM adm_session ads,
adm_user adu
WHERE ads.created<=sysdate
AND ads.created+1 >sysdate
AND ads.user_id   =adu.user_id
GROUP BY ads.user_id,
adu.FULL_NAME,adu.user_name,
adu.email
HAVING COUNT(session_id)>5
Chèn câu lệnh vào thread,ta được hình ảnh như sau:
14141540_964963080278730_5440737896474173360_n.jpg?oh=1db576a7cbdd7480000a21801bbf1319&oe=584D7B89
Giao diện trực quan
14088639_964963503612021_1827315920415767951_n.jpg?oh=aeba7b2e8a05570df874c062519e145e&oe=58386E15

Mã nguồn:

ThreadName==Notification user sigin more 10 time in day
ClassName==com.ftl.thread.EventProcessThread
StartupType==2
Parameter
    LogDir==log/mail_event_notifier_00110_NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY
    AlertByMail==true
    Interval==600
    ProcessorClass==com.ftl.thread.MailNotifier
    ProcessorList
        NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY==Thông báo cho cán bộ tổng hợp thực hiện báo cáo trước 2 ngày
            QueryEventSql=:
            :{
                SELECT DISTINCT(ads.user_id),
                    adu.FULL_NAME,
                    COUNT(session_id),nvl(adu.email,'truongnv1@ftl.vn'),to_char(sysdate,'dd/mm/yyyy'),adu.user_name
                    FROM adm_session ads,
                    adm_user adu
                    WHERE ads.created<=sysdate
                    AND ads.created+1 >sysdate
                    AND ads.user_id   =adu.user_id
                    GROUP BY ads.user_id,
                    adu.FULL_NAME,adu.email,adu.user_name

            :}
    SyncGroup
Category==Cảnh báo
Schedule==0 0 8 * * ?

Bước 2: Tạo notification_template
Truy câp theo đường dẫn Hệ thống
/Cấu hình và tùy chọn
/Danh mục mẫu tin cảnh báo
Kết quả hiện ra như sau
14088567_964965343611837_3123190072230581947_n.jpg?oh=194c5fff3a3a7ac6816b7aa9a04d92b3&oe=584C8930
Giải thích
Sử dụng mã MVEL để viết code

-Sử dụng cú pháp @{row[i]} để lấy ra được các trường tương ứng đã được querry ra bên thread
Cấu hình chi tiết trong file .dic để tạo bảng tổng hợp danh sách IP.Trong đó ip_addresslà danh sách các IP tương ứng của user_id: @row[0].
Tạo bảng trong cảnh báo:
Tạo header:

<table style="width:100%;border-collapse:collapse;border: 1px solid black;"> <tbody>
<tr style="border:1px solid black;">
<th style="border:1px solid black;">STT</th>
<th style="border:1px solid black;">Địa chỉ IP đăng nhập</th>
<th style="border:1px solid black;">Số lần đăng nhập/trên ngày</th>
@foreach{ip : ip_address}
<tr>
<td style="border:1px solid black;" align="center">@{++i}</td>
<td style="border:1px solid black;" align="center">@{ip.get(0)}</td>
<td style="border:1px solid black;" align="center">@{ip.get(1)}</td>
</tr>
@end{}
<tr>
</tr>
</tbody>
</table>

Trong đó ip.get(i) là lấy trường thứ i từ querry

Kết quả cần đạt được

14107691_964967166944988_3069450377733322946_o.jpg

Trong đó mã nguồn được thể hiện như sau.

        NOTIFY_USER_SIGIN_MORE_TIME_IN_DAY==Cảnh báo user đăng nhập nhiều lần trong ngày
            Mail
                MvelHeader=:
                :{
                    @code{
                    i=0;
                    //Lấy ra những địa chỉ IP đã dùng để đăng nhập vào hệ thống theo từng user
                    ip_address=com.ftl.sql.Database.executeQuery(cn,"SELECT                     DISTINCT(ip_address),
                    COUNT(ip_address) FROM adm_session ads WHERE ads.created<=sysdate                 AND  ads.created+1 >sysdate AND ads.user_id ='"+row[0]+"' GROUP BY                 ip_address");

                    //row[0] :lấy giá trị từ bên thread truyền sang
                    }
                :}
                Recipient==@{row[3]}
                CC
                Subject==[TEST] Cảnh báo đăng nhập vào hệ thống nhiều lần trong ngày @{row[4]}
                Content=:
                :{
                    <p>Kính gửi anh/chị<strong> @{row[1]}</strong></p>

                    <p>Hệ thống [Test] ghi nhận trong ngày @{row[4]} ,tài khoản @{row[5]}                 của anh chị đã thực hiện đăng nhập vào hệ thống hơn 10 lần( @{row[2]} lần)                 trong ngày,sử dụng các IP và số lần cụ thể như sau:</p>

                    <p>&nbsp;</p>
<table style="width:100%;border-collapse:collapse;border: 1px solid black;">
    <tbody>
        <tr style="border:1px solid black;">
            <th style="border:1px solid black;">STT</th>
            <th style="border:1px solid black;">Địa chỉ IP đăng nhập</th>
            <th style="border:1px solid black;">Số lần đăng nhập/trên ngày</th>
            <th style="border:1px solid black;">Địa chỉ</th>
            @foreach{ip : ip_address}
            <tr>
            <td style="border:1px solid black;" align="center">@{++i}</td>
            <td style="border:1px solid black;" align="center">@{ip.get(0)}</td>
            <td style="border:1px solid black;" align="center">@{ip.get(1)}</td>
            <td style="border:1px solid black;" align="center"><a href="http://api.ipinfodb.com/v3/ip-city/?key=20b96dca8b9a5d37b0355e9461c66e76eed30a2274422fa6213d9de6ffb2b34e&ip=@{ip.get(0)}">Chi tiết</a></td>
            </tr>
            @end{}
            <tr>
        </tr>
    </tbody>
</table>
:}
            SMS
                MvelHeader
                Recipient
                CC
                Content==a

Comment