對于商城系統(tǒng)來說,運費系統(tǒng)是必不可少的,最簡單的就是在每個商品添加的時候設(shè)置此商品購買時候的運費,但是這個邏輯并不能滿足用戶的需求,無法按照客戶的地址設(shè)置不同的運費,設(shè)置地區(qū)包郵,不配送等一系列的操作。那怎么能更快更簡單的實現(xiàn)這個功能呢,這
對于商城系統(tǒng)來說,運費系統(tǒng)是必不可少的,最簡單的就是在每個商品添加的時候設(shè)置此商品購買時候的運費,但是這個邏輯并不能滿足用戶的需求,無法按照客戶的地址設(shè)置不同的運費,設(shè)置地區(qū)包郵,不配送等一系列的操作。那怎么能更快更簡單的實現(xiàn)這個功能呢,這篇文章,我會將我開發(fā)CRMEB單商戶系統(tǒng)時的設(shè)計思路拿出來和大家分享,希望大家看完能有所啟發(fā)并找到更好的解決辦法。
希望大家看完在動手,看一半就覺得自己行了,容易寫B(tài)UG~
初版~
對于運費的計算來說,最開始就是要知道用戶選擇的送貨地址,運費計算也不用過于精確地址信息,所以我在全國省市區(qū)的數(shù)據(jù)庫里增加了城市ID字段,用戶在添加地址的時候,將對應(yīng)的城市ID也同時存儲在用戶的地址信息中,這樣,用戶在每次切換地址的時候,可以根據(jù)城市ID字段判斷用戶所處的城市。
接下來,先創(chuàng)建一個最簡單運費模版A表,里面只有城市ID和運費,只要用戶的城市ID就能找出你要付多少運費啦,但是當我設(shè)置運費的時候,發(fā)現(xiàn)了一個大問題,全國這么多城市,難道要一個一個的進行設(shè)置么?當然不,國家運輸系統(tǒng)這么完善,只有很少的地區(qū)運費是不同的,我只要把不同運費的地區(qū)設(shè)置了就好。其他的,就讓他用默認的數(shù)據(jù)就可以啦。于是,我創(chuàng)建了一條默認數(shù)據(jù),城市ID設(shè)置為0,當用戶的地址在數(shù)據(jù)里面找不到對應(yīng)的運費的時候,我就給他默認的運費。
好,最簡單的運費模版已經(jīng)出來了,管理者可以簡單的設(shè)置每個地區(qū)的運費是多少,在用戶下單的時候按照地址計算運費就能得出對應(yīng)地址的運費啦。
進階版~
思考一下,商城里面包含多種多樣的商品,總不能一件衣服和一臺冰箱的運費是一樣的吧,那豈不是很虧。所以商城里面需要多個運費模版進行不同的價格計算,我創(chuàng)建了新的數(shù)據(jù)B表來存儲多個運費模版,包括模版名稱,添加時間,A表內(nèi)就可以增加B表內(nèi)對應(yīng)的模版ID,和城市ID和運費來計算不同運費模版下同一個城市的不同運費啦。
接下來,我考慮物流中會出現(xiàn)首件和續(xù)件的問題,那么我們地區(qū)運費就要增加續(xù)件的字段,來存儲續(xù)件的金額,比如我購買了2件商品,商品的首件是10元,續(xù)件是5元,那么這個訂單的運費就是首件加上續(xù)件的費用一共15元。
現(xiàn)在運費模版已經(jīng)成型了,每個商品都可以使用不同的運費模版來計算整體訂單的運費,購買多件商品,就可以按照不同用戶地址,不同的運費模版,不同的首件和續(xù)件的費用,來確定當前訂單的世紀運費了,接下來就是繼續(xù)細化運費模版的其他功能了。
終極版~
江浙滬包郵?這個問題又出現(xiàn)在了我的腦海中,那我怎么能在模版中設(shè)置包郵信息呢?思前想后,我發(fā)現(xiàn)一個最簡單的辦法,就是把對應(yīng)包郵的地址的首件和續(xù)件費用都寫成0,計算的時候就不會增加運費了。
不過,如果是滿多少錢進行包郵呢?如果說,我有一個上海地區(qū)的運費模版,我想用戶在購買超過100元的時候給他包郵怎么辦。我又開始了我的發(fā)呆時間。。。
想到了,我又給A表里增加了滿額包郵的字段,用來記錄此區(qū)域需要滿額的金額,計算的時候?qū)⑼粋€運費模版下的金額加起來,只要大于了這個金額,我就直接跳過此模版的計算。
訂單在購買多個商品,牽扯到多個運費模版的時候,可以在計算的時候按照運費模版進行數(shù)據(jù)的分類整理,計算出每個運費模版里面商品的件數(shù),總金額,然后每個運費模版單獨計算,先通過計算此運費模版是否滿足了包郵,如果滿足跳過后面的運費計算,如果沒有滿足包郵情況的時候,繼續(xù)進行件數(shù)的首件和續(xù)件的計算,將每次計算出來的運費相加,就得出了最后的訂單運費。
接下來,就是完善我們的運費模版了,模版名稱,模版是按照件數(shù)、重量還是體積進行運費的計算,包郵是否還要按照別的情況進行計算。
CRMEB運費模版的實現(xiàn)
CRMEB單商戶系統(tǒng)中的運費模版很強大了,不僅可以設(shè)置不同地區(qū)的運費,還可以判斷運費模版是按照件數(shù)、體積還是重量進行計算。可以設(shè)置單獨的包郵數(shù)據(jù)以及指定地區(qū)不送貨的邏輯。首件和續(xù)件的金額計算可以設(shè)定首件件數(shù)。包郵同時判斷了件數(shù)和金額。可以滿足大多數(shù)商城系統(tǒng)管理者的需求。
運費模版的添加
后臺添加運費模版的頁面,填寫運費模版的名稱,選擇該運費模版是按照那種計費方式進行計費(件數(shù),重量,體積),選擇對應(yīng)的城市數(shù)據(jù),添加運費和包郵信息等。

運費模版的計算邏輯
1.先獲取到用戶訂單的商品和地址信息,將所有的商品按照運費模版進行分組整理,得到每個運費模版的商品總數(shù),總價和此運費模版的運費金額,指定包郵信息等。$cartInfo變量里面存儲的就是該訂單下所有的商品信息,包括金額,件數(shù)或體積或重量,對應(yīng)的運費模版ID等信息。$addr里面包含用戶現(xiàn)在選擇的的地址信息,用于最后查詢包郵或者運費。
2.按照用戶當前選擇的地址,根據(jù)當前地址數(shù)據(jù)內(nèi)的city_id查詢當前地址是否在指定包郵的地區(qū)內(nèi),然后在判斷商品件數(shù)和金額是否大于設(shè)定的件數(shù)和金額,滿足條件在運費模版的數(shù)組中刪除此運費模版的數(shù)據(jù)。
3.經(jīng)過步驟2,$temp_num數(shù)組中,只會剩下需要計算運費的數(shù)據(jù),系統(tǒng)接下來會在先計算出首件運費最大值,設(shè)置初始運費為0開始計算訂單所需運費。
4.循環(huán)計算運費,將首件最大的運費模版設(shè)置為首件計算,剩余的模版都按照續(xù)件進行金額的計算,如果有多個首件金額等于最大值,會將多個運費模版當作首件進行計算,最后取得運費最大值返回。