沃葉紅 吳江電視臺(tái)
基于neo4j的電視臺(tái)設(shè)備管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
沃葉紅 吳江電視臺(tái)
隨著電視行業(yè)的不斷發(fā)展,設(shè)備更新?lián)Q代越來(lái)越快,對(duì)設(shè)備的跟蹤管理,維修保障等問(wèn)題已日益凸顯。目前吳江電視臺(tái)現(xiàn)有系統(tǒng)在使用過(guò)程中出現(xiàn)了對(duì)某些業(yè)務(wù)場(chǎng)景支持明顯不足、前臺(tái)頁(yè)面BUG較多、設(shè)備跟蹤管理較為困難三大問(wèn)題。因此,本文引入圖數(shù)據(jù)庫(kù)等新技術(shù),對(duì)系統(tǒng)進(jìn)行了重新設(shè)計(jì),開(kāi)發(fā)了一套使用JQueryEasyUI+HTML5+Neo4J的設(shè)備管理系統(tǒng)。該系統(tǒng)克服了原有系統(tǒng)的一些弊病,可以顯著提高設(shè)備的管理水平。
圖數(shù)據(jù)庫(kù) neo4j 設(shè)備管理
隨著電視傳媒行業(yè)日新月異的發(fā)展,電視播放標(biāo)準(zhǔn)不斷優(yōu)化,與之配套的各類錄制和播放設(shè)備更新?lián)Q代的速度也不斷提高。如何有序高效的管理電視臺(tái)內(nèi)各類設(shè)備,以及如何在合適的時(shí)間節(jié)點(diǎn)更新設(shè)備,都依賴于電視臺(tái)設(shè)備的管理水平,尤其是設(shè)備管理系統(tǒng)的優(yōu)劣。因此,本文圍繞吳江電視臺(tái)現(xiàn)有系統(tǒng)在使用過(guò)程中凸顯的幾大問(wèn)題,引入圖數(shù)據(jù)庫(kù)等新技術(shù),對(duì)原有系統(tǒng)進(jìn)行升級(jí),最后通過(guò)JQueryUI+Neo4J技術(shù),開(kāi)發(fā)了一種新的設(shè)備管理系統(tǒng)。
通過(guò)對(duì)我臺(tái)現(xiàn)有設(shè)備管理系統(tǒng)的調(diào)研分析,主要有以下幾點(diǎn)不足:
(1)現(xiàn)有系統(tǒng)采用基于關(guān)系型數(shù)據(jù)庫(kù)的mysql作為后臺(tái)數(shù)據(jù)庫(kù),這種數(shù)據(jù)模型對(duì)于設(shè)備管理這樣一種業(yè)務(wù)場(chǎng)景支持上有不足之處。
(2)前臺(tái)采用Html頁(yè)面,頁(yè)面BUG較多,而且已經(jīng)很難滿足移動(dòng)端辦公的要求。
(3)對(duì)于設(shè)備的跟蹤管理困難,并且缺乏對(duì)設(shè)備的統(tǒng)一標(biāo)識(shí),缺乏對(duì)不同設(shè)備硬件的描述信息。
基于以上三點(diǎn)需求,我臺(tái)提出了一種基于JQueryUI+Neo4J的設(shè)備管理系統(tǒng)。首先,采用了先進(jìn)的基于圖數(shù)據(jù)庫(kù)的Neo4J數(shù)據(jù)庫(kù)技術(shù)替代關(guān)系型數(shù)據(jù)庫(kù);其次利用了H5,JQuery等前端技術(shù)對(duì)移動(dòng)端支持良好的優(yōu)點(diǎn),在對(duì)原有前臺(tái)頁(yè)面進(jìn)行重構(gòu)的基礎(chǔ)上,重新開(kāi)發(fā)了一套可以在移動(dòng)端通過(guò)瀏覽器訪問(wèn)的前臺(tái)頁(yè)面;最后,針對(duì)原有流程存在的問(wèn)題,優(yōu)化了管理模塊。例如:具備在新設(shè)備入庫(kù)時(shí)能夠同時(shí)打印出二維碼作為改換設(shè)備的身份標(biāo)識(shí);重新進(jìn)行數(shù)據(jù)庫(kù)建模,明確設(shè)備的負(fù)責(zé)頻道或部室;借用時(shí)間超出時(shí)能夠自動(dòng)在系統(tǒng)內(nèi)發(fā)出提示信息等功能。
3.1 Neo4J圖數(shù)據(jù)庫(kù)
隨著網(wǎng)絡(luò)的爆炸式發(fā)展,也帶來(lái)了數(shù)據(jù)庫(kù)管理系統(tǒng)新的發(fā)展。新一代數(shù)據(jù)庫(kù)技術(shù)的不斷涌現(xiàn),其中就包括了基于圖論的數(shù)據(jù)庫(kù)技術(shù)?;趫D論的數(shù)據(jù)庫(kù)系統(tǒng)(又稱圖數(shù)據(jù)庫(kù))是一種典型的NOSQL數(shù)據(jù)庫(kù),主要旨在輕松處理復(fù)雜的網(wǎng)絡(luò)和數(shù)據(jù)結(jié)構(gòu)。圖數(shù)據(jù)庫(kù)將數(shù)據(jù)存在圖這種數(shù)據(jù)結(jié)構(gòu)中,而我們知道,圖是由頂點(diǎn)和邊組成的,這種模式具有以下特點(diǎn):
(1)用更自然的方式來(lái)表達(dá)數(shù)據(jù)模型,摒棄了別扭的關(guān)系數(shù)據(jù)模型。
(2)在數(shù)據(jù)結(jié)構(gòu)上可以應(yīng)用圖論的算法,檢索效率極為高效。
設(shè)備系統(tǒng)管理數(shù)量龐雜的不同設(shè)備,而設(shè)備是由不同的元件組成的。例如一臺(tái)高清攝錄一體機(jī),可能是由本體,話筒,支架,內(nèi)存卡等多種部件組成,而其本身可能還支持不同的其他元件,例如同時(shí)兼容P2卡和micorP2卡,如果要將全臺(tái)所有設(shè)備的的屬性及其關(guān)系全部描述出來(lái),用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)建模,是十分困難的。而且,假如出現(xiàn)了一種新的類型的設(shè)備,就可能要對(duì)數(shù)據(jù)庫(kù)進(jìn)行重新的設(shè)計(jì)。而圖數(shù)據(jù)庫(kù)就能很好的適應(yīng)這種問(wèn)題,由于圖本身相對(duì)靈活的結(jié)構(gòu),十分適合對(duì)關(guān)系復(fù)雜的業(yè)務(wù)場(chǎng)景進(jìn)行建模,設(shè)備被描述為節(jié)點(diǎn)和邊,修改數(shù)據(jù)模型也變得十分容易。因此,本文系統(tǒng)在持久層采用了基于圖論的NEO4J數(shù)據(jù)庫(kù)[1],作為最為流行的圖數(shù)據(jù)庫(kù),它可以支持很多主流開(kāi)發(fā)框架。
3.2 HTML5+JQuery的前端
HTML5是對(duì)HTML標(biāo)準(zhǔn)的第五次修訂,其主要目的是將物聯(lián)網(wǎng)語(yǔ)義化,主要提升了代碼的可讀性,并且支持更豐富的媒體嵌入,另外具備了向后兼容性,該規(guī)范已在2014年10月29日制定完成。HTML5對(duì)手機(jī)端應(yīng)用有良好的支持,主要體現(xiàn)在它可以直接在網(wǎng)頁(yè)上進(jìn)行調(diào)試和修改,開(kāi)發(fā)人員非常輕松的可以完成調(diào)試和修改。
JQuery是一個(gè)優(yōu)秀的Javascript庫(kù),兼容CCS3和各種瀏覽器,本文系統(tǒng)的用戶接口采用了著名的JQueryUI和HTML5技術(shù)搭建。
3.3 Spring
Spring[2]是目前最流行的J2EE開(kāi)發(fā)框架,它具有輕量級(jí),控制反轉(zhuǎn),面向切面變成等特征。由于框架本身組件的低傾入式的設(shè)計(jì),使得Spring框架可以很方便的進(jìn)行解耦,而且還可以很方便的繼承各種優(yōu)秀的框架。更重要的一點(diǎn)是,Spring框架中的Spring Data項(xiàng)目目前已經(jīng)提供了對(duì)Neo4J的良好支持,本文系統(tǒng)在Spring框架基礎(chǔ)上進(jìn)行開(kāi)發(fā),使得工程可易于管理和后期的測(cè)試。
3.4 二維碼技術(shù)
從設(shè)備入庫(kù)開(kāi)始的整個(gè)生命周期內(nèi),我們采用二維碼作為該設(shè)備的唯一身份標(biāo)識(shí),二維碼內(nèi)封裝了和數(shù)據(jù)庫(kù)一致的唯一設(shè)備號(hào)和最常用的屬性信息。本文中二維碼采用了日本Denso公司研發(fā)的QRcode,也是市面上比較常見(jiàn)的一種二維碼。而生成和解析二維碼的工具本文采用了Google公司的Zxing庫(kù)[3],它可以支持對(duì)QRcode的高效封裝和解析。
4.1 模塊實(shí)現(xiàn)
如圖1所示,基于neo4j的電視臺(tái)設(shè)備管理系統(tǒng)主要可以分為7個(gè)業(yè)務(wù)模塊,下面分別對(duì)這些模塊的實(shí)現(xiàn)進(jìn)行具體的闡述,并在關(guān)鍵處給出了代碼的實(shí)現(xiàn)。
(1)設(shè)備入庫(kù)
在設(shè)備經(jīng)采購(gòu)入庫(kù)時(shí),需要對(duì)設(shè)備產(chǎn)生一個(gè)唯一的編號(hào),并打印出二維碼帖在設(shè)備上(如圖2所示),內(nèi)涵該設(shè)備的一些基本信息。
圖1 系統(tǒng)模塊圖
圖2 設(shè)備標(biāo)識(shí)二維碼
相關(guān)代碼如下:
String content =
"編號(hào):"+Eqtmt.getSbbh() +
"設(shè)備名稱:"+Eqtmt.getSbmc() " +
"型號(hào):"+Eqtmt.getXh() " +
"入庫(kù)日期:"+Eqtmt.getRkrq() " +
"生產(chǎn)日期:"+Eqtmt.getScrq() " +
"入庫(kù)操作員:"+Eqtmt.getCzy() ";
int width = QR_WIDTH; // 圖像寬度
int height = QR_RIGHT; // 圖像高度
String format = "png";// 圖像類型
Map
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
BarcodeFormat.QR_CODE, width, height, hints);// 生成矩陣
Path path = FileSystems.getDefault().getPath(filePath, fileName);
File file = new File(path + "設(shè)備識(shí)別碼.jpg");
writeToFile(bitMatrix, "jpg", file);// 輸出圖像
logger.info(fileName+"輸出成功.");
(2)設(shè)備維保
基于neo4j的電視臺(tái)設(shè)備管理系統(tǒng)專門設(shè)立這一模塊對(duì)設(shè)備維保進(jìn)行監(jiān)管,在管理員制定設(shè)備的維保計(jì)劃后,設(shè)備的責(zé)任部門需要對(duì)設(shè)備進(jìn)行定期的維保,如果計(jì)劃無(wú)法完成,則會(huì)通過(guò)與本臺(tái)短信平臺(tái)的對(duì)接,對(duì)相關(guān)責(zé)任人發(fā)出短信提醒。同時(shí),維保的計(jì)劃時(shí)間和實(shí)際執(zhí)行時(shí)間都會(huì)有詳細(xì)的臺(tái)賬記錄,方便查閱。
(3)設(shè)備借還和調(diào)撥
實(shí)際工作中可能出現(xiàn)不同部門相互借用設(shè)備的情形,通過(guò)設(shè)備的借還模塊可以實(shí)現(xiàn)設(shè)備借還和調(diào)撥,如果超過(guò)了借用的計(jì)劃時(shí)間,還會(huì)發(fā)出催還短信。而提交了設(shè)備調(diào)撥申請(qǐng)后,經(jīng)由管理部門-財(cái)務(wù)部門審批后,設(shè)備可以更換責(zé)任部門。
(4)設(shè)備報(bào)廢
設(shè)備完成使用生命周期后,應(yīng)提出報(bào)廢申請(qǐng)。
(5)設(shè)備臺(tái)賬
設(shè)備在整個(gè)生命周期內(nèi)的動(dòng)作,包括,入庫(kù)、維保、借還與調(diào)撥、作廢等信息都在臺(tái)賬中有著詳細(xì)的記錄,方便查詢。
(6)查詢管理
此模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)的綜合查詢,即可以查詢當(dāng)前某個(gè)部門所擁有設(shè)備的技術(shù)狀況,例如設(shè)備的完好率,不完好的原因等信息,還可以查詢某一設(shè)備的臺(tái)賬信息。在查詢某個(gè)部門所有的設(shè)備技術(shù)狀況時(shí)(圖數(shù)據(jù)庫(kù)示例如圖3所示),相關(guān)代碼如下:
CREATE (EP1:Camera {name:'松下攝錄機(jī)', brought:'2016-09-21', tips:'3200W'})
CREATE (EP2:Camera {name:'索尼攝錄機(jī)', brought:'2009-03-20', tips:'1500W'})
CREATE (Calmy:Person {name:"沃葉紅", born:1988})
CREATE (Jack:Person {name:"杰克", born:1965})
CREATE (DPT1:Department{name:'制作部'})
CREATE (DPT2:Department{name:'后勤部'})
CREATE
(Jack)-[:購(gòu)買]->(EP1),
(Jack)-[:購(gòu)買]->(EP2),
(Jack)-[:隸屬]->(DPT2),
(Calmy)-[:管理]->(EP1),
(Calmy)-[:管理]->(EP2),
(Calmy)-[:隸屬]->(DPT1)
圖3 圖數(shù)據(jù)庫(kù)示例
(7)短信管理
短信管理模塊可以管理發(fā)出相關(guān)短信功能的輪詢時(shí)間間隔,這部分采用了spring-batch進(jìn)行作業(yè)調(diào)度,代碼如下:
// 獲取短信通知參數(shù)
HashMap
// 短信通知消息
List
User user = userService.getUserByDah(prePbInfo. getYeban1());
if (user != null && !StringUtil.isEmpty(user.getMobile())) {
messageDatas.add(new MessageData(user.getMobile(), PbConstant.MSG_NTOM_JIAOBAN));
// 獲取當(dāng)天應(yīng)發(fā)送催收短信人員進(jìn)行提醒
PbInfo curPbInfo = pbInfoService.getPbInfoByDate(-DateUtil.getSimpleDateString(new Date()));
// 獲取人員手機(jī)號(hào)
User user = userService.getUserByDah(curPbInfo. getBaiban2());
if (user != null && !StringUtil.isEmpty(user.getMobile())) {
messageDatas.add(new MessageData(user.getMobile(), PbConstant.MSG_NTOM_JIEBAN));
if (messageDatas.size() > 0) {
LOG.info("短信對(duì)象和內(nèi)容:" + messageDatas.to-String());
// 短信通知
Log log = new Log();
log.setDatetime(new Date());
log.setType("自動(dòng)發(fā)送交接班短信提醒");
log.setObject("短信對(duì)象和內(nèi)容:" + messageDatas. toString());
log.setFlag(SystemConstant.NORMAL);
logService.createLog(log);
MessageUtil.sendMessages(map, messageDatas);
}
(8)用戶管理
用于注冊(cè)用戶,配置用戶權(quán)限。
4.2 用戶界面
基于上一節(jié),本文系統(tǒng)采用JQueryEasyUI+HTML5開(kāi)發(fā)了用戶界面,具體效果圖如圖4所示。
圖4 用戶界面
本文對(duì)吳江電視臺(tái)設(shè)備管理系統(tǒng)進(jìn)行了相關(guān)問(wèn)題的分析,對(duì)原有系統(tǒng)進(jìn)行升級(jí)改善,主要有以下成果:
(1)用圖數(shù)據(jù)庫(kù)代替了原有的關(guān)系型數(shù)據(jù)庫(kù),使查詢效率得到了提高,并且為以后進(jìn)行數(shù)據(jù)分析提供了良好的基礎(chǔ)。
(2)重新優(yōu)化了設(shè)備管理的流程,如為設(shè)備增加二維碼標(biāo)簽,增加與短信平臺(tái)對(duì)接,強(qiáng)化了設(shè)備管理模塊的功能。
由于采用了基于圖的數(shù)據(jù)庫(kù),后續(xù)基于此種模型上的大數(shù)據(jù)分析可以是后續(xù)工作研究中的重點(diǎn)。