雷宏偉
(陜西省通信工程質(zhì)量監(jiān)督中心西安質(zhì)監(jiān)站 陜西省西安市 710075)
通信工程的質(zhì)量監(jiān)督管理中有一項重要的環(huán)節(jié)就是工程開工前15日內(nèi)要做質(zhì)監(jiān)申報,各電信運營商工程建設部門要上報每個工程的基本情況和建設流程,政府管理部門對每個工程的流程、金額等進行審核,確保該工程是合理、合規(guī)、合法的。隨著通信行業(yè)的發(fā)展,工程項目越來越多,目前筆者一年要負責審核上萬個項目,完全依靠手工審批既費時、費力,也不現(xiàn)實。
Python 是一種跨平臺的計算機程序設計語言,是一個結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言。Python語言入門簡單,功能強大,不需要C/C++語言的內(nèi)存管理等繁瑣部分,使應用者可以集中精力用于業(yè)務邏輯開發(fā)。
為此,本文提出使用Python語言根據(jù)審批規(guī)則進行輔助自動審批的系統(tǒng),這樣防止人工審批的錯漏,也降低人工審批的勞動強度。
通信質(zhì)監(jiān)系統(tǒng)采用B/S 架構(gòu)工作,工程建設單位通過WEB 頁面登錄系統(tǒng)后,可以上報具體的工程內(nèi)容。管理員登錄到審批系統(tǒng)中,可以查詢已經(jīng)上報的項目列表,點擊該項目,會打開一個新的瀏覽器選項卡,新的選項卡中顯示該項目的詳細信息,并在最下方有審批意見輸入框,還有三個按鈕,分別為同意、不同意和關閉。
審批的過程就是打開每個上報項目,檢查其建設流程是否符合工程項目建設日期規(guī)范,安全生產(chǎn)費是否符合國家規(guī)定,資金的金額是否符合項目管理規(guī)范等,是否投資建設已知的違規(guī)工程。
能夠解決應用問題的可能方案有以下幾種:
一種類似BASIC 的程序語言,基于Windows 操作系統(tǒng),通過編寫代碼來模擬鼠標和鍵盤的操作,利用模擬鍵盤按鍵、鼠標移動和窗口/控件的組合來實現(xiàn)自動化操作。
一款模擬鼠標鍵盤動作的軟件,可以錄制或編寫一組鍵盤鼠標操作,用于解決一些傳統(tǒng)軟件無法覆蓋的電腦問題,可用于任何有待提高工作效率的領域,例如:業(yè)務流程優(yōu)化(使用腳本優(yōu)化業(yè)務流程,提高工作效率,降低企業(yè)成本)、辦公自動化(自動處理機械枯燥的辦公室電腦操作,例如企業(yè)信息發(fā)布、報表提交、郵件整理等)、日常應用(將電腦日常應用一鍵批量操作,例如股票交易中的閃電下單、操作預警等)、軟件自動測試(模擬人工操作進行軟件測試)、網(wǎng)游輔助(模擬人工操作網(wǎng)絡游戲的人物,將玩家從游戲公司不合理的長時間操作中解脫出來)
JavaScript(簡稱“JS”)是一種具有函數(shù)優(yōu)先的輕量級、解釋型或即時編譯型的高級編程語言。它以開發(fā)WEB 頁面的腳本語言而出名,因此對WEB 頁面有著最強的操作能力。
圖1
圖2
上述幾種自動執(zhí)行的軟件設計技術(shù)都有一定缺陷,AutoIt 和按鍵精靈雖能模擬鼠標鍵盤的操作,但無法執(zhí)行較復雜的條件判斷。審核工作是條件判斷多,操作較少的一種工作。
JS 功能強大,但是學習成本高,程序必須注入到已有的WEB頁面中,而且與WEB 界面有強綁定,WEB 頁面任何一點改動都會造成JS 的失效,調(diào)試和后續(xù)優(yōu)化都會比較復雜和繁瑣。
自動審批方案要完成的工作,就是登錄WEB 審批頁面,查詢是否有新上報的項目,如果有項目,就打開該項目,檢查填寫規(guī)范性,然后對工期時間進行規(guī)范性檢查,再然后對項目金額進行規(guī)范性檢查,最后對安全生產(chǎn)費費率和其它內(nèi)容進行檢查,然后根據(jù)檢查的結(jié)果填寫審批意見,并根據(jù)檢查情況決定對該項目進行批準還是拒絕。
對一個項目審批的流程圖如圖1所示。
Selenium 是一個免費的控制瀏覽器運行的組件,能像真實用戶所做的一樣操作瀏覽器中WEB 頁面的任何元素。其實現(xiàn)了WebDriver 的接口,提供了不同平臺操作各類瀏覽器的接口,比如目前主流的:IE,Firefox,Chrome,Opera,Android 等各個平臺的訪問。Selenium 的核心是用 JavaScript 編寫的,因此Selenium 可以在任何支持JS 腳本的瀏覽器中運行。
登錄的示例代碼如下:
眾所周知,瀏覽器在長時間不與服務器交互信息時,服務器會清理該Session,則當前的登錄會變無效,導致后續(xù)無法繼續(xù)進行審批,因此系統(tǒng)設定每隔30 秒鐘,對瀏覽器進行一次刷新,確保Session 一直有效。
審批過程中新項目原平臺都會打開新的瀏覽器選項卡,然后在新選項卡中打開該項目明細,審批完該項目后,原平臺也會關閉剛才新建的選項卡。
Selenium 提供瀏覽器選項卡的管理機制相對有限,窗口多次打開和關閉,Selenium 的切換特別容易造成混亂,因此本項目采用打開一個瀏覽器選項卡,在該選項卡中完成所有項目審批,然后再關閉。
筆者分析了WEB 清單列表頁面的代碼,發(fā)現(xiàn)了每個項目都有一個不同的鏈接地址。這樣就可以針對每個鏈接,實際就是每個項目,進行審批,示例代碼如下:
#獲取審批項目的每個地址
Listurl=bs.find_elements_by_tag_name('input')
for each in Listurl:
DealOne(bs,each)#循環(huán)審批每一個項目
Openpyxl 是一個開源項目,Openpyxl 模塊是一個讀寫Excel 2010以上版本文檔的Python庫,能夠輕松處理擴展名為xlsx的文檔。
微軟將Excel 2010 版本作為一個分水嶺,之前的文檔核心結(jié)構(gòu)是復合文檔類型的結(jié)構(gòu),擴展名為xls,從Excel 2010 及以后,默認使用的核心結(jié)構(gòu)是 XML 類型的結(jié)構(gòu)。如果要處理更早格式的Excel 文檔,需要用到其它庫(如:xlrd、xlwt 等),這也是Openpyxl 比較其他模塊的不足之處。
Openpyxl 是一個Python 下優(yōu)秀的模塊,能夠同時讀取和修改Excel 文檔,甚至可以對單元格進行詳細設置,設置內(nèi)容包括字體、字體大小、前景和背景顏色等單元格樣式,甚至還支持圖表插入、打印設置等內(nèi)容,而且可以處理數(shù)據(jù)量較大的Excel 文件,跨平臺處理大量數(shù)據(jù)是其它模塊沒法相比的。因此,Openpyxl 成為處理Excel 復雜問題的首選庫函數(shù)。
使用Openpyxl 前需要掌握三個對象和二個集合:
Workbook——工作簿,代表一個Excel 文件。
Worksheet——工作表,就是一個Sheet,代表一張表格。
Cell——單元格,指表格中的某個或某多個單元格。
Workbooks——工作簿集合,是多個工作簿的集合,通過索引可以訪問到集合中所有的工作簿。
Worksheets——工作表集合,一個是多個工作表的集合,通過索引可以訪問到集合中所有的工作表。
他們的包含關系如圖2所示。
該系統(tǒng)共使用了不到400 行代碼,如果使用傳統(tǒng)的方式至少要2000 行以上的代碼,代碼難度和復雜度都大幅降低,后續(xù)功能擴展也很方便。
采用該自動審批系統(tǒng),審批一個項目的時間從原來的平均1 分鐘到現(xiàn)在的平均3 秒鐘,效率提升了20 倍,審批的錯誤率也大大降低,最重要的是可以實現(xiàn)24 小時在線審批,這樣當工程部門上報信息后,稍等一下就可以看到審批結(jié)果,可以立即補正問題,迅速進入到下一步工程建設中,工作效率也提高了很多。
文章描述了使用Python語言,對通信工程質(zhì)量監(jiān)督過程中進行輔助自動審批。
結(jié)果表明,采用自動化審批后,減少了人為審批中經(jīng)常容易犯的錯誤,既大大提高了審批的及時率,也提高了工程建設部門的工作效率。