#0c750
Back
2025/12/22
9 min read

派獎異常處理紀錄

派獎異常處理紀錄.md
428 additions, 0 deletions
... ... @@ -1 +1,429 @@
1 +# 派獎 - 派獎異常處理紀錄
2 +### SUMMARY
3 +取得補派獎紀錄列表,包含補派獎事件及其關聯的獎項、獎項群組、會員資訊、執行結果。
4 +
5 +### REFERENCE TABLE
6 +
7 +**補派獎相關**
8 +* `DBMT.AWARD_COMPENSATE`
9 +* `DBMT.AWARD_COMPENSATE_LOG`
10 +* `DBMT.CMS_TASK`
11 +
12 +**獎項相關**
13 +* `DBMT.AWARD`
14 +* `DBMT.AWARD_GROUP`
15 +* `DBMT.AWARD_GP_ENTITY`
16 +* `DBMT.AWARD_RECORD`
17 +
18 +**會員與執行者**
19 +* `DBMT.ACCOUNT`
20 +* `DBMT.CMS_USER`
21 +
22 +### ATTRIBUTES
23 +* METHOD: **GET**
24 +* PATH: `/api/features/award/compensate/logs`
25 +* LOGIN REQUIRED: **TRUE**
26 +* FEATURE: `AWARD_COMPENSATE`
27 +* PERMISSION: `READ`
28 +* CRYPTO: **None**
29 +
30 +### REQUEST
31 +#### HEADERS
32 +
33 +| Name | Type/Len | Required(*) | Desc |
34 +| ---| ---| ---| --- |
35 +| Content-Type | String | * | `"application/json"` |
36 +| Authorization | String | * | JWT Token |
37 +| X-Request-Id | String | | X-Request-Id for api flow tracing |
38 +
39 +```json
40 +// Example:
41 +{
42 + "Content-Type": "application/json",
43 + "Authorization": "Bearer jwt-token",
44 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
45 +}
46 +```
47 +
48 +#### QUERY STRING
49 +
50 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
51 +| ---| ---| ---| ---| ---| --- |
52 +| 1 | page | Integer | | * | 頁籤 DEFAULT = 1 |
53 +| 1 | per_page | Integer | | * | 資料筆數,下拉選單: 20, 50, 100, 500<br>DEFAULT = 20 |
54 +| 1 | compensate__task_id | String | | | 事件編號,精準查詢 |
55 +| 1 | compensate__id | Integer | | | 補派獎 ID,精準查詢 |
56 +| 1 | compensate_log__status | Enum | | | 補派結果,下拉選單:<br>success: 成功<br>failure: 失敗<br>progress: 補派中 |
57 +| 1 | compensate__create_time__ge | Datetime | | | 補派獎發起開始時間<br>僅選擇時 → 搜尋 >= 選擇時間 |
58 +| 1 | compensate__create_time__le | Datetime | | | 補派獎發起結束時間<br>僅選擇時 → 搜尋 <= 選擇時間 |
59 +| 1 | record__user_id | String | | | 身份證字號,精準查詢 |
60 +| 1 | account__invite_code | String | | | 會員編號(推薦碼),精準查詢 |
61 +| 1 | award_group__id | Integer | | | 獎項群 ID,下拉選單 |
62 +| 1 | award_group__name | String | | | 獎項群名稱,模糊搜尋 |
63 +| 1 | award__code | String | | | 獎項代號,精準查詢 |
64 +| 1 | award__name | String | | | 獎項名稱,模糊搜尋 |
65 +| 1 | compensate__requester_id | Integer | | | 執行者 ID (CMS_USER.ID),精準查詢 |
66 +| 1 | compensate__requester_username | String | | | 執行者帳號 (CMS_USER.USERNAME),精準查詢 |
67 +
68 +**排序**: 預設以 `compensate__create_time DESC` (補派獎發起時間降冪)
69 +
70 +```markdown
71 +// Example
72 +/api/features/award/compensates?page=1&per_page=20&award_group__name=星巴克&compensate_log__status=success&compensate__create_time__ge=2024/12/01 00:00:00
73 +```
74 +
75 +### RESPONSE
76 +#### STATUS CODE
77 +* 200
78 +
79 +#### HEADERS
80 +
81 +| Name | Type/Len | Desc |
82 +| ---| ---| --- |
83 +| Authorization | String | JWT Token |
84 +| X-Request-Id | String | Returning Request-Id |
85 +
86 +```json
87 +// Example:
88 +{
89 + "Authorization": "Bearer jwt-token",
90 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
91 +}
92 +```
93 +
94 +#### BODY
95 +
96 +| Level | Name | Type/Len | Nullable(*) | Desc |
97 +| ---| ---| ---| ---| --- |
98 +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) |
99 +| 1 | data | Dict | | 通用資料包裝 |
100 +
101 +#### Data
102 +
103 +| Level | Name | Type/Len | Nullable(*) | Desc |
104 +| ---| ---| ---| ---| --- |
105 +| 2 | items | List | | 結果列表 |
106 +| 2 | pagination | Dict | | 分頁資訊 |
107 +
108 +#### Items
109 +
110 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
111 +| ---| ---| ---| ---| ---| --- |
112 +| 3 | compensate | Dict | | 補派獎資訊 (AWARD_COMPENSATE) | - |
113 +| 3 | compensate_log | Dict | | 補派獎日誌資訊 (AWARD_COMPENSATE_LOG) | - |
114 +| 3 | record | Dict | | 派獎紀錄資訊 (AWARD_RECORD) | - |
115 +| 3 | task | Dict | | 任務資訊 (CMS_TASK) | - |
116 +| 3 | award | Dict | | 獎項資訊 (AWARD) | - |
117 +| 3 | award_group | Dict | | 獎項群資訊 (AWARD_GROUP) | - |
118 +| 3 | member | Dict | | 會員資訊 (ACCOUNT) | - |
119 +| 3 | requester | Dict | | 執行者資訊 (CMS_USER) | - |
120 +
121 +#### compensate
122 +
123 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
124 +| ---| ---| ---| ---| ---| --- |
125 +| 4 | id | Integer | | 補派獎 ID | `AWARD_COMPENSATE.ID` |
126 +| 4 | award_id | Integer | | 獎項 ID | `AWARD_COMPENSATE.AWARD_ID` |
127 +| 4 | task_id | String | | 主排程 ID (事件編號) | `AWARD_COMPENSATE.TASK_ID` |
128 +| 4 | requester_id | Integer | | 執行者 ID | `AWARD_COMPENSATE.REQUESTER_ID` |
129 +| 4 | create_time | Datetime | | 建立時間 (補派獎發起時間) | `AWARD_COMPENSATE.CREATE_TIME` |
130 +| 4 | update_time | Datetime | | 修改時間 | `AWARD_COMPENSATE.UPDATE_TIME` |
131 +
132 +#### compensate_log
133 +
134 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
135 +| ---| ---| ---| ---| ---| --- |
136 +| 4 | id | Integer | | 補派獎日誌 ID | `AWARD_COMPENSATE_LOG.ID` |
137 +| 4 | compensate_id | Integer | | 補派獎 ID | `AWARD_COMPENSATE_LOG.COMPENSATE_ID` |
138 +| 4 | record_id | Integer | | 派獎紀錄 ID | `AWARD_COMPENSATE_LOG.RECORD_ID` |
139 +| 4 | status | Enum | | 補派結果:<br>progress: 處理中<br>success: 成功<br>failure: 失敗 | `AWARD_COMPENSATE_LOG.STATUS` |
140 +| 4 | error | String | * | 錯誤訊息 | `AWARD_COMPENSATE_LOG.ERROR` |
141 +| 4 | create_time | Datetime | | 日誌建立時間 (補派獎完成時間) | `AWARD_COMPENSATE_LOG.CREATE_TIME` |
142 +
143 +#### record
144 +
145 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
146 +| ---| ---| ---| ---| ---| --- |
147 +| 4 | id | Integer | | 派獎紀錄 ID | `AWARD_RECORD.ID` |
148 +| 4 | trans_id | String | | 交易 ID (UUID) | `AWARD_RECORD.TRANS_ID` |
149 +| 4 | award_id | Integer | | 獎項 ID | `AWARD_RECORD.AWARD_ID` |
150 +| 4 | user_id | String | | 身份證字號 | `AWARD_RECORD.USER_ID` |
151 +| 4 | deliver_amount | Integer | | 派送數量 | `AWARD_RECORD.DELIVER_AMOUNT` |
152 +| 4 | status | Enum | | 執行狀態:<br>PENDING: 待派獎<br>PROGRESS: 處理中<br>DONE: 完成<br>ERROR_PROGRESS: 異常處理中 | `AWARD_RECORD.STATUS` |
153 +| 4 | result | Enum | * | 執行結果:<br>SUCCESS: 成功<br>CHECK: 確認中<br>FAIL: 失敗 | `AWARD_RECORD.RESULT` |
154 +| 4 | channel_source | Enum | | 派獎來源通路:<br>WEBA: WEBA<br>MISSION_BOARD: 任務牆<br>PERSONAL_ACTIVITY: 個人化專屬活動 | `AWARD_RECORD.CHANNEL_SOURCE` |
155 +| 4 | push_batch_id | String | * | 推播 BATCH ID | `AWARD_RECORD.PUSH_BATCH_ID` |
156 +| 4 | queue_time | Datetime | * | 進 QUEUE 時間 | `AWARD_RECORD.QUEUE_TIME` |
157 +| 4 | claim_time | Datetime | | 領獎時間 | `AWARD_RECORD.CLAIM_TIME` |
158 +| 4 | issue_time | Datetime | * | 派獎成功時間 | `AWARD_RECORD.ISSUE_TIME` |
159 +| 4 | estimate_deliver_time | Datetime | | 預計執行時間 | `AWARD_RECORD.ESTIMATE_DELIVER_TIME` |
160 +| 4 | create_time | Datetime | | 建立時間 | `AWARD_RECORD.CREATE_TIME` |
161 +| 4 | update_time | Datetime | * | 更新時間 | `AWARD_RECORD.UPDATE_TIME` |
162 +
163 +#### task
164 +
165 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
166 +| ---| ---| ---| ---| ---| --- |
167 +| 4 | id | String | | 任務 ID (UUID) | `CMS_TASK.ID` |
168 +| 4 | task_id | String | | Celery 任務 ID | `CMS_TASK.TASK_ID` |
169 +| 4 | name | String | | 任務名稱 | `CMS_TASK.NAME` |
170 +| 4 | state | Enum | | 任務狀態 | `CMS_TASK.STATE` |
171 +| 4 | type | Enum | | 任務類型 | `CMS_TASK.TYPE` |
172 +| 4 | queue | String | * | 佇列名稱 | `CMS_TASK.QUEUE` |
173 +| 4 | eta | Datetime | * | 預計執行時間 | `CMS_TASK.ETA` |
174 +| 4 | retries | Integer | | 重試次數 | `CMS_TASK.RETRIES` |
175 +| 4 | root_id | String | * | 根任務 ID | `CMS_TASK.ROOT_ID` |
176 +| 4 | parent_id | String | * | 父任務 ID | `CMS_TASK.PARENT_ID` |
177 +| 4 | create_time | Datetime | | 建立時間 | `CMS_TASK.CREATE_TIME` |
178 +| 4 | update_time | Datetime | | 更新時間 | `CMS_TASK.UPDATE_TIME` |
179 +
180 +#### award
181 +
182 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
183 +| ---| ---| ---| ---| ---| --- |
184 +| 4 | id | Integer | | 獎項 ID | `AWARD.ID` |
185 +| 4 | code | String | | 獎項代號 | `AWARD.CODE` |
186 +| 4 | name | String | | 獎項名稱 | `AWARD.NAME` |
187 +| 4 | group_id | Integer | | 獎項群 ID | `AWARD.GROUP_ID` |
188 +| 4 | active_status | Enum | | 獎項狀態:<br>ACTIVE: 啟用<br>INACTIVE: 停用 | `AWARD.ACTIVE_STATUS` |
189 +| 4 | process_status | Enum | | 執行狀態:<br>AVAILABLE: 可用<br>FULL: 已額滿<br>EXECUTED: 排程已執行 | `AWARD.PROCESS_STATUS` |
190 +| 4 | award_type | Enum | | 獎項類型:<br>ORCA_POINT: 小樹點<br>QWARE: Qware 點數<br>SELFGEN_VOUCHER: 自建票券<br>EDENRED: Edenred<br>SYSTEX: Systex | `AWARD.AWARD_TYPE` |
191 +| 4 | deliver_type | Enum | | 發送類型:<br>IMMEDIATE: 立即<br>ETA: 指定時間 | `AWARD.DELIVER_TYPE` |
192 +| 4 | deliver_amount | Integer | | 發送數量(每次) | `AWARD.DELIVER_AMOUNT` |
193 +| 4 | deliver_limit | Integer | | 發送次數上限 | `AWARD.DELIVER_LIMIT` |
194 +| 4 | deliver_time | Datetime | * | 發送時間 | `AWARD.DELIVER_TIME` |
195 +| 4 | create_time | Datetime | | 建立時間 | `AWARD.CREATE_TIME` |
196 +| 4 | update_time | Datetime | * | 更新時間 | `AWARD.UPDATE_TIME` |
197 +
198 +#### award_group
199 +
200 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
201 +| ---| ---| ---| ---| ---| --- |
202 +| 4 | id | Integer | | 獎項群 ID | `AWARD_GROUP.ID` |
203 +| 4 | name | String | | 獎項群名稱 | `AWARD_GROUP.NAME` |
204 +| 4 | status | Enum | | 獎項群狀態:<br>ACTIVE: 上架<br>INACTIVE: 下架<br>RETIRED: 永久下架 | `AWARD_GROUP.STATUS` |
205 +| 4 | start_time | Datetime | * | 獎項群開始時間 | `AWARD_GROUP.START_TIME` |
206 +| 4 | end_time | Datetime | * | 獎項群結束時間 | `AWARD_GROUP.END_TIME` |
207 +| 4 | create_time | Datetime | | 建立時間 | `AWARD_GROUP.CREATE_TIME` |
208 +| 4 | update_time | Datetime | * | 更新時間 | `AWARD_GROUP.UPDATE_TIME` |
209 +
210 +#### member
211 +
212 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
213 +| ---| ---| ---| ---| ---| --- |
214 +| 4 | id | String | | 身份證字號 (台灣 ID) | `ACCOUNT.ID` |
215 +| 4 | invite_code | String | * | 推薦碼 (會員編號) | `ACCOUNT.INVITE_CODE` |
216 +| 4 | isverified | String | | 是否會員驗身 | `ACCOUNT.ISVERIFIED` |
217 +
218 +#### requester
219 +
220 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
221 +| ---| ---| ---| ---| ---| --- |
222 +| 4 | id | Integer | | 使用者 ID | `CMS_USER.ID` |
223 +| 4 | username | String | | 帳號 | `CMS_USER.USERNAME` |
224 +| 4 | name | String | | 姓名 | `CMS_USER.NAME` |
225 +| 4 | enterprise_id | String | * | 集團員編 | `CMS_USER.ENTERPRISE_ID` |
226 +| 4 | department | String | * | 處部 | `CMS_USER.DEPARTMENT` |
227 +| 4 | division | String | * | 科 | `CMS_USER.DIVISION` |
228 +| 4 | title | String | * | 職稱 | `CMS_USER.TITLE` |
229 +
230 +```json
231 +// Example:
232 +{
233 + "status": "SUCCESS",
234 + "data": {
235 + "items": [
236 + {
237 + "compensate": {
238 + "id": 1001,
239 + "award_id": 5001,
240 + "task_id": "TASK_2024120501",
241 + "requester_id": 101,
242 + "create_time": "2024/12/05 10:30:00",
243 + "update_time": "2024/12/05 10:30:00"
244 + },
245 + "compensate_log": {
246 + "id": 2001,
247 + "compensate_id": 1001,
248 + "record_id": 3001,
249 + "status": "success",
250 + "error": null,
251 + "create_time": "2024/12/05 10:35:00"
252 + },
253 + "record": {
254 + "id": 3001,
255 + "trans_id": "uuid-trans-12345-abcde",
256 + "award_id": 5001,
257 + "user_id": "A123456789",
258 + "deliver_amount": 100,
259 + "status": "DONE",
260 + "result": "SUCCESS",
261 + "channel_source": "WEBA",
262 + "push_batch_id": null,
263 + "queue_time": "2024/12/05 10:30:00",
264 + "claim_time": "2024/12/05 10:30:00",
265 + "issue_time": "2024/12/05 10:35:00",
266 + "estimate_deliver_time": "2024/12/05 10:30:00",
267 + "create_time": "2024/12/05 10:30:00",
268 + "update_time": "2024/12/05 10:35:00"
269 + },
270 + "task": {
271 + "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
272 + "task_id": "celery-task-uuid-12345",
273 + "name": "award_compensate_task",
274 + "state": "SUCCESS",
275 + "type": "ASYNC",
276 + "queue": "default",
277 + "eta": null,
278 + "retries": 0,
279 + "root_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
280 + "parent_id": null,
281 + "create_time": "2024/12/05 10:30:00",
282 + "update_time": "2024/12/05 10:35:00"
283 + },
284 + "award": {
285 + "id": 5001,
286 + "code": "STARBUCKS_GIFT_100",
287 + "name": "星巴克100元禮券",
288 + "group_id": 100,
289 + "active_status": "ACTIVE",
290 + "process_status": "AVAILABLE",
291 + "award_type": "ORCA_POINT",
292 + "deliver_type": "IMMEDIATE",
293 + "deliver_amount": 100,
294 + "deliver_limit": 1,
295 + "deliver_time": null,
296 + "create_time": "2024/11/01 00:00:00",
297 + "update_time": "2024/11/15 10:20:00"
298 + },
299 + "award_group": {
300 + "id": 100,
301 + "name": "星巴克12月活動",
302 + "status": "ACTIVE",
303 + "start_time": "2024/12/01 00:00:00",
304 + "end_time": "2024/12/31 23:59:59",
305 + "create_time": "2024/11/15 00:00:00",
306 + "update_time": "2024/11/20 10:00:00"
307 + },
308 + "member": {
309 + "id": "A123456789",
310 + "invite_code": "ABC12345",
311 + "isverified": "Y"
312 + },
313 + "requester": {
314 + "id": 101,
315 + "username": "admin001",
316 + "name": "張三",
317 + "enterprise_id": "E001",
318 + "department": "資訊處",
319 + "division": "開發科",
320 + "title": "工程師"
321 + }
322 + },
323 + {
324 + "compensate": {
325 + "id": 1002,
326 + "award_id": 5002,
327 + "task_id": "TASK_2024120502",
328 + "requester_id": 102,
329 + "create_time": "2024/12/05 11:00:00",
330 + "update_time": "2024/12/05 11:00:00"
331 + },
332 + "compensate_log": {
333 + "id": 2002,
334 + "compensate_id": 1002,
335 + "record_id": 3002,
336 + "status": "failure",
337 + "error": "API connection timeout",
338 + "create_time": "2024/12/05 11:05:00"
339 + },
340 + "record": {
341 + "id": 3002,
342 + "trans_id": "uuid-trans-67890-fghij",
343 + "award_id": 5002,
344 + "user_id": "B987654321",
345 + "deliver_amount": 50,
346 + "status": "ERROR_PROGRESS",
347 + "result": "FAIL",
348 + "channel_source": "MISSION_BOARD",
349 + "push_batch_id": "BATCH_20241205_001",
350 + "queue_time": "2024/12/05 11:00:00",
351 + "claim_time": "2024/12/05 11:00:00",
352 + "issue_time": null,
353 + "estimate_deliver_time": "2024/12/05 11:00:00",
354 + "create_time": "2024/12/05 11:00:00",
355 + "update_time": "2024/12/05 11:05:00"
356 + },
357 + "task": {
358 + "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
359 + "task_id": "celery-task-uuid-67890",
360 + "name": "award_compensate_task",
361 + "state": "FAILURE",
362 + "type": "ASYNC",
363 + "queue": "default",
364 + "eta": null,
365 + "retries": 3,
366 + "root_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
367 + "parent_id": null,
368 + "create_time": "2024/12/05 11:00:00",
369 + "update_time": "2024/12/05 11:05:00"
370 + },
371 + "award": {
372 + "id": 5002,
373 + "code": "SEVEN_GIFT_50",
374 + "name": "7-11 50元禮券",
375 + "group_id": 101,
376 + "active_status": "ACTIVE",
377 + "process_status": "AVAILABLE",
378 + "award_type": "QWARE",
379 + "deliver_type": "IMMEDIATE",
380 + "deliver_amount": 50,
381 + "deliver_limit": 1,
382 + "deliver_time": null,
383 + "create_time": "2024/11/01 00:00:00",
384 + "update_time": "2024/11/20 14:30:00"
385 + },
386 + "award_group": {
387 + "id": 101,
388 + "name": "7-11禮券活動",
389 + "status": "ACTIVE",
390 + "start_time": "2024/12/01 00:00:00",
391 + "end_time": "2024/12/31 23:59:59",
392 + "create_time": "2024/11/10 00:00:00",
393 + "update_time": "2024/11/25 15:00:00"
394 + },
395 + "member": {
396 + "id": "B987654321",
397 + "invite_code": "XYZ98765",
398 + "isverified": "Y"
399 + },
400 + "requester": {
401 + "id": 102,
402 + "username": "admin002",
403 + "name": "李四",
404 + "enterprise_id": "E002",
405 + "department": "業務處",
406 + "division": "營運科",
407 + "title": "專員"
408 + }
409 + }
410 + ],
411 + "pagination": {
412 + "page": 1,
413 + "per_page": 20,
414 + "total": 2,
415 + "pages": 1
416 + }
417 + }
418 +}
419 +```
420 +
421 +#### ERROR CODE
422 +
423 +| HTTP Status | ErrorCode | Message | Desc |
424 +| ---| ---| ---| --- |
425 +| 400 | INVALID_PARAMETER | Invalid parameter | 參數錯誤 |
426 +| 401 | UNAUTHORIZED | Unauthorized | 未授權 |
427 +| 403 | FORBIDDEN | Forbidden | 無權限 |
428 +| 500 | INTERNAL_SERVER_ERROR | Internal server error | 系統錯誤 |