鐘愛青
摘要:隨著互聯(lián)網(wǎng)的迅速發(fā)展,電子商務(wù)中的“非主流”購物形式——網(wǎng)絡(luò)競拍也快速興起,本文將通過講述電商的基礎(chǔ)知識、競拍的應(yīng)用場景,讓學(xué)生可以對電商有一個(gè)立體的了解。通過詳細(xì)介紹如何創(chuàng)建一個(gè)用于閑置物品的競拍系統(tǒng),展示了電商競拍系統(tǒng)的設(shè)計(jì)過程與實(shí)現(xiàn)過程。
關(guān)鍵詞:電商競拍;移動開發(fā);React Native
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)16-0089-03
1 引言
主流的電子商務(wù)銷售形式主要有零售、秒殺、團(tuán)購、競拍。
“零售”是最基本的電商模式,指在電商平臺(如淘寶,京東)上開虛擬店鋪,銷售固定價(jià)格的商品。零售的商品多式多樣,而秒殺的商品一般價(jià)格低廉或者是資源有限的商品。團(tuán)購類似于線下的批發(fā)購買行為,但網(wǎng)上的團(tuán)購行為的是各地相互不認(rèn)識的消費(fèi)者,以購物數(shù)量尋得商品的最優(yōu)惠價(jià)格的購物方式。
“競拍”,跟線下拍賣場競拍一樣,本質(zhì)上是以競爭價(jià)格為核心,達(dá)到價(jià)格最優(yōu)的市場經(jīng)濟(jì)過程。借助于拍賣網(wǎng)站,商家發(fā)布要拍賣的商品或服務(wù),設(shè)定起拍價(jià)和保留價(jià)。消費(fèi)者通過拍賣網(wǎng)絡(luò)或APP在固定時(shí)間內(nèi)一起出價(jià),最終出價(jià)最高的消費(fèi)者如果超過了保留價(jià),則商品成交,否則則流拍。
競拍的應(yīng)用場景非常多,理論上任何東西都可以采用競拍的形式出售。但是競拍作為一種博弈行為,首先其商品價(jià)值不能是大家顯而易知的,其次其數(shù)量也不能多?,F(xiàn)在流行的場景主要有藝術(shù)品拍賣,司法拍賣,二手車或二手物品拍賣等。
我校每年都會舉辦“循環(huán)利用 環(huán)保機(jī)械”的校園跳蚤市場活動,為學(xué)生提供一個(gè)互利互惠的交易平臺,活動交易物品大多為二手物品,如小桌子、書籍、電子產(chǎn)品、化妝小贈品等。這些物品大多不好定價(jià),但如果消費(fèi)者和商家選用這種“競拍”模式一起可以影響這個(gè)價(jià)格,這樣就可以讓這些物品價(jià)格達(dá)到最優(yōu)。
根據(jù)二手物品拍賣平臺的分析,設(shè)計(jì)和開發(fā)一個(gè)適合校內(nèi)電子商務(wù)實(shí)訓(xùn)班級的二手物品電商競拍平臺,即可迎合學(xué)校舉辦的校園跳蚤市場活動,又可讓實(shí)訓(xùn)班級的學(xué)生了解到電商拍賣的技巧和細(xì)節(jié)。
2 需求分析
通過對系統(tǒng)目標(biāo)人群的分析,系統(tǒng)的目標(biāo)用戶角色包括以學(xué)生及教師在內(nèi)的用戶及管理后臺系統(tǒng)的管理員。學(xué)生與教師是主要使用者,包括注冊、登錄、瀏覽二手物品、競拍等;管理員負(fù)責(zé)審核用戶信息及競拍物品的信息管理。具體如圖1。
競拍管理及物品管理是競拍系統(tǒng)的主體內(nèi)容,在物品管理中,用戶可以使用APP隨時(shí)上傳二手物品,查看已成交的物品等;在競拍管理中,用戶可以在APP時(shí)查看競拍大廳中正在競拍的物品,對自己喜歡的物品出價(jià)。管理員可以對違規(guī)發(fā)布用戶禁止登錄或者發(fā)布信息,同時(shí)可以下架違反競拍條款的競拍物品。
3 用例實(shí)現(xiàn)
在該系統(tǒng)中,每個(gè)角色用戶有各自不同的用例,下面選取了用戶競拍模塊,通過文字和時(shí)序圖介紹用例的實(shí)現(xiàn)過程。
競拍是系統(tǒng)最重要的模塊,包括了系統(tǒng)主要的功能:發(fā)拍、競拍大廳、出價(jià)、定時(shí)、緩存隊(duì)列等;用戶上傳的競拍物品會展示在競拍大廳中,其他用戶通過APP在競拍大廳瀏覽物品,對自己喜歡的物品出價(jià),為了系統(tǒng)的高性能,出價(jià)信息在競拍過程中只會插入到緩存隊(duì)列redis中,redis是一個(gè)內(nèi)存數(shù)據(jù)庫,具有備份功能,不用擔(dān)心數(shù)據(jù)會丟失;競拍服務(wù)模塊還會將該出價(jià)信息廣播到其他正在瀏覽該物品的用戶的APP上,使所有用戶都知道最新的競拍出價(jià)。定時(shí)服務(wù)會監(jiān)聽競拍物品的到期時(shí)間,當(dāng)?shù)搅私Y(jié)束時(shí)間,定時(shí)服務(wù)會通知競拍服務(wù)關(guān)閉出價(jià)功能,同時(shí)保存出價(jià)數(shù)據(jù)到數(shù)據(jù)庫。
用戶通過APP上傳需要競拍的物品的圖片,設(shè)置物品的起拍價(jià),保留價(jià),起拍時(shí)間,點(diǎn)擊發(fā)拍,物品信息就會通過物品服務(wù)API保存到數(shù)據(jù)庫中,同時(shí)調(diào)用定時(shí)服務(wù)插入一個(gè)定時(shí)記錄,在系統(tǒng)的發(fā)拍規(guī)則中,起拍價(jià)小于保留價(jià),用戶在經(jīng)過幾輪(>=1)的出價(jià)后,物品最高出價(jià)如果大于保留價(jià),則最高出價(jià)用戶競得該物品;系統(tǒng)定時(shí)器會在起拍時(shí)間前30分鐘調(diào)用消息服務(wù)發(fā)送消息通知用戶該物品競拍開始,消息的發(fā)送會通過APP內(nèi)推送的方式發(fā)送;起拍時(shí)間到時(shí),定時(shí)器會調(diào)用競價(jià)API更新物品的拍賣狀態(tài)為拍賣中,這時(shí)用戶就可以通過APP出價(jià)競拍了。
4 原理與技術(shù)
4.1 系統(tǒng)架構(gòu)
一個(gè)典型的競拍平臺需要提供一個(gè)APP及一個(gè)管理平臺。
APP提供了添加物品,消費(fèi)者集中競價(jià),支付,瀏覽物品,查找物品等功能。
管理平臺提供了電商管理員審核物品,管理用戶等管理流程。
從架構(gòu)上,系統(tǒng)分為了數(shù)據(jù)層,服務(wù)層,接入層,中間件層。
數(shù)據(jù)層提供了數(shù)據(jù)的存儲及查詢,包括了基礎(chǔ)數(shù)據(jù)庫,用戶數(shù)據(jù)庫,訂單庫,物品庫,緩存數(shù)據(jù)庫等。
服務(wù)層將平臺提供的業(yè)務(wù)功能進(jìn)行垂直的細(xì)粒度劃分,包括了用戶,物品,競價(jià),訂單等微服務(wù)。
接入層提供了各個(gè)模塊需要的API,包括APP API,管理平臺API等。
第三方服務(wù)層集成了系統(tǒng)需要使用到的第三方廠商提供的服務(wù),如支付需要采用支付寶或微信的支付SDK,短信需要使用阿里的服務(wù)等。
4.2 APP開發(fā)框架
目前主流的APP開發(fā)方式有基于原生(iOS或者Android)開發(fā),基于html5的H5開發(fā),基于Javascript與原生(iOS或者Android)的混合開發(fā)方式。
Native開發(fā)方式需要同時(shí)開發(fā)IOS版本及ANDROID版本,開發(fā)工作量大,復(fù)雜,周期長,開發(fā)出來的界面也不統(tǒng)一,但是采用原生的組件及API,性能及操作體驗(yàn)是最好的。
H5采用html5+js來寫組件及操作,運(yùn)行于Web瀏覽器環(huán)境上。只需要開發(fā)一次,就可以在多種手機(jī)系統(tǒng)上運(yùn)行。但由于HTML5技術(shù)目前還不夠成熟,仍然存在一些重大的局限性,具體包括會話管理、安全離線存儲以及訪問原生設(shè)備功能(攝像頭、日歷和地理位置等)。特點(diǎn)是開發(fā)簡單,工作量小,跨平臺,但是受限于js的性能,開發(fā)出來的APP性能及操作體驗(yàn)都比較差,一般只適合于閱讀類的APP,對于強(qiáng)交互類的APP( 如競拍APP)不適合,經(jīng)常性會有卡頓的現(xiàn)象。
JS+Native混合開發(fā)方式是近年流行的開發(fā)方式。這種方法用JavaScript調(diào)起native 組件,將增強(qiáng)與高性能組件交給 native來處理,JavaScript 負(fù)責(zé)頁面布局,樣式,轉(zhuǎn)發(fā)事件及控制系統(tǒng)流程。既擁有原生系統(tǒng)流暢的用戶體驗(yàn)、又保留HTML5快速的開發(fā)效率。
5 系統(tǒng)的難點(diǎn)
一個(gè)實(shí)時(shí)的出價(jià)大概包含下面三個(gè)過程: 一個(gè)或者多個(gè)用戶關(guān)注著某一個(gè)拍品當(dāng)其中某個(gè)用戶出價(jià)后,更新數(shù)據(jù)庫中該拍品的信息,將最新的拍品信息反應(yīng)到關(guān)注該拍品用戶的客戶端上。簡單來說就是:“當(dāng)拍品出價(jià)成功后,取得最新的拍品信息,推送給關(guān)注該拍品的所有用戶”。如果用戶量少,系統(tǒng)其實(shí)不需要做什么設(shè)計(jì),但是如果用戶量上十萬、上百萬,那么系統(tǒng)架構(gòu)的問題就體現(xiàn)出來了。
根據(jù)競拍的特點(diǎn),系統(tǒng)的實(shí)現(xiàn)難點(diǎn)體現(xiàn)在系統(tǒng)需要滿足高流量訪問,高并發(fā)請求數(shù)據(jù),實(shí)時(shí)性要求。
對于高流量,高并發(fā)訪問,我們可以采用分而治之的思想,采用分布式群集服務(wù)器,將大量的訪問分流到不同的服務(wù)器上,增加服務(wù)器負(fù)載均衡控制,將流量平分到各服務(wù)器,避免單個(gè)服務(wù)器由于負(fù)載過重而掛掉。
競價(jià)對實(shí)時(shí)性要求非常高,所有參與用戶需要實(shí)時(shí)知道當(dāng)前的最高價(jià),要實(shí)時(shí)拍品信息實(shí)時(shí)更新,采用傳統(tǒng)的界面定時(shí)刷新方式已經(jīng)不滿足業(yè)務(wù)場景的需求,必須采用實(shí)時(shí)性更高的服務(wù)端推送方式。而客戶端想要得到服務(wù)端推送的信息,實(shí)際上需要和服務(wù)端建立一個(gè)長連接,這樣服務(wù)端才能通過這個(gè)連接把信息傳遞到客戶端,也就是所謂“推”的概念。
在這個(gè)項(xiàng)目中我們將采用高性能的實(shí)時(shí)消息服務(wù)框架socket.io來開發(fā)實(shí)現(xiàn)我們的競價(jià)功能。Socket.io具有非常高的性能,一臺普通的1CPU,4G內(nèi)存的機(jī)器就可以支持并發(fā)30000以上的長連接及每秒140000以上的實(shí)時(shí)消息;并且socket.io服務(wù)端還支持分布式擴(kuò)展及部署,當(dāng)用戶非常大的時(shí)間,可以通過增加群集服務(wù)器的方式來擴(kuò)展系統(tǒng)的能力,而且增加服務(wù)器是動態(tài)的,不需要系統(tǒng)關(guān)機(jī)或者停止服務(wù),對于用戶而言是透明的。
綜上所述,Socket.io非常適合競拍平臺高性能及分布式群集的架構(gòu)要求。
6 關(guān)鍵代碼及效果
本系統(tǒng)的實(shí)現(xiàn)涉及APP開發(fā)及后臺服務(wù)接口的開發(fā),APP開發(fā)需要在Node.js開發(fā)環(huán)境下使用React Native框架開發(fā);后臺服務(wù)接口需要在JAVA開發(fā)環(huán)境下使用Jboot框架開發(fā)。接下來將以在線競拍模塊作為典型功能模塊為例,通過關(guān)鍵代碼介紹系統(tǒng)的詳細(xì)實(shí)現(xiàn)過程。
React Native是目前最流行的混合開發(fā)框架,由Facebook于2015年開源,目前許多電商公司都采用該框架來開發(fā)APP。
Jboot是一個(gè)用于JAVA語言開發(fā)的類似于spring boot的微服務(wù)開發(fā)框架。Jboot框架為開發(fā)后臺服務(wù)提供了大量的基礎(chǔ)功能,如數(shù)據(jù)存儲,緩存,API文檔等。
6.1競拍大廳
競拍大廳展示了系統(tǒng)正在競拍中的物品,是系統(tǒng)的主要入口,代碼如下:
componentWillMount() {//界面將要打開的時(shí)候
InteractionManager.runAfterInteractions(( ) => {
This.props.dispatch({type: types.FETCH_BIDDATA_LIST }) //發(fā)送數(shù)據(jù)加載命令
})}
該方法在競拍大廳界面打開之前先發(fā)送加載競拍物品列表數(shù)據(jù)的命令到消息中心,消息中心監(jiān)聽到命令之后將調(diào)用后臺服務(wù)接口返回?cái)?shù)據(jù)并顯示到界面上。
export function* watchBidList() {//監(jiān)聽數(shù)據(jù)請求事件
yield [call(handleBidListAction)] }//從后臺服務(wù)接口獲取數(shù)據(jù)
加入InteractionManager.runAfterInteractions可以告訴系統(tǒng)先運(yùn)行交互動畫再執(zhí)行數(shù)據(jù)請求,可以使頁面動畫更流暢。
效果如下:
實(shí)現(xiàn)后臺獲取總價(jià)物品列表的API接口, 返回?cái)?shù)據(jù)給前端:
List
renderJson(cars );//以JSON格式數(shù)據(jù)的形式返回給前端
6.2 使用socket.io實(shí)現(xiàn)實(shí)時(shí)出價(jià)功能
在后端代碼中加入啟動socket server代碼,并監(jiān)聽出價(jià)事件,如果有出價(jià)事件,則調(diào)用物品服務(wù)保存。
//當(dāng)收到前端出價(jià)事件
public void onData(SocketIOClientclient,JSONObjectdata,AckRequestackRequest) {
String price = productService .addBid(data);//調(diào)用物品服務(wù)API保存數(shù)據(jù)
//通知其他人已經(jīng)有人出價(jià),需要刷新頁面上的最高價(jià)信息
server.getBroadcastOperations().sendEvent("update",price);}
前端APP添加出價(jià)事件,當(dāng)用戶點(diǎn)擊出價(jià)時(shí),將出價(jià)信息實(shí)時(shí)發(fā)送到服務(wù)端。
onBid() {
socket.emit('event',{ user: '1',price: 5,id: bidDetail.id });}
點(diǎn)擊我的要價(jià),這時(shí)會發(fā)送加價(jià)5的信息到后端,后端保存出價(jià)信息之后會通知所有連接到該頁面的客戶端刷新頁面的最高價(jià)信息,效果如下圖:
9 總結(jié)
通過校園二手物品拍賣平臺,對于學(xué)生而言,使用APP競拍二手物品,能夠更好地響應(yīng)學(xué)校舉辦的“循環(huán)利用 環(huán)保機(jī)械” 校園跳蚤市場活動,也增加了校園生活的樂趣;對于專業(yè)的電商學(xué)生而言,通過拍賣平臺能夠?qū)W習(xí)到競拍模式的規(guī)則,一般電商公司的商業(yè)模式,電商APP的開發(fā)知識,有利于學(xué)生加深對電商專業(yè)的認(rèn)識;對于教師而言,可以將該平臺作為一個(gè)電商實(shí)訓(xùn)項(xiàng)目,向?qū)W生傳輸電商APP基本知識,增加學(xué)生的項(xiàng)目經(jīng)驗(yàn),為學(xué)生增加就業(yè)的亮點(diǎn)。
參考文獻(xiàn):
[1] 傅宏智,黃亮.校園二手商品交易平臺中物品競價(jià)拍賣的設(shè)計(jì)與實(shí)現(xiàn)[J].中國新通信,2016(9).
[2] 阮一峰. React入門實(shí)例教程[EB/OL] http://www.ruanyifeng.com/blog/2015/03/react.html.
[3] 趙步逵.個(gè)人商品競拍網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:中國地質(zhì)大學(xué)(北京),2013.