趙英明
(中國石化銷售股份有限公司海南石油分公司,海南 海口 570311 )
海南省自1994年1月1日起,在全國率先實行了公路規費征收模式改革,將公路養路費、過橋費、過路費和公路運輸管理費即四費合一為燃油附加費,并統一在燃油銷售環節價外征收,全省高速公路、國道、省道無一收費站。成立了交通規費征稽局,從事燃油附加費的征繳工作。汽油車的交通征稽規費交由油品銷售企業代征,加油站銷售的每一升汽油約含1.2元的交通規費。征稽部門為了防止加油站私自進油銷售,采取了諸多措施,一是在加油站的卸油口安裝流量計,用于累計卸油數量,加油機安裝了鉛封,防止篡改數據,每月定時派人到加油站盤點,檢查是否帳實一致;二是要求加油站每月登記每一次卸油流量計的讀數,月底制作每個汽油罐的購銷存報表,送到當地征稽部門。加油站需要安裝價格不菲的流量計設備,不同品號的汽油在卸油時均需通過流量計,增加了罐區管道復雜度和卸油時間,而且增大了混油的風險;另外需要人工登記卸油數據及流量計數據、制作賬冊,每月還要準時打印報送。
2018年隨著銷售企業加油站液位儀系統的實施,海南省征稽局也全面提升加油站交通規費征收監管系統,開發部署了數據接口系統,供各個油品銷售企業進行數據接入,接入后征稽管理部門可以遠程監控加油站的購銷存情況,加油站不需要安裝卸油流量計,不需要登記數據和報送報表,征稽局人員也不需要到加油站現場盤點。因此,開發實施征稽局數據采集系統,實現征稽數據提交自動化具有較大的意義。
數據采集系統需要讀取液位儀設備,通過公司廣域光纖網絡將加油站的液位儀數據抽取到省中心服務器。有三種方案可供選擇,一是在加油站稅控電腦上安裝代理程序,代理程序讀取液位儀數據,向省中心服務器發送,用于省中心服務器不能直接訪問液位儀設備的情景;二是在各站的液位儀設備上安裝數據采集設備,采集數據向省中心服務器發送,海南中石油加油站普遍采用這種方案;三是省中心服務器直接訪問加油站的液位儀設備,集中發起讀取請求,獲取數據。
三種方案各有優劣。方案一的優點是數據傳送穩定、不受加油站防火墻策略調整的影響,即使省中心服務器不能訪問液位儀設備,也可以獲取到數據,缺點是需要液位儀支持網口,需要保持代理程序24小時不間斷運行。方案二的優點是支持液位儀設備網口和串口,不需要改造串口液位儀設備,缺點是增加設備投入和現場實施難度,故障點增多。方案三的優點是獲取數據速度快,實施成本低,故障點少,缺點是對液位儀設備要求較高,不僅要支持網口,還要支持路由功能。綜合各加油站的網絡和設備情況,接口系統采取第三種方案為主,第一種方案為輔的策略。
根據海南省征稽局加油站數據接口規范,需要傳送的數據有日盤點報告、油罐報告、實時銷售數據、實時庫存數據、實時收油數據、移入移出庫數據、回罐數據等,其中實時庫存數據要求每3分鐘上傳一次油罐的液位、密度等情況。
從接口規范對數據的要求來看,需要傳送一整套的進銷存數據,數據前后要有銜接,進銷存數據要保持平衡,需要進銷存系統的支持。如果要開發獨立的進銷存系統,開發、維護成本將大幅度提高,而且形成數據孤島。因此借助現有系統是比較合理的選擇,可大大減少建設成本,可選擇的進銷存系統有加油卡管控系統、中控系統、零管系統。其中零管系統數據與ERP系統直接對接,數據更加可靠,而且零管系統的開放性更好,數據組織更加合理,接入難度也較其他系統要小。缺點是數據要滯后1天,但能滿足接口數據的要求。
接口規范要求實時庫存數在短時間內(少于2分鐘)把所有加油站的液位信息發送到征稽局,實時性要求較高,存在不小的難度。一方面需要在硬件方面加大投入,至少需要8核以上,內存8GB以上的服務器,軟件方面要考慮多線程、隊列、緩存等多種技術組合。系統設計架構圖見圖1。

圖1 系統設計架構圖
考慮到系統并發量大,實時傳送要求較高,此項目選擇java作為開發語言,java在分布式計算、web應用開發方面具有較大的優勢,為查詢、操作、維護的便捷,采用B/S架構,采用了輕量級集成框架SSH即struts+spring+hibernate,SSH架構圖見圖2。SSH是java中一種流行的JAVA WEB 應用程序開源框架,Struts負責web層,也就是顯示層,負責顯示加油站油罐液位動態圖表、數據傳送狀態、歷史數據查詢、數據管理等界面, Spring負責業務層管理,即Service,其為Action提供統一的調用接口,封裝持久層的DAO,并集成Hibernate,是實現業務的核心,在業務層,系統從零管系統抽取購銷存數據,從液位儀設備讀取油罐液位信息,經過數據清理加工,形成最終形態,調用Hibernate組件持久保存到數據庫,在規定時間讀取數據庫數據,調用接口將數據發送到征稽局。Hibernate負責持久層,完成數據庫的CRUD操作。

圖2 SSH架構圖
一個重要的功能頁面是展現所有加油站的數據抽取和傳輸狀態,及時掌握系統運行狀況。然而數據的抽取是在后臺業務層進行的,如果采用靜態的HTML或者傳統的JSP頁面,僅能展現歷史數據,不能實時動態地顯示抽數和發送狀態,達不到實時監控的效果。如果能將后臺狀態通過不同圖標、進度條展現在前臺,將極大增加界面友好性,對系統的管理也更加有效。系統使用DWR組件的ScriptSession功能,在每個站的取數或者傳輸周期完成后,生成消息事件,將數據從后臺往web頁面前臺推送,更新頁面上該站(每站占一行)的相關數據,實現網頁的無刷新更新數據,達到C/S架構的效果,管理界面效果圖見圖3。

圖3 管理界面效果圖

圖4 實時油罐液位圖
零管系統使用的是sap公司的技術,后端使用ABAP語言開發各個功能模塊,前臺使用EP技術開發站級系統的WEB管理頁面,通過RFC技術調用后端的功能函數,實現數據的錄入、查詢、修改等操作。Sap為JAVA提供了RFC庫及SAP連接器(Jco),這些類庫中的RFC API封閉了外部系統和SAP的連接細節。本系統使用了 64位的JCO連接零管系統功能函數,提取站點信息、員工信息、分罐保管賬、購進、回灌等數據,保存在本地的臨時數據庫,供進一步的篩選、整理和傳輸。
接口規范要求每3分鐘上傳一次加油站油罐的液位、密度等信息,實時油罐液位圖見圖4。要在如此短的時間內完成所有加油站液位數據的讀取和傳送,無法使用簡單的輪詢方式,必須要應用多線程、多任務和異步執行等技術。但由于網絡、設備等原因,單站數據讀取和發送可能會超時,甚至超過3分鐘后才讀到數據,顯然會干擾到下一次的傳送任務,因此必須考慮同一任務周期中所有線程的同步問題和過期數據的處理問題。
有2個方案可供選擇:
一是多線程技術。使用Executors.newSingleThreadScheduledExecutor定時啟動任務(每隔3分鐘),設定超時時間(2分鐘)。在每一次任務中,對每一個站的液位儀數據讀取和數據發送開啟一個獨立的線程,每個線程保存本次任務ID,如果線程在2分鐘內完成數據的讀取和發送,線程自然結束,如果線程超過3分鐘仍在運行,Executors觸發超時處理函數,將這類線程標注為超時,并向前臺發送,更新前臺狀態。當超時的線程完成數據讀取,任務處理函數比較該線程的任務ID,識別出過期的線程后將其忽略。這個方案的優點是邏輯清晰、易于維護,開發難度小,缺點是開啟線程太多,占用內存高,降低了系統的運行效率,容易造成內存泄漏,可使用線程池技術緩解內存壓力。這是此系統采用的方案。
二是隊列排隊技術。在系統啟動時開啟若干個線程(一般與CPU核數一致),這些線程不斷地POP出全局隊列中的加油站ID,抽取液位儀數據并調用接口發送,如果隊列為空,處理線程進入休眠狀態。同樣使用Executors.newSingleThreadScheduledExecutor定時啟動任務(每隔3分鐘),設定超時時間(2分鐘)。每次任務將重新初始化隊列,將所有加油站ID號PUSH到隊列中,并喚醒處理線程。當任務超時后,超時處理函數將全局隊列中還未處理的加油站ID全部置為超時,并向前臺發送,更新前臺狀態。此方案的優點是開啟線程少,占用資源少,執行效率更高,缺點是如果所有線程被堵塞會造成后面的站點無法傳送數據,且設計復雜,實現較為困難,不易維護。
征稽局的接口規范通過http協議構筑的安全通道,采用RestFul 的WebServices接口。考慮到傳輸性能問題,采用java基礎的HttpURLConnection技術實現,其比開源httpclient技術要高出好幾倍的速度。雖然系統的傳輸接口較多(共15個),但由于各個傳輸接口高度相似,具有相同的IP、返回值格式、調用令牌、同樣的增刪改功能等,因此抽象出基類和接口方法,各個傳輸接口通過繼承基類和實現接口方法,實現代碼復用,減少重復代碼量,同時接口程序可讀性更好。
設計一套完整的解決方案,能夠在今后的維護中快速發現和處理問題,及時了解系統的運行狀況,是信息系統健壯性和穩定性的基本要求。征稽局數據監管接口系統涵蓋了數據傳輸監控、外接系統數據管理、中間數據管理、接口數據管理、日志管理等多個功能,系統主菜單見圖5。
(1)傳輸管理。傳輸管理實現三個管理功能,一是傳輸狀態的實時監控,每次的傳輸任務發起時所有站處于初始狀態,隨著后臺取數和傳輸狀態的改變,更新圖標(如完成、錯誤、超時等),另外以圖標方式展現加油站的油罐液位情況;二是單站傳輸管理,暫停/恢復加油站的數據讀取或傳輸;三是任務的手動管理,任務默認在系統啟動時就已經啟動,可暫停/恢復任務或者重新啟動任務。
(2)外接系統數據管理。系統默認在固定的時間抽取零管的數據,包括加油站基礎數據和每天的業務數據等,業務數據經過篩選加工,發送到征稽局服務器。在此可以手動發起抽數,查詢抽取的數據。
(3)中間數據管理。保存從零管系統、液位儀設備讀取并加工過的數據,能滿足接口數據的需要,其中從零管系統抽取的分罐保管帳、銷售數據、庫存數據、收油數據、移入移出庫數據、回罐等數據等均可進一步編輯修改再向征稽局服務器發送。
(4)接口數據管理。此功能可以遠程訪問征稽局接口服務器,查詢已經傳輸成功的數據,并可以修改、刪除。
(5)日志管理。涵蓋登錄日志、傳輸日志、液位儀取數日志、外接系統數據抽取日志、任務執行日志等,提供統計分析圖表如液位儀取數失敗統計、數據發送失敗統計等。

圖5 系統主菜單
征稽局數據監管數據采集系統上線后,表現相當穩定,除了個別網絡問題和液位儀設備問題,傳輸率基本達到90%以上,傳輸速度在1分鐘之內,達到征稽局數據監管要求。得益于前期良好的系統規劃、各項技術的正確選擇以及開發過程中的程序優化。項目的實施費用也得到很好的控制,由于采用直連液位儀方案,節省設備投入和現場實施費用,采用外接進銷存系統,節省開發費用,達到小投入大收益的目的。
系統投入使用后,新改造的站點不再安裝卸油流量計,每站可節省2~3萬元的費用,以300站估算,至少節約設備購置安裝費用700萬以上。另外加油站防滲改造完成后,液位儀系統與數據采集系統通訊連接成功,省征稽局系統接收到加油站數據,加油站即可投入運營,不需要當地征稽部門檢查驗收,大大節省了了油站改造后的投營時間,同時不需要再人工統計數據和報送報表,以每站每月50元的交通費計算,每年節約交通費約18萬元。
征稽局數據采集系統上線是政府監管部門與企業信息化系統集成的新嘗試,也是利用信息技術提升政府監管水平,為企業減負的典型案例。一方面大大減輕了政府部門的數據采集工作量,提高數據采集效率,為減少基層征稽人員奠定了基礎;另一方面通過面向加油站經營管理的全過程實時數據采集,實現了對加油站卸油、銷售、油罐庫存等系統的數據集成,既滿足了企業和政府的監管需要,也減少了企業設備和人力投入。該系統在提高工作效率,降低一線勞動力,增加經濟效益,系統整合優化,日常監控分析等方面均顯現出很大的優越性,促進了政府監管部門和企業信息化的融合。