Java開源生鮮電商平臺-電商促銷業務分析設計與系統架構(源碼可下載)

来源:https://www.cnblogs.com/jurendage/archive/2018/06/05/9137815.html
-Advertisement-
Play Games

Java開源生鮮電商平臺-電商促銷業務分析設計與系統架構(源碼可下載) 說明:Java開源生鮮電商平臺-電商促銷業務分析設計與系統架構,列舉的是常見的促銷場景與源代碼下載 左側為享受促銷的資格,常見為這三種: 首單 大於或等於某個會員級別 特定會員組:比如女性,月消費滿1000等等,都是通過查詢條件 ...


Java開源生鮮電商平臺-電商促銷業務分析設計與系統架構(源碼可下載)

 

說明:Java開源生鮮電商平臺-電商促銷業務分析設計與系統架構,列舉的是常見的促銷場景與源代碼下載

 

  •  左側為享受促銷的資格,常見為這三種:

    • 首單

    • 大於或等於某個會員級別

    • 特定會員組:比如女性,月消費滿1000等等,都是通過查詢條件查詢出來的特定分組。

  • 優惠類型,對於電商網站主要是下麵4類:

    • 金額

    • 贈品:商品、優惠券、現金券、積分等

    • 包郵(實際上也是錢)

    • 其它:如送精美包裝等。 對於其它業務類型的平臺,則估計會有其它形式的優惠,比如贈送三個VIP會員等等。

  • 範圍,無非就是:

    • 整單

    • 指定品類或特定品類(臨時的活動分類,比如夏季新品特賣)

    • 指定商品

  • 滿減:針對金額的減免,可以指定金額或百分比,涉及階梯累加和數量累加等。

  • 滿贈:滿足條件後獲得贈品,贈品可以是五花八門,對於電商平臺一般是商品、現金券、優惠券、積分等。

  • 包郵:金額減免的另一種方式,但效果比減免小額金額要好。

  • 其它規則:有些會帶來設計的複雜度,但本質無非就是滿減或滿贈。

 

 

2促 銷 的 表 現 形 式

 

    促銷的表現形式主要分為促銷活動和優惠券兩種。

    站在系統的角度,促銷活動是主動的,優惠券是被動的。

 

    促銷活動表示只要滿足條件,下單時自動會進行促銷規則計算,進行減免或者贈送。但是優惠券必須客戶進行選擇(或者輸入券碼)。

 

    促銷活動可以多個同時生效,比如:

  • 首單包郵

  • 滿100減20

  • 買電磁爐贈送餐具

 

    這三個促銷活動對於新會員(未曾購買過)都是同時有效的。

 

    但促銷活動存在互斥和優先順序,這兩個概念在後面再分析。

 

    優惠券只存在一張優惠券生效。

    即客戶選擇使用哪一張,就哪一張生效,無所謂互斥或者優先順序。

 

    優惠券可以和促銷活動同時生效,只要生效促銷活動不排斥優惠券即可。

 

    那麼,對於促銷規則而言,促銷活動和優惠券只是它上層的表現形式,實際的底層的促銷規則是可以共用的(無非都是滿減、滿贈)

 

 

3促 銷 規 則 分 析

 

 

    從第一節場景來看,促銷無非就是看:

  1.  是否滿足資格

    1. 沒有資格享受該優惠,就不必往下計算了。

  2.   當前規則的優惠類型是什麼?

    1. 滿減、滿贈、包郵或者其它?

  3.  當前規則的生效範圍是什麼?

    1. 判斷客戶當前訂單(購物車)是否滿足當前規則生效範圍之內,是則計算優惠。

  4. 規則的累加規則是什麼?

    1. 階梯累加:一般只針對金額

    2. 數量累加:否則只計算一次,是則乘以倍數。

  5. 規則之間的關係是怎樣的?

    1. 優先順序

    2. 相容

    3. 互斥

 

    可以通過這張圖整體理解這個結構:

 

 

 

4促 銷 規 則 的 關 系

 

    促銷規則的關係是設計的一個難點,對於規則而言本身是獨立的,所以所謂關係就是它的上層表現形式的關係,而前面第二節也談到,優惠券之間是無所謂關係的,用那張就那張生效(前提是該張優惠券可用,可以用)。

    那麼現在要分析的關係就只有:

 

  • 促銷活動之間的關係

  • 促銷活動和優惠券之間的關係

 

    其中促銷活動與優惠券的關係是一票否決方式,即只要本次訂單(購物車)對應的生效促銷活動有任一個設置為:排斥優惠券,則本訂單(購物車)不能使用優惠券。

 

    那麼我們剩下要分析的就是促銷活動之間的關係了,詳見下圖:

 

 

5領 域 業 務 建 模(模塊級別)

 

 

    

 

  1. 促銷規則獨立為一個模塊

    1. 促銷活動、優惠券的管理在模塊內,共規則模型調用。

    2. 規則模型對外提供介面,其它模塊只能通過該介面訪問模型。

    3. 模型實現該介面。

    4. 規則介面要求傳入上下文參數

    5. 該上下文參數包含:商品列表(購物車當前選擇的商品,客戶ID 和 使用的優惠券。

    6. 規則介面是規則模塊的邊界。

  2. 調用者為購物車模塊。

    1. 任何時候購物車發生修改時,調用規則介面重新計算。

    2. 規則發生更改時,會發送事件出來。

    3. 購物車模塊計算價格業務監聽此事件,有變更則更新相關購物車的價格。

    4. 此監聽器為非同步。

  3. 外部支持介面

    1. 客戶介面:供查詢客戶資格相關使用

    2. 商品介面:供查詢商品分類和其它定義使用。

 

 

6領 域 業 務 建 模(類級別)

 

    類圖有些大,手機上如果看不清,可以分享到pc上查看。

 

    設計思路過程描述:

    1.  提供CartRuleService作為對外介面

    2. 分別調用:

      1. PromotionService:促銷活動介面

      2. CouponService:優惠券介面

來處理促銷活動和優惠券。

  1. 促銷活動介面和優惠券介面均是實際調用RuleService來實現促銷規則計算。

  2. RuleService的實現採用橋模式和策略模式,並通過工程模式獲得各個策略的實例。

  3. 傳入的上下文參數封裝為RuleContext,傳給RuleService

  4. RuleService返回RuleResult對象

  5. PromotionResult和CoupontResult分別封裝RuleResult對象進行返回。

 

    通過這個設計方案,當有新的資格判斷方式、目標範圍和優惠類型時,通過新增策略實現即可,符合開閉原則。

 

 

7規 則 的 持 久 化

 

 

    前面已經充分分析了規則的各個內容,如何將促銷活動、優惠券和促銷規則持久化以及持久化存儲到那裡其實已經是水到渠成的事情。怎樣存儲其實都可以,哪怕是一個json結構。

    因為無論什麼結構,最終在代碼中都會被解析為對象並緩存起來供介面實現來調用。所以資料庫設計在效率上不會要求太高。

 

    資料庫結構ER圖:

    

 

  1.  規則定義和規則利益是獨立的兩個表,和優惠券、促銷活動一對一關聯。

  2. 規則定義包含:

    1. 資格類型、資格配置

    2. 利益類型、利益參數(是否累加)

    3. 目標範圍類型、範圍設置

    4. 其它欄位根據項目情況自由添加。

  3. 規則利益

    1. 可以對不同的利益分別設計欄位。

    2. 也可以設置一個利益類型和利益配置(json結構)

    3. 之所以獨立出來作為子表,是因為存在階梯累加的業務情況需要配置多條利益。

  4. 優惠券的設計為常規方式

    1. 定義:定義它的各種參數

    2. 實體:具體某一張優惠券

    3. 使用:一般一張優惠券只會使用一次,記錄使用歷史,也有優惠券可以使用多次。   

  5. 促銷活動定義

    1. 前面第4節說的促銷規則的關係(其實是促銷活動的關係)就是定義在這裡。

    2. 分組、優先順序、對優惠券的排斥等。

  6. 促銷活動的參與日誌

    1. 記錄誰參與過

    2. 有些促銷活動只能參與一次,則通過此表判斷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要 性能優化涉及面很廣。一般而言,性能優化指降低響應時間和提高系統吞吐量兩個方面,但在流量高峰時候,性能問題往往會表現為服務可用性下降,所以性能優化也可以包括提高服務可用性。在某些情況下,降低響應時間、提高系統吞吐量和提高服務可用性三者相互矛盾,不可兼得。例如:增加緩存可以降低平均響應時間,但是處 ...
  • 說到提高檢索效率,就必然提到索引。今天就來為大家講述搜索引擎中最常見的索引方式——倒排索引。 ...
  • 恢復內容開始 從上個隨筆停止的地方開始,我們將設置資料庫,創建第一個模型。並快速介紹django自動生成的管理站點。 資料庫設置: 打開文件mysite/settings.py 預設情況下,配置使用SQLite。這是新手最簡單的選擇。 雖然你不暫時不用其他資料庫,但是還是要說明一下的: ENGINE ...
  • 1. 什麼是偽共用 CPU 緩存系統中是以緩存行(cache line)為單位存儲的。目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes。在多線程情況下,如果需要修改“共用同一個緩存行的變數”,就會無意中影響彼此的性能,這就是偽共用(False Sharing)。 ...
  • 今天是 Github 嫁入豪門的第 2 天,炒得沸沸揚揚的微軟 Github 收購事件於昨天(06月04日)塵埃落定,微軟最終以 75 億美元正式收購 Github。 隨後,Gitlab 趁勢帶了一波節奏,在其官網上祝賀 Github 被微軟收購,並表示此次收購代表著軟體開發者的影響力的日漸增長,將 ...
  • ​ Web程式開發中最重要的莫過於關係型資料庫,即SQL 資料庫,另外文檔資料庫(如 mongodb)、鍵值對資料庫(如 redis)慢慢變得流行. 原因 : 我們不直接使用這些資料庫引擎提供的 Python 包,而是使用對象關係映射(Object Relational Mapper, ORM)框架 ...
  • LAMP環境搭建的博客,在提交內容的時候TP5框架報了一個錯誤,Call to undefined function imagecreatefrompng(); 出現這個問題一般都是GD庫未正確安裝或配置,在伺服器上查詢是否安裝輸入命令: 原來是沒有安裝GD庫,在centOS系統上安裝GD庫可以直接 ...
  • Java源文件編碼格式不是ANSI時引起的錯誤 & 使用Java包不當引起的錯誤:找不到或無法載入主類,及其解決方法。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...