#254b7
Back
2026/02/02
1 min read

Rule engine el規則轉換 (for cms)

Rule engine el規則轉換 (for cms).md
241 additions, 0 deletions
... ... @@ -1 +1,242 @@
1 +## 版本紀錄
2 +| 版本 | 說明 | 日期 | 異動者 |
3 +| ---| ---| ---| --- |
4 +| 1.0 | 初版 | 2026/01/27 | Hanna |
5 +
6 +* * *
7 +## 說明
8 +* 服務名稱:Rule engine el規則轉換
9 +* Reference Table:
10 +* Reference Redis:
11 +* Request / Response 是否加密:
12 +* 邏輯說明:CMS任務設定寫入EL TABLE流程時使用
13 +* CMS任務設定寫入EL TABLE流程:
14 + 1. 待母任務送審時, 會先以"子任務"為單位, 寫入MISSION_SUB_SETTING.mission_content, 格式為JSON
15 + 2. 呼叫Backend api, 以"母任務"為單位 此api為寫入RULE_ENGINE_FLOW table (若子任務有更動也要重打該api), 以及若該母任務下架的話也要將該對應的RULE_ENGINE_FLOW.enable設定為false
16 + 3. 之後cms在協助將response的資訊協助寫入RULE_ENGINE_FLOW(以及其母任務相關資訊), 以及將MISSION_MASTER_SETTING.rule.id回寫
17 +
18 +HTTP REQUEST
19 +
20 +```powershell
21 +curl POST /rs/ruleEngineSetting
22 +```
23 +
24 +| Header | Description |
25 +| ---| --- |
26 +| Content-Type | application/json |
27 +
28 +### REQUEST HEADER (todo)
29 +
30 +| Level | Key | Data type | Required | Field name | Description / Example |
31 +| ---| ---| ---| ---| ---| --- |
32 +| 1 | basic auth | String | true | account: admin, password: secret | |
33 +
34 +## REQUEST BODY
35 +
36 +| Level | Key | Data type | Required | Field name | Description / Example |
37 +| ---| ---| ---| ---| ---| --- |
38 +| 1 | content | String | true | 要轉換的payload | 請以"母任務"為單位傳入整個子任務payload |
39 +
40 +為以下範例命題:
41 +一個母任務有以下三個子任務:
42 +S001: "兌換商品serial 在 01~10 內的票券"
43 +S002: "兌換商品名稱必須包含「星巴克 150 元券」與「威秀電影票」"
44 +S003: "品名中包含 "現金券" And "抵用券" 且 總兌換點數大於 500"
45 +
46 +```json
47 +{
48 + "content": {
49 + "logic": "and",
50 + "rules": [
51 + {
52 + "sub_id": "001",
53 + "activity_type":"exchange_voucher",
54 + "field": "serial_id",
55 + "operator": "in",
56 + "values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
57 + },
58 + {
59 + "sub_id": "002",
60 + "activity_type":"exchange_voucher",
61 + "field": "product_name",
62 + "operator": "in",
63 + "values": ["星巴克 150 元券", "威秀電影票"]
64 + },
65 + {
66 + "sub_id": "003",
67 + "activity_type":"exchange_voucher",
68 + "logic": "and",
69 + "rules": [
70 + {
71 + "logic": "or",
72 + "rules": [
73 + {
74 + "field": "product_name",
75 + "operator": "like",
76 + "values": ["現金券"]
77 + },
78 + {
79 + "field": "product_name",
80 + "operator": "like",
81 + "values": ["抵用券"]
82 + }
83 + ]
84 + },
85 + {
86 + "field": "total_cub_points",
87 + "operator": "gt",
88 + "values": ["500"]
89 + }
90 + ]
91 + }
92 + ]
93 + }
94 + }
95 +
96 +```
97 +
98 +## RESPONSE BODY
99 +activity_type:
100 +* * 兌換點數 EXCHANGE_POINTS
101 + * 兌換票券 EXCHANGE_VOUCHER
102 + * 核銷 REDEEM
103 + * 登入 LOGIN
104 + * mgm MGM
105 + * 第三方 THIRD_PARTY
106 +
107 +```json
108 +{
109 + "success": true,
110 + "errorCode": null,
111 + "message": null,
112 + "values": {
113 + "CHAIN_ID":"VERIFY001",
114 + "content": "SER(
115 + VERIFY001,
116 + AND(
117 + SER(SERIAL_ID, IN).DATA('{"sub_id": '001', 'value': '["1", "2"]'}')),
118 + SER(PRODUCT_NAME, IN).DATA('{"sub_id": '002', 'value': '["星巴克 150 元券", "威秀電影票"]'}')),
119 + AND(
120 + OR(
121 + SER(PRODUCT_NAME, LIKE).DATA('{"sub_id": '003', 'value': '["現金券"]'}')),
122 + SER(PRODUCT_NAME, LIKE).DATA('{"sub_id": '003', 'value': '["抵用券"]'}')
123 + ),
124 + SER(total_cub_points, gt).DATA('{"sub_id": '003', 'value': '["500"]'}')
125 + )
126 + )
127 + )"
128 + }
129 +}
130 +```
131 +
132 +### 只有一個子任務,任務為『兌換任意票券3張』,沒有設定任何條件限制 example:
133 +
134 +```json
135 +request:
136 +
137 + {
138 + "tier": "1",
139 + "activity_type":"exchange_voucher",
140 + "field": null,
141 + "operator": null,
142 + "values":null
143 +}
144 +
145 +response:
146 +SER(
147 + VERIFY001,
148 + AND(VOUCHER)
149 +).DATA'{"sub_id": '004', 'value': null}'
150 +```
151 +
152 +多個子任務,其中一個任務為『兌換任意票券3張』,沒有設定任何條件限制
153 +
154 +```json
155 +request:
156 +{
157 + "content": {
158 + "logic": "and",
159 + "rules": [
160 + {
161 + "tier": "1",
162 + "activity_type":"exchange_voucher",
163 + "field": "serial_id",
164 + "operator": "in",
165 + "values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
166 + },
167 + {
168 + "tier": "2",
169 + "activity_type":"exchange_voucher",
170 + "field": "product_name",
171 + "operator": "in",
172 + "values": ["星巴克 150 元券", "威秀電影票"]
173 + },
174 + {
175 + "tier": "3",
176 + "activity_type":"exchange_voucher",
177 + "logic": "and",
178 + "rules": [
179 + {
180 + "logic": "or",
181 + "rules": [
182 + {
183 + "field": "product_name",
184 + "operator": "like",
185 + "values": ["現金券"]
186 + },
187 + {
188 + "field": "product_name",
189 + "operator": "like",
190 + "values": ["抵用券"]
191 + }
192 + ]
193 + },
194 + {
195 + "field": "total_cub_points",
196 + "operator": "gt",
197 + "values": ["500"]
198 + }
199 + ]
200 + },
201 + {
202 + "tier": "4",
203 + "activity_type":"exchange_voucher",
204 + "field": null,
205 + "operator": null,
206 + "values":null
207 + }
208 + ]
209 + }
210 + }
211 +
212 +
213 +
214 +2.
215 +response:
216 +
217 +SER(
218 + VERIFY001,
219 + AND(
220 + SER(SERIAL_ID, IN).TAG(["1", "2"]),
221 + SER(PRODUCT_NAME, IN).TAG("星巴克 150 元券", "威秀電影票"),
222 + AND(
223 + OR(
224 + SER(PRODUCT_NAME, LIKE).TAG("現金券"),
225 + SER(PRODUCT_NAME, LIKE).TAG("抵用券")
226 + ),
227 + SER(total_cub_points, gt).TAG("500")
228 + ),
229 + VOUCHER.DATA'{"sub_id": '004', 'value': null}'
230 + )
231 +)
232 +```
233 +
234 +| B2E內部錯誤訊息 | B2E錯誤代碼 | App錯誤訊息 | App錯誤代碼 |
235 +| ---| ---| ---| --- |
236 +| 轉換失敗 | | | |
237 +| | | | |
238 +| | | | |
239 +| | | | |
240 +| | | | |
241 +| | | | |