Rule engine el 規則轉換 API ( for cms ).md
68 additions, 70 deletions
| ... | ... | @@ -3,6 +3,7 @@ |
| 3 | +| 1.1 | 修改部分內容<br><br>/rs/ruleEngineSetting<br><br>/rs/rule/settings<br><br><br><br><br> | 2026/03/09 | Maurice | | |
| 3 | 4 | 1. 待母任務送審時, 會先以"子任務"為單位, 寫入對應的子任務json object到MISSION_SUB_SETTING.mission_content , example : |
| 4 | 5 | ```json |
| 5 | 6 | { |
| 6 | - "field": "product_name", | |
| 7 | + "field": "name", | |
| 7 | 8 | "operator": "in", |
| 8 | 9 | "values": ["星巴克 150 元券", "威秀電影票"] |
| ... | ... | @@ -44,18 +45,19 @@ |
| 44 | -| 1 | activity_type | String | true | 活動類型 | <br><br><br><br><br><br> | | |
| 45 | -| 1 | content | String | true | 要轉換的payload | 請以"母任務"為單位傳入整個子任務payload | | |
| 46 | -| 2 | logic | String | false | 子任務間的operator | | | |
| 47 | -| 2 | rules | jsonArray | true | 子任務內容 | | | |
| 48 | -| 3 | sub_id | String | true | MISSION_SUB_SETTING.id | | | |
| 49 | -| 3 | logic | String | true | 子任務level1間的operator | | | |
| 50 | -| 3 | rules | jsonArray | | 子任務level1 內容 | 若沒有更多的level2 | | |
| 51 | -| 4 | logic | String | true | 子任務level2間的operator | | | |
| 52 | -| 4 | rules | jsonArray | | 子任務level2內容 | | | |
| 53 | -| 5 | field | String | true | 設定任務欄位名稱 | | | |
| 54 | -| 5 | operator | String | true | 運算子 | | | |
| 55 | - | 5 | values | StringArray | true | 值 | | | |
| 45 | + | 1 | activityType | String | true | 活動類型 | <br><br><br><br><br><br> | | |
| 46 | +| 1 | subMissions | jsonArray | true | 子任務內容 | | | |
| 47 | +| 2 | subId | String | true | MISSION_SUB_SETTING.id | | | |
| 48 | +| 2 | logic | String | true | 子任務level1間的operator | | | |
| 49 | +| 2 | rules | jsonArray | true | 子任務level1 內容 | 若沒有 rules, logic 欄位,則沒有多種任務條件 | | |
| 50 | +| 3 | logic | String | false | 子任務level2間的operator | | | |
| 51 | +| 3 | field | String | false | 設定任務欄位名稱 | | | |
| 52 | +| 3 | operator | String | false | 運算子 | | | |
| 53 | +| 3 | values | StringArray | false | 值 | | | |
| 54 | +| 3 | rules | jsonArray | false | 子任務level2內容 | 子任務項下有多個條件,則會有這層 rules | | |
| 55 | +| 4 | field | String | false | 設定任務欄位名稱 | | | |
| 56 | +| 4 | operator | String | false | 運算子 | | | |
| 57 | +| 4 | values | StringArray | false | 值 | | | |
| 56 | -request: | |
| 57 | - "activity_type":"EXCHANGE_VOUCHER", | |
| 58 | - "content": { | |
| 59 | - "logic": "and", | |
| 60 | - "rules": [ | |
| 58 | + "activityType": "EXCHANGE_VOUCHER", | |
| 59 | + "masterId": "MASTER_001", | |
| 60 | + "subMissions": [ | |
| 61 | 61 | { |
| 62 | - "sub_id": "001", | |
| 62 | + "subId": "001", | |
| 63 | 63 | "logic": null, |
| 64 | 64 | "rules": [ |
| 65 | 65 | { |
| 66 | - "field": "serial_id", | |
| 66 | + "field": "serialId", | |
| 67 | 67 | "operator": "in", |
| 68 | 68 | "values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] |
| 69 | 69 | } |
| 70 | 70 | ] |
| 71 | 71 | }, |
| 72 | 72 | { |
| 73 | - "sub_id": "002", | |
| 73 | + "subId": "002", | |
| 74 | 74 | "logic": null, |
| 75 | 75 | "rules": [ |
| 76 | 76 | { |
| 77 | - "field": "product_name", | |
| 77 | + "field": "name", | |
| 78 | 78 | "operator": "in", |
| 79 | 79 | "values": ["星巴克 150 元券", "威秀電影票"] |
| 80 | 80 | } |
| 81 | 81 | ] |
| 82 | 82 | }, |
| 83 | 83 | { |
| 84 | - "sub_id": "003", | |
| 84 | + "subId": "003", | |
| 85 | 85 | "logic": "and", |
| 86 | 86 | "rules": [ |
| 87 | 87 | { |
| 88 | 88 | "logic": "or", |
| 89 | 89 | "rules": [ |
| 90 | 90 | { |
| 91 | - "field": "product_name", | |
| 91 | + "field": "name", | |
| 92 | 92 | "operator": "like", |
| 93 | 93 | "values": ["現金券"] |
| 94 | 94 | }, |
| 95 | 95 | { |
| 96 | - "field": "product_name", | |
| 96 | + "field": "name", | |
| 97 | 97 | "operator": "like", |
| 98 | 98 | "values": ["抵用券"] |
| 99 | 99 | } |
| 100 | 100 | ] |
| 101 | 101 | }, |
| 102 | 102 | { |
| 103 | - "field": "total_cub_points", | |
| 104 | - "operator": "gt", | |
| 103 | + "field": "point", | |
| 104 | + "operator": "ge", | |
| 105 | 105 | "values": ["500"] |
| 106 | 106 | } |
| 107 | 107 | ] |
| 108 | 108 | } |
| 109 | 109 | ] |
| 110 | 110 | } |
| 111 | - } | |
| 112 | - | |
| 113 | -// 更正後 | |
| 114 | -{ | |
| 115 | - "logic": "and", | |
| 116 | - "rules": [ | |
| 117 | - { | |
| 118 | - "logic": "or", | |
| 119 | - "rules": [ | |
| 120 | - { | |
| 121 | - "field": "product_name", | |
| 122 | - "operator": "like", | |
| 123 | - "values": ["現金券"] | |
| 124 | - }, | |
| 125 | - { | |
| 126 | - "field": "product_name", | |
| 127 | - "operator": "like", | |
| 128 | - "values": ["抵用券"] | |
| 129 | - } | |
| 130 | - ] | |
| 131 | - }, | |
| 132 | - { | |
| 133 | - "field": "total_cub_points", | |
| 134 | - "operator": "gt", | |
| 135 | - "values": ["500"] | |
| 136 | - } | |
| 137 | - ] | |
| 138 | -} | |
| 139 | 111 | "elDatas":[ |
| 140 | 112 | { |
| 141 | 113 | "sub_id":"001", |
| 142 | - "content": "SER(SERIAL_ID, IN).DATA('{"sub_id":'001','value':'["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]'}')" | |
| 114 | + "content": "IF(in.data('{"field":"serialId", "values":["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]}'), markPassed)" | |
| 143 | 115 | }, |
| 144 | 116 | { |
| 145 | 117 | "sub_id":"002", |
| 146 | - "content": "SER(PRODUCT_NAME, IN).DATA('{"sub_id": '002', 'value': '["星巴克 150 元券", "威秀電影票"]'}')" | |
| 118 | + "content": "IF(in.data('{"field":"name", "values":["星巴克 150 元券", "威秀電影票"]}'), markPassed)" | |
| 147 | 119 | }, |
| 148 | 120 | { |
| 149 | 121 | "sub_id":"003", |
| 150 | - "content":"OR( | |
| 151 | - SER(PRODUCT_NAME, LIKE), | |
| 152 | - SER(PRODUCT_NAME, LIKE) | |
| 153 | - ), | |
| 154 | - SER(total_cub_points, gt).DATA('{"sub_id":'003', 'value': '["500"]'}')" | |
| 122 | + "content": "IF(AND(OR(like.data('{"field":"name", "values":["現金券"]}'), like.data('{"field":"name", "values":["抵用券"]}')), ge.data('{"field":"point", "values":["500"]}')), markPassed)" | |
| 155 | 123 | } |
| 156 | 124 | ] |
| 157 | 125 | } |
| 158 | - | |
| 159 | - ```json | |
| 126 | + ```json | |
| 160 | 127 | "sub_id": "001", |
| 161 | - "activity_type":"exchange_voucher", | |
| 128 | + "activity_type":"EXCHANGE_VOUCHER", | |
| 162 | 129 | "field": null, |
| 163 | 130 | "operator": null, |
| 164 | 131 | "values":null |
| 132 | +``` | |
| 133 | + | |
| 134 | +```json | |
| 165 | 135 | "success": true, |
| 166 | 136 | "errorCode": null, |
| 167 | 137 | "elDatas":[ |
| 168 | 138 | { |
| 169 | 139 | "sub_id":"001", |
| 170 | - "content": "SER(SERIAL_ID, IN).DATA('{"sub_id":'001','value':'["1","2","3","4","5","6","7","8","9","10"]'}')" | |
| 140 | + "content": "SER(markPassed)" | |
| 171 | 141 | } |
| 172 | -# | |
| 173 | - | |
| 174 | - #operator 會用到的有這些: | |
| 142 | + ### operator 會用到的有這些: | |
| 175 | - * eq 等於 | |
| 143 | + ### fieldName Mapping: | |
| 144 | + | |
| 145 | +票券兌換、核銷 | |
| 146 | +activityType = `EXCHANGE_POINTS` | |
| 147 | +`EXCHANGE_VOUCHER` | |
| 148 | +`REDEEM` | |
| 149 | + | |
| 150 | +* serialId | |
| 151 | +* name ( 票券名稱 ) | |
| 152 | +* brandName | |
| 153 | +* point | |
| 154 | + | |
| 155 | +* * * | |
| 156 | + | |
| 157 | +會員推薦 | |
| 158 | + | |
| 159 | +* memberIdentity | |
| 160 | + | |
| 161 | +* * * | |
| 162 | + | |
| 163 | +會員登入 | |
| 164 | + | |
| 165 | +* continuousLoginDays | |
| 166 | +* accumulatedLoginDays | |
| 167 | + | |
| 168 | +### | |
| 169 | + | |
| 170 | +### CMS 任務相關說明 | |
| 171 | +任務牆說明 ([https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-124258](https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-124258)) | |
| 172 | + | |
| 173 | +### Error Code |