◆任曉萌 李海濤 王妍肖 及京京 陳 晨 王 波
?
基于微信平臺(tái)的反饋式訂票系統(tǒng)
◆任曉萌 李海濤 王妍肖 及京京 陳 晨 王 波
(華北理工大學(xué)建筑工程學(xué)院 河北 063000)
系統(tǒng)針對(duì)郊區(qū)學(xué)校與市中心區(qū)間的班車運(yùn)行情況,在B/S架設(shè)下,使用Python語(yǔ)言,采用MTV模型組織下的Django框架,以Nginx+Uwsgi+Django組合作為后臺(tái)服務(wù)器構(gòu)架,實(shí)現(xiàn)了用戶的登錄、查詢車次、預(yù)訂車票、進(jìn)行支付、加車反饋、退票等功能,提供了一種可有效緩解班車運(yùn)行壓力的新型的購(gòu)票系統(tǒng),開發(fā)了基于微信平臺(tái)的反饋式訂票系統(tǒng),有效解決了學(xué)校師生候車時(shí)間長(zhǎng)的問(wèn)題。
微信;反饋式;訂票;系統(tǒng)
隨著網(wǎng)絡(luò)的快速發(fā)展,網(wǎng)上訂票作為一種簡(jiǎn)便快捷的購(gòu)票手段,受到了越來(lái)越多用戶的認(rèn)可。目前華北理工大學(xué)已順利整體搬遷至曹妃甸,學(xué)校開通了校區(qū)——唐山西站的大巴以便利師生的出行。但學(xué)校師生仍面臨等車時(shí)間過(guò)長(zhǎng),等車隊(duì)伍過(guò)長(zhǎng)的現(xiàn)狀。為解決上述問(wèn)題,開發(fā)了基于微信平臺(tái)的反饋式訂票系統(tǒng),該系統(tǒng)基于用戶提供的出行時(shí)間段,反饋給用戶車次、乘車時(shí)間等具體信息,有效調(diào)整班車班次,合理安排班車發(fā)車時(shí)間和數(shù)量,提高師生出行效率。
反饋式訂票系統(tǒng)包括前臺(tái)用戶頁(yè)面、后臺(tái)管理頁(yè)面兩個(gè)方面。
前臺(tái)用戶頁(yè)面包括以下5個(gè)模塊:
(1)查詢功能模塊:用戶查詢班次,發(fā)車時(shí)間,車票記錄等基本信息;
(2)訂票功能模塊:用戶按照自身需求用于預(yù)訂車票,進(jìn)行支付并更新數(shù)據(jù)庫(kù)信息;
(3)退票功能模塊:用戶按照自身需求用于退票和返款處理并更新數(shù)據(jù)庫(kù)信息;
(4)申請(qǐng)加車模塊:如果已有班次座位已滿,用戶可以根據(jù)自身情況進(jìn)行申請(qǐng)加車;
(5)個(gè)人信息模塊:用戶可以查看本人的賬號(hào)信息、預(yù)訂信息以及加車信息。用戶能夠通過(guò)輸入出發(fā)地、目的地、發(fā)車時(shí)間,在前端訂票頁(yè)面查詢并根據(jù)自身需要選擇班次。若班次座位已滿,則用戶可以通過(guò)加車選項(xiàng)來(lái)申請(qǐng)具體時(shí)間的班次來(lái)進(jìn)行加車預(yù)訂。微信支付成功以后,系統(tǒng)為用戶生成訂單信息,用戶可以在個(gè)人中心頁(yè)面查看他們的訂票記錄,且可以向系統(tǒng)發(fā)出退款請(qǐng)求。系統(tǒng)將針對(duì)詳細(xì)狀況做出相應(yīng)的退款處理。
后臺(tái)管理頁(yè)面包括以下4個(gè)模塊:
(1)班次信息管理:對(duì)于班次信息,系統(tǒng)設(shè)計(jì)了增減編輯和檢查班次滿座率等管理工作;
(2)乘客信息管理:統(tǒng)計(jì)并記錄用戶的預(yù)訂信息以及申請(qǐng)加車信息,針對(duì)退票用戶及時(shí)地進(jìn)行返款處理,對(duì)數(shù)據(jù)庫(kù)信息實(shí)時(shí)更新;
(3)加車信息管理:對(duì)乘客申請(qǐng)加車情況重新添加班次;
(4)財(cái)務(wù)信息管理:能夠記錄唐曹客運(yùn)的周、月、年運(yùn)營(yíng)收入狀況。管理員可以在后臺(tái)管理用戶、對(duì)班車的相關(guān)信息進(jìn)行錄入和修改、按照乘客申請(qǐng)加車的具體情況重新添加班次并合理調(diào)度車輛安排發(fā)車。
微信訂票系統(tǒng)主要由用戶模塊和管理員模塊構(gòu)成:
(1)用戶模塊有查詢、訂票、退票、申請(qǐng)加車、個(gè)人信息5個(gè)功能模塊,如圖1所示。其中,用戶可以通過(guò)“查詢”功能,查看車票預(yù)訂詳情。若無(wú)滿意的車票顯示,可以在此界面重新輸入出發(fā)地、到達(dá)地以及出發(fā)日期,并再次進(jìn)行查詢。也可以點(diǎn)擊“加車”按鈕進(jìn)行加車,對(duì)班次不足的車次進(jìn)行加車反饋。通過(guò)系統(tǒng)的“預(yù)訂”功能可以檢查車票信息。
(2)管理員模塊有班次、乘客、加車、財(cái)務(wù)4個(gè)信息模塊,管理員的站點(diǎn)管理界面可進(jìn)行具體車輛信息參數(shù)的更改,以及增加或減少具體日期的車次,如圖2所示。
圖1 用戶模塊界面圖
圖2 管理員模塊界面圖
微信訂票系統(tǒng)實(shí)體屬性:
(1)用戶信息實(shí)體屬性包含ID、登錄名和密碼;
(2)班次信息實(shí)體屬性包含始發(fā)地、目的地、發(fā)車時(shí)間、到達(dá)時(shí)間、和價(jià)格;
(3)加車信息實(shí)體屬性包含登錄名、發(fā)車日期和車次;
(4)訂單信息實(shí)體屬性包含登錄名、班次、票數(shù)和支付狀態(tài);
(5)財(cái)務(wù)信息實(shí)體屬性包含周收入、月收入、年收入和訂單列表;
(6)管理員信息實(shí)體屬性包含ID、登錄名和密碼。
在User類的使用中,對(duì)象創(chuàng)建完成后Django自動(dòng)生成表auth_user,乘客信息表繼承User類,并繼承id,username,password字段。通過(guò)在班次信息表(booksystem_bus)和乘客信息表(auth_user)之間增加一張新表booksystem_bus_user,以及在加車信息表(choice_choice)和乘客信息表(auth_user)之間增加一張新表choice_choice_user,由此實(shí)現(xiàn)多對(duì)多關(guān)系。
考慮到本系統(tǒng)Nginx對(duì)靜態(tài)文件的處理能力,設(shè)計(jì)構(gòu)建了Nginx+Uwsgi+Django的服務(wù)器用來(lái)動(dòng)態(tài)分離和反向代理。HTTP的請(qǐng)求由Nginx做解包與分析,其中,Nginx對(duì)靜態(tài)文件進(jìn)行靜態(tài)的處理返回。Nginx會(huì)將動(dòng)態(tài)文件的請(qǐng)求輸出給Uwsgi,調(diào)用Django的文件函數(shù)后將數(shù)據(jù)傳送回Uwsgi,將數(shù)據(jù)輸出到Nginx,最終輸出到客戶端。
微信服務(wù)器采用Django的服務(wù)器構(gòu)架,使用wechatpy的SDK進(jìn)行不同API的接口接入。在微信項(xiàng)目APP下,引入check_signature Invalid Signature Exception、parse_message等函數(shù),解析XML的消息,驗(yàn)證接入微信請(qǐng)求的有效性;引入WeChatMenu自定義下的view,引導(dǎo)用戶進(jìn)入客戶端;在項(xiàng)目APP下增加wechatpay下的WeChatJSAPI、WeChatOrder、WeChatRefund,統(tǒng)一下單接口,公眾號(hào)網(wǎng)頁(yè)JS支付接口以及退款接口,進(jìn)行微信支付的配置。用戶發(fā)送支付請(qǐng)求,系統(tǒng)會(huì)通過(guò)Ajax輸送數(shù)據(jù),后臺(tái)把前臺(tái)數(shù)據(jù)合成XML完成統(tǒng)一下單接口的調(diào)用。前臺(tái)提取prepay_id通過(guò)微信瀏覽器內(nèi)置JS調(diào)用JSAPI支付。在退款接口中,通過(guò)雙向證書的驗(yàn)證,調(diào)用WeChatRefundAPI,即可實(shí)現(xiàn)申請(qǐng)退款功能。
MTV模式的主要特點(diǎn)體現(xiàn)在全部組件的松耦合形式。Django驅(qū)動(dòng)的Web運(yùn)用都有精確目標(biāo)并能獨(dú)立修改。當(dāng)重新命名數(shù)據(jù)表時(shí),管理員的任務(wù)可簡(jiǎn)化為只更改模型。
該反饋式訂票系統(tǒng)設(shè)計(jì)采用了Python2.7語(yǔ)言,利用Django1.8.3框架,其自帶的SQLite作為數(shù)據(jù)庫(kù),HTML、CSS與JavaScript作為Web前臺(tái)設(shè)計(jì),以VMware工作站虛擬機(jī)中的Ubuntu作為開發(fā)環(huán)境,為開發(fā)者在Windows系統(tǒng)中順利運(yùn)行Linux Ubuntu系統(tǒng)提供了必要條件。
(1)班次信息代碼分析:班次信息屬于Django模型,繼承了models.Model,Django默認(rèn)的后臺(tái)管理界面使進(jìn)度管理得以實(shí)現(xiàn)。
(2)乘客信息代碼分析:乘客繼承了Django.contrib.認(rèn)證。除了auth_user需要輸入的對(duì)象,其他的默認(rèn)字段不需要考慮。
(3)URL映射代碼分析:當(dāng)用戶在訂票系統(tǒng)中發(fā)起一個(gè)網(wǎng)頁(yè)的請(qǐng)求時(shí),Django控制器會(huì)接管通過(guò)url.py文件來(lái)尋找相應(yīng)的視圖,然后返回HTML響應(yīng)或如果沒(méi)有找到則返回404未找到錯(cuò)誤,其中最重要的是“相符”元組,這是URL和視圖之間映射的定義。
(4)登錄判定代碼分析:當(dāng)管理員和普通用戶共享登錄窗口時(shí),可以在顯示登錄者信息前確定登錄者的身份并顯示相應(yīng)的內(nèi)容。
(5)訂票流程代碼分析:在整個(gè)訂票的過(guò)程中,第一要明確用戶是否登錄,假如未登錄,就加載登錄頁(yè)面;假如用戶已經(jīng)登錄了,則將其確定的班次傳入bus.id;第二判斷,如果用戶已經(jīng)預(yù)訂了該班次,則沖突信息將被反饋,否則,預(yù)訂成功并顯示更新后的預(yù)訂成功界面。
(6)退票信息代碼分析:當(dāng)用戶退款時(shí),后臺(tái)需要更新數(shù)據(jù)庫(kù),更新飛行(能力,book_sum,收入)領(lǐng)域,并在booksystem_bus_user刪除順序表。
(7)后臺(tái)增加加車信息代碼分析:后臺(tái)管理系統(tǒng)具有對(duì)加車信息增減修改的功能,具體操作如圖3,可添加加車日期并選擇一個(gè)或多個(gè)該日期的加車時(shí)間點(diǎn),為前臺(tái)提供了供用戶進(jìn)行反饋操作的加車信息選項(xiàng)。
圖3 增加加車信息代碼
系統(tǒng)設(shè)計(jì)應(yīng)用了Django框架,以Nginx+Uwsgi+Django組合作為后臺(tái)服務(wù)器構(gòu)架,使用了Python語(yǔ)言,實(shí)現(xiàn)了班車查詢、購(gòu)票、退票以及加車等功能,可以用于緩解學(xué)校班車運(yùn)行壓力,方便師生出行,且具有可自助管理后臺(tái)、方便運(yùn)行與維護(hù)和運(yùn)行穩(wěn)定的優(yōu)點(diǎn),對(duì)于新區(qū)開發(fā)初期的通勤班車運(yùn)行管理有一定的參考和應(yīng)用價(jià)值。
[1]馬強(qiáng),肖俊生.大學(xué)校車調(diào)度系統(tǒng)模型研究[J].科技風(fēng), 2012.
[2]王冉陽(yáng).基于Django和Python的Web開發(fā)[J].電腦編程技巧與維護(hù),2009.
[3]李舜,王輝.基于WAP的手機(jī)上網(wǎng)訂票系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008.
[4]黃耿生.利用虛擬機(jī)搭建Linux操作系統(tǒng)的實(shí)踐環(huán)境[J].福建電腦,2013.
[5]梁永恩,萬(wàn)世明,翟敏換.SQLite數(shù)據(jù)庫(kù)在嵌入式系統(tǒng)中的應(yīng)用研究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2015.
[6]邱鵬,萬(wàn)懷宇,林友芳等.基于用戶行為分析的在線訂票系統(tǒng)緩存優(yōu)化策略研究[J].計(jì)算機(jī)與現(xiàn)代化,2017.
[7]商恩福.網(wǎng)上訂票系統(tǒng)分析與設(shè)計(jì)[J].電腦編程技巧與維護(hù),2009.
[8]張霞,張志強(qiáng),呂曉艷等.鐵路學(xué)生團(tuán)體票訂票系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].鐵路計(jì)算機(jī)應(yīng)用,2013.
華北理工大學(xué)2017大學(xué)生創(chuàng)新訓(xùn)練項(xiàng)目“基于微信平臺(tái)的反饋式訂票系統(tǒng)”,項(xiàng)目編號(hào):X2017143;華北理工大學(xué)校內(nèi)科技項(xiàng)目,項(xiàng)目編號(hào):25398899。