蔣社想,程翠平
(安徽理工大學計算機科學與工程學院,安徽淮南 232001)
評標是招投標活動中的重要環節,也是建設領域防止腐敗現象發生的有效手段,評標工作是否公平、公正影響著交易主體的自身利益,同時也會影響到人民群眾對有形建筑市場的信任度。評標專家作為評標工作的主體,其評標行為公正與否,直接影響評標結果的公平與公正。《中華人民共和國招標投標法》第三十七條規定:“評標委員會成員名單在中標結果確定前應當保密”,評標專家抽取系統是隨機抽取和通知評標專家,中標前專家信息保密的有效手段。經調研,目前這一系統存在:隨機算法不合理、專家被抽取的機會不均等、抽取消耗時間過長、抽取與通知各自獨立、人工干預多、保密性能差、時間間隔過長等弊端。本系統的評標專家抽取是基于SQLServer存儲過程的,它具有運行速度快、能夠減少網絡流量、保證數據的安全等優點。
本系統包括專家管理模塊、數據庫維護模塊、信息查詢模塊、專家抽取模塊、語音通知模塊、報表管理模塊、系統管理模塊等七大模塊組成。
專家管理模塊:專家候選人通過網絡在線填報專家信息,未審核認證前填報者可以修改申報信息。
數據庫維護模塊:評標專家及企業數據管理,準確做到項目相關的專家回避。
信息查詢模塊:全方位的信息檢索與查詢。
專家抽取模塊:該模塊主要實現登記并審核招標公告、招標項目、招標人及招標信息、設定擬抽取專家條件、自動抽取專家、統計抽取結果報表、補抽專家等。
自動語音通知:語音系統根據專家抽取結果,自動撥打專家電話,并將各位專家的(按鍵)回復予以記錄并及時傳送到該網絡終端。
報表管理:海量的報表處理、專家信息、工程項目信息及專業人數等全部可生成多種報表比如:Word、Excel、Pdf等。
系統管理:嚴格的權限管理模式,主要是對用戶、角色的管理以及用戶權限的設置。

圖1 專家抽取流程圖
第一步:項目公告發布
在專家抽取的前若干天,項目負責人必須發布公告,系統管理員在系統中可設置規定天數。
第二步:項目公告確認
在項目公告正式發布的若干天以后,由項目的負責人來到指定的政府部門進行專家抽取。根據國家的規定,大型的政府投資項目必須通過公開招標的方式來進行,并且,必須在招標公告發布若干天以后進行。本步驟的目的就在于,確認本項目已經在指定的媒體(主要指的是本系統中的項目公告)確實發布了項目的招標公告,并且,發布的時間超過若干天。
第三步:項目信息錄入
用來錄入項目相關的信息。
第四步:設定專家抽取條件
專家的抽取條件由多組條件構成,每組抽取條件可以包括如下條件“是否資深專家”、“可評標地區”、“大類”、“小類”、“專業”、“屬性”、“人數”。
第五步:專家抽取
當用戶完成抽取條件設置,并且該抽取條件也通過了驗證,那么就可以進入到專家抽取界面。用來動態顯示當前的抽取情況,抽取按庫內專家被抽取的優先級進行抽取,保證公平性原則。按照順序逐個進行通知,并且標記每個專家的答復情況,目前有三種情況:確認能來,確認不來,沒有應答。一旦確認能來的專家數達到了需要的數目,則剩下未通知的專家則自動跳過,不再進行通知。統計確認能來的專家數量,如果正好等于需要的數目,那么本組專家抽取完畢。否則,專家數量不足,需要重新對所缺的專家按照同樣的抽取條件,補抽出相應數量的專家,直到專家數量滿足條件為止。如果在進行補抽的時候,發現數據庫中已經沒有滿足條件的專家了,此時就需要設置補抽條件。對于前面設置好的抽取條件,需要自動將抽取人數修改成實際能到的人數,同時允許用戶添加抽取條件,但是抽取人數的總和必須等于項目信息中所需要的專家人數。設置好了補抽條件以后,重新進入抽取條件驗證,抽取過程,直到整個項目需要的各類專家人數滿足需要。
第六步:表格打印
專家抽取完成以后,需要為每個確認能來的專家分配一個8位隨機編號。此時需要打印兩張報表,第一張為參加該項目評審的所有專家的列表,列出的內容包括生成的隨機編號等。第二張表為用來給所有參加評審的專家填寫評標中表現的表格,內容包括項目資料、參評專家的驗證碼,對應專家的身份:專家編號或姓名、評標表現、備注等信息由招標單位現場填寫。招標完成后交給終端用戶錄入到本系統中。
本系統是采用SQL Server存儲過程進行隨機抽取評標專家的,使用存儲過程而非SQL語句的原因有:
存儲過程通常會使性能增加,因為數據庫可以優化過程使用的數據訪問計劃,并對其進行緩存以備將來重用。
在數據庫中,存儲過程可分別得到保護。客戶可以被給予執行某個存儲過程的權限,但無權處理底層的表。
存儲過程將導致維護簡單,因為在一個已部署組件內,修改存儲過程通常要比修改硬編碼的SQL語句簡單。
存儲過程可以降低網絡流量,因為SQL語句可以以批處理的方式執行,而不是從客戶端發送多個請求。
該系統中的抽取評標專家的存儲過程如下;
CREATEPROCEDUREexpert_Draw
(@PackageId int,--采購包ID@DrawUserId int,--抽取人@DrawId int output--返回的DrawId)AS
DECLARE@sTmpSQL VARCHAR(500)
DECLARE@iCatalogId INT
DECLARE@iDrawCount INT
CREATE TABLE#TmpDrawResult--臨時存放抽取結果的表
(ExpertId INT,CatalogId INT,RowNum INT IDENTITY,)
DECLAREcur_DrawCondition CURSORFOR--抽取條件的游標
SELECTCatalogId,DrawCount
FROMExpertDrawConditon
WHEREPackageId=@PackageId
ORDERBY RowNum
OPENcur_DrawCondition --打開游標BEGINTRAN
FETCH NEXT FROM cur_DrawCondition INTO@iCatalogId,@iDrawCount
SELECT @DrawId=Sequence_NextId+1 from Sequences Where Sequence_Name='DrawId'
UPDATE Sequences SET Sequence_NextId=Sequence_NextId+1
INSERTINTOExpertDraw
(DrawId,DrawUserId,DrawTime,PackageId)VALUES
( @DrawId,@DrawUserId,GETDATE() ,@PackageId)
WHILE@@FETCH_STATUS=0--循環提取抽取條件的數據BEGIN
SET@sTmpSQL='INSERT INTO#TmpDrawResult(ExpertId,CatalogId)SELECTTOP'
+CAST(@iDrawCount ASVARCHAR(5))
+'ExpertId,'+CAST(@iCatalogId ASVARCHAR(5))
+'FROMExpertCatalog WHERECatalogId='
+CAST(@iCatalogId ASVARCHAR(5))
+'AND ExpertId NOT IN (SELECT ExpertId from#TmpDrawResult)'
+'ORDER BY NEWID()'
Execute(@sTmpSQL)
FETCH NEXT FROM cur_DrawCondition INTO@iCatalogId,@iDrawCount END
INSERTINTOExpertDrawDetail
(DrawId,RowNum,ExpertId,CatalogId) SELECT@DrawId,RowNum,ExpertId,CatalogId FROM#TmpDrawResult
Drop Table#TmpDrawResult
COMMITTRAN
CLOSEcur_DrawCondition --關閉釋放游標
DEALLOCATE cur_DrawCondition
使用SQL Server存儲過程具有提高系統性能、減少網絡流量、減少注入式攻擊、增加數據的安全性等優點,基于SQL Server存儲過程的評標專家抽取系統的建立改變了傳統的專家抽取模式,本系統把專家管理、設定專家抽取條件、專家抽取、語音通知、打印報表等功能集合在一起。整個過程一氣呵成,嚴格控制了人為干擾,滿足了實際評標抽取專家的要求。
[1]孫琬鐘.中華人民共和國招標投標法實務全書[M].北京:中國人民公安大學出版社,1999.
[2]袁鵬飛.SQL Server數據庫應用開發技術[M].北京:人民郵電出版社,1998.
[3]張海藩.軟件工程導輪(第四版)[M].北京:清華大學出版社,2003.
[4][美]MarkGraves.XML 數據庫設計[M].尹志軍,等譯.北京:機械工業出版社,2002.
[5]Usama M.Fayyad,Gregory Piatetsky Shapiro et al.Advances in Knowledge Discovery and Data Mining California[M].AAAI/MIT Press,1996.