---
tags: mPOS,促銷
---
# 促銷
## 限量商品
## 促銷分類
**促銷類型 MM_type**
* 買送促銷 N
* 固定售價 F : plu:221082
* 折讓額 C : plu:186803
* 折扣率 D : plu:221122
* 優惠價 A : plu:199889
* 特價銷售: D : plu:220114
* ~~數量折價: M~~
* 滿額送及滿額特價: F
* ~~滿額禮 A~~
* 系列別 S
* 滿額贈(dm_price = 0): plu:
* 滿額加購(dm_price > 0): plu: 138455
* 商品 P : plu:
* 滿額贈(dm_price = 0): plu:
* 滿額加購(dm_price > 0): plu: 215177
* 信用卡滿額送: C
* 門號套餐: B
* 門號可攜: T
* 來店禮及生日禮: V
問題貨號192093延保條碼
:::danger
MM_TYPE='N', 'D', 'F'也都有滿額,
差別在F是計算全購物車商品,
D、F只計算此促銷的滿額
當MM_TYPE='N', 'D', 'F'
MM_GROUPTYPE=
M:促銷(預設),
F:滿額促銷,
I:加購送
:::
```plantuml
@startmindmap
*[#lightgreen] MM_Type:促銷類型
'-----------------
**[#lightblue]: N:買送促銷
====
mm_grouptype="M"
GROUP1QTY~GROUP6QTY
折扣群數量限制(當MM_TYPE=N);
***[#lightgreen] AMT_Type
****[#lightblue] F:固定售價
*****[#FFBBCC] 購物車處理
******:原商品
=====
Price = VIPAMT;
******:增加促銷商品
=====
Piece = MM_AMOUNT - 商品總額(含贈品價格);
****[#lightblue] C:折讓額
*****[#FFBBCC] 購物車處理
******:原商品
=====
Price = VIPAMT;
******:增加促銷商品
=====
Price = MM_AMOUNT * -1;
****[#lightblue] D:折扣率%
*****[#FFBBCC] 購物車處理
******:原商品
=====
Price = VIPAMT;
******:增加促銷商品
=====
Price = vipPrice*((100-MM_AMOUNT)/100)*-1;
****[#lightblue]: A:優惠價
=====
檢查使用條件
MM.Cash_refund_type = 1
MM.Cash_refund_AMT = 1;
*****[#FFBBCC] 購物車處理
******:原商品
=====
Price = VIPAMT;
******:增加促銷商品
=====
Price = MM_AMOUNT - vipPrice;
'-----------------
**[#lightblue]: D:特價銷售
====
mm_grouptype="M";
***[#FFBBCC] 購物車處理
****:原商品
====
更動商品價格
Price = MM_PLU.DM_PRICE;
**** 增加促銷商品(無)
'-----------------
**[#lightblue]: M:數量折扣
=====
未開放促銷類型;
'-----------------
**[#lightblue]: F:滿額送/滿額加購
====
mm_grouptype="M";
***[#lightgreen] AMT_Type
****[#lightblue]: A:不限商品
====
滿額禮請領使用(POS不開放);
****[#lightblue]: S:系列別
----
;
***** mm_plu.dm_price
******_ >0(加價)
*******:小計觸發
====
mm_plu.dm_price > 0;
******_ 0(贈送)
*******:直接新增至購物車
====
mm_plu.dm_price = 0;
****[#lightblue] P:商品
***** mm_plu.dm_price
******_ >0(加價)
*******:小計觸發
====
mm_plu.dm_price > 0;
******_ 0(贈送)
*******:直接新增至購物車
====
mm_plu.dm_price = 0;
**[#lightblue] B:門號套餐
***[#lightgreen] AMT_Type
****[#lightblue] C:折讓額
*****[#FFBBCC] 購物車處理
****** 加入組合商品
******:增加促銷商品
=====
Price = MM_AMOUNT*-1(負向);
'-----------------
**[#lightblue] T:門號可攜
***[#lightgreen] AMT_Type
****[#lightblue] C:折讓額
*****[#FFBBCC] 購物車處理
****** 商品使用vipPrice
******:增加促銷商品
=====
小計時才帶入
Price = MM_AMOUNT*-1(負向)
整單折扣金額不可=0(至少1);
'-----------------
**[#lightblue] V:來店禮生日禮(工作機處理)
***[#lightgreen] AMT_Type
****[#lightblue] C:來店禮
****[#lightblue] B:生日禮
'-----------------
@endmindmap
```
## 促銷觸發
#### 滿額計算方式
1. 計算額度包含購物車所有商品(組合促銷商品也計算)
2. 進入滿額加購,加選1次滿額商品,額度計算1次減掉該商品加購門檻額度(degree_amt)
ex: degree_amt = 10,000 加購商品金額1,000 加購1次額度扣掉10,000
* **AMT_Type = S(系列別)**
```plantuml
@startmindmap
*[#lightgreen]:MM
----
MM_Type=F;
**[#lightgreen]:MM
----
AMT_Type=S;
***:MM_Plu
----
mm_grouptype;
****:累計額度
----
adgree_amt 1~5;
*****_ M
******:mm_plu.plu_No = product.prod_cate_no
----
PLU_NO欄位放商品系列別
計算滿額累計金額使用;
****:滿額可選商品
----
degree_no 1~5(對應degree_amt);
*****_ F
******:mm_plu.plu_No = product.plu_No
----
PLU_NO欄位放商品代碼
滿額可選擇商品;
*****_ I
******:mm_plu.plu_No = product.plu_No
----
PLU_NO欄位放商品代碼
滿額自動加入商品;
@endmindmap
```
* **AMT_Type = P(商品)**
```plantuml
@startmindmap
*[#lightgreen]:MM
----
MM_Type=F;
**[#lightgreen]:MM
----
AMT_Type=P;
***:MM_Plu
----
mm_grouptype;
****:累計額度
----
adgree_amt 1~5;
*****_ M
******:mm_plu.plu_No = product.plu_No
----
計算滿額累計金額使用;
****:滿額可選商品
----
degree_no 1~5(對應degree_amt);
*****_ F
******:mm_plu.plu_No = product.plu_No
----
滿額可選擇商品;
*****_ I
******:mm_plu.plu_No = product.plu_No
----
滿額自動加入商品;
@endmindmap
```
#### 觸發分類
* 選擇商品後
* 買送(N)
* 特價(D)
* 門號套餐
* 按小記後
* 滿額(F): 滿額加購、滿額送
* 門號可攜
#### 促銷商品查詢
```sql=
select mm.promote_name,product.plu_name,mm.mm_type,mm.amt_type,mm_amount,mm_plu.*
from mm_plu
inner join product on mm_plu.plu_no = product.plu_no or product.prod_cate_no = mm_plu.plu_no
inner join mm on mm.promote_no = mm_plu.promote_no
where 1=1
and TO_CHAR(SYSDATE, 'yyyymmdd') BETWEEN mm.b_date AND mm.e_date
and PRODUCT.SALE_STATUS != '2'
--NF
and mm.mm_type = 'N'
and mm.amt_type = 'F'
and mm.mm_amount > 0
--NC
and mm.mm_type = 'N'
and mm.amt_type = 'C'
and mm.mm_amount > 0
--ND
and mm.mm_type = 'N'
and mm.amt_type = 'D'
and mm.mm_amount > 0
--NA
and mm.mm_type = 'N'
and mm.amt_type = 'A'
and mm.mm_amount > 0
And MM.Cash_refund_type = 1
And MM.Cash_refund_AMT = 1
--D
and mm.mm_type = 'D'
--FS dm >0
and mm.mm_type = 'F'
and mm.amt_type = 'S'
and MM_PLU.DM_PRICE > 0
order by mm_plu.cre_date desc
---------------------------------
--mmtype=F amttype=S
select * from product
inner join mm_plu on product.prod_cate_no = mm_plu.plu_no
inner join mm on MM_PLU.PROMOTE_NO = mm.promote_no
where 1=1
and mm.mm_type = 'F'
and mm.amt_type = 'S'
and mm_plu.mm_grouptype = 'M'
and TO_CHAR(SYSDATE, 'yyyymmdd') BETWEEN mm.b_date AND mm.e_date
and Nvl(Product.MT_FLAG,'N')<>'D'
and PRODUCT.SALE_STATUS != '2'
--mmtype=F amttype=P
select * from product
inner join mm_plu on product.plu_no = mm_plu.plu_no
inner join mm on MM_PLU.PROMOTE_NO = mm.promote_no
where 1=1
and mm.mm_type = 'F'
and mm.amt_type = 'P'
and mm_plu.mm_grouptype = 'M'
and TO_CHAR(SYSDATE, 'yyyymmdd') BETWEEN mm.b_date AND mm.e_date
and Nvl(Product.MT_FLAG,'N')<>'D'
and PRODUCT.SALE_STATUS != '2'
```