1, 常见的促销模型

促销管理系统在很多地方都有使用,大家去超市就经常体现到,感受到,不少中小型单位都其促销活动,要搞促销活动最好是有应用软件支持,这样就比较灵活管理也方便。而依靠手工处理的话效率会比较低下的。常见的促销活动,其分类及举例如下:

模型分类

序号

例子

捆绑促销

1

购买TK001+TK002各1件,优惠10元。(TK001,TK002为产品编码,不同的单位有不同的定义,下同。)

2

购买TK001+TK002各1件,赠送商品TK003一件。

3

购买TK001商品2件,TK002商品1件,赠送TK002商品2件。

4

购买TK001+TK002各一件,享受8折。

5

购买TK001+TK002数量各一件,享受优惠价10元。

单品促销

1

购买TK001商品,促销价10元。

2

购买TK001享受8折。

3

购买TK001,优惠5元。

4

购买TK001商品2个,赠送TK003商品1个。

组合促销

1

购买TK001,TK002,TK003,TK004任一件95折,任两件89折。

2

购买PK01牌商品任意一件95折,两件92折。

3

购买PK01,PC02,PA03牌商品满足3件,每件促销价20元。

4

购买PK01,PC02,PA03牌商品任意1件,可10元购买TK014商品。

5

购买PK01,PC02,PA03牌商品任意1件,赠送TK004,TK005,TK006商品中任意一件。

6

购买PK01,PC02牌商品任意1件,可特价2元购买TK006,TK007中任意商品一件。

客单价促销

1

购买TK001满200元,赠送TK006一件,满300元,赠送商品TK007,TK008,TK009各一件。

2

全场购物满50元,可特价2元购买TK011。

3

购买TK001满200元,优惠30元,满400元优惠60元,满600元优惠90元。

客单量促销

1

购买PA01牌商品,除商品TK017外,任意2件赠送TK003一件。

2

购买PA01牌商品,除商品TK017外,可特价1元购买商品TK003。

2, 软件模型抽象

根据上面的业务模型,可以抽象出品牌,商品名称,商品编号,购买件数,实际单价,原单价,单项金额,优惠类型,折扣,备注。其中优惠类型可分为无、折扣、特价、促销、优惠、赠送,这几个类型的特点如下:

名称

说明

无任何优惠。

折扣

使用打折来做优惠。

特价

固定一个很低的价格。

促销

与特价类似,但价格不一定低,只是比原价略有减少。

优惠

直接在原价格上面减去一定的金额。

赠送

客户不用钱。

由于有赠送或直接降低价格的活动,所以固定几个特殊的商品很重要。

序号

商品编号

含义

1

L00001

0.01元

2

L00010

0.1元

3

L00100

1元

4

L01000

10元

3, CKRule上面建模

对象的定义相对简单,是直接参考上面的定义的

自定义类就是销售记录信息,包含单价,数据,打折等内容。这些内容可以根据终端客户的需要增加,如商品条形码等信息。

而主表记录就是客户的基本信息。

要实现上面提到有多样化规则,一般都需要客户自己来设置,不要由软件开发商来设置,否则会忙坏软件开发者,而得不到一点收益。要让客户的计算机管理员可以设置,那设置的办法就要相对简单易懂。在逻辑比较界面中有购物车的商品判断,如含品牌,含商品,含商品件数等等。对商品的操作都是使用商品编号的,这样会比较方便电脑识别。

而结论&操作部分就精彩了,如优惠,打折,促销,特价等操作都会出现。

这些逻辑判断和操作都是前台用户设置时所必备的内容。

4, 促销系统实现方式

看了促销系统的需求,从业务上觉得很正常,是很多商场,商家常常做的活动,也不太复杂。但仅仅从技术实现来看,那就直接觉得太恐怖了,不好处理,有些东西好像仅仅是自然语言来表达,在程序上不好跟进。

好像每一个促销都要写一个类来控制,这样就会出现非常多的类才能搞定问题,如果某天客户想增加一些新的规则,那原来的类就要修改或变化。从简单的角度来看,的确要这样做的,也可以使用一些更加复杂的设计模式来处理问题。

从更标准的角度来看的话,应该做更多业务抽象,架构抽象,对象抽象的工作,但如果开发者刚刚接解这个行业或公司资源不足,难以做更深入的抽象和分析呢?那这个促销的项目基本上没得做了,匆匆上马的话,后面修改的工作量会非常大,最后工作越做越多,但是始终做不到收益。

CKRule从业务规则管理的角度来解决促销问题,把经常变化的规则封装入规则管理系统中,规则的变化不影响主程序代码,技术人员和业务专家都可以按自身的需求不断修改规则,并且都可以在程序运行时修改和部署规则。这大大方便了促销系统的开发。

5, 软件实现

销售订单的定义包含销售主体和明细的商品信息,而商品信息要使用促销规则再进行计算一次,从而判断那些商品可以打折或有什么优惠,如果可以优惠的商品就进行优惠。在实现的计算中,可以会遇到冲突的问题,即符合多个优惠条件的情况,当前软件没有判断冲突,都会生效,实际的计算可能会选其中一两条优惠。

促销管理的业务规则可以在程序运行时配置,不影响其他代码的编写,而配置界面就是调用CKRule上面的配置内容。

初始化规则界面

_curPackage = new RuleFacade().GetPkgInst(RuleInstName);

foreach (var item in _curPackage.RuleLib.PoolRules.Keywords)

{

ListViewItem _lvi = new ListViewItem();

_lvi.Text = item.Name;

_lvi.Tag = item;

//_lvi.ImageKey = "PicProperty";

_lvi.Group = lvTips.Groups[0];

lvTips.Items.Add(_lvi);

}

foreach (var item in _curPackage.RuleLib.PoolRules.LgcOperaWords)

{

ListViewItem _lvi = new ListViewItem();

_lvi.Text = item.Name;

_lvi.Tag = item;

//_lvi.ImageKey = "PicMethod";

_lvi.Group = lvTips.Groups[1];

lvTips.Items.Add(_lvi);

}

foreach (var item in _curPackage.RuleLib.PoolRules.ConclusionWords)

{

ListViewItem _lvi = new ListViewItem();

_lvi.Text = item.Name;

_lvi.Tag = item;// new List<CallDef>() { item };

//_lvi.ImageKey = "PicMethod";

_lvi.Group = lvTips.Groups[2];

lvTips.Items.Add(_lvi);

}

保存规则之后,需要刷新规则引擎,使用如下方法进行刷新。

new RuleFacade().Refresh(RuleInstName);

在计算界面就使用如下命名进行规则计算

_cond = new RuleFacade().Exec(FrmRulePoolSet.RuleInstName, _cond);

源代码下载

使用CKRule实现促销管理系统的更多相关文章

  1. Ckrule业务规则管理系统简介

    1.   简述 Ckrule业务规则管理系统(BRMS)是一个集成的应用程序存储.管理.执行和测试的平台,允许组织定义.部署.监控和维护运营系统使用的各种复杂决策逻辑.Ckrule BRMS 独立于核 ...

  2. CKRule业务规则管理系统部署说明

    1.   程序包说明 软件是使用WinForm开发的,包含服务端和客户端,服务端部署在IIS上面,客户端可以在已经安装.Net4.0的windows上面运行. 1.1.  服务端程序包 CKBrmsS ...

  3. 【Java EE 学习 55】【酒店会员管理系统项目总结】

    本酒店会员管理系统使用了SSH框架和传值播客提供的协同OA静态页面. 项目地址:https://github.com/kdyzm/HotelMembersManagement 一.需求分析 酒店会员管 ...

  4. ckrule规则编辑器在wpf中的使用

    当前,ckrule的IDE和业务管理系统都是由winform开发的,规则编辑器也只提供了winform的版本,所以很多的朋友都提出意见,要有wpf的版本.wpf的界面设置和管理都更加的方便. 事实上可 ...

  5. 规则引擎ILog和CKRule的对比

    IBM™ WebSphere™ ILOG是业界最有影响力的业务规则商业软件,它提供了最好的业务规则管理系统,在Java领域更是有广泛的成功案例.网上关于ILOG的技术资料非常多,大家都比较了解ILOG ...

  6. C——货物管理系统

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> ...

  7. .NET开源项目 QuarkDoc 一款自带极简主义属性的文档管理系统

    有些话说在前头 因为公司产品业务重构且功能拆分组件化,往后会有很多的接口文档需要留存,所以急需一款文档管理系统.当时选型要求3点: 1.不能是云平台上的Saas服务,整个系统都要在自己公司部署维护(数 ...

  8. Mysql 设计超市经营管理系统,包括商品信息表(goods) 和 商品类型表(goodstype)

    互联网技术学院周测机试题(一) 一  需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功 ...

  9. 130_传析阅管理系统accdb64位版本

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 几年前笔者针对家居门店的进销存.人员管理.工资管理.任务系统.门店经营盈亏管理.销售分析.考勤请假等息息相关的业务基于Ac ...

随机推荐

  1. 1、TensorFlow简介

    参考:http://www.tensorfly.cn/tfdoc/get_started/basic_usage.html 1.用TensorFlow构造一个简单的线性拟合: # -*- coding ...

  2. sql update 代替游标写法

    update TB_AreaUserDevice_Relation set OrderID = t.r from TB_AreaUserDevice_Relation rel inner join ( ...

  3. Java 实现邮件的发送

                                             Java 实现邮件的发送 开发邮箱发送功能必须看邮箱方面的资料 改一些东西  (我的是qq 邮箱哟   开通 POP3 ...

  4. Domoticz 中接入斐讯 M1 空气质量检测仪

    前言 M1 是翻车讯出的一款空气质量检测仪,如今斐讯的服务器经常连不上了,M1 不动动手接到 Domoticz 怕是变成摆设了.教程参考了这里和官方的 Using Python plugins. 步骤 ...

  5. js 获取 屏幕 可用高度...

    document.documentElement.clientWidth 此方法适用于手机... document.documentElement.clientHeight (浏览器(手机或电脑)可用 ...

  6. [转] 如何在ie11里使用a连接创建动态下载文件流

    [From] https://segmentfault.com/q/1010000009470664 查了资料,可以使用微软独家的msSaveBlob, 这个方法支持ie10及以上. var down ...

  7. 搭建Redis报错

    2018-10-26 报错信息 You need tcl 8.5 or newer in order to run the Redis test 原因 缺少 tcl 插件 解决方式 wget http ...

  8. (转)一条SQL更新语句是如何执行的

    名词 MySQL 里经常说到的 WAL 技术,Write-Ahead Logging 第一个日志模块 redo log 也叫日志重写,是InnoDB 引擎特有的日志 - write pos and c ...

  9. PIE SDK地图图层控制

    1. 功能简介 地图图层控制就是图层的相关操作,如地图图层数据的添加.删除.移动和拖拽等功能. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 图层添加是调用AddLayer方法将图层添加到 ...

  10. python 学习笔记二_列表

    python不需要声明类型信息,因为Python的变量标识符没有类型. 在Python中创建一个列表时,解释器会在内存中创建一个类似数组的数据结构类存储数据,数据项自下而上堆放(形成一个堆栈).索引从 ...