用perl完成兩個資料庫帳號同步的動作(*ERP及內部WEB)

利用perl程式腳本語言讓以ERP為主的資料庫同步內部網頁的資料庫上的帳號(新增與刪除帳號)

use strict;
use DBI;
my $data_process=0;

#連線資料庫
my $dbh = DBI->connect("dbi:ODBC:ERP","sa","password") or die "$DBI::errstr\n"; 
my $dbh1 = DBI->connect("dbi:ODBC:ERP","sa","password") or die "$DBI::errstr\n"; 
#取得今天日期作為查詢條件字串,如果不用chomp取得資料會多個換行字元
chomp(my($today)=`date +%Y%m%d`);

#儲存信件內容顯示的CSS設定值
my $style =<<end;
<style>
td {width:100px;border:1px solid purple;}
</style>
end
#新進員工記錄內容
my $content  =<<end;
<p>已將下列新進員工帳號加入WEB資料庫</p>
<table>
<thead><tr><th>員工姓名</th><th>員工編號</th><th>到職日</th></tr></thead>
<tbody>%s</tbody>
</table>
end
my $count=0;
my $temp="";#字串暫存變數
#資料庫查詢字串,查詢ERP是否有新進員工資料
my $statement =<<end;
select rtrim(MV001) MV001,rtrim(MV002) MV002,rtrim(MV004) MV004,rtrim(MV008) MV008,rtrim(MV021) MV021 
from CMSMV where MV022 ='' and MV001 not in (select MV001 from YCMSMV);
end

#由資料庫取得查詢的資料
my $emps = $dbh->selectall_arrayref($statement,{ Slice => {} });
#將取得的新進員工資料一一寫入信件內容中, 並替新進員工新增網站帳號
foreach my $emp ( @$emps ) {
	$count+=1;
	$content .= "<tr><td>$emp->{MV002}</td><td>$emp->{MV001}</td><td>$emp->{MV021}</td></tr>";
	my $statement1=<<end;
insert into YCMSMV(COMPANY,CREATOR,USR_GROUP,CREATE_DATE,MODIFIER,MODI_DATE,FLAG,MV001,MV002,MV003,MV100,NAME) 
values('A01B','sc.yang','300','$today','','','0','$emp->{MV001}','$emp->{MV001}','$emp->{MV008}','$emp->{MV004}','$emp->{MV002}');
end
	$dbh1->do($statement1) or die $dbh1->errstr;
}

#如果無新進員工則清空內容0,有則標記有資料被處理
if($count=='0'){
	$content="";
}
else{
	$content=sprintf($content,$temp);
	$data_process=1;
}


#離職員工資料
my $content1 =<<end;
<p>已將下列離職員工帳號由WEB資料庫中刪除</p>
<table>
<thead><tr><th>員工姓名</th><th>員工編號</th><th>離職日</th></tr></thead>
<tbody>%s</tbody>
</table>
end
#計數器歸零
$count=0;
$temp="";
#查詢已離職員工但尚未WEB資料庫清除帳號者
$statement=<<end;
select MV001,MV002,MV022 from CMSMV where MV022<>'' and MV001 in (select MV001 from YCMSMV);
end
$emps = $dbh->selectall_arrayref($statement,{ Slice => {} });
foreach my $emp ( @$emps ) {
	$count+=1;
	#記錄離職員工
	$temp .="<tr><td>$emp->{MV002}</td><td>$emp->{MV001}</td><td>$emp->{MV022}</td></tr>";
	#於網頁資料庫中刪除離職員工帳號
	my $statement1=<<end;	
delete from YCMSMV where MV001='$emp->{MV001}';
end
	$dbh1->do($statement1) or die $dbh1->errstr;
}

#判斷是否有需要處理的帳號
if($count=="0"){
	$content1="";
}
else{
	$content1=sprintf($content1,$temp);
	$data_process=1;
}

#關閉資料庫連線
my $rc = $dbh->disconnect  or warn $dbh->errstr;
my $rc1 =$dbh1->disconnect or warn $dbh1->errstr;

#沒有要新增或是移除的帳號則離開
if($data_process=="0"){
	exit 0;
}

#信件主旨
my $subject  = "自動同步ERP和WEB帳號";
#使用ubuntu的mail指令執行郵件寄送功能,使用html格式、填入主旨、指定收信人
my $sendmail = "/usr/bin/mail -a 'Content-type: text/html;' -s $subject sc.yang\@toyoink-ct.com.tw\n";
#開啟檔案
open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!";
#將郵件內容寫入
print SENDMAIL $style.$content.$content1;
#關閉檔案即開始寄送郵件
close(SENDMAIL);

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s