关键词:Java Web;促销规则引擎;促销活动;设计模式
中图法分类号:F721 文献标识码:A
1基本设计方案
1.1功能模块结构设计
1.1.1后端功能
(1)促销活动动态配置。
促销活动通过配置页面,配置不同的促销规则,可以配置促销的基本信息、促销类型、时间周期、叠加规则、促销范围、促销商品等。
(2)促销活动自启和自停。
系统定时扫描完成配置的促销活动,在时间规则命中的范围内自动启用,在时间规则范围外自动失效。
(3)促销算价。
实时算价:在PC端收银台或小程序结算页面,基于购买商品,实时计算本次结算最优金额,即命中的最优促销活动。
1.1.2前端功能
(1)促銷活动配置。
前端构建促销活动配置页面,基于不同的促销类型切换不同的配置方式,主要包含促销基本信息配置、促销类型配置、时间周期规则配置、促销范围配置、促销商品配置,以及活动页展示配置等,
(2)收银台支持促销算价。
推荐算价:支持展示推荐的最优算价,内部集成促销活动,会员等级折扣,优惠券等优惠方式下的最优价格。
手工算价:支持切换促销活动,会员等级或优惠券等单一优惠方式。
1.2系统框架结构设计
1.2.1促销概念定义
(1)促销大类。
单品促销:针对指定商品,进行单一化的促销。
买赠促销:针对指定商品,进行赠品附加赠送。
条件促销:针对指定商品,在满足某种规则条件下,才可以命中促销优惠,其中条件包含满减促销,满件促销,第N件折扣等。
(2)促销类型。
单品促销:只针对商品纬度的单一化促销方式,例如,特价商品,即一口价商品;固定折扣比例商品,即打折商品。
买赠促销:针对指定商品的购买,进行赠品赠送的促销活动,赠品可以有多个也可以任选一个。
满减促销:满减,针对指定商品的购买,商品总价满X元,进行减免Y元的促销活动;每满减,针对指定商品的购买,商品总价每满X元,多次减免Y元的促销活动;满额折扣,针对指定商品的购买,商品总价满X元,进行打Y折扣的促销活动;阶梯满减,针对指定商品的购买,商品总价满足多个不同的门槛金额,进行对应不同的减免金额的促销活动。
满件促销:M件N元,针对指定商品的购买,商品总件数满M件,则支付N元的促销活动,例如,某商品3件10元;满M件折扣,针对指定商品的购买,商品总件数满M件,进行打N折扣的促销活动,例如,某商品3件6折;满M件免,针对指定商品的购买,商品总件数满M件,则进行减免Ⅳ件价格的促销活动,例如,某商品买2送1,即满3件免1件;满M件立减,针对指定商品的购买,商品总件数满M件,进行减免Ⅳ元的促销活动。同时,以上指定商品包含任意商品,相同商品和不同商品3种情况。
第N件打折:第N件折扣,针对指定商品的购买,商品购买N件,则对第N件商品进行打X折扣的促销活动;第N件立减,针对指定商品的购买,商品购买N件,则对第N件商品进行减免X元的促销活动;第N件特价,针对指定商品的购买,商品购买Ⅳ件,则对第N件商品进行特价的促销活动。
1.2.2基础模型设计
(1)促销基础信息。
用于配置促销活动的基本信息,包含促销名称、促销大类、促销类型、促销级别、叠加规则等基础信息。
(2)促销规则定义。
用于配置促销的核心规则,抽象为RULE和ACTION两个概念。
RULE:促销条件规则,即在满足什么条件下,促销才可以生效,为空代表无条件。
ACTION:促销行为,即消费活动满足Rule后,将执行的优惠动作规则。
(3)促销时间规则。
用于配置促销活动生效的时间范围。
普通时间段:指定开始时间和结束时间。
限制时间段:在普通日期时间段下,可以进行进一步的细化,可指定某些时间范围内不可命中促销活动,例如,2022年12月1日~2022年12月31日,每天或某几天的15:00至16:00不可命中促销活动。
(4)促销覆盖人群。
用于配置促销活动能够覆盖的人群范围,可基于会员级别指定范围或基于标签人群指定范围。
(5)促销商品。
用于配置促销活动覆盖的商品范围。其商品覆盖范围分为基于商品维度的选择、基于商品主类别维度的选择、基于商品多级品类维度的选择、从细粒度到粗粒度的多种选择方式。
1.2.3基于设计模式的架构模型设计(见图1)
(1)上下文模型。
促销处理器工厂:使用设计模式之工厂模式,工厂类根据传入的标记,创建对应产品的实例.即创建一个促销处理器生成工厂,通过传入的促销处理器类型,创建对应类型的促销处理器实例。
促销处理器执行链:使用设计模式之责任链模式,将请求的发送者和请求的处理者解耦合,使多个处理者都有机会处理这个请求,即创建一个促销处理器责任链,将命中的多个由促销处理器工厂创建出来的促销处理器实例,按照顺序规则挂载到此促销处理器责任链上,使得促销算价请求,可以被多个促销处理器依此处理。
核心计算模型:使用设计模式之中介者模式,用一个中介对象来封装一系列的对象交互,即创建一个促销计算单元对象,其中封装了链路促销信息、促销商品信息、促销叠加规则等,作为促销计算的核心单元。
(2)处理器抽象模型。
促销执行器接口:使用设计模式之策略模式,使用一系列的算法,将一些对象封装起来,使其可以在不同的场景进行切换,即通过一个促销处理器上层接口,其中定义一系列算法规则,不同的促销处理器实现类实现同一个上层接口,并实现具体的算法逻辑。
促销执行器抽象类:使用设计模式中的模板模式,定义一个算法结构,并将一些步骤延迟到子类实现,即创建一个促销处理器抽象类,其中定义一些计算方法结构,内部实现公共计算逻辑,同时将一些差异计算逻辑下放到实现此促销处理器抽象类的子类促销处理器中,并具体实现。
(3)处理器实现模型。
促销执行器(单品促销-特价):实现单品促销中特价计算逻辑。
促销执行器(单品促销-折扣):实现单品促销中折扣计算逻辑。
促销执行器(条件促销-满减促销-满减):实现满减促销中的满减计算逻辑。
促销执行器(条件促销-满减促销-每满减):实现满减促销中的每满减计算逻辑。
促销执行器(条件促销-满减促销-阶梯满减):实现满减促销中的阶梯满减计算逻辑。
促销执行器(条件促销-满减促销-满额折扣):实现满减促销中的满额折扣计算逻辑。
促销执行器(条件促销-满件促销-满M件折扣):实现满件促销中的满M件折扣计算逻辑。
促销执行器(条件促销-满件促销-满M件立减):实现满件促销中的满M件立减计算逻辑。
促销执行器(条件促销-满件促销-M件N元):实现满件促销中的M件N元计算逻辑。
促销执行器(条件促销-满件促销-满M件免):实现满件促销中的满M件免计算逻辑。
促销执行器(买赠促销-买赠促销-赠品任选1):实现买赠促销中赠品任选1计算逻辑。
促销执行器(条件促销-第N件促销-第N件特价):实现第N件促销中第N件特价计算逻辑。
促销执行器(条件促销-满件促销-第N件立减):实现第N件促销中第N件立减计算逻辑。
促销执行器(条件促销-满件促-第N件折扣):实现第N件促销中第N件折扣计算逻辑。
2详细实现过程
2.1技术框架引入
2.1.1后端技术
(1)程序实现语言。
Java:Java是一种面向对象的高级程序语言,且具有大部分编程语言所共有的一些特征,其被用在互联网的分布式环境中。
(2)数据库。
MySQL:MySQL是一个关系型数据库管理系统,通过字段维度关联,表示数据间的关系,是一个主流的关系型数据库系统。
(3) Web应用服务器。
Tomcat:Web应用服务器,用来部署Web应用,对外提供HTTP访问服务。
2.1.2前端技术
(1)程序实现语言。
VUE:-款用于构建用户界面的JavaScript框架。它基于标准Html,CSS和JavaScript构建,并提供了一套声明式、组件化的编程模型,帮助开发者高效地开发用户界面。
(2)后台页面UI框架。
ELEMENTUI:ELEMENTUI是一套UI框架,封装了后台管理页面常用组件,与Vue完美契合,可以快速构建功能型页面。
2.2设计模式引入
2.2.1单例模式
定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
使用:通过使用Spring框架中的单例模式,将交给Spring IOC容器管理的Bean定义为单例对象,并通过依赖注入DI的方式,提供访问点。
2.2.2工厂模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类是实例化延迟到其子类。
使用:定义用于生成促销处理器的促销处理器工厂类,用于实例化具体的促销处理器对象。
2.2.3策略模式
定义:定义一组算法,将每个算法都封装起来,并使他们之间可以互换。
使用:将不同的促销处理器的逻辑封装成不同的算法对象,使得不同的促销处理器计算逻辑相互没有影响,通过结合静态工厂的方式,将这些促销处理器算法对象进行统一管理,并使用Java多态特性,通过不同的关键字KEY,使得不同的促销处理器对象可以相互替换使用。
2.2.4责任链模式
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递更改请求,直到有对象处理它。
使用:促销活动的业务场景存在一次消费行为命中多个促销活动的情况,并且促销活动可相互叠加,类比为一个请求,需要被多个促销处理器对象处理,并且按照一定规则顺序处理;創建一条执行链,将命中的促销处理器挂载到链上,请求沿着执行链传递计算。
2.2.5中介者模式
定义:用一个中介对象来封装一系列的对象交互,中介者使得各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立改变它们之间的交互。
使用:定义一个促销处理单元对象,在促销执行链执行的过程中,单元对象将过程中使用到的相关元数据进行封装和处理。
2.2.6模板模式
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
使用:定义一个促销执行器抽象类,用于规范促销执行器的算法结构,并且在其中实现一些公共的算法逻辑,同时一些结构性的方法交给子类去重载实现,保证不会改变促销执行器计算的逻辑步骤。
2.3数据库设计
数据库设计如图2所示。
2.4核心业务逻辑设计
2.4.1创建促销活动
创建促销活动如图3所示。
2.4.2消费行为命中促销
消费行为命中促销如图4所示。
2.5核心代码实现逻辑
2.5.1促销处理器上层接口
作用:用来定义算法结构,规范实现类的算法结构逻辑。
接口:IPromotionHandler
方法:void embark(Promotionlnfo promotionlnfo);∥装载促销信息
Uhandler f PromotionHandlerChain promotionHandlerChain,U unit);∥沿链执行
IPromotionHandler clone();∥克隆促销处理器
2.5.2促销处理器静态工厂
作用:用来存取促销处理器实现类的实例化对象的静态集合。
工厂类:PromotionHandlerFactory
方法:public static void register(args){}∥注册促销处理器实例化对象到静态工厂
public static IPromotionHandler get(args){}∥获取促销处理器实例化对象
2.5.3促销处理器责任链
作用:用来定义促销处理器执行的链路,促销处理器沿着此链路执行。
责任链类:PromotionHandlerChain
2.5.4促销处理器抽象类
作用:用来定义促销处理器的算法结构,并将一些逻辑延迟到子类实现。
抽象类:AbstractPromotionHandler implements IPromotionHandler
方法:protected abstract Class getRuleClazz();∥促销定义规则class获取
protected abstract Class getActionClazz();∥促销定义动作class获取
protected abstract PromotionModeEnumembarkPromotionMode();∥当前促销模式
protected abstract BigDecimal calclnfo(args){}∥促销计算
public PromotionCalcUnit handler(args){}∥促销执行
2.5.5促销处理器实现类
作用:“单品促销.特价优惠”的具体实现。
实现类:SpecialSalePromotionHandler extendsAbstractPromotionHandler
方法:protected ClassgetRuleClazz(){return Rule.class;}
protected Class getActionClazz() {returnAction.class:}
protected PromotionModeEnumembarkPromotionMode(){return SPECIAL_SALE;}
protected abstract BigDecimal calclnfo(args){}∥具体促销计算逻辑
3构建Web应用
3.1后端服务
3.1.1网络资源环境
(1)申请域名。
基于一级域名www.xxx. com,申请后端二级域名promotion-api.xxx.com,并将此二级域名和内网lP映射到NGINX反向代理服务器。
(2)SSL安全证书。
基于二级域名promotion. xxx.com,申请SSL安全证书,支持HTTPS安全协议访问,并将此证书配置到NGINX反向代理服务器中的此域名下。
3.1.2应用服务环境
部署促销活动服务。促销系统的核心服务就是将代码基于Jenkins构建成可执行JAR包,通过Java-jar的命令,运行此JAR包,在Tomcat应用服务器中,对外提供支持HTTPS协议访问的服务。
3.2前端应用
3.2.1网络资源环境
(1)申请域名。
基于一级域名www. xxx.com,申请前端二级域名promotion.xxx.com,并将此二级域名和公网lP地址映射到DNS服务器中。
(2)配置指向。
在NGINX反向代理服務器中,将二级域名promotion.xxx.com配置指向一个静态文件目录,以请求访问该目录下的静态资源。
3.2.2静态资源环境
静态资源上传。基于NPM打包前端代码,生成加密后的静态资源,并将此静态资源上传到服务器的静态资源目录下,对外提供访问服务。
3.2.3前端页面展示
促销配置页面如图5所示。
4结束语
在互联网的浪潮下,电商业务成为互联网行业中最前沿的业务,在面向C端用户的场景中,如何提升销售业绩,如何更好地为用户服务,成为最重要的课题。促销活动系统在其中扮演着不可或缺的角色,本文构建的轻量级促销活动系统,具有支持分布式环境、高可用、高并发、可拓展等特性,同时在新促销方式的二次开发上,也具有较好的复用性和可扩展性,基本满足主流电商业务中的促销场景。
作者简介:
齐云浩(1993—),本科,研究方向:互联网电子商务、微服务架构、分布式服务、人机交互系统、基于设计模式构建轻量级促销活动系统。