1. 程式人生 > >談談快消品中小飲料企業產品配送政策方案設計

談談快消品中小飲料企業產品配送政策方案設計

一、摘要

在前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)訂單修改,需要重新計算配送量。


更多企業資訊化文章:中小企業資訊化之路
關於博主:老馬歷寫記