#b1116
Back
2025/12/22
1 min read

派獎異常同步

派獎異常同步.md
194 additions, 0 deletions
... ... @@ -1 +1,195 @@
1 +# 派獎 - 派獎同步
2 +### SUMMARY
3 +查詢所有啟用中的獎項群組及其獎項,檢查是否有派獎狀態為確認中 (CHECK) 的紀錄,若有則需要與第三方系統同步以取得最終派獎結果。此 API 支援多種獎項類型,透過 URL 參數 `award_type` 指定要同步的獎項類型。回傳需要同步的獎項清單及 Celery 任務 ID。
4 +
5 +#### AwardType 參數說明
6 +* `ORCA_POINT`: ORCA 點數獎項,透過 orca-hub 系統與神坊進行同步
7 +* `QWARE`: 待補
8 +* `SELFGEN_VOUCHER`: 待補
9 +* `EDENRED`: 待補
10 +* `SYSTEX`: 待補
11 +
12 +### REFERENCE TABLE
13 +
14 +**獎項相關**
15 +* `DBMT.AWARD_GROUP`
16 +* `DBMT.AWARD`
17 +* `DBMT.AWARD_RECORD`
18 +
19 +**任務相關**
20 +* `DBMT.CMS_TASK`
21 +
22 +### ATTRIBUTES
23 +* METHOD: **POST**
24 +* PATH: `/api/features/award/record/sync/{str: award_type}`
25 +* LOGIN REQUIRED: **TRUE**
26 +* FEATURE: `AWARD_RECORD`
27 +* PERMISSION: `UPDATE`
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 +```dart
49 +// Example
50 +POST /api/features/award/record/sync/ORCA_POINT
51 +```
52 +
53 +### RESPONSE
54 +#### STATUS CODE
55 +* 202
56 +
57 +#### HEADERS
58 +
59 +| Name | Type/Len | Desc |
60 +| ---| ---| --- |
61 +| Authorization | String | JWT Token |
62 +| X-Request-Id | String | Returning Request-Id |
63 +
64 +```json
65 +// Example:
66 +{
67 + "Authorization": "Bearer jwt-token",
68 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
69 +}
70 +```
71 +
72 +#### BODY
73 +
74 +| Level | Name | Type/Len | Nullable(*) | Desc |
75 +| ---| ---| ---| ---| --- |
76 +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) |
77 +| 1 | data | Dict | | 通用資料包裝 |
78 +
79 +#### Data
80 +
81 +| Level | Name | Type/Len | Nullable(*) | Desc |
82 +| ---| ---| ---| ---| --- |
83 +| 2 | task_id | String | | Celery 任務 ID |
84 +| 2 | items | List | | 需要同步的獎項清單 |
85 +
86 +#### items
87 +
88 +| Level | Name | Type/Len | Nullable(*) | Desc |
89 +| ---| ---| ---| ---| --- |
90 +| 3 | award | Dict | | 獎項資訊 |
91 +| 3 | award_group | Dict | | 獎項群組資訊 |
92 +| 3 | check_count | Integer | | 確認中的派獎紀錄數量 |
93 +| 3 | success_count | Integer | | 成功的派獎紀錄數量 |
94 +| 3 | failure_count | Integer | | 失敗的派獎紀錄數量 |
95 +
96 +#### award
97 +
98 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
99 +| ---| ---| ---| ---| ---| --- |
100 +| 4 | id | Integer | | 獎項 ID | `AWARD.ID` |
101 +| 4 | group_id | Integer | | 獎項群組 ID | `AWARD.GROUP_ID` |
102 +| 4 | code | String | | 獎項代號 | `AWARD.CODE` |
103 +| 4 | name | String | | 獎項名稱 | `AWARD.NAME` |
104 +| 4 | type | Enum | | 獎項類型 | `AWARD.TYPE` |
105 +| 4 | status | Enum | | 獎項狀態 | `AWARD.STATUS` |
106 +
107 +#### award_group
108 +
109 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
110 +| ---| ---| ---| ---| ---| --- |
111 +| 4 | id | Integer | | 獎項群組 ID | `AWARD_GROUP.ID` |
112 +| 4 | name | String | | 獎項群組名稱 | `AWARD_GROUP.NAME` |
113 +| 4 | status | Enum | | 獎項群組狀態 | `AWARD_GROUP.STATUS` |
114 +| 4 | start_time | Datetime | | 開始時間 | `AWARD_GROUP.START_TIME` |
115 +| 4 | end_time | Datetime | | 結束時間 | `AWARD_GROUP.END_TIME` |
116 +
117 +```json
118 +// Example:
119 +{
120 + "status": "SUCCESS",
121 + "data": {
122 + "task_id": "TASK_2024120502",
123 + "items": [
124 + {
125 + "award": {
126 + "id": 5001,
127 + "group_id": 100,
128 + "code": "ORCA_POINT_100",
129 + "name": "100 ORCA點數",
130 + "type": "ORCA_POINT",
131 + "status": "ACTIVE"
132 + },
133 + "award_group": {
134 + "id": 100,
135 + "name": "雙12購物節活動",
136 + "status": "ACTIVE",
137 + "start_time": "2024/12/01 00:00:00",
138 + "end_time": "2024/12/31 23:59:59"
139 + },
140 + "check_count": 5,
141 + "success_count": 0,
142 + "failure_count": 0
143 + },
144 + {
145 + "award": {
146 + "id": 5002,
147 + "group_id": 100,
148 + "code": "ORCA_POINT_500",
149 + "name": "500 ORCA點數",
150 + "type": "ORCA_POINT",
151 + "status": "ACTIVE"
152 + },
153 + "award_group": {
154 + "id": 100,
155 + "name": "雙12購物節活動",
156 + "status": "ACTIVE",
157 + "start_time": "2024/12/01 00:00:00",
158 + "end_time": "2024/12/31 23:59:59"
159 + },
160 + "check_count": 3,
161 + "success_count": 0,
162 + "failure_count": 0
163 + },
164 + {
165 + "award": {
166 + "id": 5010,
167 + "group_id": 101,
168 + "code": "ORCA_POINT_1000",
169 + "name": "1000 ORCA點數",
170 + "type": "ORCA_POINT",
171 + "status": "ACTIVE"
172 + },
173 + "award_group": {
174 + "id": 101,
175 + "name": "會員日專屬活動",
176 + "status": "ACTIVE",
177 + "start_time": "2024/12/10 00:00:00",
178 + "end_time": "2024/12/20 23:59:59"
179 + },
180 + "check_count": 2,
181 + "success_count": 0,
182 + "failure_count": 0
183 + }
184 + ]
185 + }
186 +}
187 +```
188 +
189 +#### ERROR CODE
190 +
191 +| HTTP Status | ErrorCode | Message | Desc |
192 +| ---| ---| ---| --- |
193 +| 404 | AwardRecordError.NO_RECORDS_TO_SYNC | No award records found that need synchronization | 沒有需要同步的派獎紀錄 |
194 +| 409 | AwardRecordError.SYNC_ALREADY_RUNNING | Award record synchronization already in progress | 派獎同步作業已在執行中 |