師溫馨
(廈門大學(xué),福建廈門,361005)
隨著計(jì)算機(jī)技術(shù)的發(fā)展,生活水平的不斷提高,人們已經(jīng)不會(huì)僅僅滿足于在商場(chǎng)內(nèi)購(gòu)買商品而越來(lái)越多地希望可以在網(wǎng)絡(luò)上看到并獲得更多的貨物,電子商務(wù)網(wǎng)站就在這樣的環(huán)境下孕育而生了。電子商務(wù)購(gòu)物網(wǎng)站能夠充分迎合大家的需求,為店鋪管理員、顧客提供最方便的平臺(tái)實(shí)現(xiàn)安全交易。它為顧客提供更多的購(gòu)物選擇,使店鋪管理員可以在全國(guó)范圍內(nèi)銷售產(chǎn)品,更符合大家的生活習(xí)慣,其快捷方便贏得了每一個(gè)人的喜愛(ài)。
Struts2 框架是一個(gè)基于Web 的MVC 設(shè)計(jì)模式實(shí)現(xiàn)框架,結(jié)構(gòu)清晰,簡(jiǎn)單、方便、易用, 加上Apache 組織對(duì)此開(kāi)源項(xiàng)目的支持,是一個(gè)很好的輕量級(jí)應(yīng)用。Struts 2 以Web Work 為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與Servlet API 完全脫離開(kāi)。Struts2 通過(guò)Action 的調(diào)用完成界面跳轉(zhuǎn)時(shí)的動(dòng)作處理,使得界面與動(dòng)作分離,降低了代碼的耦合度。選用struts2 框架是開(kāi)發(fā)電子商務(wù)購(gòu)物網(wǎng)站的一個(gè)合適的選擇。
Hibernate 實(shí)現(xiàn)了Java 對(duì)象和表之間的映射。它還提供了數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開(kāi)發(fā)時(shí)人工使用SQL 和JDBC 處理數(shù)據(jù)的時(shí)間。Hibernate 的目標(biāo)是對(duì)開(kāi)發(fā)者通常的數(shù)據(jù)持久化相關(guān)的編程任務(wù),解放其中的95%。Hibernate 避免直接使用sql 導(dǎo)致的代碼混亂繁雜。同時(shí),使用大量的sql 語(yǔ)句,編譯時(shí)不知對(duì)錯(cuò),測(cè)試時(shí)也很難覆蓋全面,而Hibernate 完美地解決了這一點(diǎn)。使用Hibernate 可以使我們通過(guò)針對(duì)類的屬性進(jìn)行操作改變數(shù)據(jù)庫(kù)中的值而不用直接更改數(shù)據(jù)庫(kù)底部的值。
Spr ing 貫穿表現(xiàn)層、業(yè)務(wù)層、持久層,在各方面都表現(xiàn)出較優(yōu)良的特性,同時(shí)其具有高度開(kāi)放性,使得我們可以根據(jù)需要選擇僅運(yùn)用Spr ing 框架的某些部分。Spr ing 對(duì)POJO 之間依賴關(guān)系的管理由Ioc 容器負(fù)責(zé),容器根據(jù)配置文件將依賴注入指定的對(duì)象中,這不僅提高了組件之間的解耦,還使得Spr ing 框架管理的任何對(duì)象都很容易支持AOP。雖然在廣義上看,st ruts 中的攔截器與AOP 工作原理相同,但是Spr ing AOP 基于Ioc 基礎(chǔ),采用動(dòng)態(tài)代理,同時(shí)具備對(duì)事務(wù)、日志等的集中式處理,具有更好的復(fù)用性。如果我們只是單純使用St ruts,那么各個(gè)模塊的交叉關(guān)注點(diǎn)處將存在許多代碼冗余,這對(duì)后期維護(hù)是不利的。Spr ing AOP 則只需將處理aspect的代碼注入主程序,大大降低了后期維護(hù)的復(fù)雜度。所以選擇Spr ing 框架,實(shí)現(xiàn)依賴注入,適合開(kāi)發(fā)電子商務(wù)購(gòu)物網(wǎng)站。
基于SSH 框架的電子商務(wù)購(gòu)物網(wǎng)站主要包括以下模塊。
網(wǎng)站管理員包括普通網(wǎng)站管理員和超級(jí)網(wǎng)站管理員。網(wǎng)站管理員,有刪除、更改、增加用戶資料的權(quán)限;可以審核店鋪申請(qǐng),管理已經(jīng)通過(guò)審核的店鋪,包括增加一個(gè)賣家管轄的店鋪、更改店鋪資料、關(guān)閉該店鋪;可以更改店鋪的類別,包括增加一個(gè)新的類別或者刪除一個(gè)已有的類別,同時(shí)指定擁有該類別的店鋪?lái)?yè)面的默認(rèn)風(fēng)格;可以在操作頁(yè)面加入網(wǎng)站的界面風(fēng)格選擇,同時(shí)增加店鋪某一類別的界面風(fēng)格的選擇;也要實(shí)現(xiàn)對(duì)廣告位的管理,包括申請(qǐng)廣告位的店鋪的選擇,店鋪打折信息的實(shí)時(shí)發(fā)布以及在對(duì)應(yīng)的時(shí)間與時(shí)段廣告位的正確發(fā)布;超級(jí)管理員擁有普通網(wǎng)站管理員的管理權(quán)限以及可以選擇查看普通網(wǎng)站管理員所做的所有操作。
店鋪管理員包括店鋪賣家、店鋪經(jīng)理與店鋪客服人員。對(duì)于所有的店鋪管理員來(lái)說(shuō),均可以刪除、更改、增加商品。
店鋪賣家與店鋪經(jīng)理可實(shí)現(xiàn)對(duì)商品的增加、刪除、上架、下架等處理。只有上架的產(chǎn)品才可以被網(wǎng)站用戶看到并加入購(gòu)物車;可以設(shè)定增加的商品的描述信;以增加、刪除、修改店鋪的顯示目錄,同時(shí)制定的目錄可以有子目錄。店鋪經(jīng)理?yè)碛械赇佡u家與店鋪客服人員的權(quán)限以及可以選擇查看店鋪賣家與店鋪客服人員所做的所有操作。
店鋪包括三種店鋪:綜合體店鋪、精品館和精品店。每種店鋪擁有的商品數(shù)量限制,商品上傳圖片大小以及指定店鋪風(fēng)格均不同。綜合體店鋪可以允許其他店鋪加盟該店鋪,為加盟店鋪增加廣告位,并管理自己和加盟店鋪的頁(yè)面風(fēng)格。
用戶可以在任意界面進(jìn)行登錄和注冊(cè),如果用戶沒(méi)有登錄,不允許用戶查看購(gòu)物車以及進(jìn)行之后的操作;可以通過(guò)首頁(yè)目錄或者廣告位進(jìn)入賣家界面進(jìn)行選購(gòu)商品;還可以在首頁(yè)切換自己希望擁有的網(wǎng)站界面風(fēng)格;用戶可以通過(guò)搜索關(guān)鍵字查找相關(guān)的商品并進(jìn)行查看。在進(jìn)行選擇商品加入購(gòu)物車完畢之后,可以支付自己的訂單。在商品到達(dá)之后,用戶可以選擇退貨或進(jìn)行對(duì)商品的評(píng)價(jià)。
Ad Info 類:描述每一個(gè)廣告位的信息,其中包括:id(Integer);ad_number(Integer); real_storeInfo(StoreInfo);image_url(String);apply_time(Date);price(Double);apply_people_name(String);email(String);credit_card_number(String);telephone_number(String);status(Str ing);date_string(String);apply_time_long(Integer);discount(Double);final_time(Date)。
ApplyAdInfo 類:描述正在等待申請(qǐng)的每一個(gè)廣告位的信息,其中包括:id(Integer);ad_id(Integer);storeInfo(StoreInfo);image_url(String);apply_time(Date);apply_people_name(String);ema i l(S tring);c redit_card_number(String);telephone_number(String)。
StoreInfo類:描述每一個(gè)店鋪的信息;其中包括:id(Integer);store_name(String);goods_number(Integer);open_time(Date);status(String);total_price(Dou ble);reason(String);seller(Seller);store_type(StoreType);ad_status(String)。
DiscountCategory 類:描述每一種廣告位打包信息,其中包括:id(Integer);pr ice(Double);discount_l ist(Li st
User 類:描述所有用戶的信息,其中包括id(Integer),username(String),password(String),regist_time(Date),last_login(Date)。
Seller 類:描述所有店鋪管理員信息,繼承User類。 其 中 包 括:seller_credit(Integer);phone_number(String);email_address(String);image_url(String);real_name(String);sex(String);address(String);education(String);storeInfo(StoreInfo);id_card_number(String);category(String)。
Manager 類:描述所有網(wǎng)站管理員信息,繼承User 類。其中 包 括:birthday(Date);phone_number(String);email_address(String);image_url(String);real_name(String);sex(String);address(String);education(String)。
Customer 類:描述所有顧客信息,繼承User 類。其中包 括: birthday(Date);phone_number(String);email_address(String);image_url(String);real_name(Strin g);sex(String);address(String);education(String);o ccupation(String);status(String);remainMoney(Doub le)。
廣告位是根據(jù)不同時(shí)間以及不同時(shí)間段來(lái)進(jìn)行收費(fèi)的。打包的套餐會(huì)將不同價(jià)位的廣告位打包進(jìn)行銷售,將價(jià)格略貴以及價(jià)格便宜的打包至一起,用更優(yōu)惠的價(jià)格售出。如果售出的廣告位除了打包套餐中的廣告位剩余的廣告位數(shù)量不小于3 的話,則將這些剩余的廣告位總價(jià)格乘以0.8,最終的所有套餐總價(jià)格與剩余的廣告位總價(jià)格之和即為店鋪管理員應(yīng)付的價(jià)格。
根據(jù)用戶選擇的廣告位獲得多個(gè)廣告位id,根據(jù)廣告位id 分別獲得廣告位實(shí)例(即類AdInfo 的實(shí)例),從而獲得各個(gè)廣告位的價(jià)格。找出所有可能組成的套餐組合,計(jì)算各個(gè)組合的價(jià)格,再循環(huán)比較所有的組合價(jià)格,得到最低價(jià),通知店鋪管理員最優(yōu)組合的套餐類別以及其余無(wú)法打包進(jìn)入套餐的廣告位,告知店鋪管理員價(jià)格明細(xì)及最終價(jià)格,如果店鋪管理員同意繼續(xù)申請(qǐng),則繼續(xù)廣告位申請(qǐng)操作,店鋪廣告位進(jìn)入申請(qǐng)等待狀態(tài)。具體算法如下。
用List> apply_discount_list 記錄所有的廣告位組合的店鋪id 序列。在對(duì)List
> 的循環(huán)遍歷中嵌套兩次循環(huán)遍歷。在最外層的循環(huán)遍歷中,依次對(duì)每一個(gè)DiscountCategory 進(jìn)行遍歷。在循環(huán)中,依次進(jìn)行兩次循環(huán)遍歷,第一次循環(huán)遍歷記錄所有出現(xiàn)廣告位組合的DiscountCategory 的id,第二次遍歷從第一次出現(xiàn)廣告位組合的DiscountCategory 的id 開(kāi)始遍歷,逐步尋找記錄所有的套餐組合。計(jì)算所有可能的廣告位打包的情況并分別計(jì)算出廣告位的價(jià)錢,最優(yōu)組合(價(jià)格最低的組合)即為店鋪管理員最終選擇的組合。
訂單優(yōu)惠包括店鋪優(yōu)惠和全網(wǎng)優(yōu)惠。全網(wǎng)優(yōu)惠是指顧客購(gòu)買的商品金額大于一定數(shù)值時(shí)進(jìn)行打折或者是免運(yùn)費(fèi)等優(yōu)惠活動(dòng)。店鋪優(yōu)惠是指店鋪內(nèi)的部分商品進(jìn)行打包套餐銷售或者是部分商品進(jìn)行打折銷售,優(yōu)惠活動(dòng)由賣家管理員進(jìn)行操作。
在結(jié)算訂單時(shí),根據(jù)顧客購(gòu)買的商品按照不同的店鋪進(jìn)行分類。先分別根據(jù)不同店鋪的優(yōu)惠條件計(jì)算顧客在不同店鋪中購(gòu)買商品的總金額,再將其加和用于判斷是否符合全網(wǎng)優(yōu)惠的條件以及參與全網(wǎng)優(yōu)惠后的商品價(jià)格。
在計(jì)算一個(gè)店鋪的所有商品的優(yōu)惠價(jià)格時(shí),分別對(duì)該店鋪與購(gòu)買商品相關(guān)的優(yōu)惠政策進(jìn)行遍歷,找出所有的可能情況后進(jìn)行價(jià)格計(jì)算比較,價(jià)格最低的方法即為顧客在該店鋪購(gòu)買商品的最終價(jià)格。
電子商務(wù)購(gòu)物網(wǎng)站已經(jīng)越來(lái)越受到大家的青睞并逐漸成為許多人購(gòu)物的主流方式。它使人們能夠避免旅途的勞累、時(shí)間的擁擠而充分根據(jù)自己的情況進(jìn)行更大范圍地、更廉價(jià)的購(gòu)物選擇。電子商務(wù)購(gòu)物網(wǎng)站的便捷將會(huì)讓它受到越來(lái)越多人的喜愛(ài),此次開(kāi)發(fā)的電子商務(wù)購(gòu)物平臺(tái)也正是為了迎合大眾的需求。
[1] 孫鑫編.Java Web 開(kāi)發(fā)詳解[M]. 北京:電子工業(yè)出版社,2006,169-296.
[2] 李剛. 輕量級(jí)J2EE 企業(yè)應(yīng)用實(shí)戰(zhàn)[M] 北京:電子工業(yè)出版社,2007,344-786