饒平平1 沈 益1 朱清鵝1 沈程琳
(1.上海理工大學 環境與建筑學院,上海 200093; 2.上海同筑信息科技有限公司,上海 200093)
隨著社會經濟的發展,為了適應高速發展經濟需求,計算機、網絡等技術被越來越多的行業所應用,并帶來了行業顛覆性的影響。例如傳統集市+互聯網→淘寶; 傳統銀行+互聯網→支付寶; 傳統交通+互聯網→滴滴快車等。通過利用云計算、大數據、物聯網等實現了資源共享與信息實時傳遞,極大地促進電子商務和互聯網金融健康發展,引導互聯網企業拓展國際市場[1]。在建筑行業,工程項目具有建設周期長、涉及專業多、環境復雜等特點,這使得建筑行業數據和信息多而復雜,然而這些數據因粗放式的管理,沒有產生數據應有的價值[2]。隨著BIM、云計算、大數據、物聯網等技術的出現,將BIM模型作為數據信息的載體,通過互聯網模式,實現建筑信息的采集和分析,形成數據庫,保障信息的及時性、準確性、唯一性[3-4]。
市面上多數工程的環境或安全監管平臺解決了監測數據散亂的問題,如現場監控系統、安全指數監測平臺等實現了施工現場安全信息的收集和查看,但此類平臺往往缺乏日常流程管理功能,同時也在數據分析處理、安全預警、消息傳送等功能方面少有涉及; 而對于多數工程業務流程管理平臺,往往存在日常運行故障多、低移動化、操作冗雜度高等問題,這不利于工程管理平臺朝向智能化發展。
因此我們需要建立一個運行流暢、架構安全的精細化平臺,實現工程建設的信息化、精細化、規范化管理,從而達到工程信息的實時共享,提高項目管理效率的目的。

圖1 平臺總體架構
精細化管理平臺總體架構由五個層次組成,分別為:由網絡基礎設施和計算機軟硬件基礎設施兩部分組成的基礎設施層; 包含BIM數據庫、GIS數據庫、管理數據庫、共享數據庫的數據層; 包含前后端分離技術、Vue前段框架技術、Springcloud等后端框架技術、移動端技術的支撐層; 包含進度、質量、安全、物料、文檔、模型管理六個功能模塊的應用層,該層即為精細化管理實際內容的表現; 由業主方、施工方、監理方等項目參建單位組成的用戶層,為精細化管理組織成員的具體表現。總體架構圖如圖1。
精細化管理平臺采用前后端分離進行搭建,前端負責UI交互層設計、數據的展現、程序應用邏輯及邏輯渲染、優化用戶體驗、頁面渲染等; 后端負責服務層開發、提供數據、存儲數據、保障數據傳輸的穩定性等。前后端最后通過接口實現數據傳遞和交互。
多數工業管理平臺存在前后端某一端業務薄弱的情況,這往往是由于平臺開發時,開發人員一起開發前后端,開發存在側重點。而本研究構想的平臺采用開發分離原則,前后端在分離開發模式下,前后端人員各司其職,同時進行開發,可以縮短平臺開發時間,提高開發效率。在前后端人員雙方了解業務邏輯情況下,前后端人員可以不依賴彼此進行單獨開發和調試,從而減少前后端的溝通,有效地降低溝通成本。前端不需要編寫任何后端代碼,只需要調用后端提供的接口,就可實現前后端的連接,從而避免前后端代碼耦合、混雜等現象。

圖2 終端與后端連接
采用前后端分離,后端提供數據接口,手機、平板等不同終端只需要根據數據接口編程,就能實現多個終端與同一個后端的連接,避免開發者針對每一個終端都開發相同的后端服務的重復工作,提高開發者的工作效率,如圖2終端與后端的連接。
平臺前后端分離采用單頁面應用SPA(Single-page application),單頁面應用將前后端關注點進行分離,前端負責顯示,后端負責數據的計算和存儲,明確前后端的邏輯,加載時僅根據需求進行局部更新,提高了加載速度和用戶體驗感。
(1)Vue技術
Vue是當前使用廣泛的開源的漸進式JavaScript框架,可以自由與多種第三方庫或第三方插件進行對接,包含多種附帶組件,如Vue-cli、Vue-router等。
1)Vue.js前端開發框架
Vue.js[5]是近年來出現的一款輕量級前端框架,相比于Angular JS前端框架,Vue.js更簡單、更靈活、更容易優化、性能更好,因此Vue.js運用于前端框架被越來越多的人認可。與Vue.js相似并被多數工程管理平臺應用的前端開發框架React,其與Vue.js區別主要是內部實現本質不同,React通過對虛擬DOM進行渲染,將數據保存在內存中,當狀態發生改變時,將會重新對虛擬DOM進行渲染,通過補丁的形式將變化部分加載到虛擬DOM節點上,并且不是每次改變都渲染整個頁面。而Vue.js則是以DOM為模板,真正操作在DOM上,將數據與真實的節點進行綁定[6]。Vue.js的這種真實DOM比React的虛擬DOM性能更好,能為前端多功能模塊提供精細度高的界面顯示,更能滿足本平臺前端開發。
除此之外,Vue.js作為前端開放框架主要是因為其具有模塊化、組件化、響應式數據雙向綁定、路由功能和狀態管理特點。
模塊化:在JavaScript剛開始運用于前端開發時,不支持程序分解,然后再自由組合。這給開發人員開發大型、復雜的Web應用帶來很大的阻礙。因此,前端逐漸支持模塊化,保證了管理人員基于平臺對工程信息的模塊式管理。通過import(導入)模塊、export(導出)模塊,豐富Java Script語言的功能。2015年所處JavaScript最新版本ECMAScript6.0(簡稱ES6)支持模塊化,ES6模塊的靜態化設計原則,有效提高模塊的加載[7]。Vue.js支持最新的ES6規范,因此利用Vue.js作為前端框架,能夠很好地體現模塊化思想。
組件化:通過組件化,Vue.js能夠將JS、HTML和CSS等前端開發語言寫在一個文件里,且各組件之間不會相互影響,組件之間的關系明確,開發人員清楚劃分各組件的功能邊界,這有效提高代碼可讀性和可維護性,有效減少定位并解決開發遇到問題的時間,為工程信息復雜的精細化管理提供了軟硬件基礎上的流暢性和快捷性。
響應式數據雙向綁定:其綁定原理如圖3。與單項數據綁定相比,雙向數據綁定減少了增、刪、改、查操作,在模型數據與視圖顯示數據之間,一個數據修改,另一個數據自動隨之改變,例如在表單場景中,當填寫完表單信息,數據就已經保存到模型數據庫,這就省去模型數據增、刪、改、查等工作量,節約時間,提高效率。

圖3 雙向數據綁定原理
路由功能:Vue.js+vue-router創建單頁面應用,通過Vue.js的路由功能在路由中配置業務模塊,實現單頁面跳轉。
狀態管理:Vuex專門為解決多個組件共享狀態的問題而設計的Vue.js框架的狀態管理模式,其狀態管理原理如圖4,Commit主動操作Mutations,Mutations操作用來存放共享狀態的State。

圖4 Vuex狀態管理原理
2)管理平臺前端動態頁面技術
利用HTML5和CSS3編寫靜態頁面,然后在靜態頁面插入JavaScript這種能被瀏覽器解析和運行的腳本語言實現精細化管理平臺前端動態頁面設計。
HTML5是2014年萬維網重新修訂的超文本標記語言,它在舊版本的HTML基礎上添加
CSS3(層疊樣式表)是2001年W3C組織在原版CSS基礎更新的一門為網頁頁面添加色彩、樣式的計算機語言,它的多背景圖、邊框、顏色等特性使網頁擁有豐富多彩的網頁樣式。
JavaScript[8]具有解釋性、動態性特性,只要將JavaScript嵌入到HTML5代碼中,就能實現HTML5頁面動態效果。JavaScript是一種弱類型語言。并且因為JavaScript不允許訪問本地硬盤文件和對傳輸文本的修改或刪除,防止數據丟失,因此JavaScript安全性很高。
(2)Elementui技術
Elementui技術是近年來為設計者準備的基于Vue2.0的桌面端組件庫。其組件豐富,頁面簡潔大方,解決了智能手機和計算機瀏覽器前端顯示效果不兼容現象。利用Elementui技術對前端界面元素進行設計,可以有效解決計算機能夠顯示完整的網頁界面而手機端出現網頁界面不全的問題。
目前該技術多為生活購物軟件平臺使用,尚未被工程管理平臺廣泛應用,但對于手機端與網頁端通用的管理平臺是有利無害的。在利用Elementui技術對精細化管理平臺前端界面進行設計時,前端界面上圖表展示使用百度Echarts。Echarts[9]是國內一款能夠兼容大部分瀏覽器和移動設備的JavaScript圖表庫,將其運用到前端界面設計中,通過加載、數據轉換、定制、渲染四個步驟,可以生成直觀、生動的計劃統計、產值統計等圖表,這使得平臺界面的管理內容得到了深度的細化。
(3)Webpack技術
隨著網絡技術的發展,前端頁面越來越豐富,所包含的JS代碼、依賴包等各種文件越來越多。為了方便后期前端應用的維護和提高開發效率,在精細化管理平臺中運用Webpack對前端資源進行模塊化管理,并將Webpack做為打包工具[10]。Webpack能夠將前端界面中不能識別的的語言打包轉換成前端界面能夠識別的格式; Webpack能夠把有依賴關系的各種文件打包成符合前端管理的靜態資源。Webpack的工作原理如圖5。

圖5 Webpach工作原理圖
本文利用Vue+Elementui+Webpack技術搭建精細化管理平臺的前端,用目前流行、輕量級的Vue.js作為該平臺前端框架,根據Vue.js框架專門設計的vuex進行前端跨頁面系統的管理,使用vue-router進行路由管理,實現前端單頁面的跳轉,使用vue-cli腳手架進行前端頁面搭建; 合理運用HTML5、CSS3、JavaScript三種網頁編程語言,設計出前端動態頁面; 運用Elementui作為前端頁面設計的UI框架,設計出符合客服審美的計算機瀏覽的前端網頁界面,同時使用Echarts設計前端網頁界面圖表,使前端網頁界面的圖表更深度、更形象、更美觀; 使用Webpack完成項目前端代碼的壓縮、打包工作,方便后期前端應用的維護和提高開發效率。利用Vue、Elementui、Webpack技術,搭建滿足功能需求的精細化管理平臺前端,如圖6。

圖6 精細化管理平臺前端搭建
Spring[11]網站抽象地定義了Spring Cloud的概念:Spring希望集成一組工具,這些工具可以使軟件開發人員輕松構建分布式通用組件,協調系統環境并為不同的服務提供模板。Spring Cloud提供了一組易于使用的Jaba Spring庫,這些庫實現了分布式系統所需的一系列通用模式。Spring Cloud中的Cloud不是云解決方案,只是為開發提供的各種支持組件,為開發人員提供了基于云的分布式軟件系統,提高了開發的便捷度。
Spring Cloud[12-13]集成了多個組件,這些組件使得Spring Cloud的使用變得更便捷,特別是在分布式系統的開發中。這些組件主要由負責打包現有軟件和負責分布式系統研發的補充實現兩部分組成。這些組件包括Spring Cloud Netflix、Spring Cloud Config、Spring Cloud Eureka、Spring Cloud Bus、Spring Cloud Zookeeper、Spring Cloud CLI等重要內容[14]。眾多的組件豐富了Spring Cloud的功能,使其能夠滿足實際研發中的分布式配置、負載平衡、安全性、路由、分布式跟蹤、云支持等各種要求。因此利用Spring Cloud作為微服務開發套件,能夠為整個系統的研發集成便捷、清晰的開發思路。
MariaDB[15]是2009年由Michael Widenius主導開發、開源社區維護、采用GPL授權的一種小型、快速的關系型數據庫管理系統。開發MariaDB的目的是完全兼容MySQL,讓MariaDB成為MySQL的代替品。因此MariaDB與MySQL一樣具有性能高、成本低、可靠性好的特性,除此之外,MariaDB在擴展功能、存儲引擎以及一些新的功能改進方面都比MySQL強。自2009年以來,隨著MariaDB的不斷成熟,它逐漸從應用在Internet上的中小型網站向應用在大規模網站發展。MariaDB結構如圖7。

圖7 MariaDB結構
Logback是一個高性能的開源日志框架,通過對Logback的使用,我們可以控制日志信息傳遞的目的地是控制臺、GUI組件等,還可以控制每個日志的輸出格式,通過定義每個日志信息級別,我們可以更詳細地控制日志生成過程。這些功能可以通過一個配置文件靈活地配置,而不需要修改應用程序代碼。對于精細化管理涉及的進度、安全、質量、成本等多要素,平臺運行時需要讀寫大量的數據日志,而Logback使用內存和本地磁盤緩存可以最大限度地傳輸具有高強度和大量數據的日志,為精細化管理提供了有力的后臺技術支撐。Logback本地日志緩存無法執行內容搜索,最終需要將日志數據存儲在數據庫中。
本文利用SpringCloud+MariaDB+Logback技術搭建精細化管理平臺后端。SpringCloud是當前使用最廣泛的微服務開發套件,內部組件滿足了大部分的開發需求,并且也能很好地和第三方框架結合,實現自定義功能。因此采用該技術,發揮了開發套件通用性,保證平臺組件更新迭代的適用。
在后端設計中,SpringCloud作為基礎框架; SpringCloud的子項目Netflix Eureka作為服務注冊機,保存各類Web應用的相關信息; SpringCloud提供feign框架作為客服端請求具體業務; SpringCloud利用Gatway分配前端發送過來的請求信息。MariaDB是數據庫MySQL的一個分支,完全兼容MySQL。MariaDB利用XtraDB、Aria等存儲引擎為基礎,通過SQL Interface、Parser、Optimizer、Caches & Buffers對前端傳來的信息進行接收、解析、優化、緩存,將最后得到的信息存儲到MariaDB數據庫中。Logback是開源日志框架,完美兼容SpringCloud,作為SpringCloud的默認日志系統,可以完全零配置使用SLF4J(Simple Logging Facade For Java)的logback來輸出日志。將Logback作為后端日志框架,日志通過Logback保存在MariaDB數據庫中,有效避免日志服務直接將日志寫入MariaDB數據庫出現的應用服務器線程阻塞、服務宕機現象。以SpringCloud作為基礎框架,MariaDB做為數據庫管理,Logback作為記錄日志,搭建精細化管理平臺后端,如圖8。

圖8 精細化管理平臺后端搭建
Flutter是Google在2018年推出的移動UI框架。借助Flutter,可以在Android和IOS上快速構建高質量的本機用戶界面,并以每秒120幀的速度連續渲染。它允許用戶自定義設計,具備許多優點,使得Flutter這一款移動端UI框架迅速進入開發者的視野,得要越來越多開發者的使用。
同樣,相較于許多平臺采用的React移動端框架,Flutter不僅跨平臺,而且性能好、使用流暢。相比于React Native移動端框架,不僅跨平臺,而且代碼量不大,易于初學者學習,在動畫性能方面體驗好。此外,Flutter可以通過其內置的精美質感設計,Cupertino(ios-flavor)小工具和豐富的動畫API來構建令人滿意的移動終端界面; 使用Flutter的熱重載可以快速、輕松地測試、重構UI、添加功能和修復bug。Flutter利用API,有效解決2D、動畫、手勢、效果等難題,唯一不足的是該移動端框架在處理多類型數據時數據吞吐量有一定限制。
Flutter使用Dart編程語言進行編譯,并且在開發階段采用JIT模式[16]。如果發生更改,則無需編譯,這有助于減少Flutter的開發時間。發布時,AOT用于生成有效的ARM代碼以保證Flutter應用程序的性能。Dart虛擬機可以快速為短暫的對象分配內存,從而提高渲染速度。
SQLite是D.Richard Hipp創建的、運用C語言編寫的一款公共開源數據庫引擎。因其速度快、可移植性好、占用內存少等優點,得到大量使用的同時受到廣泛關注。SQLite是獨立的、零配置的嵌入式數據庫引擎,與其它數據庫引擎區別在于它沒有自己獨立的服務進程,而是直接讀寫磁盤上的數據庫文件。SQLite數據庫是包含表、索引等的獨立文件,其具有跨平臺的特性,可以將32位設備上的SQLite數據庫直接應用到64位設備上。
SQLite是緊湊型數據庫,在應用時,可以將其占用的存儲空間容量大小一直控制在500KB以內,也可以根據需求,將該容量值進一步縮小到300KB以內。在如此小的空間內,SQLite運行速度、性能仍然能夠正常進行,使得手機、平板等內存有限的設備將其作為數據庫。
(1)Andriod操作系統
Andriod操作系統最初由Andy Rubin以Linux為基礎開發的一款開源框架。Andriod又名“安卓”,自2005年被Google收購后,對其進行改善和開發,現已經完全適用于Google的任何一款軟件產品。對于用戶而言,Andriod操作系統為生活帶來了便利,如在Andriod操作系統上安裝谷歌地圖,便于用戶出行; 對于開發者而言,可以根據自己的喜好和風格設計產品,可以重復使用或替換應用程序框架組件,除此之外,Andriod操作系統利用SQLite數據庫進行數據存儲、利用Java進行應用程序語言編寫、基于Web引擎開發Andriod瀏覽器,這些都有助于開發者很快入門; 對于手機生產商而言,可以體現產品個性。因此Andriod操作系統受到廣大用戶、開發者、手機生產商的喜愛和支持。
(2)IOS
IOS(iPhone Operation System的簡寫)即iPhone操作系統,專為iPhone、iPad等蘋果公司推出的移動設備而開發的操作系統。IOS是以Darwin為基礎,利用編程語言Object-C和Swift在Xcode環境下開發的iPhone操作系統,并且必須在Mac OS X上運行。Mac OS X是以BSD(Berkeley Software Distribution)Unix內核開發為基礎,利用SDK(Soft Ware Development Kit)軟件開發工具包進行開發的一款封閉式的操作系統。
由于SQLite數據庫資源占用低、運行速度快、可移植性好、能夠跟很多程序語言相結合,且提供零配置的運行模式,將SQLite數據庫嵌入到Andriod、IOS系統中,實現對數據的存儲、管理、維護。運用Flutter在Android和IOS系統上,建立滿足客服需求、滿足程序應用功能需求的美觀手機移動端界面。本文以Andriod、IOS系統做為基礎,將SQLite數據庫嵌入Andriod、IOS系統作為移動管數據庫管理系統,Flutter作為移動端界面設計,搭建精細化管理平臺的移動端,如圖9。

圖9 精細化管理平臺移動端搭建

圖10 數據系統架構圖
為了保證平臺信息的收集、存儲、管理和維護,在平臺搭建中,數據庫管理系統是必不可少的部分。同時,為了保證數據安全性、完整性、分布、異構等性能,應根據實際需求,選擇恰當的數據庫類型。根據平臺功能的實際需求,數據庫的建立需要滿足支持各種流行的軟硬件平臺、支持Web技術并具有多媒體處理能力、支持聯機分析處理、支持異種數據庫的互連、具有比較高的安全性和可靠性、具有數據倉庫的性能、支持商務智能和數據挖掘的基本要求。MariaDB數據庫系統具有支持多處理器、支持SQL的GROUP BY和ORDER BY子句、支持聚合函數、支持大型的數據庫、支持多種存儲引擎、沒有內存漏洞、提供ODBC和JDBC等多種數據庫連接途徑、提供用于優化數據庫操作的管理工具、可以修改源代碼來開發自己的MariaDB系統等優點,尤其支持復雜信息的高速細分和處理指令的大容量發送,完全契合精細化管理平臺開發對數據庫的選型要求,所以本文數據庫建設采用MariaDB為核心的數據庫。
數據庫主要包含BIM數據、GIS數據、管理數據、共享數據四部分,分別對標工程精細化BIM模型、GIS信息、管理處理指令、共享文檔這四個管理數據,整個數據架構圖如圖10。
(1)BIM數據庫
此處所指信息數據包括建筑設計平面圖、剖面圖、材料表等等。模型基于3D技術,是項目信息的詳細表達。它解決了用軟件描述建筑信息的問題,為項目的協同工作和精細管理奠定了堅實的基礎。
(2)GIS數據庫
該數據展示BIM項目工程周邊建筑、道路等環境,對建筑周邊有直觀的了解。
(3)數據集成
在數據集成中,主要采用以下幾種方法進行數據集成:
1)對于結構化數據,采用數據整合服務進行數據集成。
2)對于無法采用數據整合工具進行集成的數據,如GIS數據、BIM模型數據,必須采用人工方式進行整合。通過流程控制工具,對人工數據整合過程進行流程化管理,保證人工數據處理質量。
(4)共享數據庫
在精細化管理平臺中,各參建方能夠對設計圖紙、工程日志等數據進行下載,對一些共享數據精細數據交換機更新。
由于工程上平臺用戶往往同用一個或幾個賬號,而多數管理平臺對于賬號管理過于寬容,這使得數據庫系統主要面臨以下威脅:合法特權的過度濫用、特權提升、數據庫漏洞和數據泄露、數據庫通信協議漏洞、不健全的認證和審計等。因此,為確保數據庫系統安全運行,保證數據安全,數據庫系統進行以下安全設計:
(1)對所有數據庫用戶建立數據庫賬號,并將數據庫賬號與用戶身份進行關聯;
(2)限制用戶登錄不成功次數,進行身份驗證失敗處理;
(3)操作系統用戶與應用進程綁定,實現用戶級追溯;
(4)對數據庫訪問日志進行記錄;
(5)對數據庫訪問進行授權控制; 根據用戶名和用戶組對用戶權限進行控制,控制粒度可選擇為目錄、表、記錄、字段;
(6)采用專用審計設備,對數據庫的安全日志和使用記錄進行審計。
本平臺數據接口類型分為三種,分別為:用戶接口、外部接口、內部接口。
用戶接口:本平臺用戶接口分為PC瀏覽器,手機端APP(Android,iOS)。數據錄入使用jsp表單,以上傳和下載的方式進行文件導出和導入,通過客戶端控件嵌入進行圖像顯示和更新。
外部接口:本平臺的外部接口主要是文檔接口,使用數據交換格式文件,清晰地理解及掌握各模塊功能。
內部接口:Elementui、HTML、CSS等層次編譯為一個應用,托管于apache,通過瀏覽器應用運行。
精細化管理平臺主要采用Web Service、DB、文件接口FILE、FTP(File Transfer Protocol文件傳輸協議的簡稱)四種接口形式。
本文通過采用前后端分離原則,聯合多項平臺開發底層技術,研究平臺架構設計,構想了精細化管理平臺的開發,得出以下結論:
(1)利用Vue+Elementui+Webpack技術,通過發揮真實DOM性能來提升開發效率,可搭建輕量級平臺的前端。
(2)利用SpringCloud+MariaDB+Logback技術搭建平臺后端,發揮技術的模塊式優勢來簡化后臺數據處理流程,這給平臺分布式管理提供便捷性開發依據。
(3)利用Flutter、SQLite數據庫、Android和IOS系統對平臺移動端的搭建進行設計,通過數據庫選型、建設、安全、接口設置,給平臺數據的穩定傳輸提供了理論支撐。
(4)通過后端提供的接口,將前端、手機端與后端、數據庫連接,來完成精細化管理平臺的搭建,有利于實現工程信息的集成、傳遞、共享,便于參建各方隨時隨地查看、修改、存儲、傳遞工程信息,從技術角度上為提高工項目管理的效率和精細度提供了參考。