#!/usr/bin/perl
# program : estimatescore.pl 計算評分卡的得分
# scrpition: 執行本資料字段批量檢查需要以下幾個步驟
# version :
use strict;#對語法做嚴格限制,如變數必須先用my宣告
use dbi;
use time::local;
my $dbh;#與資料庫的連線
my @fieldrow;
# my $logfile;
# #日誌檔案目錄
# #乙個大於號,表示覆蓋原有檔案的內容
# #兩個大於號表示在原有檔案內容之後新增
# my $lfnowtime =getnowtime();
# open $logfile,">checklog$lfnowtime.txt";
# select $logfile;
#連線td資料庫
sub tdconnect()else;$i++)else{
# 當前節點的葉子子節點
" inner join estimate_group eg on ec.folder_id='$child_folder_id' ".
" and ec.org_id='$orgid' and rundate = date'$rundate' ";
my $leafsth = $dbh->prepare($leafscoresql) or return -1;
$leafsth->execute() or return -1;
my @fieldrow = $leafsth->fetchrow();
my $s = "$fieldrow[0]";
my $ms = "$fieldrow[1]";
print("leaf node: $child_folder_id ,score :$s \n");
$currnodescore += $s ;
$maxscore += $ms;
$leafsth ->finish();
" where folder_id = $curr_folder_id";
my $insertnodesth = $dbh->prepare($insertnodescoresql) or return -1;
$insertnodesth ->execute() or return -1;
$insertnodesth ->finish();
$nodesth->finish();
print("-------------------------------calnodescore end ---------------------------\n");
return $currnodescore."#".$maxscore;
#計算評分卡值得入口
sub calcardscore{
print("--------------------------------calcardscore begin --------------------------\n");
my ($nodeid,$rundate,$orgid) = @_;
my $cardscorestr = calnodescore($nodeid,$orgid,$rundate);#通過呼叫遞迴的計算節點的得分,最終求得評分卡最終的得分
my @cardscorearr = split("#",$cardscorestr);
my $cardscore = @cardscorearr[0];
my $cardscoremax = @cardscorearr[1];
" where folder_id='$nodeid' and status='1' ";
my $cardscoresth = $dbh->prepare($cardscoreinsert) or return -1;
$cardscoresth ->execute() or return -1;
$cardscoresth->finish();
print("--------------------------------calcardscore end --------------------------\n");
sub main{
print (getnowtime()."--------------------------------------------main begin--------------------------------------------\n ");
#得到資料庫連線----td庫連線
tdconnect();
#預設計算規則檢查結果表最新檢查日期的評分結果
my $rundatesth = $dbh->prepare($rundatesql) or return -1;
$rundatesth ->execute() or return -1;
my @fieldrow = $rundatesth->fetchrow();
my $rundate = "$fieldrow[0]";
$rundatesth ->finish();
#如果有傳入日期引數,以傳進來的日期引數為準,從而實現手工排程或者按需排程
if($#argv==0){
$rundate = $argv[0];
my $deletehistorysth = $dbh ->prepare($deletehistory) or return -1;
$deletehistorysth ->execute() or return -1;
$deletehistorysth ->finish();
print("deletehistory : succeed \n");
print("rundate : $rundate \n");
my $cardinfosth = $dbh ->prepare($cardinfo) or return -1;
$cardinfosth->execute() or return -1;
while(my @fieldrow = $cardinfosth->fetchrow()){
my $cardid = "$fieldrow[0]";
#結果表裡可能包括所有的機構,包括四級機構,但是實際計算時只需到分支行
#規則檢查結果的最新表,有機構存在才計算對應的得分
" on org_id = branch_id and branch_level<=3 ".
"where rundate= date '$rundate'";
my $getorgsth = $dbh->prepare($getorg) or return -1;
$getorgsth ->execute() or return -1;
while(my @fieldrow = $getorgsth->fetchrow()){
my $branchid = "$fieldrow[0]";
#遞迴計算樹形節點的得分,並插入到estimate_card_score樹形節點得分資訊表中
calrulescore($cardid,$rundate,$branchid);
calleafnodescore($cardid ,$rundate,$branchid);
calcardscore($cardid ,$rundate,$branchid);#引數為使用者的輸入節點id
$getorgsth ->finish();
print (getnowtime()."--------------------------------------------main end --------------------------------------------\n ");
sub getnowtime{
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime();
$hour = sprintf("%02d", $hour);
$min = sprintf("%02d", $min);
$sec = sprintf("%02d", $sec);
my $stime = getnowdate()." ".$hour.":".$min.":".$sec;
return $stime;
#找到當前的日期,月份要加1,年份是從1900開始算的
sub getnowdate{
my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime();
$mon = sprintf("%02d", $mon+1);
$day = sprintf("%02d", $day);
my $stime = ($year+1900)."-".$mon."-".$day;
return $stime;
my $rc = main();#函式的入口
exit($rc);
計算選手最後得分二
1.5.檔名稱 7.完成日期 2013年 11月14日 8.版本號 v0.1 9.對任務及求解方法的描述部分 10.輸入描述 無 11.問題描述 12.程式輸入 13.程式輸出 14.問題分析 15.演算法設計 去掉乙個最高分,乙個最低分,其餘數的平均值就是該選手最後得分。16.17.我的程式 in...
計算歌手的最後得分一
1.5.檔名稱 7.完成日期 2013年 11月13日 8.版本號 v0.1 9.對任務及求解方法的描述部分 10.輸入描述 無 11.問題描述 12.程式輸入 13.程式輸出 14.問題分析 15.演算法設計 16.17.我的程式 include using namespace std doubl...
SPSS得出因子後怎麼計算綜合得分
因子分析只是乙個基礎的工作,因子得分不是因子分析的最終結果,因子得分可以作為變數進行回歸分析 聚類分析 計算因子的綜合得分等等。因子綜合得分在因子得分的後續運用中很是重要。沒有必要在excel中建立計算公式,spss的功能很強大,操作見。計算出後,可一再建立乙個 排序 變數,按降序方法來排序。根據因...