趙英明
(中國石化銷售股份有限公司海南石油分公司,海南 海口 570311 )
海南省自1994年1月1日起,在全國率先實行了公路規(guī)費(fèi)征收模式改革,將公路養(yǎng)路費(fèi)、過橋費(fèi)、過路費(fèi)和公路運(yùn)輸管理費(fèi)即四費(fèi)合一為燃油附加費(fèi),并統(tǒng)一在燃油銷售環(huán)節(jié)價外征收,全省高速公路、國道、省道無一收費(fèi)站。成立了交通規(guī)費(fèi)征稽局,從事燃油附加費(fèi)的征繳工作。汽油車的交通征稽規(guī)費(fèi)交由油品銷售企業(yè)代征,加油站銷售的每一升汽油約含1.2元的交通規(guī)費(fèi)。征稽部門為了防止加油站私自進(jìn)油銷售,采取了諸多措施,一是在加油站的卸油口安裝流量計,用于累計卸油數(shù)量,加油機(jī)安裝了鉛封,防止篡改數(shù)據(jù),每月定時派人到加油站盤點(diǎn),檢查是否帳實一致;二是要求加油站每月登記每一次卸油流量計的讀數(shù),月底制作每個汽油罐的購銷存報表,送到當(dāng)?shù)卣骰块T。加油站需要安裝價格不菲的流量計設(shè)備,不同品號的汽油在卸油時均需通過流量計,增加了罐區(qū)管道復(fù)雜度和卸油時間,而且增大了混油的風(fēng)險;另外需要人工登記卸油數(shù)據(jù)及流量計數(shù)據(jù)、制作賬冊,每月還要準(zhǔn)時打印報送。
2018年隨著銷售企業(yè)加油站液位儀系統(tǒng)的實施,海南省征稽局也全面提升加油站交通規(guī)費(fèi)征收監(jiān)管系統(tǒng),開發(fā)部署了數(shù)據(jù)接口系統(tǒng),供各個油品銷售企業(yè)進(jìn)行數(shù)據(jù)接入,接入后征稽管理部門可以遠(yuǎn)程監(jiān)控加油站的購銷存情況,加油站不需要安裝卸油流量計,不需要登記數(shù)據(jù)和報送報表,征稽局人員也不需要到加油站現(xiàn)場盤點(diǎn)。因此,開發(fā)實施征稽局?jǐn)?shù)據(jù)采集系統(tǒng),實現(xiàn)征稽數(shù)據(jù)提交自動化具有較大的意義。
數(shù)據(jù)采集系統(tǒng)需要讀取液位儀設(shè)備,通過公司廣域光纖網(wǎng)絡(luò)將加油站的液位儀數(shù)據(jù)抽取到省中心服務(wù)器。有三種方案可供選擇,一是在加油站稅控電腦上安裝代理程序,代理程序讀取液位儀數(shù)據(jù),向省中心服務(wù)器發(fā)送,用于省中心服務(wù)器不能直接訪問液位儀設(shè)備的情景;二是在各站的液位儀設(shè)備上安裝數(shù)據(jù)采集設(shè)備,采集數(shù)據(jù)向省中心服務(wù)器發(fā)送,海南中石油加油站普遍采用這種方案;三是省中心服務(wù)器直接訪問加油站的液位儀設(shè)備,集中發(fā)起讀取請求,獲取數(shù)據(jù)。
三種方案各有優(yōu)劣。方案一的優(yōu)點(diǎn)是數(shù)據(jù)傳送穩(wěn)定、不受加油站防火墻策略調(diào)整的影響,即使省中心服務(wù)器不能訪問液位儀設(shè)備,也可以獲取到數(shù)據(jù),缺點(diǎn)是需要液位儀支持網(wǎng)口,需要保持代理程序24小時不間斷運(yùn)行。方案二的優(yōu)點(diǎn)是支持液位儀設(shè)備網(wǎng)口和串口,不需要改造串口液位儀設(shè)備,缺點(diǎn)是增加設(shè)備投入和現(xiàn)場實施難度,故障點(diǎn)增多。方案三的優(yōu)點(diǎn)是獲取數(shù)據(jù)速度快,實施成本低,故障點(diǎn)少,缺點(diǎn)是對液位儀設(shè)備要求較高,不僅要支持網(wǎng)口,還要支持路由功能。綜合各加油站的網(wǎng)絡(luò)和設(shè)備情況,接口系統(tǒng)采取第三種方案為主,第一種方案為輔的策略。
根據(jù)海南省征稽局加油站數(shù)據(jù)接口規(guī)范,需要傳送的數(shù)據(jù)有日盤點(diǎn)報告、油罐報告、實時銷售數(shù)據(jù)、實時庫存數(shù)據(jù)、實時收油數(shù)據(jù)、移入移出庫數(shù)據(jù)、回罐數(shù)據(jù)等,其中實時庫存數(shù)據(jù)要求每3分鐘上傳一次油罐的液位、密度等情況。
從接口規(guī)范對數(shù)據(jù)的要求來看,需要傳送一整套的進(jìn)銷存數(shù)據(jù),數(shù)據(jù)前后要有銜接,進(jìn)銷存數(shù)據(jù)要保持平衡,需要進(jìn)銷存系統(tǒng)的支持。如果要開發(fā)獨(dú)立的進(jìn)銷存系統(tǒng),開發(fā)、維護(hù)成本將大幅度提高,而且形成數(shù)據(jù)孤島。因此借助現(xiàn)有系統(tǒng)是比較合理的選擇,可大大減少建設(shè)成本,可選擇的進(jìn)銷存系統(tǒng)有加油卡管控系統(tǒng)、中控系統(tǒng)、零管系統(tǒng)。其中零管系統(tǒng)數(shù)據(jù)與ERP系統(tǒng)直接對接,數(shù)據(jù)更加可靠,而且零管系統(tǒng)的開放性更好,數(shù)據(jù)組織更加合理,接入難度也較其他系統(tǒng)要小。缺點(diǎn)是數(shù)據(jù)要滯后1天,但能滿足接口數(shù)據(jù)的要求。
接口規(guī)范要求實時庫存數(shù)在短時間內(nèi)(少于2分鐘)把所有加油站的液位信息發(fā)送到征稽局,實時性要求較高,存在不小的難度。一方面需要在硬件方面加大投入,至少需要8核以上,內(nèi)存8GB以上的服務(wù)器,軟件方面要考慮多線程、隊列、緩存等多種技術(shù)組合。系統(tǒng)設(shè)計架構(gòu)圖見圖1。
圖1 系統(tǒng)設(shè)計架構(gòu)圖
考慮到系統(tǒng)并發(fā)量大,實時傳送要求較高,此項目選擇java作為開發(fā)語言,java在分布式計算、web應(yīng)用開發(fā)方面具有較大的優(yōu)勢,為查詢、操作、維護(hù)的便捷,采用B/S架構(gòu),采用了輕量級集成框架SSH即struts+spring+hibernate,SSH架構(gòu)圖見圖2。SSH是java中一種流行的JAVA WEB 應(yīng)用程序開源框架,Struts負(fù)責(zé)web層,也就是顯示層,負(fù)責(zé)顯示加油站油罐液位動態(tài)圖表、數(shù)據(jù)傳送狀態(tài)、歷史數(shù)據(jù)查詢、數(shù)據(jù)管理等界面, Spring負(fù)責(zé)業(yè)務(wù)層管理,即Service,其為Action提供統(tǒng)一的調(diào)用接口,封裝持久層的DAO,并集成Hibernate,是實現(xiàn)業(yè)務(wù)的核心,在業(yè)務(wù)層,系統(tǒng)從零管系統(tǒng)抽取購銷存數(shù)據(jù),從液位儀設(shè)備讀取油罐液位信息,經(jīng)過數(shù)據(jù)清理加工,形成最終形態(tài),調(diào)用Hibernate組件持久保存到數(shù)據(jù)庫,在規(guī)定時間讀取數(shù)據(jù)庫數(shù)據(jù),調(diào)用接口將數(shù)據(jù)發(fā)送到征稽局。Hibernate負(fù)責(zé)持久層,完成數(shù)據(jù)庫的CRUD操作。
圖2 SSH架構(gòu)圖
一個重要的功能頁面是展現(xiàn)所有加油站的數(shù)據(jù)抽取和傳輸狀態(tài),及時掌握系統(tǒng)運(yùn)行狀況。然而數(shù)據(jù)的抽取是在后臺業(yè)務(wù)層進(jìn)行的,如果采用靜態(tài)的HTML或者傳統(tǒng)的JSP頁面,僅能展現(xiàn)歷史數(shù)據(jù),不能實時動態(tài)地顯示抽數(shù)和發(fā)送狀態(tài),達(dá)不到實時監(jiān)控的效果。如果能將后臺狀態(tài)通過不同圖標(biāo)、進(jìn)度條展現(xiàn)在前臺,將極大增加界面友好性,對系統(tǒng)的管理也更加有效。系統(tǒng)使用DWR組件的ScriptSession功能,在每個站的取數(shù)或者傳輸周期完成后,生成消息事件,將數(shù)據(jù)從后臺往web頁面前臺推送,更新頁面上該站(每站占一行)的相關(guān)數(shù)據(jù),實現(xiàn)網(wǎng)頁的無刷新更新數(shù)據(jù),達(dá)到C/S架構(gòu)的效果,管理界面效果圖見圖3。
圖3 管理界面效果圖
圖4 實時油罐液位圖
零管系統(tǒng)使用的是sap公司的技術(shù),后端使用ABAP語言開發(fā)各個功能模塊,前臺使用EP技術(shù)開發(fā)站級系統(tǒng)的WEB管理頁面,通過RFC技術(shù)調(diào)用后端的功能函數(shù),實現(xiàn)數(shù)據(jù)的錄入、查詢、修改等操作。Sap為JAVA提供了RFC庫及SAP連接器(Jco),這些類庫中的RFC API封閉了外部系統(tǒng)和SAP的連接細(xì)節(jié)。本系統(tǒng)使用了 64位的JCO連接零管系統(tǒng)功能函數(shù),提取站點(diǎn)信息、員工信息、分罐保管賬、購進(jìn)、回灌等數(shù)據(jù),保存在本地的臨時數(shù)據(jù)庫,供進(jìn)一步的篩選、整理和傳輸。
接口規(guī)范要求每3分鐘上傳一次加油站油罐的液位、密度等信息,實時油罐液位圖見圖4。要在如此短的時間內(nèi)完成所有加油站液位數(shù)據(jù)的讀取和傳送,無法使用簡單的輪詢方式,必須要應(yīng)用多線程、多任務(wù)和異步執(zhí)行等技術(shù)。但由于網(wǎng)絡(luò)、設(shè)備等原因,單站數(shù)據(jù)讀取和發(fā)送可能會超時,甚至超過3分鐘后才讀到數(shù)據(jù),顯然會干擾到下一次的傳送任務(wù),因此必須考慮同一任務(wù)周期中所有線程的同步問題和過期數(shù)據(jù)的處理問題。
有2個方案可供選擇:
一是多線程技術(shù)。使用Executors.newSingleThreadScheduledExecutor定時啟動任務(wù)(每隔3分鐘),設(shè)定超時時間(2分鐘)。在每一次任務(wù)中,對每一個站的液位儀數(shù)據(jù)讀取和數(shù)據(jù)發(fā)送開啟一個獨(dú)立的線程,每個線程保存本次任務(wù)ID,如果線程在2分鐘內(nèi)完成數(shù)據(jù)的讀取和發(fā)送,線程自然結(jié)束,如果線程超過3分鐘仍在運(yùn)行,Executors觸發(fā)超時處理函數(shù),將這類線程標(biāo)注為超時,并向前臺發(fā)送,更新前臺狀態(tài)。當(dāng)超時的線程完成數(shù)據(jù)讀取,任務(wù)處理函數(shù)比較該線程的任務(wù)ID,識別出過期的線程后將其忽略。這個方案的優(yōu)點(diǎn)是邏輯清晰、易于維護(hù),開發(fā)難度小,缺點(diǎn)是開啟線程太多,占用內(nèi)存高,降低了系統(tǒng)的運(yùn)行效率,容易造成內(nèi)存泄漏,可使用線程池技術(shù)緩解內(nèi)存壓力。這是此系統(tǒng)采用的方案。
二是隊列排隊技術(shù)。在系統(tǒng)啟動時開啟若干個線程(一般與CPU核數(shù)一致),這些線程不斷地POP出全局隊列中的加油站ID,抽取液位儀數(shù)據(jù)并調(diào)用接口發(fā)送,如果隊列為空,處理線程進(jìn)入休眠狀態(tài)。同樣使用Executors.newSingleThreadScheduledExecutor定時啟動任務(wù)(每隔3分鐘),設(shè)定超時時間(2分鐘)。每次任務(wù)將重新初始化隊列,將所有加油站ID號PUSH到隊列中,并喚醒處理線程。當(dāng)任務(wù)超時后,超時處理函數(shù)將全局隊列中還未處理的加油站ID全部置為超時,并向前臺發(fā)送,更新前臺狀態(tài)。此方案的優(yōu)點(diǎn)是開啟線程少,占用資源少,執(zhí)行效率更高,缺點(diǎn)是如果所有線程被堵塞會造成后面的站點(diǎn)無法傳送數(shù)據(jù),且設(shè)計復(fù)雜,實現(xiàn)較為困難,不易維護(hù)。
征稽局的接口規(guī)范通過http協(xié)議構(gòu)筑的安全通道,采用RestFul 的WebServices接口??紤]到傳輸性能問題,采用java基礎(chǔ)的HttpURLConnection技術(shù)實現(xiàn),其比開源httpclient技術(shù)要高出好幾倍的速度。雖然系統(tǒng)的傳輸接口較多(共15個),但由于各個傳輸接口高度相似,具有相同的IP、返回值格式、調(diào)用令牌、同樣的增刪改功能等,因此抽象出基類和接口方法,各個傳輸接口通過繼承基類和實現(xiàn)接口方法,實現(xiàn)代碼復(fù)用,減少重復(fù)代碼量,同時接口程序可讀性更好。
設(shè)計一套完整的解決方案,能夠在今后的維護(hù)中快速發(fā)現(xiàn)和處理問題,及時了解系統(tǒng)的運(yùn)行狀況,是信息系統(tǒng)健壯性和穩(wěn)定性的基本要求。征稽局?jǐn)?shù)據(jù)監(jiān)管接口系統(tǒng)涵蓋了數(shù)據(jù)傳輸監(jiān)控、外接系統(tǒng)數(shù)據(jù)管理、中間數(shù)據(jù)管理、接口數(shù)據(jù)管理、日志管理等多個功能,系統(tǒng)主菜單見圖5。
(1)傳輸管理。傳輸管理實現(xiàn)三個管理功能,一是傳輸狀態(tài)的實時監(jiān)控,每次的傳輸任務(wù)發(fā)起時所有站處于初始狀態(tài),隨著后臺取數(shù)和傳輸狀態(tài)的改變,更新圖標(biāo)(如完成、錯誤、超時等),另外以圖標(biāo)方式展現(xiàn)加油站的油罐液位情況;二是單站傳輸管理,暫停/恢復(fù)加油站的數(shù)據(jù)讀取或傳輸;三是任務(wù)的手動管理,任務(wù)默認(rèn)在系統(tǒng)啟動時就已經(jīng)啟動,可暫停/恢復(fù)任務(wù)或者重新啟動任務(wù)。
(2)外接系統(tǒng)數(shù)據(jù)管理。系統(tǒng)默認(rèn)在固定的時間抽取零管的數(shù)據(jù),包括加油站基礎(chǔ)數(shù)據(jù)和每天的業(yè)務(wù)數(shù)據(jù)等,業(yè)務(wù)數(shù)據(jù)經(jīng)過篩選加工,發(fā)送到征稽局服務(wù)器。在此可以手動發(fā)起抽數(shù),查詢抽取的數(shù)據(jù)。
(3)中間數(shù)據(jù)管理。保存從零管系統(tǒng)、液位儀設(shè)備讀取并加工過的數(shù)據(jù),能滿足接口數(shù)據(jù)的需要,其中從零管系統(tǒng)抽取的分罐保管帳、銷售數(shù)據(jù)、庫存數(shù)據(jù)、收油數(shù)據(jù)、移入移出庫數(shù)據(jù)、回罐等數(shù)據(jù)等均可進(jìn)一步編輯修改再向征稽局服務(wù)器發(fā)送。
(4)接口數(shù)據(jù)管理。此功能可以遠(yuǎn)程訪問征稽局接口服務(wù)器,查詢已經(jīng)傳輸成功的數(shù)據(jù),并可以修改、刪除。
(5)日志管理。涵蓋登錄日志、傳輸日志、液位儀取數(shù)日志、外接系統(tǒng)數(shù)據(jù)抽取日志、任務(wù)執(zhí)行日志等,提供統(tǒng)計分析圖表如液位儀取數(shù)失敗統(tǒng)計、數(shù)據(jù)發(fā)送失敗統(tǒng)計等。
圖5 系統(tǒng)主菜單
征稽局?jǐn)?shù)據(jù)監(jiān)管數(shù)據(jù)采集系統(tǒng)上線后,表現(xiàn)相當(dāng)穩(wěn)定,除了個別網(wǎng)絡(luò)問題和液位儀設(shè)備問題,傳輸率基本達(dá)到90%以上,傳輸速度在1分鐘之內(nèi),達(dá)到征稽局?jǐn)?shù)據(jù)監(jiān)管要求。得益于前期良好的系統(tǒng)規(guī)劃、各項技術(shù)的正確選擇以及開發(fā)過程中的程序優(yōu)化。項目的實施費(fèi)用也得到很好的控制,由于采用直連液位儀方案,節(jié)省設(shè)備投入和現(xiàn)場實施費(fèi)用,采用外接進(jìn)銷存系統(tǒng),節(jié)省開發(fā)費(fèi)用,達(dá)到小投入大收益的目的。
系統(tǒng)投入使用后,新改造的站點(diǎn)不再安裝卸油流量計,每站可節(jié)省2~3萬元的費(fèi)用,以300站估算,至少節(jié)約設(shè)備購置安裝費(fèi)用700萬以上。另外加油站防滲改造完成后,液位儀系統(tǒng)與數(shù)據(jù)采集系統(tǒng)通訊連接成功,省征稽局系統(tǒng)接收到加油站數(shù)據(jù),加油站即可投入運(yùn)營,不需要當(dāng)?shù)卣骰块T檢查驗收,大大節(jié)省了了油站改造后的投營時間,同時不需要再人工統(tǒng)計數(shù)據(jù)和報送報表,以每站每月50元的交通費(fèi)計算,每年節(jié)約交通費(fèi)約18萬元。
征稽局?jǐn)?shù)據(jù)采集系統(tǒng)上線是政府監(jiān)管部門與企業(yè)信息化系統(tǒng)集成的新嘗試,也是利用信息技術(shù)提升政府監(jiān)管水平,為企業(yè)減負(fù)的典型案例。一方面大大減輕了政府部門的數(shù)據(jù)采集工作量,提高數(shù)據(jù)采集效率,為減少基層征稽人員奠定了基礎(chǔ);另一方面通過面向加油站經(jīng)營管理的全過程實時數(shù)據(jù)采集,實現(xiàn)了對加油站卸油、銷售、油罐庫存等系統(tǒng)的數(shù)據(jù)集成,既滿足了企業(yè)和政府的監(jiān)管需要,也減少了企業(yè)設(shè)備和人力投入。該系統(tǒng)在提高工作效率,降低一線勞動力,增加經(jīng)濟(jì)效益,系統(tǒng)整合優(yōu)化,日常監(jiān)控分析等方面均顯現(xiàn)出很大的優(yōu)越性,促進(jìn)了政府監(jiān)管部門和企業(yè)信息化的融合。