自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

可裝配的優(yōu)惠券系統(tǒng)設(shè)計(jì)與實(shí)踐

開發(fā) 前端
通過(guò)不斷的開發(fā)積累組件化控件,使得運(yùn)營(yíng)可以更靈活的設(shè)計(jì)營(yíng)銷方案,極大的提高了代碼復(fù)用和系統(tǒng)靈活性和效率,優(yōu)惠券模板只需拖拽即可完成人機(jī)交互功能。

1. 背景簡(jiǎn)介

優(yōu)惠券系統(tǒng)是互聯(lián)網(wǎng)電商時(shí)代最為常用運(yùn)營(yíng)手段,拉新,促活,留存,在運(yùn)營(yíng)的過(guò)程中,能快速的、靈活的支持運(yùn)營(yíng)頻繁多變的營(yíng)銷需求。傳統(tǒng)的實(shí)現(xiàn)方案,不僅開發(fā)周期長(zhǎng)、成本大,并且不能及時(shí)影響運(yùn)營(yíng)多變的需求,運(yùn)營(yíng)活動(dòng)復(fù)用的效率較低。

車服務(wù)優(yōu)惠券系統(tǒng)提供了一種可裝配且通用優(yōu)惠券核心框架的實(shí)現(xiàn),快速搭建滿足業(yè)務(wù)需要的優(yōu)惠券模板功能。僅需開發(fā)一次自定義業(yè)務(wù)組件,可靈活裝配多優(yōu)惠券模板,發(fā)券用券驗(yàn)券接口無(wú)需二次開發(fā),平行無(wú)縫對(duì)接第三方商家券,節(jié)省開發(fā)資源,減少開發(fā)成本,提高了運(yùn)營(yíng)效率。

圖片

2. 系統(tǒng)設(shè)計(jì)

2.1優(yōu)惠券的生命周期

組件創(chuàng)建:定義表單元素,生成自定義組件,存入組件庫(kù)中。

裝配模板:運(yùn)營(yíng)按業(yè)務(wù)需求,選擇組件,組合裝配在一起,生成優(yōu)惠券模板。

生成批次:選擇模板,關(guān)聯(lián)配置業(yè)務(wù)券,比如:加油券,充電券,洗車券,代步券等。模板組合裝配在一起,生成優(yōu)惠券批次。

投放活動(dòng):配置運(yùn)營(yíng)活動(dòng),關(guān)聯(lián)批次券信息??山M合裝配成券包,或單張券,投放客戶端或H5頁(yè)面。

兌換領(lǐng)?。喊l(fā)放形式,可分為3種,兌換碼兌換,運(yùn)營(yíng)活動(dòng)用戶登錄領(lǐng)券,運(yùn)營(yíng)后臺(tái)定向發(fā)券,滿足業(yè)務(wù)規(guī)則,比如新注冊(cè)用戶,業(yè)務(wù)新老用戶,首單用戶發(fā)券進(jìn)行間接發(fā)券。

核銷使用:用戶購(gòu)買商品下單,拉取可用券,下單鎖定券,支付核銷券。

取消訂單還券:訂單取消,返還用戶券,券可再次使用。

券快過(guò)期提醒:推送提醒用戶使用。

結(jié)算:生成優(yōu)惠券,平臺(tái)與商家承擔(dān)比例,執(zhí)行結(jié)算補(bǔ)貼。

2.2優(yōu)惠券系統(tǒng)設(shè)計(jì)思維導(dǎo)圖

圖片

圖 2-3

2.3優(yōu)惠券系統(tǒng)基本流程圖示

 組件創(chuàng)建 >> 裝配模板 >> 裝配批次 >> 裝配活動(dòng) >> 發(fā)券 >> 核銷券 >> 結(jié)算

圖片

圖 2-4

2.4優(yōu)惠券系統(tǒng)架構(gòu)圖示

圖片

圖 2-5

3. 核心功能

3.1創(chuàng)建自定義組件

 自定義組件:創(chuàng)建優(yōu)惠券組件,生成優(yōu)惠券模板必要條件,因?yàn)槟0迳蓵r(shí),需要加載裝配相關(guān)的表單組件。 

創(chuàng)建組件所需元素信息為:組件表單名稱,Placeholder文本信息,JS驗(yàn)證功能,數(shù)據(jù)源,組件類型(包含文本框,數(shù)值框,下拉列表框,多選列表框控件,聯(lián)選日期控件,滿減金額控件,數(shù)據(jù)列表模態(tài)選擇框等常用組件),表達(dá)式關(guān)鍵詞等。其中配置Js驗(yàn)證功能,需要預(yù)先開發(fā)JS驗(yàn)證插件,集成常用的驗(yàn)證插件庫(kù)中,用于模板生成時(shí)自動(dòng)檢查表單中元素。其中配置表達(dá)式關(guān)鍵詞,用于生成規(guī)則條件表達(dá)式。其中設(shè)置數(shù)據(jù)源,用于初始化組件下拉列表,數(shù)據(jù)可選模態(tài)框等。組件生成后,保存到組件庫(kù)表中,提供給模板創(chuàng)建使用。

解決的問(wèn)題:

自定義組件的實(shí)現(xiàn),存入組件庫(kù)中,提高了代碼復(fù)用性,常用的組件,任何業(yè)務(wù)券都可以復(fù)用,避免多次開發(fā),增加了業(yè)務(wù)的靈活性,對(duì)系統(tǒng)進(jìn)行解耦,也可以分組開發(fā),部署。后臺(tái)優(yōu)惠券模板可以自由組合,根據(jù)運(yùn)營(yíng)需求,快速自行裝配。提高運(yùn)營(yíng)工作效率,支持多業(yè)務(wù)券場(chǎng)景配置。

優(yōu)惠券自定義組件生成,方便快速構(gòu)建業(yè)務(wù)優(yōu)惠券模板,需求靈活實(shí)現(xiàn)。不管是優(yōu)惠類型,還是業(yè)務(wù)需求方可變的條件,我們都能從設(shè)計(jì)層面去實(shí)現(xiàn)它。來(lái)節(jié)約開發(fā)運(yùn)營(yíng)成本。并且生成可配置的多規(guī)則條件表達(dá)式。下單使用時(shí),一次驗(yàn)證,所有的條件是否可達(dá),滿足優(yōu)惠券下單使用。使優(yōu)惠券系統(tǒng)結(jié)構(gòu)簡(jiǎn)潔清晰,同時(shí)將可變的部分,完全開放給使用者,提供了非常大的靈活性。

創(chuàng)建組件頁(yè)面圖示如下:

圖片

圖:3-1-1

組件創(chuàng)建流程圖示如下:

圖片

圖 3-1-2

3.2創(chuàng)建自定義模板

自定義模板創(chuàng)建:由3.1中創(chuàng)建的組件,按業(yè)務(wù)需求,進(jìn)行動(dòng)態(tài)裝配。優(yōu)惠券模板可設(shè)置3種類型,分別為商家券模板,平臺(tái)券模板,公共模板。用于批次生成時(shí),對(duì)運(yùn)營(yíng)進(jìn)行不同角色權(quán)限隔離使用。其中配置業(yè)務(wù)類型,用于客戶端拉券時(shí)按業(yè)務(wù)隔離展示使用。配置滿減券,立減券,折扣券,用于區(qū)分券的使用條件。模板可選組件分為兩部分,固定區(qū)域,可變區(qū)域。固定區(qū)域?yàn)閮?yōu)惠券中的常用組件區(qū)域,系統(tǒng)自動(dòng)加載固定類型組件信息,見圖3-2-1所示,固定類型組件是每張優(yōu)惠券共有的屬性。比如:優(yōu)惠券標(biāo)題,面額,庫(kù)存數(shù)量,使用時(shí)間,平臺(tái)與商家承擔(dān)比例,折扣,最高金額,使用跳轉(zhuǎn)Url等??勺儏^(qū)域?yàn)檫\(yùn)營(yíng)活動(dòng)用券時(shí)需要驗(yàn)證的組件區(qū)域,比如限制的商家,門店,滿減條件等組件。若組件庫(kù)中組件元素為非固定類型,系統(tǒng)會(huì)區(qū)分當(dāng)前組件為可變組件,展示在選擇組件區(qū)域,提供運(yùn)營(yíng)人員按業(yè)務(wù)券的需求,可從組件庫(kù)中進(jìn)行拖拉組件到指定可變區(qū)域中。最后模板生成,系統(tǒng)會(huì)保存模板庫(kù)中,以供批次創(chuàng)建生成使用。至此,模板再次加載或編輯時(shí),其中的業(yè)務(wù)部分,基礎(chǔ)屬性部分,可變部分,系統(tǒng)會(huì)根據(jù)所存的模板信息,關(guān)聯(lián)到批次中,同時(shí)相應(yīng)的加載出元素組件。

解決的問(wèn)題:

運(yùn)營(yíng)人員可根據(jù)業(yè)務(wù)券需求,自定義裝配優(yōu)惠券模板。通過(guò)界面,進(jìn)行拖拉組件,支持組件元素拖拉排序,快速生成優(yōu)惠券模板,簡(jiǎn)潔快捷,動(dòng)態(tài)裝配。存入模板庫(kù)中。提供運(yùn)營(yíng)創(chuàng)建批次時(shí),多次復(fù)用,減少開發(fā)成本,提高工作效率。

創(chuàng)建模板頁(yè)面圖示如下:

圖片

 圖 3-2-1

模板流程圖示:

圖片

圖 3-2-2 

3.3創(chuàng)建自定義批次券包

  •  自定義批次:設(shè)定批次的通用屬性,動(dòng)態(tài)加載優(yōu)惠券模板,自動(dòng)校驗(yàn)表單控件三部分組成。
  • 通用屬性配置:發(fā)券的形式,包含直接領(lǐng)取券與兌換券碼形式。限制領(lǐng)取次數(shù),可限當(dāng)天每人領(lǐng)取次數(shù),或者批次總領(lǐng)取次數(shù)。領(lǐng)取人群的配置限制,包含業(yè)務(wù)新老用戶限制,注冊(cè)新老用戶的限制。短信釘釘提醒功能配置,過(guò)期券預(yù)提配置,運(yùn)營(yíng)庫(kù)存提醒配置。商家單位配置,財(cái)務(wù)PR單號(hào)配置等。預(yù)提醒功能技術(shù)實(shí)現(xiàn),通過(guò)延遲隊(duì)列,定時(shí)任務(wù)執(zhí)行實(shí)現(xiàn)。
  • 動(dòng)態(tài)優(yōu)惠券模板:
  • 優(yōu)惠券批次創(chuàng)建,加載可用的優(yōu)惠券模板。運(yùn)營(yíng)可根據(jù)需求,在下拉列表中選擇優(yōu)惠券模板。此處優(yōu)惠券模板,是根據(jù)可視化組件,分布式控件動(dòng)態(tài)加載渲染呈現(xiàn),去除了冗余的模板組件??梢詿o(wú)限制的加載需要配置的優(yōu)惠券。比如:加油,充電,洗車。
  • 自動(dòng)校驗(yàn)證表單:
  • 由于模板是動(dòng)態(tài)加載的組件,多個(gè)優(yōu)惠券模板,會(huì)有很多組件,組件類型不同,一個(gè)個(gè)寫表單校驗(yàn),會(huì)顯得很繁瑣,代碼臃腫,維護(hù)復(fù)雜 ?,F(xiàn)對(duì)所有的元素組件,進(jìn)行動(dòng)態(tài)提取組件配置的JS,然后根據(jù)JS校驗(yàn)類庫(kù),自動(dòng)加載表單驗(yàn)證,維護(hù)簡(jiǎn)單,代碼簡(jiǎn)潔。

解決問(wèn)題:

批次可以多張券模板組合,最終生成一個(gè)券包。支持不同業(yè)務(wù)券組合,相同業(yè)務(wù)券組合。支持批次復(fù)制,模板復(fù)用。發(fā)券可以按券包形式發(fā),也可以按單張券針對(duì)性發(fā)放。批次創(chuàng)建,是由模板動(dòng)態(tài)加載自定義組件完成。多個(gè)券模板,如果按傳統(tǒng)模式開發(fā),會(huì)很多組件元素要書寫,js功能也要逐個(gè)書寫,每當(dāng)有新券需求,或者券限制條件升級(jí)變動(dòng),都會(huì)需要大量的控件開發(fā),費(fèi)時(shí)費(fèi)力。本批次的設(shè)置,代碼簡(jiǎn)潔,界面明了,所見即所得,無(wú)須過(guò)度開發(fā),一勞永逸。

批次創(chuàng)建圖示如下:

圖片

圖 3-3-1

模板加載圖示如下:

圖片

圖 3-3-2

批次創(chuàng)建流程圖:

圖片

圖 3-3-3

3.4創(chuàng)建自定義活動(dòng)

創(chuàng)建活動(dòng),可以配置整個(gè)業(yè)務(wù)的領(lǐng)券中心。聚合所有待領(lǐng)取的券,券包展示,同時(shí)提供對(duì)外輸出領(lǐng)券接口關(guān)鍵配置,需要設(shè)置活動(dòng)名稱,活動(dòng)的起始時(shí)間,活動(dòng)KEY,互斥KEY,活動(dòng)限制數(shù)量,活動(dòng)的跳轉(zhuǎn)鏈接,活動(dòng)所投放平臺(tái)渠道??蛇x擇關(guān)聯(lián)不同的券批次模板,通過(guò)活動(dòng)KEY的領(lǐng)取維度,鎖定不同的批次券包,鎖定整個(gè)活動(dòng)領(lǐng)取量,進(jìn)行發(fā)券。通過(guò)互斥KEY的維度,鎖定不同的活動(dòng),用戶在活動(dòng)A中可以領(lǐng)取哪些券,在活動(dòng)B可以領(lǐng)取哪些券。通過(guò)活動(dòng)中啟動(dòng),停止進(jìn)行領(lǐng)取功能的控制,將活動(dòng)中配置信息進(jìn)行保存,存入活動(dòng)領(lǐng)取中心庫(kù)中。

解決的問(wèn)題:

適應(yīng)于一個(gè)或多個(gè)活動(dòng)場(chǎng)景,比如領(lǐng)券中心,領(lǐng)單張券,券包,一鍵批量領(lǐng)券,新老用戶領(lǐng)券。通過(guò)活動(dòng)Key,關(guān)聯(lián)出整個(gè)活動(dòng)配置的券包。通過(guò)活動(dòng)控制券上線下線功能。對(duì)外輸出領(lǐng)券接口,提供領(lǐng)券的活動(dòng)標(biāo)識(shí)隨機(jī)碼Key,保證業(yè)務(wù)的保密性、可控性、復(fù)用性。

活動(dòng)創(chuàng)建圖示3-4如下:

圖片

圖 3-4-1

      活動(dòng)配置流程圖示:

圖片

圖 3-4-2

4. 技術(shù)難點(diǎn)

4.1技術(shù)如何實(shí)現(xiàn)自定義組件

圖片

圖 4-1-1

創(chuàng)建模板時(shí),是由多個(gè)組件裝配完成。新創(chuàng)建模板時(shí),如何動(dòng)態(tài)渲染加載多個(gè)組件?編輯模板如何對(duì)組件進(jìn)行賦值?模板組件從技術(shù)層面是由多個(gè)Freemark模板視圖文件組合而成,比如圖 4-1-1 中propType_text.ftl 文件,propType_List.ftl文件,propType_Select.ftl文件等,在創(chuàng)建模板中頁(yè)面中,會(huì)根據(jù)組件池中,根據(jù)組件類型,通過(guò)<#include>進(jìn)行文件加載傳遞數(shù)據(jù)完成。如下圖 4-1-2所示。 

圖片

圖 4-1-2

模板視圖文件需要Html+Freemark+Jquery 預(yù)先開發(fā)創(chuàng)建好。其中表單控件中name為組件生成時(shí)配置的name屬性,文件中所有的${}語(yǔ)法屬性,均對(duì)應(yīng)組件生成時(shí)配置屬性。比如4-1-3中:${prop.placeholder} 文本框描述提示信息,${prop.flagword} 是使用條件占位符,${prop.jsfunction} js自定義驗(yàn)證功能方法名,${prop.id} 組件Id,${prop.type} 組件類型,${prop.formnameExt} 模板Id+組件名稱,${prop.datasource}等不再一一列舉。

動(dòng)態(tài)組件插件示例:舉個(gè)文本框組件propType_Text.ftl 示例:后端讀取模板中文本框?qū)傩灾祩鬟f賦值。

圖片

圖4-1-3

模板視圖文件中 ${prop}是整個(gè)頁(yè)面渲染控件主要引擎對(duì)象。又是后端模板通用對(duì)象模型,對(duì)應(yīng)的后端開發(fā)類名為:CouponTempPropView ,如下面代碼所示。后端接口通過(guò)模板Id,關(guān)聯(lián)所有模板中的組件屬性信息。然后封裝成CouponTempPropView數(shù)據(jù)對(duì)象,進(jìn)行初始化值賦值。若模板頁(yè)面首次新頁(yè)面加載,后端接口HandlAdapter處理適配器響應(yīng)CouponTempPropView對(duì)象數(shù)據(jù),通過(guò)ViewResolver視圖解析器初始化組件頁(yè)面表單,進(jìn)行渲染呈現(xiàn)。若模板頁(yè)面編輯時(shí),需要對(duì)組件表單input元素進(jìn)行賦值。由${prop}對(duì)象取CouponTempPropView對(duì)象數(shù)據(jù)中的${prop.formvalue},然后jquery查找當(dāng)前prop.formvalue的input隱藏域控件的value值,該value是由多個(gè)屬性值組合而成,根據(jù)當(dāng)前組件,需要進(jìn)行拆解,然后將值傳遞給name=${prop.formnameExt}的input控件,進(jìn)行傳遞賦值。到此組件技術(shù)裝配屬性完成。創(chuàng)建批次時(shí),選擇優(yōu)惠券模板,動(dòng)態(tài)加載標(biāo)簽自定義組件呈現(xiàn)后臺(tái)UI,如何加載模板的相關(guān)的組件信息呢,同樣是引用模板視圖文件完成的。技術(shù)運(yùn)用了動(dòng)靜分離技術(shù)手段及組件化模板插件響應(yīng),運(yùn)營(yíng)人員選擇優(yōu)惠券業(yè)務(wù)模板,后端數(shù)據(jù)根據(jù)運(yùn)營(yíng)的選擇模板,程序進(jìn)行準(zhǔn)備模板及控件所需數(shù)據(jù)。通過(guò)模板數(shù)據(jù)裝載,初始化需要加載的模板中關(guān)聯(lián)組件,前端頁(yè)面不需要堆積實(shí)現(xiàn)未知的組件,僅根據(jù)后端數(shù)據(jù),注入到模板關(guān)聯(lián)組件的插件中,傳遞數(shù)據(jù),需要呈現(xiàn)哪一塊插件,就會(huì)渲染所關(guān)聯(lián)的組件,完全數(shù)據(jù)來(lái)驅(qū)動(dòng)實(shí)現(xiàn)組件的呈現(xiàn),實(shí)現(xiàn)方式和現(xiàn)在的Vue想法一致。完全數(shù)據(jù)初始化控件,數(shù)據(jù)傳遞控件的實(shí)現(xiàn)。

編輯批次時(shí),關(guān)聯(lián)多個(gè)模板信息,后端如何進(jìn)行動(dòng)態(tài)傳值:由批次信息,找到批次所關(guān)聯(lián)的一個(gè)或多個(gè)模板信息,再由模板查找,加載出模板對(duì)應(yīng)的組件信息,組件信息包含表單元素,通過(guò)批次信息表中的存儲(chǔ)的字段值,轉(zhuǎn)化成Key-value,key為表單元素,value為對(duì)應(yīng)值。對(duì)模板組件屬性結(jié)構(gòu)類型進(jìn)行一一映射,通過(guò)Action傳遞前端頁(yè)面進(jìn)行渲染優(yōu)惠券模板組件視圖。最終實(shí)現(xiàn)和創(chuàng)建模板時(shí)的加載視圖文件一致,不再詳細(xì)贅述。

4.2技術(shù)如何動(dòng)態(tài)生成條件表達(dá)式

由于優(yōu)惠券批次包含多個(gè)優(yōu)惠券模板,每個(gè)優(yōu)惠券模板的使用條件是隨業(yè)務(wù)需求變化,所以我們?nèi)绻鎯?chǔ)這樣動(dòng)態(tài)可變的值,數(shù)據(jù)表中每次需升級(jí)擴(kuò)展字段,同時(shí)又要升級(jí)系統(tǒng)的數(shù)據(jù)讀取Mybatis文件,以及優(yōu)惠券模板文件中限制條件規(guī)則等。顯然這種方式比較笨拙,粗曠,又不利于優(yōu)惠券系統(tǒng)的維護(hù)。我們自定義的規(guī)則條件表達(dá)式,應(yīng)運(yùn)而生。

? 什么是規(guī)則條件表達(dá)式:

它是多個(gè)模板組件使用限制內(nèi)容組合一起,生成一種可變的自定義表達(dá)式。參考借鑒逆波蘭表達(dá)式生成規(guī)則而設(shè)置。

? 如何生成:

創(chuàng)建優(yōu)惠券批次時(shí),通過(guò)模板Id關(guān)聯(lián)出多個(gè)組件信息,封裝到數(shù)據(jù)模型中ListpropDtoList,然后根據(jù)條件表達(dá)式方法,篩選出組件prop.getType()類型,比如數(shù)值類型,獲取prop.getFlagword條件表達(dá)式關(guān)鍵字為coupon_cityid,prop.getFlagdesc=10010。拼裝生成條件表達(dá)式為:(coupon_cityid=10010)。生成使用描述為:限城市為北京使用。其他類型視條件生成表達(dá)式。示例如下:

 ? 舉車品券生成示例:

在創(chuàng)建優(yōu)惠券時(shí),業(yè)務(wù)限定多條件表達(dá)式隨批次動(dòng)態(tài)生成,舉例:車品券表達(dá)式:[coupon_city]_in(111010,120000)&&(coupon_[order]>10&&coupon_[order]<100)&&[coupon_tag]in(123),表達(dá)式條件翻譯為:優(yōu)惠券滿足城市北京或天津,訂單金額滿10元小于1000元,且優(yōu)惠券品類標(biāo)簽為123的商品使用,提交保存,生成優(yōu)惠券批次相關(guān)信息,生成驗(yàn)證優(yōu)惠券表達(dá)式,存儲(chǔ)數(shù)據(jù)表中,及緩存中。

驗(yàn)證券表達(dá)式條件,解析表達(dá)式代碼如下:

用戶下單使用券,系統(tǒng)校驗(yàn)券的使用條件,由條件表達(dá)式多條件驗(yàn)證,從用券接口取出訂單號(hào),訂單金額,訂單商品,商家信息,運(yùn)費(fèi)服務(wù)費(fèi)等作為檢驗(yàn)條件,將請(qǐng)求參數(shù)存入Map字典中,驗(yàn)證用戶優(yōu)惠券時(shí),通過(guò)Map中對(duì)應(yīng)名稱,正則匹配組件中標(biāo)簽名、標(biāo)簽參數(shù)、操作符、操作數(shù)值進(jìn)行標(biāo)簽名的替換,執(zhí)行commonBLL.EvalExpr表達(dá)條件運(yùn)算,結(jié)果滿足條件,當(dāng)前券可進(jìn)行下單結(jié)算使用。否則,將不能使用。

舉例,車品券表達(dá)式:

([coupon_city]in(10110)&&(coupon_[order]>10&&coupon_[order]<100)&&[coupon_tag]in(123)),[coupon_city]:10110, coupon_[order]:20 , [coupon_tag]:123,最終替換為(10110=10110)&& 20>10 && 20<100 && 123 =123)。

表達(dá)式執(zhí)行完成后,生成訂單,省去傳統(tǒng)多個(gè)字段,循環(huán)迭代的邏輯驗(yàn)證,有些字段關(guān)聯(lián)的屬性可能比較多,驗(yàn)證的時(shí)候加載的時(shí)間會(huì)加長(zhǎng)。有條件表達(dá)式,我們不用再做上面的多次驗(yàn)證。只需要根據(jù)訂單參數(shù),替換可變參數(shù),執(zhí)行表達(dá)式規(guī)則計(jì)算,完成所需要的條件驗(yàn)證。

4.3技術(shù)如何實(shí)現(xiàn)發(fā)券,限制超發(fā)并發(fā)

運(yùn)營(yíng)活動(dòng)配置券包,客戶端進(jìn)行活動(dòng)發(fā)券。用戶登錄領(lǐng)券,領(lǐng)券接口驗(yàn)證當(dāng)前請(qǐng)求參數(shù),首先請(qǐng)求攔截進(jìn)行簽名校驗(yàn),網(wǎng)關(guān)授權(quán)認(rèn)證,并發(fā)管控請(qǐng)求限流桶,分布式Redis鎖。然后進(jìn)行登錄用戶及風(fēng)控校驗(yàn),校驗(yàn)通過(guò),讀取活動(dòng)關(guān)聯(lián)的批次券包,讀取用戶領(lǐng)券信息存入Redis中HashTable,通過(guò)領(lǐng)券信息HashMap集合進(jìn)行批次限制校驗(yàn),包含新老用戶,批次是否停止使用,批次每天領(lǐng)取量,總的領(lǐng)取限制量,活動(dòng)是否停止校驗(yàn),校驗(yàn)通過(guò)后,組合領(lǐng)券基本信息,存入jetcache+redis 二級(jí)緩存中,然后異步發(fā)送MQ。MQ消費(fèi)者讀取信息入庫(kù),同時(shí)創(chuàng)建多線程進(jìn)行同步通知第三方券入庫(kù),領(lǐng)券完成。

解決的問(wèn)題:

領(lǐng)取接口整個(gè)流程,增加分布式Redis鎖+請(qǐng)求限流桶,比如秒殺券活動(dòng),短時(shí)間會(huì)增加百萬(wàn)+的流量,由于服務(wù)器數(shù)據(jù)承載響應(yīng)能力,帶寬流量有限,加入切面攔截請(qǐng)求,做容錯(cuò)處理,同時(shí)加入分布式Redis原子鎖,進(jìn)行并發(fā)控制,防止券因并發(fā)而超發(fā)的現(xiàn)象發(fā)生。同時(shí)驗(yàn)證領(lǐng)取限制條件,解決了并發(fā)領(lǐng)取,權(quán)限領(lǐng)取,異步領(lǐng)取,攔截了一些風(fēng)險(xiǎn)用戶,實(shí)時(shí)反饋給用戶領(lǐng)取結(jié)果信息。整個(gè)過(guò)程,從1級(jí),2級(jí)緩存中讀取更新數(shù)據(jù),根據(jù)后臺(tái)配置分層進(jìn)行校驗(yàn),極大提高了請(qǐng)求的響應(yīng)速度,代碼更加簡(jiǎn)潔,安全性、可擴(kuò)展性、可維護(hù)性增強(qiáng)。

領(lǐng)券流程圖示如下:

圖片

圖 4-3-1

? 如何互斥?

一般在秒殺商品,直降商品,下單用券時(shí),會(huì)進(jìn)行拉取可用券列表時(shí),對(duì)優(yōu)惠券列表先進(jìn)行按金額排序 ,輪循驗(yàn)證當(dāng)前券金額,與秒殺金額,直降金額進(jìn)行比較,取最優(yōu)惠的價(jià)格給用戶展示使用。節(jié)省運(yùn)營(yíng)投入成本。

有時(shí)平臺(tái)券與商家券,如果都是平臺(tái)采購(gòu)券的運(yùn)營(yíng)場(chǎng)景,也需要用互斥規(guī)則。分別拉取平臺(tái)券,與商家券可用券列表,再進(jìn)行取最大的券進(jìn)行比對(duì)。擇取優(yōu)惠力度最大券提供給用戶使用。

? 如何疊加?

平臺(tái)券與商家券,通常下單時(shí),可以共同疊加使用。下單時(shí),需要同時(shí)關(guān)聯(lián)兩張券的權(quán)益碼。兩張券同時(shí)變成核銷狀態(tài)。需要同時(shí)驗(yàn)證訂單的總金額是否滿足券使用條件,一般用在滿減或湊單時(shí)使用。

? 如何平臺(tái)券轉(zhuǎn)發(fā)多家商家券?

車服務(wù)加油業(yè)務(wù),油站屬于不同供應(yīng)商,運(yùn)營(yíng)采購(gòu)多家供應(yīng)商的券,由于采購(gòu)庫(kù)存有限。如何讓用戶在選擇油站用券時(shí),僅能給用戶發(fā)一張商家券使用,不浪費(fèi)采購(gòu)庫(kù)存,又能促進(jìn)業(yè)務(wù)拉新。我們?cè)谙到y(tǒng)引用了平臺(tái)券關(guān)聯(lián)多商家券的模式,最終落地使用商家券。

比如:加油優(yōu)惠券模板,新增供應(yīng)商選擇組件,在運(yùn)營(yíng)后臺(tái)創(chuàng)建加油券時(shí)候,選擇關(guān)聯(lián)三家供應(yīng)商。用戶通過(guò)領(lǐng)券活動(dòng)得到一張平臺(tái)券,這張平臺(tái)券使用條件限制了三家供應(yīng)商,用戶下單用這張券時(shí),根據(jù)油站所屬供應(yīng)商,平臺(tái)券校驗(yàn)當(dāng)前供應(yīng)商可用條件,校驗(yàn)通過(guò)調(diào)用商家發(fā)券接口發(fā)對(duì)應(yīng)供應(yīng)商商家券,商家券核銷完成后,更新當(dāng)前平臺(tái)券。到此完成平臺(tái)券轉(zhuǎn)發(fā)商家券的邏輯。配置如圖所示:

圖片

圖 4-3-2

4.4技術(shù)如何實(shí)現(xiàn)用券驗(yàn)券

 用戶請(qǐng)求下單,拉取用戶可用券,從緩存中取出用戶所有券,根據(jù)業(yè)務(wù)規(guī)則動(dòng)態(tài)加載請(qǐng)求參數(shù),比如加油券,驗(yàn)證訂單金額,油品類型,供應(yīng)商,油站等條件,利用鍵值對(duì)key-value的形式,存儲(chǔ)請(qǐng)求參數(shù),然后讀取每一張券的規(guī)則條件表達(dá)式。比如(coupon_seller in(12,23)) &&([order]>=50)&&(oil_product=3),通過(guò)正則表達(dá)式,取表達(dá)式中標(biāo)簽占位符,由鍵值對(duì)中獲取key值替換占位符,然后執(zhí)行表達(dá)式檢驗(yàn),完成驗(yàn)券拉券過(guò)程。

用戶選擇券,進(jìn)行創(chuàng)建訂單時(shí),再次請(qǐng)求驗(yàn)證當(dāng)前券,判斷表達(dá)式條件是否滿足,券是否過(guò)期,是否被停用,檢驗(yàn)領(lǐng)券賬戶,防止被篡改。然后訂單表中鎖定當(dāng)前券碼。

用戶支付時(shí),支付成功回調(diào),再次驗(yàn)證當(dāng)前券碼是否可用,核銷當(dāng)前券碼,券碼表中同時(shí)更新訂單號(hào),使用時(shí)間,用券金額,券變更為核銷狀態(tài)。當(dāng)支付失敗,視訂單未完成,訂單將定時(shí)自動(dòng)取消,券被歸還。

解決的問(wèn)題:

接口中根據(jù)業(yè)務(wù)不同,用券的場(chǎng)景不同,傳遞的參數(shù)通過(guò)鍵值對(duì)形式動(dòng)態(tài)傳遞。用于替代券條件表達(dá)式占位符,快速驗(yàn)券。不用關(guān)心哪個(gè)業(yè)務(wù),哪個(gè)條件進(jìn)行固定判斷。完全依賴Key-value中請(qǐng)求參數(shù),動(dòng)態(tài)驗(yàn)證,實(shí)現(xiàn)接口裝配。核銷的時(shí)候,訂單與券進(jìn)行雙向綁定,增加安全性,可靠性。

用券流程圖示如下:

圖片

圖 4-4-1

5. 總結(jié) 

本系統(tǒng)將優(yōu)惠券業(yè)務(wù)進(jìn)行了高度的提煉和抽象,將系統(tǒng)中的變與不變進(jìn)行了完全隔離。

通過(guò)不斷的開發(fā)積累組件化控件,使得運(yùn)營(yíng)可以更靈活的設(shè)計(jì)營(yíng)銷方案,極大的提高了代碼復(fù)用和系統(tǒng)靈活性和效率,優(yōu)惠券模板只需拖拽即可完成人機(jī)交互功能。

通過(guò)對(duì)優(yōu)惠券系統(tǒng)模板的高度提煉抽象,使其與業(yè)務(wù)系統(tǒng)完全解耦,從上面的介紹中我們可以看到,業(yè)務(wù)系統(tǒng)只有一個(gè)動(dòng)作,整理配置屬性參數(shù),獲取結(jié)果,除此之外,業(yè)務(wù)系統(tǒng)不需要知道優(yōu)惠券系統(tǒng)的任何其他細(xì)節(jié),這就保證了兩個(gè)系統(tǒng)完全分離,分開開發(fā)、獨(dú)立部署,互不影響,提高開發(fā)效率和系統(tǒng)穩(wěn)定性。

本系統(tǒng)具有明顯的降低開發(fā)成本、提高開發(fā)效率、提升系統(tǒng)穩(wěn)定性的優(yōu)點(diǎn)。更重要的是提供完全開放的優(yōu)惠券可定義的控件,自由可變優(yōu)惠券模板生成,即使后期業(yè)務(wù)需求變更,也不會(huì)重新回歸測(cè)試開發(fā)。只需要修改模板條件。即可0開發(fā)成本新增優(yōu)惠券玩法,極大的滿足了運(yùn)營(yíng)頻繁多變的優(yōu)惠券營(yíng)銷需求。

作者簡(jiǎn)介

圖片

吳彥斌

■ 曾任職于服務(wù)端研發(fā)部-服務(wù)端買用技術(shù)團(tuán)隊(duì)-用車組。

■  高級(jí)研發(fā)工程師,2015年加入公司,主要從事優(yōu)惠券系統(tǒng)的研發(fā),訂單系統(tǒng)的研發(fā),物流管理系統(tǒng)的研發(fā)。

圖片

張東生

■ 服務(wù)端研發(fā)部-服務(wù)端買用技術(shù)團(tuán)隊(duì)-用車組。

■ 服務(wù)端買用技術(shù)團(tuán)隊(duì)用車組組長(zhǎng),負(fù)責(zé)之家用戶用車場(chǎng)景的各用車服務(wù)權(quán)益產(chǎn)品及用車工具產(chǎn)品的研發(fā)和架構(gòu)工作。

責(zé)任編輯:武曉燕 來(lái)源: 之家技術(shù)
相關(guān)推薦

2017-12-15 17:37:23

sd

2012-07-16 09:48:49

手機(jī)優(yōu)惠券優(yōu)惠券

2023-06-07 08:25:41

2021-11-24 10:31:39

人工智能AI深度學(xué)習(xí)

2012-03-20 09:37:27

手機(jī)優(yōu)惠券NFC

2021-11-30 22:35:23

人工智能零售業(yè)自動(dòng)化

2022-04-18 10:54:49

券系統(tǒng)緩存 RedisMySQL

2012-04-25 17:11:52

優(yōu)惠券

2011-11-24 09:04:26

靈客風(fēng)優(yōu)惠券

2013-04-07 10:11:26

O2O優(yōu)惠券

2018-07-06 11:47:31

高德地圖

2021-12-03 10:10:16

價(jià)格歧視用戶分級(jí)開發(fā)

2015-12-11 15:51:18

榮耀

2022-02-21 16:41:32

設(shè)計(jì)解決方案UI

2017-11-02 12:59:53

2019-10-30 16:54:08

golangredis數(shù)據(jù)庫(kù)

2018-08-24 19:42:00

商派
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)