谈谈快消品中小饮料企业产品配送政策方案设计

一、摘要

在前2篇博文:

讨论了饮料企业销售管理中的可销售产品政策和产品价格政策方案设计,除此之外还有一个重要的产品政策:产品配送政策。可能大家对饮料企业的配送政策不是很了解,通常电商所谓的配送政策是满减、满抵,走的是资金通道;而饮料企业通常指满送(A产品满100箱,送B产品10箱),走的是实物通道。

二、产品配送政策

1、名词解释

1)主发产品:满足条件的产品,可以是单品也可以是产品组合

单品:产品A满100箱,送产品B10箱;
产品组合:产品A+产品B满100箱,送产品B10箱;

2)配送产品:可以是单品,也可以是产品组合;

单品:产品A满100箱,送产品B10箱;
产品组合:产品A满100箱,送产品B+产品C共10箱;(客户可以选择产品B 5箱,产品C 5箱;也可以产品B 10箱;也可以产品C 10箱等)

2、目标

1)不同客户配送量不一样

配送政策可以全国区域统一设定,具体市场可以设置自己市场配送政策,市场下辖区域还可以设置区域配送政策,甚至直接维护到客户。

2)同一客户同一主发产品配送量可以不一样

配送政策有时间有效性,同一客户同一产品不同时间段,配送政策可能不一。

3、设计方案

1)数据表设计
产品表特殊处理,可以标记哪些是产品组合,base_goods
CREATE TABLE `base_goods` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `catg_id` bigint(64) NOT NULL COMMENT '商品分类id',
  `prod_type` varchar(30) NOT NULL COMMENT '商品类型',
  `prod_no` varchar(20) NOT NULL COMMENT '商品编码',
  `prod_name` varchar(100) NOT NULL COMMENT '商品名称',
  `spec` varchar(100) DEFAULT NULL COMMENT '规格',
  `spec_factor` decimal(20,4) DEFAULT NULL COMMENT '规格系数',
  `jldw` bigint(20) DEFAULT NULL COMMENT '计量单位',
  `sale_price` decimal(20,4) DEFAULT NULL COMMENT '销售单价',
  `sale_oprice` decimal(20,4) DEFAULT NULL COMMENT '销售单价',
  `cost_price` decimal(20,4) DEFAULT NULL COMMENT '标准成本价',
  `py` varchar(100) DEFAULT NULL COMMENT '商品名称拼音简码',
  `period` varchar(20) DEFAULT NULL COMMENT '保质期',
  `bar_code` varchar(100) DEFAULT NULL COMMENT '条码',
  `memo` varchar(100) DEFAULT NULL COMMENT '备注',
  `is_purchase` char(1) DEFAULT NULL,
  `is_sale` char(1) DEFAULT NULL,
  `brand_id` bigint(64) DEFAULT '1' COMMENT '品牌id',
  `detail` varchar(100) DEFAULT NULL COMMENT '详情',
  `short_desc` varchar(100) DEFAULT NULL,
  `pic_url` varchar(100) DEFAULT NULL COMMENT '图片',
  `is_deleted` varchar(1) DEFAULT 'N',
  `is_onsale` varchar(1) DEFAULT 'Y',
  `is_mixed` varchar(1) DEFAULT 'N' COMMENT '是否产品组合',
  `safety_stock_min` decimal(20,4) DEFAULT NULL COMMENT '安全库存下限',
  `safety_stock_max` decimal(20,4) DEFAULT NULL COMMENT '安全库存上限',
  `create_uid` bigint(20) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `write_uid` bigint(20) DEFAULT NULL,
  `write_date` datetime DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表'
产品组合细表
CREATE TABLE `base_goods_prop_ref` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `prop_id` bigint(20) DEFAULT NULL COMMENT '产品组合ID',
  `prop_type` varchar(30) DEFAULT NULL,
  `prop_name` varchar(30) DEFAULT NULL COMMENT '产品组合名称',
  `goods_id` bigint(20) DEFAULT NULL,
  `goods_no` varchar(10) DEFAULT NULL,
  `goods_name` varchar(100) DEFAULT NULL COMMENT '明细产品名称',
  `write_uid` bigint(20) DEFAULT NULL,
  `write_date` datetime DEFAULT NULL,
  PRIMARY KEY (`sid`),
  UNIQUE KEY `NewIndex1` (`prop_id`,`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
配送政策配置主表 sale_goods_policy
CREATE TABLE `sale_goods_policy` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `policy_no` varchar(30) DEFAULT NULL,
  `policy_type` int DEFAULT NULL COMMENT '政策类型, 10-排它, 20-叠加',
  `obj_type` varchar(20) DEFAULT NULL COMMENT '对象类型',
  `obj_id` bigint(20) DEFAULT NULL COMMENT '对象ID',
  `obj_name` varchar(100) DEFAULT NULL COMMENT '对象名称',
  `goods_id` bigint(20) DEFAULT NULL COMMENT '商品id',
  `goods_name` varchar(100) DEFAULT NULL COMMENT '商品名称|商品组合名称',
  `memo` varchar(255) DEFAULT NULL COMMENT '备注',
  `policy_desc` varchar(200) DEFAULT NULL COMMENT '政策描述',
  `s_date` datetime DEFAULT NULL COMMENT '开始日期',
  `e_date` datetime DEFAULT NULL COMMENT '截止日期',
  `status` varchar(10) DEFAULT NULL COMMENT '状态',
  `create_uid` bigint(20) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `write_uid` bigint(20) DEFAULT NULL,
  `write_date` datetime DEFAULT NULL COMMENT '操作时间',
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
配送政策细表 sale_goods_policy_detail
CREATE TABLE `sale_goods_policy_detail` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT,
  `policy_id` bigint(20) DEFAULT NULL,
  `policy_no` varchar(100) DEFAULT NULL,
  `free_goods_id` bigint(20) DEFAULT NULL,
  `cond_min` decimal(20,4) DEFAULT NULL COMMENT '开始区间 >= cond_min',
  `cond_max` decimal(20,4) DEFAULT NULL COMMENT '最终区间 < cond_max',
  `cond_amount` decimal(20,4) DEFAULT NULL,
  `free_amount` decimal(20,4) DEFAULT NULL,
  `status` varchar(10) DEFAULT NULL,
  `memo` varchar(255) DEFAULT NULL,
  `policy_desc` varchar(100) DEFAULT NULL,
  `create_uid` bigint(20) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  `write_uid` bigint(20) DEFAULT NULL,
  `write_date` datetime DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
政策分解中间表 sale_goods_policy_level
CREATE TABLE `sale_goods_policy_level` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT,
  `policy_id` bigint(20) DEFAULT NULL,
  `policy_no` varchar(100) DEFAULT NULL,
  `client_id` bigint(20) DEFAULT NULL,
  `goods_id` bigint(20) DEFAULT NULL,
  `level` int(11) DEFAULT NULL,
  `write_uid` bigint(20) DEFAULT NULL,
  `write_date` datetime DEFAULT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
政策最终生成表 sale_goods_policy_list
CREATE TABLE `sale_goods_policy_list` (
  `sid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '流水号',
  `policy_date` date DEFAULT NULL COMMENT '政策日期',
  `policy_type` int DEFAULT NULL COMMENT '政策类型',
  `obj_id` bigint(50) DEFAULT NULL COMMENT '对象ID',
  `obj_name` varchar(100) DEFAULT NULL COMMENT '对象名称',
  `goods_id` bigint(20) DEFAULT NULL COMMENT '商品id',
  `policy_no` varchar(100) DEFAULT NULL,
  `sourceid` bigint(20) DEFAULT NULL,
  `policy_desc` varchar(100) DEFAULT NULL,
  `policy_desc_full` varchar(200) DEFAULT NULL COMMENT '政策描述完整版',
  `memo` varchar(255) DEFAULT NULL COMMENT '备注',
  `write_uid` bigint(20) DEFAULT NULL COMMENT '操作人',
  `write_date` datetime DEFAULT NULL COMMENT '操作时间',
  PRIMARY KEY (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2) 具体实现
数据准备

产品数据:产品1,产品2,组合1(产品1,产品2)
市场区域:华东市场(苏北区域、苏南区域),华中市场(鄂东区域,鄂西区域)
客户信息:客户1(华东–苏北),客户2(华东–苏南),客户3(华中–鄂东),客户4(华中–鄂西)

政策维护
政策主表数据
政策号 政策类型 产品 对象类型 对象名称 开始日期 截止日期
18101401 10 产品1 全国 全国 2018-10-01 2018-12-30
18101402 10 产品1 市场 华东市场 2018-10-01 2018-12-30
18101403 20 产品2 全国 全国 2018-10-01 2018-12-30
18101404 10 产品2 市场 华中市场 2018-10-01 2018-12-30
18101405 10 组合1 全国 全国 2018-10-01 2018-12-30
18101406 10 组合1 地区 华东-苏南 2018-10-01 2018-12-30
政策唯一性验证

产品 + 对象(对象类型,对象ID)+ 生效日期不能重复;

产品 对象类型 对象名称 开始日期 截止日期 是否重复
产品1 全国 全国 2018-10-01 2018-12-30 没重复
产品1 市场 华东市场 2018-10-01 2018-12-30 没重复
产品1 市场 华东市场 2018-08-01 2018-12-30 重复,时间段有交叉
产品2 全国 全国 2018-10-01 2018-12-30
政策细表数据
政策号 主发产品 配送产品 起配量(始>=) 起配量(止<) 配送基数 配送量 说明
18101401 产品1 产品1 10 200 10 1 [10,200)箱,每10箱送1箱
18101401 产品1 产品1 200 - 10 1.2 [200,)箱,每10箱送1.2箱
18101402 产品1 产品1 10 - 10 1.1 [10,)箱,每10箱送1.1箱
18101403 产品2 产品2 100 - 20 1 [100,)箱,每20箱送1箱
18101404 产品2 产品2 100 - 20 1 [100,)箱,每20箱送1箱
18101405 组合1 组合1 100 - 20 1 [100,)箱,每20箱送1箱
18101406 组合1 组合1 100 - 20 1.2 [100,)箱,每20箱送1.2箱
政策分解到 sale_goods_policy_level
政策号 政策类型 主发产品 客户 政策来源 优先级
18101401 10 产品1 客户1 全国 10
18101401 10 产品1 客户2 全国 10
18101401 10 产品1 客户3 全国 10
18101401 10 产品1 客户4 全国 10
18101402 10 产品1 客户1 市场 20
18101402 10 产品1 客户2 市场 20
- - - - - -
18101403 20 产品2 客户1 全国 10
18101403 20 产品2 客户2 全国 10
18101403 20 产品2 客户3 全国 10
18101403 20 产品2 客户4 全国 10
18101404 10 产品2 客户3 市场 20
18101404 10 产品2 客户4 市场 20
- - - - - -
18101405 10 组合1 客户1 全国 10
18101405 10 组合1 客户2 全国 10
18101405 10 组合1 客户3 全国 10
18101405 10 组合1 客户4 全国 10
18101406 10 组合1 客户2 地区 30
根据优先级,去重(政策类型+产品+客户)后结果如下 sale_goods_policy_list:
政策号 政策类型 主发产品 客户 政策来源 优先级
18101401 10 产品1 客户3 全国 10
18101401 10 产品1 客户4 全国 10
18101402 10 产品1 客户1 市场 20
18101402 10 产品1 客户2 市场 20
- - - - - -
18101403 20 产品2 客户1 全国 10
18101403 20 产品2 客户2 全国 10
18101403 20 产品2 客户3 全国 10
18101403 20 产品2 客户4 全国 10
18101404 10 产品2 客户3 市场 20
18101404 10 产品2 客户4 市场 20
- - - - - -
18101405 10 组合1 客户1 全国 10
18101405 10 组合1 客户3 全国 10
18101405 10 组合1 客户4 全国 10
18101406 10 组合1 客户2 地区 30
计算订单配送量

订单数据:

订单号 订单日期 客户 产品明细 数量 单位 配送量
SO18101401 181014 客户1 产品1 190 29
- - - 产品2 210 20
SO18101502 181015 客户4 产品1 90 9
- - - 产品2 240 36

计算订单配送量
客户1–产品1:
  18101402政策,10箱起送,每10箱送1.1箱,则配送量 = 190 / 10 * 1.1 = 20.9, 20箱
  18101405政策,100箱起送,每20箱送1箱,则配送量 = 190 / 20 * 1 = 9.5, 9箱(产品1+产品2,共9箱,这里取9箱产品1),配送总量:29箱
客户1–产品2:
  18101403政策,100箱起送,每20箱送1箱,则配送量 = 210 / 20 * 1 = 10.5, 10箱
  18101405政策,100箱起送,每20箱送1箱,则配送量 = 210 / 20 * 1 = 10.5, 10箱(产品1+产品2,共10箱,这里取10箱产品1),配送总量:20箱
客户4–产品1:
  18101401政策,10箱起送,每10箱送1箱,则配送量 = 90 / 10 * 1=9箱
  18101405政策,100箱起送,每20箱送1箱,则配送量 = 0箱
客户4–产品2:
  18101403政策,100箱起送,每20箱送1箱,则配送量 = 240 / 20 * 1 = 12箱
  18101404政策,100箱起送,每20箱送1箱,则配送量 = 240 / 20 * 1 = 12箱
  18101405政策,100箱起送,每20箱送1箱,则配送量 = 240/20*1 = 12箱(产品1+产品2,共12箱,这里取12箱产品2),配送总量:36箱

三、小结

1、政策维护合理性检验欠缺

本方案虽做了政策优先级控制,客户 > 地区 > 市场 > 全国,但是全国政策明细一定比市场政策明细力度小吗?未必,程序没有检测。

2、订单计算最终配送量有点复杂

1)配送产品涉及产品组合时,允许客户调整配送产品数量;
2)计算产品配送量时,要考虑政策叠加性:一方面来自可叠加的政策(政策类型为20的政策),另一方面来自产品组合的政策;
3)订单修改,需要重新计算配送量。


更多企业信息化文章:中小企业信息化之路
关于博主:老马历写记

猜你喜欢

转载自blog.csdn.net/chuangxin/article/details/83046331
今日推荐