首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

電商促銷引擎的「業務公式化」實踐:自定義公式系統設計與落地

     編輯:Java 相關知識

電子商務促銷活動頻次高、規則雜、上線急,傳統硬編碼方式導致開發測試壓力巨大,且難以應對「周末節假日上線」的業務現實。本文介紹一種「業務公式化」解決方案:構建輕量級公式引擎,將促銷規則外部化為可運營編寫的公式腳本,通過「插件化」執行引擎在商品展示、購物車、下單等關鍵鏈路動態生效,實現業務邏輯與代碼部署解耦,大幅縮短交付週期。

痛點與動機:從「改代碼」到「寫公式」

某電商項目連續三個周末上線疊加促銷(滿減、積分倍返、鑽石會員折扣),每次涉及商品展示、購物車、訂單多個系統修改,開發測試耗時長、風險高。引入公式系統後,運營人員按規範編寫公式,開發提供執行引擎與擴展函數,上線流程壓縮為「配置公式 → 測試驗證 → 熱加載」,無需發布代碼。

自定義公式引擎核心設計

語法目標

  • 表達式運算(賦值、算術、邏輯)、函數調用、變量引用
  • 控制結構:if/else if/else、while 循環
  • 註釋支持、動態參數函數註冊、外部變量上下文交換

兩階段處理架構

  1. Parser(解析器):掃描文本,識別操作數(字符串、數值、日期、變量 [VAR]、函數)與操作符(+ - * / > < = != & | ! 等),按運算符優先級將中綴表達式轉為後綴式(逆波蘭式),封裝為 ExecutionItem 入隊列。
  2. Executor(執行器):基於堆棧遍歷後綴隊列,封裝 MetaElement 作為運算中間結果,支持類型轉換(getAsInt()、getAsString() 等)與變量上下文綁定。

異常體系與擴展點

分離解析異常(ParseException)與執行異常(CalcException),便於定位錯誤。預留兩大擴展:

  • VariantContext:項目層實現,負責公式變量與業務數據雙向映射
  • FunctionIntf:動態註冊業務函數(如 giveCoupon、discount),公式可直接調用操作業務對象

促銷場景建模與公式示例

數據模型

核心實體:Event(活動主檔)、EventModel(活動-商品關聯)、EventCommand(執行上下文,攜帶目標對象與函數映射)。

公式分層

商品級公式(遍歷活動商品):

[E_SUM] = [P_PRICED] * [P_ORDER_NUM];
[S_DISCOUNTSUM] += [E_SUM] * 0.5;
[S_POINTSUM]    += [E_SUM] * 100;
[S_ORDERSUM]    += [E_SUM];

活動級匯總公式(活動結算):

IF [S_ORDERSUM] - 1000 > -0.001 { giveCoupon([MB_ID], 200910); }
givePoint([MB_ID], [S_POINTSUM]);
discount([S_DISCOUNTSUM]);

執行流程與時序

  1. 購物車/訂單調用 EventProxy.execute()
  2. EventProxy 組裝 EventCommand(綁定目標對象、註冊業務函數、設置變量上下文)
  3. EventExecutorImpl 查詢活動商品,按活動碼分組
  4. 遍歷活動:初始化匯總變量 → 遍歷商品執行商品級公式 → 執行活動級公式
  5. 業務函數(如 ADD_COUPON)操作 EventCommand.getTarget() 修改購物車狀態

Spring 集成與部署

通過 prototype 作用域注入 EventCommand、EventExecutor、EventProxy,購物車 Action 持有 EventProxy 即可觸發:

this.getEventProxy().getEventCommand().setTarget(this);
EventResult ret = this.getEventProxy().execute();

效果與展望

上線週期從「天級」壓縮至「小時級」,運營自主配置能力顯著提升。未來將公式系統擴展至:

  • 查詢條件構造:將復雜 SQL 構建邏輯公式化,簡化 DAO 開發
  • 數據交換適配:替代傳統適配器代碼,以公式腳本實現異構數據轉換映射
  • 增強控制流:引入 for 循環、斷言等構造,提升表達力

「業務公式化」不僅是技術架構演進,更是業務與技術協作模式的變革 —— 讓懂業務的人直接表達業務,讓技術專注於構建可靠的執行底座。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved