vivo商城計(jì)價(jià)中心-從容應(yīng)對復(fù)雜場景價(jià)格計(jì)算_第1頁
vivo商城計(jì)價(jià)中心-從容應(yīng)對復(fù)雜場景價(jià)格計(jì)算_第2頁
vivo商城計(jì)價(jià)中心-從容應(yīng)對復(fù)雜場景價(jià)格計(jì)算_第3頁
vivo商城計(jì)價(jià)中心-從容應(yīng)對復(fù)雜場景價(jià)格計(jì)算_第4頁
vivo商城計(jì)價(jià)中心-從容應(yīng)對復(fù)雜場景價(jià)格計(jì)算_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、一、背景隨著 vivo 商城的架構(gòu)不斷升級,整個商城較為復(fù)雜多變的營銷玩法被拆分到獨(dú)立的促銷系統(tǒng)中。拆分后的促銷系統(tǒng)初期只負(fù)責(zé)了營銷活動玩法的維護(hù),促銷中最為重要的計(jì)價(jià)仍然遺留在商城主站中,且由于建設(shè)問題,商城核心交易鏈路中商詳頁、購物車、下單這三塊關(guān)于計(jì)價(jià)邏輯分獨(dú)立維護(hù)的,沒有統(tǒng)一,顯然隨著促銷優(yōu)惠的增加或者玩法的變動,商城側(cè)重復(fù)發(fā)量會顯著加。促銷系統(tǒng)的獨(dú)立,計(jì)價(jià)相關(guān)能力從邊界上也應(yīng)由促銷系統(tǒng),因此促銷側(cè)需要從頭始設(shè)計(jì)促銷計(jì)價(jià)相關(guān)能力。二、原有計(jì)價(jià)2.1 計(jì)價(jià)場景商城原有涉及到計(jì)價(jià)的主要商詳頁、購物車、確認(rèn)下單、提交訂單這幾個場景。如果將每一個影響最終售價(jià)的優(yōu)惠叫計(jì)價(jià)因子的話,那前述幾種場景

2、下對于售價(jià)有影響的計(jì)價(jià)因子歸為三類:?優(yōu)惠活動(單品優(yōu)惠、訂單優(yōu)惠)?(、代金券)?虛擬抵扣(積分、換新鼓勵金)對于每種計(jì)價(jià)場景與計(jì)價(jià)因子有如下關(guān)系:2.2 原有計(jì)價(jià)模型對于具體執(zhí)行的計(jì)價(jià)中各計(jì)價(jià)因子間有一定的先后優(yōu)先級關(guān)系的,綜合如下圖所示,也在一定程度說明了原有計(jì)價(jià)模型:三、促銷計(jì)價(jià)模型3.1 分層模型促銷系統(tǒng)從零搭建基礎(chǔ)計(jì)價(jià)能力,對于系統(tǒng)的穩(wěn)定性及擴(kuò)展性必須有一定的保障,而這也就對于促銷系統(tǒng)的計(jì)價(jià)模型提出了一定的要求,通用的基礎(chǔ)計(jì)價(jià)模型能有過一定的實(shí)踐經(jīng)歷驗(yàn)證過的,因此們采用了傳統(tǒng)電商久經(jīng)考驗(yàn)的計(jì)價(jià)模型:分層計(jì)價(jià)。所謂的分層計(jì)價(jià)即傳統(tǒng)電商中優(yōu)惠涉及的三個層面:商品級、店鋪級、級,正常情況

3、下不同級別的優(yōu)惠默認(rèn)可以疊加的,同一級別的優(yōu)惠默認(rèn)情況下互斥的。這里需要說明的,每一層級的優(yōu)惠計(jì)算的時(shí)候,對于有些優(yōu)惠的門檻條件否滿足需要依賴原價(jià), 默認(rèn)情況下依賴于上一個層級的優(yōu)惠計(jì)算后的價(jià)格,即商品級優(yōu)惠計(jì)算依賴商品原價(jià),店鋪級優(yōu)惠依賴于商品級優(yōu)惠計(jì)算后的價(jià)格,級優(yōu)惠依賴于店鋪級優(yōu)惠計(jì)算后的價(jià)格。疊加規(guī)則特別說明:正常優(yōu)惠疊加指兩個優(yōu)惠可以同時(shí)享受,對于不同層級的優(yōu)惠默認(rèn)就疊加的,對于同一層級的優(yōu)惠默認(rèn)不疊加的,比如正常情況下,下的各種類型券只能用一張的。但某些場景下,上會指定同一層級的優(yōu)惠可以疊加使用的,同時(shí)指定疊加使用的場景下還會分為普通疊加和并行疊加,舉個例子:訂單優(yōu)惠和這兩個類型的

4、疊加就屬于普通疊加(門檻否滿足的判斷取決于訂單優(yōu)惠后的價(jià)格),和代金券的疊加屬于并行疊加(和代金券的門檻否滿足的判斷都取決于這兩者的前序優(yōu)惠后的價(jià)格)。對于同一層級的優(yōu)惠按不同維度分為:必選/ 勾選、可疊加 (并行疊加 / 普通疊加 )/不可疊加 。3.2 新的計(jì)價(jià)模型3.3 核心計(jì)價(jià)流程3.3.1 主流程通過前述計(jì)價(jià)模型可以得知,在計(jì)算優(yōu)惠價(jià)時(shí)的先后順序:商品級(calcitem) 、店鋪級(calcshop)、級(calcgroup),另外根據(jù)一些特殊場景,增加了可能的中斷邏輯(calcinterrupt) ,因此可得到下圖所示的最粗粒度的計(jì)價(jià)流程; 那這三個級別的計(jì)算優(yōu)惠價(jià)內(nèi)部又如何實(shí)現(xiàn)

5、的呢?經(jīng)過抽象,這三個級別的計(jì)算可以變成一個通用的計(jì)算優(yōu)惠邏輯,僅有優(yōu)惠級別的區(qū)分。3.3.2 通用流程經(jīng)過抽象發(fā)現(xiàn)三個級別的優(yōu)惠計(jì)算的通用邏輯:?獲取當(dāng)前層級的優(yōu)惠查詢器(get current level promotiongetter )?過濾優(yōu)惠查詢器( filter promotiongetter )?查詢優(yōu)惠( get promotion )?過濾優(yōu)惠( filter promotion )?通過計(jì)價(jià)引擎計(jì)算優(yōu)惠( calc engine)?過濾計(jì)價(jià)結(jié)果( filter calcresult)因此們得出如下的通用的計(jì)價(jià)流程:通用計(jì)價(jià)流程中的又有幾個相對靈活的與相關(guān)過濾邏輯,從后面的

6、細(xì)節(jié)流程中可以了解更多的實(shí)現(xiàn)。3.3.3 細(xì)節(jié)流程之所以在通用計(jì)價(jià)流程中會有幾個過濾節(jié),因?yàn)樵谏蠒幸恍┨厥獾倪^濾邏輯,比如商詳頁所以需要抽象出一個通用的可擴(kuò)展的過濾機(jī)制來實(shí)現(xiàn)需求,因此會按照不同維度去定制一些鏈?zhǔn)竭^濾器,執(zhí)行流程如下圖所示:當(dāng)然圖中所示的不同維度額過濾器只目前中的一部分,比如還有按照終端、付款、外部方等等,這些在具體實(shí)現(xiàn)的時(shí)候可以非常靈活的支持。那上述過濾器如何制定?以及與如何關(guān)聯(lián)的?上圖中列出部分定制過濾序器,自定義過濾器后會自動注冊到統(tǒng)一的優(yōu)惠過濾器工廠中,在前述的計(jì)價(jià)流程中,需要用到相關(guān)過濾器時(shí),只需帶上相關(guān)上下文參數(shù)可以自動從過濾器工廠中獲取匹配的過濾器。3.3.4

7、完整全流程把前面這一系列流程中進(jìn)行一個組合拼裝,就可以得到計(jì)價(jià)的完整全流程圖,如下:從這個完整流程圖中,可以看到一個通用穩(wěn)定的核心計(jì)價(jià)流程以及一個支持多變的定制過濾器,既保證了核心的穩(wěn)定,又保留靈活的擴(kuò)展。四、系統(tǒng)核心設(shè)計(jì)在通用的計(jì)價(jià)執(zhí)行流程中一個節(jié)calc engine,也就計(jì)價(jià)引擎,這整個計(jì)價(jià)邏輯中最核心底層的能力,由它來判定每個優(yōu)惠否能被用戶享有。4.1 統(tǒng)一優(yōu)惠模型由于計(jì)價(jià)中心在建設(shè)的時(shí)候,已經(jīng)存在了促銷系統(tǒng)中的各個優(yōu)惠活動、獨(dú)立的及代金券、遺留在商城主站的未遷移的優(yōu)惠,因此想用兼容這么多的優(yōu)惠類型,必然需要建立一個統(tǒng)一的優(yōu)惠模型,而在建設(shè)過程中需將現(xiàn)有的優(yōu)惠模型進(jìn)行適配轉(zhuǎn)換至統(tǒng)一模型

8、。統(tǒng)一優(yōu)惠模型中的一些關(guān)鍵信息有:優(yōu)惠標(biāo)識、優(yōu)惠類型、優(yōu)惠模板id、始結(jié)束時(shí)間、優(yōu)惠參數(shù)及一些擴(kuò)展參數(shù)等。4.2 優(yōu)惠模板1)在進(jìn)行促銷計(jì)價(jià)時(shí),每個具體的優(yōu)惠都會對應(yīng)一個的優(yōu)惠模板,每個優(yōu)惠模板本質(zhì)上一個 json字符串,只這些json字符串由遵循了一定特殊邏輯規(guī)則的元信息數(shù)據(jù)轉(zhuǎn)化而成,而這些元信息在被計(jì)價(jià)引擎解釋執(zhí)行時(shí),都返回布爾類型標(biāo)識否通過。2)基本的元信息數(shù)據(jù)有這幾種:*andmeta( 與)*對應(yīng)邏輯關(guān)系中的 “ 與” 關(guān)系,表示該類型的元信息所包含的子元信息解釋執(zhí)行都返回真才為真;*ormeta( 或)*對應(yīng)邏輯關(guān)系中的 “ 或“ 關(guān)系,表示該類型的元信息所包含的子元信息任一解釋執(zhí)

9、行返回真就為真;*notmeta( 非)* 對應(yīng)邏輯關(guān)系中的 “ 非” 關(guān)系,表示該類型中元信息所包含的子元信息解釋為假當(dāng)前元信息為真;*conditionalmeta( 條件) *如果條件參數(shù)不存在或者從上下文獲取參數(shù)指定的布爾值不為 true,則當(dāng)前元信息返回真,否則根據(jù)元信息中包含的子元信息解釋執(zhí)行的結(jié)果作為當(dāng)前元信息執(zhí)行結(jié)果;*complexmeta( 組合元信息) * 該元信息作為所有模板的通用載體,該元信息中包含兩個重要信息 conditon 、action ,兩者的關(guān)系只有 condition 條件都滿足后后,才會去執(zhí)行后續(xù)的action ,而 condition 和 actio

10、n 都可能為前述中的各種元信息的復(fù)雜組合。3)模板元信息關(guān)系:4)優(yōu)惠模板示例: type: complex, condition: type: and, metas: type: conditional, metas: type: condition, metacode: terminalcheckcondition , param: needterminalcheck , type: condition, metacode: amountovercondition , action: type: and, metas: type: action, metacode: cutpriceact

11、ion , type: action, metacode: freezecouponaction 4.3 計(jì)價(jià)引擎計(jì)價(jià)引擎本質(zhì)上就對應(yīng)優(yōu)惠模板的解釋執(zhí)行,并配合相關(guān)上下文,進(jìn)行優(yōu)惠計(jì)算,關(guān)鍵代碼如下:private boolean executemeta(meta meta, enginecontext context) if (meta instanceof andmeta) return executeandmeta(andmeta)meta, context); else if (meta instanceof ormeta) return executeormeta(ormeta) m

12、eta, context); else if (meta instanceof notmeta) return executenotmeta(notmeta)meta, context); else if (meta instanceof complexmeta) return executecomplexmeta(complexmeta)meta, context); else if (meta instanceof conditionalmeta) return executeconditionalmeta(conditionalmeta)meta, context); else retu

13、rn executeimeta(meta, context); .private boolean executecomplexmeta(complexmeta plexmeta, enginecontext context) meta condition = plexmeta.getcondition(); meta action = plexmeta.getaction(); return executemeta(condition, context) & executemeta(action, context);private boolean executeconditionalm

14、eta(conditionalmeta conditionalmeta, enginecontext context) promotioncontext promotioncontext = context.getpromotioncontext(); if (promotioncontext = null | promotioncontext.getparameters() = null) return true; string conditionparam = conditionalmeta.getparameter(); string sneedprocess = promotionco

15、ntext.getparameters().get(conditionparam); if (sneedprocess = null) return true; boolean needprocess = boolean.parseboolean(sneedprocess); if (needprocess) return executemeta(conditionalmeta.getmetas().get(0), context); else return true; private boolean executeimeta(meta meta, enginecontext context) imeta imeta = metafactory.get(meta.getmetadef().getmetacode(); if (imeta = null) throw new calcexception(meta not fo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論