更新外观模块
This commit is contained in:
6323
aiimage-backend-a.log
Normal file
6323
aiimage-backend-a.log
Normal file
File diff suppressed because it is too large
Load Diff
5385
aiimage-backend-b.log
Normal file
5385
aiimage-backend-b.log
Normal file
File diff suppressed because it is too large
Load Diff
@@ -301,6 +301,44 @@ class SimilarAsinTask(TaskBase):
|
||||
})
|
||||
return normalized
|
||||
|
||||
def fetch_parsed_payload(self, task_id, user_id=1):
|
||||
url = f"{DELETE_BRAND_API_BASE}/api/similar-asin/tasks/{task_id}/parsed-payload"
|
||||
response = requests.get(url, params={"user_id": user_id}, timeout=300, verify=False)
|
||||
response.raise_for_status()
|
||||
payload = response.json() if response.text else {}
|
||||
if isinstance(payload, dict) and payload.get("success"):
|
||||
return payload.get("data") or {}
|
||||
raise RuntimeError(f"获取货源查询解析载荷失败: {payload}")
|
||||
|
||||
@staticmethod
|
||||
def _count_payload_rows(data):
|
||||
rows = data.get("rows") or data.get("items") or []
|
||||
if isinstance(rows, list) and rows:
|
||||
return len(rows)
|
||||
|
||||
groups = data.get("groups") or []
|
||||
if not isinstance(groups, list):
|
||||
return 0
|
||||
|
||||
total = 0
|
||||
for group in groups:
|
||||
if isinstance(group, dict) and isinstance(group.get("items"), list):
|
||||
total += len(group.get("items"))
|
||||
return total
|
||||
|
||||
def _merge_parsed_payload(self, data, parsed_payload):
|
||||
payload_rows = parsed_payload.get("allItems") or parsed_payload.get("items") or []
|
||||
merged = {
|
||||
**data,
|
||||
"groups": parsed_payload.get("groups") or [],
|
||||
"rows": payload_rows,
|
||||
}
|
||||
if parsed_payload.get("aiPrompt"):
|
||||
merged["prompt"] = parsed_payload.get("aiPrompt")
|
||||
if parsed_payload.get("apiKey") and not merged.get("api_key"):
|
||||
merged["api_key"] = parsed_payload.get("apiKey")
|
||||
return merged
|
||||
|
||||
def process_task(self, task_data: dict):
|
||||
"""处理审批任务主入口
|
||||
|
||||
@@ -310,6 +348,21 @@ class SimilarAsinTask(TaskBase):
|
||||
try:
|
||||
data = task_data.get("data", {})
|
||||
task_id = data.get("taskId")
|
||||
if task_id:
|
||||
queued_rows = self._count_payload_rows(data)
|
||||
try:
|
||||
parsed_payload = self.fetch_parsed_payload(task_id, data.get("user_id") or data.get("userId") or 1)
|
||||
data = self._merge_parsed_payload(data, parsed_payload)
|
||||
self.log(
|
||||
f"similar asin task {task_id} loaded full parsed payload from Java, queuedRows={queued_rows}, fullRows={self._count_payload_rows(data)}"
|
||||
)
|
||||
except Exception as e:
|
||||
if not queued_rows:
|
||||
raise
|
||||
self.log(
|
||||
f"similar asin task {task_id} failed to load full parsed payload, fallback to queued rows={queued_rows}: {e}",
|
||||
"WARNING"
|
||||
)
|
||||
groups = self.normalize_groups(data)
|
||||
|
||||
if not task_id:
|
||||
@@ -447,7 +500,7 @@ class SimilarAsinTask(TaskBase):
|
||||
"""回传处理结果到API
|
||||
"""
|
||||
|
||||
url = f"{DELETE_BRAND_API_BASE}/api/appearance-patent/tasks/{task_id}/result"
|
||||
url = f"{DELETE_BRAND_API_BASE}/api/similar-asin/tasks/{task_id}/result"
|
||||
|
||||
payload ={
|
||||
"submissionId": f"{int(time.time())}",
|
||||
|
||||
1
app/assets/appearance-patent-Bp6cDWSD.css
Normal file
1
app/assets/appearance-patent-Bp6cDWSD.css
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
.module-page[data-v-6542ed18]{min-height:100vh;background:#1a1a1a}.main-content[data-v-6542ed18]{display:flex;height:calc(100vh - 56px);min-height:calc(100vh - 56px)}.left-panel[data-v-6542ed18]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-6542ed18]{flex:1;min-width:0;background:#1a1a1a;display:flex;flex-direction:column}.section-title[data-v-6542ed18],.subsection-title[data-v-6542ed18]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-6542ed18]{border:1px dashed #3a3a3a;border-radius:10px;padding:18px;background:#252525;margin-bottom:18px}.hint[data-v-6542ed18],.loading-msg[data-v-6542ed18],.files[data-v-6542ed18],.muted[data-v-6542ed18]{color:#888;font-size:12px;line-height:1.5}.link[data-v-6542ed18]{color:#6ea8fe;text-decoration:none}.link[data-v-6542ed18]:hover{color:#9fc5ff}.btns[data-v-6542ed18],.run-row[data-v-6542ed18]{display:flex;gap:10px;flex-wrap:wrap}.opt-btn[data-v-6542ed18],.btn-run[data-v-6542ed18],.btn-delete[data-v-6542ed18],.download[data-v-6542ed18]{border:none;cursor:pointer;border-radius:7px}.opt-btn[data-v-6542ed18]{padding:8px 14px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a}.btn-run[data-v-6542ed18]{padding:10px 18px;color:#fff;background:#3498db;font-weight:600}.btn-queue[data-v-6542ed18]{background:#27ae60}.btn-run[data-v-6542ed18]:disabled{opacity:.55;cursor:not-allowed}.selected-files[data-v-6542ed18]{margin-top:14px;color:#999;font-size:12px;word-break:break-all}.selected-files span[data-v-6542ed18]{display:block;margin:4px 0}.prompt-card[data-v-6542ed18]{margin-bottom:18px}.prompt-input[data-v-6542ed18]{width:100%;box-sizing:border-box;resize:vertical;min-height:180px;padding:10px 12px;border:1px solid #333;border-radius:8px;background:#202020;color:#d8d8d8;font-size:12px;line-height:1.6;outline:none}.prompt-input[data-v-6542ed18]:focus{border-color:#3498db}.prompt-default-label[data-v-6542ed18]{margin-top:10px;color:#8d8d8d;font-size:12px}.prompt-preview[data-v-6542ed18]{margin-top:10px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#9ea7b3;font-size:12px;line-height:1.6;white-space:pre-wrap}.parse-card[data-v-6542ed18],.queue-payload[data-v-6542ed18]{margin-top:14px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#b8c1cc;font-size:12px}.queue-payload[data-v-6542ed18]{max-height:220px;overflow:auto;color:#8fd3ff;white-space:pre-wrap}.panel-header[data-v-6542ed18]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-6542ed18]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-6542ed18]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-6542ed18]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e}.summary-card strong[data-v-6542ed18]{display:block;margin-top:8px;color:#eaf4ff;font-size:22px}.summary-label[data-v-6542ed18]{color:#8d8d8d;font-size:12px}.result-list-wrap[data-v-6542ed18]{border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e;min-height:180px;margin:0 0 16px}.result-list-header[data-v-6542ed18]{display:flex;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2a2a2a;color:#ddd;font-size:14px}.empty-tasks[data-v-6542ed18]{color:#666;font-size:13px;padding:18px;text-align:center}.result-table[data-v-6542ed18]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.task-list[data-v-6542ed18]{list-style:none;margin:0;padding:12px}.task-item[data-v-6542ed18]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-6542ed18]{flex:1;min-width:0}.id[data-v-6542ed18]{color:#e0e0e0;font-size:13px;font-weight:600}.task-right[data-v-6542ed18]{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.status[data-v-6542ed18]{padding:4px 10px;border-radius:6px;font-size:12px}.status.success[data-v-6542ed18]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-6542ed18]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-6542ed18]{background:#3498db2e;color:#3498db}.result-hint[data-v-6542ed18]{margin-top:6px;color:#e0b96d}.download[data-v-6542ed18]{padding:6px 10px;color:#d6ecff;background:#3498db2e}.btn-delete[data-v-6542ed18]{padding:6px 10px;color:#ff8f8f;background:#e74c3c1f}@media(max-width:1100px){.main-content[data-v-6542ed18]{flex-direction:column;height:auto}.left-panel[data-v-6542ed18]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-6542ed18]{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
.module-page[data-v-89575b53]{min-height:100vh;background:#1a1a1a}.main-content[data-v-89575b53]{display:flex;height:calc(100vh - 56px);min-height:calc(100vh - 56px)}.left-panel[data-v-89575b53]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-89575b53]{flex:1;min-width:0;background:#1a1a1a;display:flex;flex-direction:column}.section-title[data-v-89575b53],.subsection-title[data-v-89575b53]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-89575b53]{border:1px dashed #3a3a3a;border-radius:10px;padding:18px;background:#252525;margin-bottom:18px}.hint[data-v-89575b53],.loading-msg[data-v-89575b53],.files[data-v-89575b53],.muted[data-v-89575b53]{color:#888;font-size:12px;line-height:1.5}.link[data-v-89575b53]{color:#6ea8fe;text-decoration:none}.link[data-v-89575b53]:hover{color:#9fc5ff}.btns[data-v-89575b53],.run-row[data-v-89575b53]{display:flex;gap:10px;flex-wrap:wrap}.opt-btn[data-v-89575b53],.btn-run[data-v-89575b53],.btn-delete[data-v-89575b53],.download[data-v-89575b53]{border:none;cursor:pointer;border-radius:7px}.opt-btn[data-v-89575b53]{padding:8px 14px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a}.btn-run[data-v-89575b53]{padding:10px 18px;color:#fff;background:#3498db;font-weight:600}.btn-queue[data-v-89575b53]{background:#27ae60}.btn-run[data-v-89575b53]:disabled{opacity:.55;cursor:not-allowed}.selected-files[data-v-89575b53]{margin-top:14px;color:#999;font-size:12px;word-break:break-all}.selected-files span[data-v-89575b53]{display:block;margin:4px 0}.prompt-card[data-v-89575b53]{margin-bottom:18px}.prompt-input[data-v-89575b53]{width:100%;box-sizing:border-box;resize:vertical;min-height:180px;padding:10px 12px;border:1px solid #333;border-radius:8px;background:#202020;color:#d8d8d8;font-size:12px;line-height:1.6;outline:none}.prompt-input[data-v-89575b53]:focus{border-color:#3498db}.prompt-default-label[data-v-89575b53]{margin-top:10px;color:#8d8d8d;font-size:12px}.prompt-preview[data-v-89575b53]{margin-top:10px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#9ea7b3;font-size:12px;line-height:1.6;white-space:pre-wrap}.parse-card[data-v-89575b53],.queue-payload[data-v-89575b53]{margin-top:14px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#b8c1cc;font-size:12px}.queue-payload[data-v-89575b53]{max-height:220px;overflow:auto;color:#8fd3ff;white-space:pre-wrap}.panel-header[data-v-89575b53]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-89575b53]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-89575b53]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-89575b53]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e}.summary-card strong[data-v-89575b53]{display:block;margin-top:8px;color:#eaf4ff;font-size:22px}.summary-label[data-v-89575b53]{color:#8d8d8d;font-size:12px}.result-list-wrap[data-v-89575b53]{border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e;min-height:180px;margin:0 0 16px}.result-list-header[data-v-89575b53]{display:flex;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2a2a2a;color:#ddd;font-size:14px}.empty-tasks[data-v-89575b53]{color:#666;font-size:13px;padding:18px;text-align:center}.result-table[data-v-89575b53]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.task-list[data-v-89575b53]{list-style:none;margin:0;padding:12px}.task-item[data-v-89575b53]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-89575b53]{flex:1;min-width:0}.id[data-v-89575b53]{color:#e0e0e0;font-size:13px;font-weight:600}.task-right[data-v-89575b53]{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.status[data-v-89575b53]{padding:4px 10px;border-radius:6px;font-size:12px}.status.success[data-v-89575b53]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-89575b53]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-89575b53]{background:#3498db2e;color:#3498db}.result-hint[data-v-89575b53]{margin-top:6px;color:#e0b96d}.download[data-v-89575b53]{padding:6px 10px;color:#d6ecff;background:#3498db2e}.btn-delete[data-v-89575b53]{padding:6px 10px;color:#ff8f8f;background:#e74c3c1f}@media(max-width:1100px){.main-content[data-v-89575b53]{flex-direction:column;height:auto}.left-panel[data-v-89575b53]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-89575b53]{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{b6 as r}from"./pywebview-RBTI4RuH.js";const n="";function s(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{s as e};
|
||||
@@ -1 +1 @@
|
||||
import{a_ as r}from"./pywebview-Cz_PRNOK.js";const n="";function a(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{a as e};
|
||||
import{ba as r}from"./pywebview-C5IohfcY.js";const n="";function a(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{a as e};
|
||||
@@ -1 +1 @@
|
||||
import{b6 as r}from"./pywebview-BcagetkZ.js";const n="";function s(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{s as e};
|
||||
import{b9 as r}from"./pywebview-BIpip8XG.js";const n="";function s(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{s as e};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/assets/el-table-column-BoPoyBFZ.css
Normal file
1
app/assets/el-table-column-BoPoyBFZ.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/assets/pywebview-DNJAt1gR.css
Normal file
1
app/assets/pywebview-DNJAt1gR.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
app/assets/similar-asin-BrV2TP1l.css
Normal file
1
app/assets/similar-asin-BrV2TP1l.css
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/similar-asin-C5qmxZai.css
Normal file
1
app/assets/similar-asin-C5qmxZai.css
Normal file
File diff suppressed because one or more lines are too long
1
app/assets/similar-asin-CIcr3Vk8.css
Normal file
1
app/assets/similar-asin-CIcr3Vk8.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,9 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>格式转换 - 数富AI</title>
|
||||
<script type="module" crossorigin src="/assets/convert.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-Cz_PRNOK.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-Cs6TxmtW.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-Dp5dN8OO.css">
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-BIpip8XG.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-D0euV8A2.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-DkmZpCeB.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/convert-BKSNvX8i.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>数据去重 - 数富AI</title>
|
||||
<script type="module" crossorigin src="/assets/dedupe.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-Cz_PRNOK.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-Cs6TxmtW.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-Dp5dN8OO.css">
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-BIpip8XG.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-D0euV8A2.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-DkmZpCeB.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/dedupe-DNlVfFj-.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>删除品牌 - 数富AI</title>
|
||||
<script type="module" crossorigin src="/assets/delete-brand.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-Cz_PRNOK.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-Cs6TxmtW.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-BIpip8XG.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-D0euV8A2.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/categorized-timers-JPA-olTr.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-Dp5dN8OO.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-DkmZpCeB.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/delete-brand-BJod9K65.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>数据拆分 - 数富AI</title>
|
||||
<script type="module" crossorigin src="/assets/split.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-Cz_PRNOK.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-Cs6TxmtW.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-Dp5dN8OO.css">
|
||||
<link rel="modulepreload" crossorigin href="/assets/pywebview-BIpip8XG.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/brand-D0euV8A2.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/pywebview-DkmZpCeB.css">
|
||||
<link rel="stylesheet" crossorigin href="/assets/split-BoBVrLdC.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -35,6 +35,7 @@ public class TaskOperationLockConfig implements WebMvcConfigurer {
|
||||
private static final Pattern TASK_RESULT_PATH = Pattern.compile(".*/api/([^/]+)/tasks/(\\d+)/result/?$");
|
||||
private static final Set<String> MUTATING_METHODS = Set.of("POST", "PUT", "PATCH", "DELETE");
|
||||
private static final long RESULT_SUBMIT_WAIT_MILLIS = 10 * 60 * 1000L;
|
||||
private static final long DELETE_WAIT_MILLIS = 60 * 1000L;
|
||||
private static final String LOCK_ATTRIBUTE = TaskOperationLockInterceptor.class.getName() + ".LOCK";
|
||||
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
@@ -71,6 +72,9 @@ public class TaskOperationLockConfig implements WebMvcConfigurer {
|
||||
if ("POST".equals(method) && TASK_RESULT_PATH.matcher(uri == null ? "" : uri).matches()) {
|
||||
return RESULT_SUBMIT_WAIT_MILLIS;
|
||||
}
|
||||
if ("DELETE".equals(method)) {
|
||||
return DELETE_WAIT_MILLIS;
|
||||
}
|
||||
return TaskDistributedLockService.DEFAULT_WAIT_MILLIS;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.nanri.aiimage.modules.shopmatch.service.ShopMatchTaskService;
|
||||
import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -60,6 +61,7 @@ public class DeleteBrandStaleTaskService {
|
||||
private final DeleteBrandProgressProperties deleteBrandProgressProperties;
|
||||
private final DistributedJobLockService distributedJobLockService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
private final TaskFileJobService taskFileJobService;
|
||||
|
||||
@Value("${aiimage.temp-dir.retention-hours:24}")
|
||||
private long tempDirRetentionHours;
|
||||
@@ -231,6 +233,14 @@ public class DeleteBrandStaleTaskService {
|
||||
if (!hasStartedProgress) {
|
||||
hasStartedProgress = productRiskTaskCacheService.hasAnyShopMergedPayload(task.getId());
|
||||
}
|
||||
if (hasPendingAssembleJobs(task.getId(), MODULE_TYPE_PRODUCT_RISK)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] product-risk skip pending-assemble-jobs taskId={} unfinishedJobs={} activeJobs={}",
|
||||
task.getId(),
|
||||
taskFileJobService.countUnfinishedAssembleJobs(task.getId(), MODULE_TYPE_PRODUCT_RISK),
|
||||
taskFileJobService.countActiveAssembleJobs(task.getId(), MODULE_TYPE_PRODUCT_RISK));
|
||||
continue;
|
||||
}
|
||||
if (!hasStartedProgress && isWithinInitialGrace(task, initialThreshold)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] product-risk skip initial-grace taskId={} createdAt={} initialThreshold={}",
|
||||
@@ -305,6 +315,14 @@ public class DeleteBrandStaleTaskService {
|
||||
if (!hasStartedProgress) {
|
||||
hasStartedProgress = priceTrackTaskCacheService.hasAnyShopMergedPayload(task.getId());
|
||||
}
|
||||
if (hasPendingAssembleJobs(task.getId(), MODULE_TYPE_PRICE_TRACK)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] price-track skip pending-assemble-jobs taskId={} unfinishedJobs={} activeJobs={}",
|
||||
task.getId(),
|
||||
taskFileJobService.countUnfinishedAssembleJobs(task.getId(), MODULE_TYPE_PRICE_TRACK),
|
||||
taskFileJobService.countActiveAssembleJobs(task.getId(), MODULE_TYPE_PRICE_TRACK));
|
||||
continue;
|
||||
}
|
||||
if (!hasStartedProgress && isWithinInitialGrace(task, initialThreshold)) {
|
||||
stats.skippedTaskCount++;
|
||||
continue;
|
||||
@@ -380,6 +398,14 @@ public class DeleteBrandStaleTaskService {
|
||||
if (!hasStartedProgress) {
|
||||
hasStartedProgress = shopMatchTaskCacheService.hasAnyShopMergedPayload(task.getId());
|
||||
}
|
||||
if (hasPendingAssembleJobs(task.getId(), MODULE_TYPE_SHOP_MATCH)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] shop-match skip pending-assemble-jobs taskId={} unfinishedJobs={} activeJobs={}",
|
||||
task.getId(),
|
||||
taskFileJobService.countUnfinishedAssembleJobs(task.getId(), MODULE_TYPE_SHOP_MATCH),
|
||||
taskFileJobService.countActiveAssembleJobs(task.getId(), MODULE_TYPE_SHOP_MATCH));
|
||||
continue;
|
||||
}
|
||||
if (!hasStartedProgress && isWithinInitialGrace(task, initialThreshold)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] shop-match skip initial-grace taskId={} createdAt={} initialThreshold={}",
|
||||
@@ -453,6 +479,14 @@ public class DeleteBrandStaleTaskService {
|
||||
if (!hasStartedProgress) {
|
||||
hasStartedProgress = patrolDeleteTaskCacheService.hasAnyShopMergedPayload(task.getId());
|
||||
}
|
||||
if (hasPendingAssembleJobs(task.getId(), MODULE_TYPE_PATROL_DELETE)) {
|
||||
stats.skippedTaskCount++;
|
||||
log.info("[stale-check] patrol-delete skip pending-assemble-jobs taskId={} unfinishedJobs={} activeJobs={}",
|
||||
task.getId(),
|
||||
taskFileJobService.countUnfinishedAssembleJobs(task.getId(), MODULE_TYPE_PATROL_DELETE),
|
||||
taskFileJobService.countActiveAssembleJobs(task.getId(), MODULE_TYPE_PATROL_DELETE));
|
||||
continue;
|
||||
}
|
||||
if (!hasStartedProgress && isWithinInitialGrace(task, initialThreshold)) {
|
||||
stats.skippedTaskCount++;
|
||||
continue;
|
||||
@@ -612,6 +646,10 @@ public class DeleteBrandStaleTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasPendingAssembleJobs(Long taskId, String moduleType) {
|
||||
return taskFileJobService.countUnfinishedAssembleJobs(taskId, moduleType) > 0;
|
||||
}
|
||||
|
||||
private static final class ProductRiskStaleCheckStats {
|
||||
private int scannedTaskCount;
|
||||
private int finalizedTaskCount;
|
||||
|
||||
@@ -155,8 +155,10 @@ public class PatrolDeleteController {
|
||||
@Operation(summary = "查询任务记录", description = "返回当前用户在巡店删除模块中的当前任务和历史任务记录。")
|
||||
public ApiResponse<PatrolDeleteHistoryVo> history(
|
||||
@Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1")
|
||||
@RequestParam("user_id") Long userId) {
|
||||
return ApiResponse.success(patrolDeleteTaskService.listHistory(userId));
|
||||
@RequestParam("user_id") Long userId,
|
||||
@Parameter(description = "history limit, default 30, max 100", example = "30")
|
||||
@RequestParam(value = "limit", required = false) Integer limit) {
|
||||
return ApiResponse.success(patrolDeleteTaskService.listHistory(userId, limit));
|
||||
}
|
||||
|
||||
@PostMapping("/tasks/progress/batch")
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileResultEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.TaskFileJobEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskProgressSnapshotService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskResultItemService;
|
||||
@@ -68,6 +69,7 @@ public class PatrolDeleteTaskService {
|
||||
private final TaskResultItemService taskResultItemService;
|
||||
private final TaskProgressSnapshotService taskProgressSnapshotService;
|
||||
private final TaskScopePayloadStorageService taskScopePayloadStorageService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
|
||||
private FileTaskEntity loadTaskForExecution(Long taskId) {
|
||||
Map<Long, FileTaskEntity> cachedTasks = taskCacheService.getTaskCacheBatch(List.of(taskId));
|
||||
@@ -137,8 +139,13 @@ public class PatrolDeleteTaskService {
|
||||
}
|
||||
|
||||
public PatrolDeleteHistoryVo listHistory(Long userId) {
|
||||
return listHistory(userId, null);
|
||||
}
|
||||
|
||||
public PatrolDeleteHistoryVo listHistory(Long userId, Integer limit) {
|
||||
long startedAt = System.nanoTime();
|
||||
validateUserId(userId);
|
||||
int normalizedLimit = normalizeHistoryLimit(limit);
|
||||
PatrolDeleteHistoryVo vo = new PatrolDeleteHistoryVo();
|
||||
List<FileResultEntity> entities = fileResultMapper.selectList(new LambdaQueryWrapper<FileResultEntity>()
|
||||
.select(FileResultEntity::getId,
|
||||
@@ -155,7 +162,8 @@ public class PatrolDeleteTaskService {
|
||||
.eq(FileResultEntity::getModuleType, MODULE_TYPE)
|
||||
.eq(FileResultEntity::getUserId, userId)
|
||||
.orderByDesc(FileResultEntity::getCreatedAt)
|
||||
.last("limit 100"));
|
||||
.orderByDesc(FileResultEntity::getId)
|
||||
.last("limit " + normalizedLimit));
|
||||
long resultRowsLoadedAt = System.nanoTime();
|
||||
if (entities.isEmpty()) {
|
||||
vo.setItems(List.of());
|
||||
@@ -481,10 +489,21 @@ public class PatrolDeleteTaskService {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
Long taskId = entity.getTaskId();
|
||||
if (taskId == null || taskId <= 0) {
|
||||
fileResultMapper.deleteById(resultId);
|
||||
cleanupResultAuxiliaryDataFast(taskId, resultId);
|
||||
return;
|
||||
}
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLockOrThrow(taskId)) {
|
||||
FileResultEntity latestEntity = fileResultMapper.selectById(resultId);
|
||||
if (latestEntity == null || !MODULE_TYPE.equals(latestEntity.getModuleType()) || !userId.equals(latestEntity.getUserId())) {
|
||||
throw new BusinessException("record not found");
|
||||
}
|
||||
fileResultMapper.deleteById(resultId);
|
||||
cleanupResultAuxiliaryDataFast(taskId, resultId);
|
||||
reconcileTaskAfterResultRemoval(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
private void reconcileTaskAfterResultRemoval(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
@@ -560,6 +579,13 @@ public class PatrolDeleteTaskService {
|
||||
return payloadByShop;
|
||||
}
|
||||
|
||||
private int normalizeHistoryLimit(Integer limit) {
|
||||
if (limit == null || limit <= 0) {
|
||||
return 30;
|
||||
}
|
||||
return Math.min(limit, 100);
|
||||
}
|
||||
|
||||
private Map<Long, FileTaskEntity> loadTaskMap(List<FileResultEntity> entities) {
|
||||
List<Long> taskIds = entities.stream()
|
||||
.map(FileResultEntity::getTaskId)
|
||||
@@ -760,6 +786,9 @@ public class PatrolDeleteTaskService {
|
||||
long successCount = rows.stream().filter(row -> Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess())).count();
|
||||
long failedCount = rows.stream().filter(row -> Integer.valueOf(RESULT_FAILED).equals(row.getSuccess())).count();
|
||||
long pendingCount = rows.stream().filter(row -> !isResultFinished(row)).count();
|
||||
if (pendingCount == 0 && successCount > 0 && isTaskWorkbookPending(task, rows)) {
|
||||
pendingCount = 1;
|
||||
}
|
||||
task.setSuccessFileCount((int) successCount);
|
||||
task.setFailedFileCount((int) failedCount);
|
||||
task.setUpdatedAt(LocalDateTime.now());
|
||||
@@ -975,11 +1004,47 @@ public class PatrolDeleteTaskService {
|
||||
fileResultMapper.updateById(row);
|
||||
}
|
||||
}
|
||||
updateTaskStatusFromRows(task, rows);
|
||||
persistSnapshotJson(task, buildSnapshotFromDb(task, rows));
|
||||
fileTaskMapper.updateById(task);
|
||||
} finally {
|
||||
FileUtil.del(xlsx);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTaskWorkbookPending(FileTaskEntity task, List<FileResultEntity> rows) {
|
||||
if (task == null || task.getId() == null || rows == null || rows.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
FileResultEntity firstSuccess = rows.stream()
|
||||
.filter(row -> Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (firstSuccess == null) {
|
||||
return false;
|
||||
}
|
||||
if (!blank(firstSuccess.getResultFileUrl())) {
|
||||
return false;
|
||||
}
|
||||
TaskFileJobEntity job = taskFileJobService.findAssembleJob(task.getId(), MODULE_TYPE, firstSuccess.getId());
|
||||
return job != null && !"SUCCESS".equals(job.getStatus());
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLockOrThrow(Long taskId) {
|
||||
TaskDistributedLockService.LockHandle lockHandle = acquireTaskLock(taskId);
|
||||
if (lockHandle == null) {
|
||||
throw new BusinessException(40901, "浠诲姟姝e湪澶勭悊涓紝璇风◢鍚庡啀璇?");
|
||||
}
|
||||
return lockHandle;
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLock(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
return null;
|
||||
}
|
||||
return taskDistributedLockService.acquire(MODULE_TYPE, taskId);
|
||||
}
|
||||
|
||||
private void markResultSuccess(FileResultEntity row) {
|
||||
row.setSuccess(RESULT_SUCCESS);
|
||||
row.setErrorMessage(null);
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileResultEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.TaskFileJobEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskResultPayloadService;
|
||||
import com.nanri.aiimage.modules.ziniao.service.ZiniaoShopSwitchService;
|
||||
@@ -71,6 +72,7 @@ public class PriceTrackTaskService {
|
||||
private final TaskPressureProperties taskPressureProperties;
|
||||
private final TaskResultPayloadService taskResultPayloadService;
|
||||
private final TaskFileJobService taskFileJobService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
|
||||
private FileTaskEntity loadTaskForExecution(Long taskId) {
|
||||
Map<Long, FileTaskEntity> cachedTasks = priceTrackTaskCacheService.getTaskCacheBatch(List.of(taskId));
|
||||
@@ -239,8 +241,16 @@ public class PriceTrackTaskService {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
Long taskId = entity.getTaskId();
|
||||
if (taskId == null || taskId <= 0) {
|
||||
fileResultMapper.deleteById(resultId);
|
||||
return;
|
||||
}
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLockOrThrow(taskId)) {
|
||||
FileResultEntity latestEntity = fileResultMapper.selectById(resultId);
|
||||
if (latestEntity == null || !MODULE_TYPE.equals(latestEntity.getModuleType()) || !userId.equals(latestEntity.getUserId())) {
|
||||
throw new BusinessException("record not found");
|
||||
}
|
||||
fileResultMapper.deleteById(resultId);
|
||||
if (taskId != null && taskId > 0) {
|
||||
reconcileTaskAfterResultRemoval(taskId);
|
||||
}
|
||||
}
|
||||
@@ -281,11 +291,19 @@ public class PriceTrackTaskService {
|
||||
FileTaskEntity task = loadTaskForExecution(fr.getTaskId());
|
||||
if (task == null || !MODULE_TYPE.equals(task.getModuleType()) || !userId.equals(task.getUserId())) continue;
|
||||
if (!"RUNNING".equals(task.getStatus())) continue;
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLock(fr.getTaskId())) {
|
||||
if (ignored == null) continue;
|
||||
FileTaskEntity lockedTask = loadTaskForExecution(fr.getTaskId());
|
||||
if (lockedTask == null || !MODULE_TYPE.equals(lockedTask.getModuleType()) || !userId.equals(lockedTask.getUserId())) continue;
|
||||
if (!"RUNNING".equals(lockedTask.getStatus())) continue;
|
||||
FileResultEntity lockedResult = fileResultMapper.selectById(fr.getId());
|
||||
if (lockedResult == null || !MODULE_TYPE.equals(lockedResult.getModuleType())) continue;
|
||||
fileResultMapper.deleteById(fr.getId());
|
||||
reconcileTaskAfterResultRemoval(fr.getTaskId());
|
||||
vo.setRemoved(true);
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
@@ -687,6 +705,15 @@ public class PriceTrackTaskService {
|
||||
throw new BusinessException("结果文件载荷不存在");
|
||||
}
|
||||
assembleShopResult(result, job.getScopeKey(), payload);
|
||||
FileTaskEntity task = loadTaskForExecution(job.getTaskId());
|
||||
if (task != null && MODULE_TYPE.equals(task.getModuleType())) {
|
||||
List<FileResultEntity> latest = fileResultMapper.selectList(
|
||||
new LambdaQueryWrapper<FileResultEntity>()
|
||||
.eq(FileResultEntity::getTaskId, job.getTaskId())
|
||||
.eq(FileResultEntity::getModuleType, MODULE_TYPE)
|
||||
.orderByAsc(FileResultEntity::getId));
|
||||
updateTaskStatusFromLatestRows(task, latest);
|
||||
}
|
||||
}
|
||||
|
||||
private void enqueueResultFileAssembly(FileResultEntity result,
|
||||
@@ -1280,10 +1307,20 @@ public class PriceTrackTaskService {
|
||||
int fail = 0;
|
||||
List<String> allErrors = new ArrayList<>();
|
||||
boolean allDone = true;
|
||||
Map<Long, TaskFileJobEntity> jobMap = taskFileJobService.findAssembleJobsByResultIds(
|
||||
MODULE_TYPE,
|
||||
latest.stream()
|
||||
.map(FileResultEntity::getId)
|
||||
.filter(id -> id != null && id > 0)
|
||||
.toList());
|
||||
for (FileResultEntity fr : latest) {
|
||||
boolean success = fr.getSuccess() != null && fr.getSuccess() == 1;
|
||||
boolean failed = fr.getErrorMessage() != null && !fr.getErrorMessage().isBlank();
|
||||
if (success) {
|
||||
if (isResultAwaitingFileAssembly(fr, jobMap.get(fr.getId()))) {
|
||||
allDone = false;
|
||||
continue;
|
||||
}
|
||||
ok++;
|
||||
} else if (failed) {
|
||||
fail++;
|
||||
@@ -1327,6 +1364,34 @@ public class PriceTrackTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isResultAwaitingFileAssembly(FileResultEntity result, TaskFileJobEntity job) {
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFileUrl() != null && !result.getResultFileUrl().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFilename() == null || result.getResultFilename().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
return job == null || !"SUCCESS".equals(job.getStatus());
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLockOrThrow(Long taskId) {
|
||||
TaskDistributedLockService.LockHandle lockHandle = acquireTaskLock(taskId);
|
||||
if (lockHandle == null) {
|
||||
throw new BusinessException(40901, "浠诲姟姝e湪澶勭悊涓紝璇风◢鍚庡啀璇?");
|
||||
}
|
||||
return lockHandle;
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLock(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
return null;
|
||||
}
|
||||
return taskDistributedLockService.acquire(MODULE_TYPE, taskId);
|
||||
}
|
||||
|
||||
private void cleanupTaskCacheIfTerminal(Long taskId, String taskStatus) {
|
||||
if (!"SUCCESS".equals(taskStatus) && !"FAILED".equals(taskStatus) && !"DELETE_EMPTY".equals(taskStatus)) {
|
||||
return;
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileResultEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.TaskFileJobEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskProgressSnapshotService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskResultItemService;
|
||||
@@ -68,6 +69,7 @@ public class ProductRiskTaskService {
|
||||
private final TaskFileJobService taskFileJobService;
|
||||
private final TaskResultItemService taskResultItemService;
|
||||
private final TaskProgressSnapshotService taskProgressSnapshotService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
|
||||
private FileTaskEntity loadTaskForExecution(Long taskId) {
|
||||
Map<Long, FileTaskEntity> cachedTasks = productRiskTaskCacheService.getTaskCacheBatch(List.of(taskId));
|
||||
@@ -243,8 +245,16 @@ public class ProductRiskTaskService {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
Long taskId = entity.getTaskId();
|
||||
if (taskId == null || taskId <= 0) {
|
||||
fileResultMapper.deleteById(resultId);
|
||||
return;
|
||||
}
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLockOrThrow(taskId)) {
|
||||
FileResultEntity latestEntity = fileResultMapper.selectById(resultId);
|
||||
if (latestEntity == null || !MODULE_TYPE.equals(latestEntity.getModuleType()) || !userId.equals(latestEntity.getUserId())) {
|
||||
throw new BusinessException("record not found");
|
||||
}
|
||||
fileResultMapper.deleteById(resultId);
|
||||
if (taskId != null && taskId > 0) {
|
||||
reconcileTaskAfterResultRemoval(taskId);
|
||||
}
|
||||
}
|
||||
@@ -304,11 +314,27 @@ public class ProductRiskTaskService {
|
||||
continue;
|
||||
}
|
||||
Long tid = fr.getTaskId();
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLock(tid)) {
|
||||
if (ignored == null) {
|
||||
continue;
|
||||
}
|
||||
FileTaskEntity lockedTask = loadTaskForExecution(tid);
|
||||
if (lockedTask == null || !MODULE_TYPE.equals(lockedTask.getModuleType()) || !userId.equals(lockedTask.getUserId())) {
|
||||
continue;
|
||||
}
|
||||
if (!"RUNNING".equals(lockedTask.getStatus())) {
|
||||
continue;
|
||||
}
|
||||
FileResultEntity lockedResult = fileResultMapper.selectById(fr.getId());
|
||||
if (lockedResult == null || !MODULE_TYPE.equals(lockedResult.getModuleType())) {
|
||||
continue;
|
||||
}
|
||||
fileResultMapper.deleteById(fr.getId());
|
||||
reconcileTaskAfterResultRemoval(tid);
|
||||
vo.setRemoved(true);
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
@@ -631,54 +657,10 @@ public class ProductRiskTaskService {
|
||||
.eq(FileResultEntity::getModuleType, MODULE_TYPE)
|
||||
.orderByAsc(FileResultEntity::getId));
|
||||
|
||||
int ok = 0;
|
||||
int fail = 0;
|
||||
List<String> allErrors = new ArrayList<>();
|
||||
boolean allDone = true;
|
||||
for (FileResultEntity fr : latest) {
|
||||
boolean success = fr.getSuccess() != null && fr.getSuccess() == 1;
|
||||
boolean failed = fr.getErrorMessage() != null && !fr.getErrorMessage().isBlank();
|
||||
if (success) {
|
||||
ok++;
|
||||
} else if (failed) {
|
||||
fail++;
|
||||
allErrors.add(fr.getSourceFilename() + ": " + fr.getErrorMessage());
|
||||
} else {
|
||||
allDone = false;
|
||||
}
|
||||
}
|
||||
|
||||
task.setSuccessFileCount(ok);
|
||||
task.setFailedFileCount(fail);
|
||||
task.setUpdatedAt(LocalDateTime.now());
|
||||
|
||||
if (!allDone) {
|
||||
task.setStatus("RUNNING");
|
||||
task.setErrorMessage(null);
|
||||
task.setFinishedAt(null);
|
||||
} else if (ok > 0 && fail == 0) {
|
||||
task.setStatus("SUCCESS");
|
||||
task.setErrorMessage(null);
|
||||
task.setFinishedAt(LocalDateTime.now());
|
||||
} else if (ok > 0) {
|
||||
task.setStatus("SUCCESS");
|
||||
task.setErrorMessage(String.join("; ", allErrors.isEmpty() ? batchErrors : allErrors));
|
||||
task.setFinishedAt(LocalDateTime.now());
|
||||
} else {
|
||||
task.setStatus("FAILED");
|
||||
task.setErrorMessage(allErrors.isEmpty() ? "全部店铺处理失败" : String.join("; ", allErrors));
|
||||
task.setFinishedAt(LocalDateTime.now());
|
||||
}
|
||||
try {
|
||||
task.setResultJson(objectMapper.writeValueAsString(buildSnapshotFromDb(taskId, task.getStatus())));
|
||||
} catch (Exception ex) {
|
||||
log.warn("[product-risk] compact result json failed: {}", ex.getMessage());
|
||||
}
|
||||
fileTaskMapper.updateById(task);
|
||||
log.warn("[product-risk] submitResult status evaluated taskId={} oldStatus={} newStatus={} ok={} fail={} allDone={} matchedShopCount={} skippedUnmatchedCount={} waitingCount={} assembledCount={} fallbackMatchedCount={} batchErrors={}",
|
||||
taskId, oldStatus, task.getStatus(), ok, fail, allDone, matchedShopCount, skippedUnmatchedCount,
|
||||
updateTaskStatusFromLatestRows(task, latest, batchErrors);
|
||||
log.warn("[product-risk] submitResult status evaluated taskId={} oldStatus={} newStatus={} matchedShopCount={} skippedUnmatchedCount={} waitingCount={} assembledCount={} fallbackMatchedCount={} batchErrors={}",
|
||||
taskId, oldStatus, task.getStatus(), matchedShopCount, skippedUnmatchedCount,
|
||||
waitingCount, assembledCount, fallbackMatchedCount, batchErrors);
|
||||
cleanupTaskCacheIfTerminal(taskId, task.getStatus());
|
||||
}
|
||||
|
||||
public boolean tryFinalizeTask(Long taskId, boolean fromCompensation) {
|
||||
@@ -855,6 +837,14 @@ public class ProductRiskTaskService {
|
||||
}
|
||||
File workRoot = FileUtil.mkdir(FileUtil.file(System.getProperty("java.io.tmpdir"), "product-risk-result", String.valueOf(job.getTaskId())));
|
||||
assembleShopResult(result, job.getScopeKey(), payload, workRoot);
|
||||
FileTaskEntity task = loadTaskForExecution(job.getTaskId());
|
||||
if (task != null && MODULE_TYPE.equals(task.getModuleType())) {
|
||||
List<FileResultEntity> latest = fileResultMapper.selectList(new LambdaQueryWrapper<FileResultEntity>()
|
||||
.eq(FileResultEntity::getTaskId, job.getTaskId())
|
||||
.eq(FileResultEntity::getModuleType, MODULE_TYPE)
|
||||
.orderByAsc(FileResultEntity::getId));
|
||||
updateTaskStatusFromLatestRows(task, latest, List.of());
|
||||
}
|
||||
}
|
||||
|
||||
private void enqueueResultFileAssembly(FileResultEntity result, String shopKey, ProductRiskShopPayloadDto payload) {
|
||||
@@ -888,10 +878,20 @@ public class ProductRiskTaskService {
|
||||
int fail = 0;
|
||||
List<String> allErrors = new ArrayList<>();
|
||||
boolean allDone = true;
|
||||
Map<Long, TaskFileJobEntity> jobMap = taskFileJobService.findAssembleJobsByResultIds(
|
||||
MODULE_TYPE,
|
||||
latest.stream()
|
||||
.map(FileResultEntity::getId)
|
||||
.filter(id -> id != null && id > 0)
|
||||
.toList());
|
||||
for (FileResultEntity fr : latest) {
|
||||
boolean success = fr.getSuccess() != null && fr.getSuccess() == 1;
|
||||
boolean failed = fr.getErrorMessage() != null && !fr.getErrorMessage().isBlank();
|
||||
if (success) {
|
||||
if (isResultAwaitingFileAssembly(fr, jobMap.get(fr.getId()))) {
|
||||
allDone = false;
|
||||
continue;
|
||||
}
|
||||
ok++;
|
||||
} else if (failed) {
|
||||
fail++;
|
||||
@@ -947,6 +947,34 @@ public class ProductRiskTaskService {
|
||||
productRiskTaskCacheService.deleteTaskCache(taskId);
|
||||
}
|
||||
|
||||
private boolean isResultAwaitingFileAssembly(FileResultEntity result, TaskFileJobEntity job) {
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFileUrl() != null && !result.getResultFileUrl().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFilename() == null || result.getResultFilename().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
return job == null || !"SUCCESS".equals(job.getStatus());
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLockOrThrow(Long taskId) {
|
||||
TaskDistributedLockService.LockHandle lockHandle = acquireTaskLock(taskId);
|
||||
if (lockHandle == null) {
|
||||
throw new BusinessException(40901, "浠诲姟姝e湪澶勭悊涓紝璇风◢鍚庡啀璇?");
|
||||
}
|
||||
return lockHandle;
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLock(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
return null;
|
||||
}
|
||||
return taskDistributedLockService.acquire(MODULE_TYPE, taskId);
|
||||
}
|
||||
|
||||
private ProductRiskTaskDetailVo buildTaskDetail(FileTaskEntity task) {
|
||||
ProductRiskTaskDetailVo detail = new ProductRiskTaskDetailVo();
|
||||
detail.setTask(toTaskItemVo(task));
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileResultEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.TaskFileJobEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskProgressSnapshotService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskResultItemService;
|
||||
@@ -66,6 +67,7 @@ public class QueryAsinTaskService {
|
||||
private final TaskFileJobService taskFileJobService;
|
||||
private final TaskResultItemService taskResultItemService;
|
||||
private final TaskProgressSnapshotService taskProgressSnapshotService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
|
||||
private FileTaskEntity loadTaskForExecution(Long taskId) {
|
||||
Map<Long, FileTaskEntity> cachedTasks = taskCacheService.getTaskCacheBatch(List.of(taskId));
|
||||
@@ -468,9 +470,19 @@ public class QueryAsinTaskService {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
Long taskId = entity.getTaskId();
|
||||
if (taskId == null || taskId <= 0) {
|
||||
fileResultMapper.deleteById(resultId);
|
||||
return;
|
||||
}
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLockOrThrow(taskId)) {
|
||||
FileResultEntity latestEntity = fileResultMapper.selectById(resultId);
|
||||
if (latestEntity == null || !MODULE_TYPE.equals(latestEntity.getModuleType()) || !userId.equals(latestEntity.getUserId())) {
|
||||
throw new BusinessException("record not found");
|
||||
}
|
||||
fileResultMapper.deleteById(resultId);
|
||||
reconcileTaskAfterResultRemoval(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
private void reconcileTaskAfterResultRemoval(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
@@ -719,6 +731,9 @@ public class QueryAsinTaskService {
|
||||
long successCount = rows.stream().filter(row -> Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess())).count();
|
||||
long failedCount = rows.stream().filter(row -> Integer.valueOf(RESULT_FAILED).equals(row.getSuccess())).count();
|
||||
long pendingCount = rows.stream().filter(row -> !isResultFinished(row)).count();
|
||||
if (pendingCount == 0 && successCount > 0 && isTaskWorkbookPending(task, rows)) {
|
||||
pendingCount = 1;
|
||||
}
|
||||
task.setSuccessFileCount((int) successCount);
|
||||
task.setFailedFileCount((int) failedCount);
|
||||
task.setUpdatedAt(LocalDateTime.now());
|
||||
@@ -948,11 +963,47 @@ public class QueryAsinTaskService {
|
||||
fileResultMapper.updateById(row);
|
||||
}
|
||||
}
|
||||
updateTaskStatusFromRows(task, rows);
|
||||
persistSnapshotJson(task, buildSnapshotFromDb(task, rows));
|
||||
fileTaskMapper.updateById(task);
|
||||
} finally {
|
||||
FileUtil.del(xlsx);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTaskWorkbookPending(FileTaskEntity task, List<FileResultEntity> rows) {
|
||||
if (task == null || task.getId() == null || rows == null || rows.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
FileResultEntity firstSuccess = rows.stream()
|
||||
.filter(row -> Integer.valueOf(RESULT_SUCCESS).equals(row.getSuccess()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (firstSuccess == null) {
|
||||
return false;
|
||||
}
|
||||
if (!blank(firstSuccess.getResultFileUrl())) {
|
||||
return false;
|
||||
}
|
||||
TaskFileJobEntity job = taskFileJobService.findAssembleJob(task.getId(), MODULE_TYPE, firstSuccess.getId());
|
||||
return job != null && !"SUCCESS".equals(job.getStatus());
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLockOrThrow(Long taskId) {
|
||||
TaskDistributedLockService.LockHandle lockHandle = acquireTaskLock(taskId);
|
||||
if (lockHandle == null) {
|
||||
throw new BusinessException(40901, "浠诲姟姝e湪澶勭悊涓紝璇风◢鍚庡啀璇?");
|
||||
}
|
||||
return lockHandle;
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLock(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
return null;
|
||||
}
|
||||
return taskDistributedLockService.acquire(MODULE_TYPE, taskId);
|
||||
}
|
||||
|
||||
private void markResultSuccess(FileResultEntity row) {
|
||||
row.setSuccess(RESULT_SUCCESS);
|
||||
row.setErrorMessage(null);
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.nanri.aiimage.modules.task.mapper.FileTaskMapper;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileResultEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity;
|
||||
import com.nanri.aiimage.modules.task.model.entity.TaskFileJobEntity;
|
||||
import com.nanri.aiimage.modules.task.service.TaskDistributedLockService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskFileJobService;
|
||||
import com.nanri.aiimage.modules.task.service.TaskResultPayloadService;
|
||||
import com.nanri.aiimage.modules.ziniao.service.ZiniaoShopSwitchService;
|
||||
@@ -67,6 +68,7 @@ public class ShopMatchTaskService {
|
||||
private final TaskPressureProperties taskPressureProperties;
|
||||
private final TaskResultPayloadService taskResultPayloadService;
|
||||
private final TaskFileJobService taskFileJobService;
|
||||
private final TaskDistributedLockService taskDistributedLockService;
|
||||
|
||||
private FileTaskEntity loadTaskForExecution(Long taskId) {
|
||||
Map<Long, FileTaskEntity> cachedTasks = shopMatchTaskCacheService.getTaskCacheBatch(List.of(taskId));
|
||||
@@ -250,8 +252,16 @@ public class ShopMatchTaskService {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
Long taskId = entity.getTaskId();
|
||||
if (taskId == null || taskId <= 0) {
|
||||
fileResultMapper.deleteById(resultId);
|
||||
return;
|
||||
}
|
||||
try (TaskDistributedLockService.LockHandle ignored = acquireTaskLockOrThrow(taskId)) {
|
||||
FileResultEntity latestEntity = fileResultMapper.selectById(resultId);
|
||||
if (latestEntity == null || !MODULE_TYPE.equals(latestEntity.getModuleType()) || !userId.equals(latestEntity.getUserId())) {
|
||||
throw new BusinessException("record not found");
|
||||
}
|
||||
fileResultMapper.deleteById(resultId);
|
||||
if (taskId != null && taskId > 0) {
|
||||
reconcileTaskAfterResultRemoval(taskId);
|
||||
}
|
||||
}
|
||||
@@ -727,6 +737,14 @@ public class ShopMatchTaskService {
|
||||
}
|
||||
File workRoot = FileUtil.mkdir(FileUtil.file(System.getProperty("java.io.tmpdir"), "shop-match-result", String.valueOf(job.getTaskId())));
|
||||
assembleShopResult(result, job.getScopeKey(), payload, workRoot);
|
||||
FileTaskEntity task = loadTaskForExecution(job.getTaskId());
|
||||
if (task != null && MODULE_TYPE.equals(task.getModuleType())) {
|
||||
List<FileResultEntity> latest = fileResultMapper.selectList(new LambdaQueryWrapper<FileResultEntity>()
|
||||
.eq(FileResultEntity::getTaskId, job.getTaskId())
|
||||
.eq(FileResultEntity::getModuleType, MODULE_TYPE)
|
||||
.orderByAsc(FileResultEntity::getId));
|
||||
updateTaskStatusFromLatestRows(task, latest, List.of());
|
||||
}
|
||||
}
|
||||
|
||||
private void enqueueResultFileAssembly(FileResultEntity result, String shopKey, ShopMatchShopPayloadDto payload) {
|
||||
@@ -771,10 +789,20 @@ public class ShopMatchTaskService {
|
||||
int fail = 0;
|
||||
List<String> errors = new ArrayList<>();
|
||||
boolean allDone = true;
|
||||
Map<Long, TaskFileJobEntity> jobMap = taskFileJobService.findAssembleJobsByResultIds(
|
||||
MODULE_TYPE,
|
||||
latest.stream()
|
||||
.map(FileResultEntity::getId)
|
||||
.filter(id -> id != null && id > 0)
|
||||
.toList());
|
||||
for (FileResultEntity row : latest) {
|
||||
boolean success = row.getSuccess() != null && row.getSuccess() == 1;
|
||||
boolean failed = row.getErrorMessage() != null && !row.getErrorMessage().isBlank();
|
||||
if (success) {
|
||||
if (isResultAwaitingFileAssembly(row, jobMap.get(row.getId()))) {
|
||||
allDone = false;
|
||||
continue;
|
||||
}
|
||||
ok++;
|
||||
} else if (failed) {
|
||||
fail++;
|
||||
@@ -818,6 +846,34 @@ public class ShopMatchTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isResultAwaitingFileAssembly(FileResultEntity result, TaskFileJobEntity job) {
|
||||
if (result == null) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFileUrl() != null && !result.getResultFileUrl().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
if (result.getResultFilename() == null || result.getResultFilename().isBlank()) {
|
||||
return false;
|
||||
}
|
||||
return job == null || !"SUCCESS".equals(job.getStatus());
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLockOrThrow(Long taskId) {
|
||||
TaskDistributedLockService.LockHandle lockHandle = acquireTaskLock(taskId);
|
||||
if (lockHandle == null) {
|
||||
throw new BusinessException(40901, "浠诲姟姝e湪澶勭悊涓紝璇风◢鍚庡啀璇?");
|
||||
}
|
||||
return lockHandle;
|
||||
}
|
||||
|
||||
private TaskDistributedLockService.LockHandle acquireTaskLock(Long taskId) {
|
||||
if (taskId == null || taskId <= 0) {
|
||||
return null;
|
||||
}
|
||||
return taskDistributedLockService.acquire(MODULE_TYPE, taskId);
|
||||
}
|
||||
|
||||
private boolean shouldRemainRunningUntilNextStage(FileTaskEntity task) {
|
||||
ShopMatchCreateTaskRequest request = parseTaskRequestSilently(task);
|
||||
if (request == null || request.getScheduleTimes() == null || request.getScheduleTimes().isEmpty()) {
|
||||
|
||||
@@ -2,10 +2,13 @@ package com.nanri.aiimage.modules.similarasin.controller;
|
||||
|
||||
import com.nanri.aiimage.common.api.ApiResponse;
|
||||
import com.nanri.aiimage.common.util.DownloadHeaderUtil;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinFilterConditionAddRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinParseRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinParsedPayloadDto;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinSubmitResultRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinTaskBatchRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinDashboardVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinFilterConditionVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinHistoryVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinParseVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinTaskBatchVo;
|
||||
@@ -29,6 +32,7 @@ import org.springframework.web.server.ResponseStatusException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@@ -38,12 +42,48 @@ public class SimilarAsinController {
|
||||
|
||||
private final SimilarAsinTaskService service;
|
||||
|
||||
@GetMapping("/filter-conditions")
|
||||
@Operation(summary = "查询货源查询筛选条件")
|
||||
public ApiResponse<List<SimilarAsinFilterConditionVo>> listFilterConditions(
|
||||
@Parameter(description = "当前用户 ID", required = true, example = "1")
|
||||
@RequestParam("user_id") Long userId) {
|
||||
return ApiResponse.success(service.listFilterConditions(userId));
|
||||
}
|
||||
|
||||
@PostMapping("/filter-conditions")
|
||||
@Operation(summary = "保存货源查询筛选条件")
|
||||
public ApiResponse<SimilarAsinFilterConditionVo> addFilterCondition(
|
||||
@Valid @RequestBody SimilarAsinFilterConditionAddRequest request) {
|
||||
return ApiResponse.success(service.addFilterCondition(request));
|
||||
}
|
||||
|
||||
@DeleteMapping("/filter-conditions/{id}")
|
||||
@Operation(summary = "删除货源查询筛选条件")
|
||||
public ApiResponse<Void> deleteFilterCondition(
|
||||
@Parameter(description = "筛选条件主键", example = "10")
|
||||
@PathVariable Long id,
|
||||
@Parameter(description = "当前用户 ID", required = true, example = "1")
|
||||
@RequestParam("user_id") Long userId) {
|
||||
service.deleteFilterCondition(userId, id);
|
||||
return ApiResponse.success(null);
|
||||
}
|
||||
|
||||
@PostMapping("/parse")
|
||||
@Operation(summary = "解析 Excel 并创建任务", description = "解析上传后的 Excel 文件,提取 id、ASIN、国家、URL、标题等字段。返回给前端的数据只包含整数 id 和 n_1 行;n_2、n_3 等子行会保存在 OSS 解析载荷中,用于最终结果补齐。创建后的任务状态为 PENDING,不会自动推送 Python。")
|
||||
public ApiResponse<SimilarAsinParseVo> parse(@Valid @RequestBody SimilarAsinParseRequest request) {
|
||||
return ApiResponse.success(service.parseAndCreateTask(request));
|
||||
}
|
||||
|
||||
@GetMapping("/tasks/{taskId}/parsed-payload")
|
||||
@Operation(summary = "获取货源查询完整解析载荷", description = "给 Python 队列消费端使用。parse 接口只返回轻量预览,大文件完整行数据通过该接口按 taskId 拉取。")
|
||||
public ApiResponse<SimilarAsinParsedPayloadDto> parsedPayload(
|
||||
@Parameter(description = "货源查询任务 ID", required = true, example = "7004")
|
||||
@PathVariable Long taskId,
|
||||
@Parameter(description = "当前用户 ID", required = true, example = "1")
|
||||
@RequestParam("user_id") Long userId) {
|
||||
return ApiResponse.success(service.parsedPayload(taskId, userId));
|
||||
}
|
||||
|
||||
@GetMapping("/dashboard")
|
||||
@Operation(summary = "查询相似ASIN检测总览", description = "查询当前用户的运行中、成功、失败和已结束任务数量。页面进入时请求一次即可,不需要持续轮询。")
|
||||
public ApiResponse<SimilarAsinDashboardVo> dashboard(
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.nanri.aiimage.modules.similarasin.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.nanri.aiimage.modules.similarasin.model.entity.SimilarAsinFilterConditionEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface SimilarAsinFilterConditionMapper extends BaseMapper<SimilarAsinFilterConditionEntity> {
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.nanri.aiimage.modules.similarasin.model.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAlias;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "货源查询筛选条件新增请求")
|
||||
public class SimilarAsinFilterConditionAddRequest {
|
||||
|
||||
@NotNull
|
||||
@JsonProperty("user_id")
|
||||
@Schema(description = "当前用户 ID", example = "1", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long userId;
|
||||
|
||||
@NotBlank
|
||||
@JsonProperty("condition_text")
|
||||
@JsonAlias({"conditionText", "filter_condition", "filterCondition"})
|
||||
@Schema(description = "筛选条件文本", example = "只筛选有货且不带品牌 logo 的商品", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String conditionText;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.nanri.aiimage.modules.similarasin.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@TableName("biz_similar_asin_filter_condition")
|
||||
public class SimilarAsinFilterConditionEntity {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
private Long userId;
|
||||
private String conditionText;
|
||||
private LocalDateTime createdAt;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.nanri.aiimage.modules.similarasin.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class SimilarAsinFilterConditionVo {
|
||||
|
||||
private Long id;
|
||||
|
||||
@JsonProperty("conditionText")
|
||||
private String conditionText;
|
||||
|
||||
private LocalDateTime createdAt;
|
||||
}
|
||||
@@ -11,14 +11,18 @@ import com.nanri.aiimage.common.service.DistributedJobLockService;
|
||||
import com.nanri.aiimage.config.InstanceMetadata;
|
||||
import com.nanri.aiimage.config.SimilarAsinProperties;
|
||||
import com.nanri.aiimage.config.StorageProperties;
|
||||
import com.nanri.aiimage.modules.similarasin.mapper.SimilarAsinFilterConditionMapper;
|
||||
import com.nanri.aiimage.modules.similarasin.client.SimilarAsinCozeClient;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinFilterConditionAddRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinParseRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinParsedPayloadDto;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinResultGroupDto;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinResultRowDto;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinSourceFileDto;
|
||||
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinSubmitResultRequest;
|
||||
import com.nanri.aiimage.modules.similarasin.model.entity.SimilarAsinFilterConditionEntity;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinDashboardVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinFilterConditionVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinHistoryItemVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinHistoryVo;
|
||||
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinParsedGroupVo;
|
||||
@@ -102,6 +106,7 @@ public class SimilarAsinTaskService {
|
||||
private static final long RESULT_ROWS_READ_RETRY_DELAY_MS = 500L;
|
||||
private static final Duration TASK_LOCK_TTL = Duration.ofMinutes(5);
|
||||
private static final long TASK_LOCK_WAIT_MILLIS = 10000L;
|
||||
private static final int PARSE_RESPONSE_PREVIEW_LIMIT = 100;
|
||||
private static final List<String> RESULT_HEADERS = List.of(
|
||||
"id",
|
||||
"asin",
|
||||
@@ -118,6 +123,7 @@ public class SimilarAsinTaskService {
|
||||
private final FileResultMapper fileResultMapper;
|
||||
private final TaskScopeStateMapper taskScopeStateMapper;
|
||||
private final TaskChunkMapper taskChunkMapper;
|
||||
private final SimilarAsinFilterConditionMapper filterConditionMapper;
|
||||
private final ObjectMapper objectMapper;
|
||||
private final SimilarAsinCozeClient cozeClient;
|
||||
private final SimilarAsinTaskCacheService taskCacheService;
|
||||
@@ -133,6 +139,55 @@ public class SimilarAsinTaskService {
|
||||
@Qualifier("cozeTaskExecutor")
|
||||
private TaskExecutor cozeTaskExecutor;
|
||||
|
||||
public List<SimilarAsinFilterConditionVo> listFilterConditions(Long userId) {
|
||||
validateUserId(userId);
|
||||
List<SimilarAsinFilterConditionEntity> rows = filterConditionMapper.selectList(
|
||||
new LambdaQueryWrapper<SimilarAsinFilterConditionEntity>()
|
||||
.eq(SimilarAsinFilterConditionEntity::getUserId, userId)
|
||||
.orderByDesc(SimilarAsinFilterConditionEntity::getId));
|
||||
List<SimilarAsinFilterConditionVo> list = new ArrayList<>();
|
||||
for (SimilarAsinFilterConditionEntity row : rows) {
|
||||
list.add(toFilterConditionVo(row));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public SimilarAsinFilterConditionVo addFilterCondition(SimilarAsinFilterConditionAddRequest request) {
|
||||
validateUserId(request.getUserId());
|
||||
String text = normalize(request.getConditionText());
|
||||
if (text.isBlank()) {
|
||||
throw new BusinessException("筛选条件不能为空");
|
||||
}
|
||||
SimilarAsinFilterConditionEntity existing = filterConditionMapper.selectOne(
|
||||
new LambdaQueryWrapper<SimilarAsinFilterConditionEntity>()
|
||||
.eq(SimilarAsinFilterConditionEntity::getUserId, request.getUserId())
|
||||
.eq(SimilarAsinFilterConditionEntity::getConditionText, text)
|
||||
.last("limit 1"));
|
||||
if (existing != null) {
|
||||
return toFilterConditionVo(existing);
|
||||
}
|
||||
SimilarAsinFilterConditionEntity entity = new SimilarAsinFilterConditionEntity();
|
||||
entity.setUserId(request.getUserId());
|
||||
entity.setConditionText(text);
|
||||
entity.setCreatedAt(LocalDateTime.now());
|
||||
filterConditionMapper.insert(entity);
|
||||
return toFilterConditionVo(entity);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteFilterCondition(Long userId, Long id) {
|
||||
validateUserId(userId);
|
||||
if (id == null || id <= 0) {
|
||||
throw new BusinessException("id 不合法");
|
||||
}
|
||||
SimilarAsinFilterConditionEntity row = filterConditionMapper.selectById(id);
|
||||
if (row == null || !userId.equals(row.getUserId())) {
|
||||
throw new BusinessException("记录不存在");
|
||||
}
|
||||
filterConditionMapper.deleteById(id);
|
||||
}
|
||||
|
||||
public SimilarAsinParseVo parseAndCreateTask(SimilarAsinParseRequest request) {
|
||||
long startedAt = System.nanoTime();
|
||||
if (request.getUserId() == null || request.getUserId() <= 0) {
|
||||
@@ -240,8 +295,8 @@ public class SimilarAsinTaskService {
|
||||
vo.setDroppedRows(droppedRows);
|
||||
vo.setGroupCount(groups.size());
|
||||
vo.setAiPrompt(normalize(request.getAiPrompt()));
|
||||
vo.setItems(allRows);
|
||||
vo.setGroups(groups);
|
||||
vo.setItems(buildResponsePreviewRows(allRows));
|
||||
vo.setGroups(List.of());
|
||||
long finishedAt = System.nanoTime();
|
||||
log.info("[similar-asin] parse timing taskId={} files={} rows={} groups={} totalMs={} parseMs={} groupMs={} taskInsertMs={} payloadJsonMs={} payloadStoreMs={} persistMs={} responseMs={}",
|
||||
task.getId(),
|
||||
@@ -922,6 +977,36 @@ public class SimilarAsinTaskService {
|
||||
return groups;
|
||||
}
|
||||
|
||||
private List<SimilarAsinParsedRowVo> buildResponsePreviewRows(List<SimilarAsinParsedRowVo> rows) {
|
||||
if (rows == null || rows.isEmpty()) {
|
||||
return List.of();
|
||||
}
|
||||
int limit = Math.min(PARSE_RESPONSE_PREVIEW_LIMIT, rows.size());
|
||||
List<SimilarAsinParsedRowVo> preview = new ArrayList<>(limit);
|
||||
for (int i = 0; i < limit; i++) {
|
||||
preview.add(copyPreviewRow(rows.get(i)));
|
||||
}
|
||||
return preview;
|
||||
}
|
||||
|
||||
private SimilarAsinParsedRowVo copyPreviewRow(SimilarAsinParsedRowVo row) {
|
||||
SimilarAsinParsedRowVo vo = new SimilarAsinParsedRowVo();
|
||||
vo.setSourceFileKey(row.getSourceFileKey());
|
||||
vo.setSourceFilename(row.getSourceFilename());
|
||||
vo.setRowIndex(row.getRowIndex());
|
||||
vo.setSourceId(row.getSourceId());
|
||||
vo.setDisplayId(row.getDisplayId());
|
||||
vo.setRowToken(row.getRowToken());
|
||||
vo.setGroupKey(row.getGroupKey());
|
||||
vo.setAsin(row.getAsin());
|
||||
vo.setCountry(row.getCountry());
|
||||
vo.setPrice(row.getPrice());
|
||||
vo.setUrl(row.getUrl());
|
||||
vo.setTitle(row.getTitle());
|
||||
vo.setValues(new LinkedHashMap<>());
|
||||
return vo;
|
||||
}
|
||||
|
||||
private Map<String, List<SimilarAsinParsedRowVo>> groupRowsByBaseId(List<SimilarAsinParsedRowVo> rows) {
|
||||
Map<String, List<SimilarAsinParsedRowVo>> result = new LinkedHashMap<>();
|
||||
if (rows == null) {
|
||||
@@ -2228,6 +2313,28 @@ public class SimilarAsinTaskService {
|
||||
return preferred == null || preferred.isBlank() ? fallback : preferred.trim();
|
||||
}
|
||||
|
||||
private void validateUserId(Long userId) {
|
||||
if (userId == null || userId <= 0) {
|
||||
throw new BusinessException("user_id 不合法");
|
||||
}
|
||||
}
|
||||
|
||||
private SimilarAsinFilterConditionVo toFilterConditionVo(SimilarAsinFilterConditionEntity row) {
|
||||
SimilarAsinFilterConditionVo vo = new SimilarAsinFilterConditionVo();
|
||||
vo.setId(row.getId());
|
||||
vo.setConditionText(row.getConditionText());
|
||||
vo.setCreatedAt(row.getCreatedAt());
|
||||
return vo;
|
||||
}
|
||||
|
||||
public SimilarAsinParsedPayloadDto parsedPayload(Long taskId, Long userId) {
|
||||
FileTaskEntity task = fileTaskMapper.selectById(taskId);
|
||||
if (task == null || !MODULE_TYPE.equals(task.getModuleType()) || userId != null && !Objects.equals(userId, task.getUserId())) {
|
||||
throw new BusinessException("任务不存在");
|
||||
}
|
||||
return readParsedPayload(task);
|
||||
}
|
||||
|
||||
private String normalize(String val) {
|
||||
return val == null ? "" : val.replace(String.valueOf((char) 0xFEFF), "").replace((char) 0x3000, ' ').trim().replaceAll("\\s+", " ");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
SET @schema_name = DATABASE();
|
||||
|
||||
SET @idx_file_result_patrol_history_desc_exists := (
|
||||
SELECT COUNT(1)
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'biz_file_result'
|
||||
AND INDEX_NAME = 'idx_file_result_patrol_history_desc'
|
||||
);
|
||||
|
||||
SET @sql_add_file_result_patrol_history_desc_idx := IF(
|
||||
@idx_file_result_patrol_history_desc_exists = 0,
|
||||
'ALTER TABLE biz_file_result ADD INDEX idx_file_result_patrol_history_desc (module_type, user_id, created_at DESC, id DESC)',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_add_file_result_patrol_history_desc_idx FROM @sql_add_file_result_patrol_history_desc_idx;
|
||||
EXECUTE stmt_add_file_result_patrol_history_desc_idx;
|
||||
DEALLOCATE PREPARE stmt_add_file_result_patrol_history_desc_idx;
|
||||
|
||||
SET @idx_task_file_job_patrol_history_lookup_exists := (
|
||||
SELECT COUNT(1)
|
||||
FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = @schema_name
|
||||
AND TABLE_NAME = 'biz_task_file_job'
|
||||
AND INDEX_NAME = 'idx_task_file_job_patrol_history_lookup'
|
||||
);
|
||||
|
||||
SET @sql_add_task_file_job_patrol_history_lookup_idx := IF(
|
||||
@idx_task_file_job_patrol_history_lookup_exists = 0,
|
||||
'ALTER TABLE biz_task_file_job ADD INDEX idx_task_file_job_patrol_history_lookup (module_type, job_type, result_id, status)',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE stmt_add_task_file_job_patrol_history_lookup_idx FROM @sql_add_task_file_job_patrol_history_lookup_idx;
|
||||
EXECUTE stmt_add_task_file_job_patrol_history_lookup_idx;
|
||||
DEALLOCATE PREPARE stmt_add_task_file_job_patrol_history_lookup_idx;
|
||||
@@ -0,0 +1,15 @@
|
||||
CREATE TABLE IF NOT EXISTS biz_similar_asin_filter_condition (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
user_id BIGINT NOT NULL,
|
||||
condition_text VARCHAR(500) NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uk_similar_asin_filter_condition_user_text (user_id, condition_text),
|
||||
KEY idx_similar_asin_filter_condition_user_id (user_id)
|
||||
);
|
||||
|
||||
UPDATE `columns`
|
||||
SET `name` = 'source query',
|
||||
`menu_type` = 'app',
|
||||
`route_path` = 'similar-asin',
|
||||
`sort_order` = 112
|
||||
WHERE `column_key` = 'similar_asin';
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>相似ASIN检测</title>
|
||||
<title>货源查询</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
<template>
|
||||
<div class="secret-settings-entry">
|
||||
<button type="button" class="secret-settings-trigger" @click="dialogVisible = true">
|
||||
<span class="secret-settings-icon" aria-hidden="true">◎</span>
|
||||
<span>密钥设置</span>
|
||||
</button>
|
||||
|
||||
<el-dialog v-model="dialogVisible" width="560px" class="secret-settings-dialog" :append-to-body="true">
|
||||
<template #header>
|
||||
<div class="dialog-header">
|
||||
<div class="dialog-title">设置</div>
|
||||
<div class="dialog-subtitle">按当前登录用户保存在本机,可分别管理外观专利和货源查询密钥。</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="secret-settings-body">
|
||||
<section v-for="item in moduleStates" :key="item.moduleKey" class="secret-card">
|
||||
<div class="secret-card-head">
|
||||
<div>
|
||||
<div class="secret-card-title">{{ item.title }}</div>
|
||||
<div class="secret-card-desc">{{ item.description }}</div>
|
||||
</div>
|
||||
<button
|
||||
v-if="item.exists"
|
||||
type="button"
|
||||
class="link-danger"
|
||||
@click="clearSecret(item.moduleKey)"
|
||||
>
|
||||
清空
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<input
|
||||
v-model="item.value"
|
||||
class="secret-input"
|
||||
type="password"
|
||||
:placeholder="`请输入${item.title}密钥`"
|
||||
autocomplete="off"
|
||||
spellcheck="false"
|
||||
/>
|
||||
|
||||
<div class="retention-block">
|
||||
<div class="retention-label">保留时长</div>
|
||||
<div class="retention-options">
|
||||
<label v-for="option in retentionOptions" :key="option.value" class="retention-option">
|
||||
<input v-model="item.retention" type="radio" :value="option.value" />
|
||||
<span>{{ option.label }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="secret-meta">
|
||||
<span v-if="item.exists">{{ formatRetentionText(item.retention, item.expiresAt) }}</span>
|
||||
<span v-else>当前未保存</span>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<button type="button" class="footer-btn footer-btn-ghost" @click="dialogVisible = false">取消</button>
|
||||
<button type="button" class="footer-btn footer-btn-primary" @click="saveAll">保存</button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, watch } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {
|
||||
clearStoredApiSecret,
|
||||
getStoredApiSecretSnapshot,
|
||||
saveStoredApiSecret,
|
||||
type ApiSecretModuleKey,
|
||||
type ApiSecretRetention,
|
||||
} from '@/shared/utils/api-secret-store'
|
||||
|
||||
type ModuleState = {
|
||||
moduleKey: ApiSecretModuleKey
|
||||
title: string
|
||||
description: string
|
||||
value: string
|
||||
retention: ApiSecretRetention
|
||||
expiresAt: number | null
|
||||
exists: boolean
|
||||
}
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
|
||||
const retentionOptions: Array<{ value: ApiSecretRetention; label: string }> = [
|
||||
{ value: 'session', label: '仅本次打开有效' },
|
||||
{ value: '1d', label: '1天' },
|
||||
{ value: '7d', label: '7天' },
|
||||
{ value: '30d', label: '30天' },
|
||||
{ value: 'forever', label: '长期保留' },
|
||||
]
|
||||
|
||||
const moduleStates = ref<ModuleState[]>([])
|
||||
|
||||
function buildModuleState(
|
||||
moduleKey: ApiSecretModuleKey,
|
||||
title: string,
|
||||
description: string,
|
||||
): ModuleState {
|
||||
const snapshot = getStoredApiSecretSnapshot(moduleKey)
|
||||
return {
|
||||
moduleKey,
|
||||
title,
|
||||
description,
|
||||
value: snapshot.value,
|
||||
retention: snapshot.retention,
|
||||
expiresAt: snapshot.expiresAt,
|
||||
exists: snapshot.exists,
|
||||
}
|
||||
}
|
||||
|
||||
function loadStates() {
|
||||
moduleStates.value = [
|
||||
buildModuleState('appearance-patent', '外观专利', '用于外观专利检测的 Coze 接口密钥。'),
|
||||
buildModuleState('similar-asin', '货源查询', '用于货源查询的 Coze 接口密钥。'),
|
||||
]
|
||||
}
|
||||
|
||||
function formatRetentionText(retention: ApiSecretRetention, expiresAt: number | null) {
|
||||
if (retention === 'session') return '关闭软件后自动清空'
|
||||
if (retention === 'forever') return '长期保留,直到手动清空'
|
||||
if (!expiresAt) return '已保存'
|
||||
const date = new Date(expiresAt)
|
||||
const year = date.getFullYear()
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0')
|
||||
const day = String(date.getDate()).padStart(2, '0')
|
||||
const hour = String(date.getHours()).padStart(2, '0')
|
||||
const minute = String(date.getMinutes()).padStart(2, '0')
|
||||
return `有效期至 ${year}-${month}-${day} ${hour}:${minute}`
|
||||
}
|
||||
|
||||
function clearSecret(moduleKey: ApiSecretModuleKey) {
|
||||
clearStoredApiSecret(moduleKey)
|
||||
loadStates()
|
||||
ElMessage.success('已清空密钥')
|
||||
}
|
||||
|
||||
function saveAll() {
|
||||
for (const item of moduleStates.value) {
|
||||
saveStoredApiSecret(item.moduleKey, item.value, item.retention)
|
||||
}
|
||||
loadStates()
|
||||
dialogVisible.value = false
|
||||
ElMessage.success('密钥设置已保存')
|
||||
}
|
||||
|
||||
watch(dialogVisible, (visible) => {
|
||||
if (visible) {
|
||||
loadStates()
|
||||
}
|
||||
})
|
||||
|
||||
loadStates()
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.secret-settings-entry {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.secret-settings-trigger {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
height: 38px;
|
||||
padding: 0 14px;
|
||||
border: 1px solid #3c4a58;
|
||||
border-radius: 10px;
|
||||
background: linear-gradient(180deg, #2b3239 0%, #242a31 100%);
|
||||
color: #e7edf4;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.secret-settings-trigger:hover {
|
||||
border-color: #4c647d;
|
||||
}
|
||||
|
||||
.secret-settings-icon {
|
||||
color: #8dc4ff;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.dialog-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.dialog-title {
|
||||
color: #f5f7fa;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.dialog-subtitle {
|
||||
color: #8f9aa7;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.secret-settings-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.secret-card {
|
||||
padding: 16px;
|
||||
border: 1px solid #2f363f;
|
||||
border-radius: 12px;
|
||||
background: #22272d;
|
||||
}
|
||||
|
||||
.secret-card-head {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.secret-card-title {
|
||||
color: #eef4fb;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.secret-card-desc {
|
||||
margin-top: 4px;
|
||||
color: #909ba8;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.secret-input {
|
||||
width: 100%;
|
||||
height: 42px;
|
||||
padding: 0 12px;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #3b4652;
|
||||
border-radius: 10px;
|
||||
background: #1b2026;
|
||||
color: #dce6f0;
|
||||
font-size: 13px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.secret-input:focus {
|
||||
border-color: #5b96d6;
|
||||
}
|
||||
|
||||
.retention-block {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.retention-label {
|
||||
margin-bottom: 8px;
|
||||
color: #a3afbb;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.retention-options {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.retention-option {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 6px 10px;
|
||||
border-radius: 999px;
|
||||
background: #1b2026;
|
||||
color: #dce4ec;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.retention-option input {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.secret-meta {
|
||||
margin-top: 10px;
|
||||
color: #7f8a96;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.link-danger {
|
||||
border: none;
|
||||
background: transparent;
|
||||
color: #ff9b9b;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.footer-btn {
|
||||
height: 38px;
|
||||
padding: 0 18px;
|
||||
border-radius: 10px;
|
||||
border: 1px solid transparent;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.footer-btn-ghost {
|
||||
border-color: #3a4653;
|
||||
background: #232a31;
|
||||
color: #d9e2eb;
|
||||
}
|
||||
|
||||
.footer-btn-primary {
|
||||
background: #5aa2ea;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
@@ -24,11 +24,6 @@
|
||||
<div class="prompt-preview">{{ defaultAiPrompt }}</div>
|
||||
</div>
|
||||
|
||||
<div class="secret-card">
|
||||
<div class="section-title">密钥</div>
|
||||
<input v-model="cozeApiKey" class="secret-input" type="password" autocomplete="off" spellcheck="false" />
|
||||
</div>
|
||||
|
||||
<div class="run-row">
|
||||
<button type="button" class="btn-run" :disabled="parsing || !uploadedFiles.length" @click="parseFiles">
|
||||
{{ parsing ? '解析中...' : '解析并创建任务' }}
|
||||
@@ -170,6 +165,7 @@ import {
|
||||
import { expandBrandFolderRecursive, type BrandExpandFolderItem } from '@/shared/api/brand'
|
||||
import { getPywebviewApi } from '@/shared/bridges/pywebview'
|
||||
import { getTaskPollIntervalMs } from '@/shared/task-progress-config'
|
||||
import { getStoredApiSecret } from '@/shared/utils/api-secret-store'
|
||||
import { createCategorizedTimers } from '@/shared/utils/categorized-timers'
|
||||
|
||||
const selectedFileNames = ref<string[]>([])
|
||||
@@ -185,7 +181,6 @@ const defaultAiPrompt = `请帮我排查以下亚马逊商品在英国及欧洲
|
||||
标题维度: 排查标题中是否包含大牌商标、敏感词或版权保护词汇。
|
||||
结论:XX`
|
||||
const aiPrompt = ref('')
|
||||
const cozeApiKey = ref('')
|
||||
const parsing = ref(false)
|
||||
const pushing = ref(false)
|
||||
const queuePayloadText = ref('')
|
||||
@@ -225,7 +220,7 @@ function effectiveAiPrompt() {
|
||||
}
|
||||
|
||||
function effectiveCozeApiKey() {
|
||||
return cozeApiKey.value.trim()
|
||||
return getStoredApiSecret('appearance-patent').trim()
|
||||
}
|
||||
|
||||
function maskSecret(secret: string) {
|
||||
@@ -352,7 +347,7 @@ async function parseFiles() {
|
||||
return
|
||||
}
|
||||
if (!effectiveCozeApiKey()) {
|
||||
ElMessage.warning('请先填写密钥')
|
||||
ElMessage.warning('请先在左上角设置中填写外观专利密钥')
|
||||
return
|
||||
}
|
||||
parsing.value = true
|
||||
@@ -399,6 +394,10 @@ async function pushToPythonQueue() {
|
||||
ElMessage.error('当前环境未启用 pywebview enqueue_json')
|
||||
return
|
||||
}
|
||||
if (!effectiveCozeApiKey()) {
|
||||
ElMessage.warning('请先在左上角设置中填写外观专利密钥')
|
||||
return
|
||||
}
|
||||
pushing.value = true
|
||||
try {
|
||||
const payload = {
|
||||
@@ -773,6 +772,7 @@ onUnmounted(() => {
|
||||
.selected-files { margin-top: 14px; color: #999; font-size: 12px; word-break: break-all; }
|
||||
.selected-files span { display: block; margin: 4px 0; }
|
||||
.prompt-card, .secret-card { margin-bottom: 18px; }
|
||||
.secret-card { display: none; }
|
||||
.prompt-input { width: 100%; box-sizing: border-box; resize: vertical; min-height: 180px; padding: 10px 12px; border: 1px solid #333; border-radius: 8px; background: #202020; color: #d8d8d8; font-size: 12px; line-height: 1.6; outline: none; }
|
||||
.secret-input { width: 100%; box-sizing: border-box; height: 38px; padding: 0 12px; border: 1px solid #333; border-radius: 8px; background: #202020; color: #d8d8d8; font-size: 12px; outline: none; }
|
||||
.prompt-input:focus, .secret-input:focus { border-color: #3498db; }
|
||||
|
||||
@@ -18,15 +18,30 @@
|
||||
</div>
|
||||
|
||||
<div class="prompt-card">
|
||||
<div class="section-title">AI 提示词</div>
|
||||
<textarea v-model="aiPrompt" class="prompt-input" rows="8" placeholder="可选,留空时使用下方默认提示词" />
|
||||
<div class="prompt-default-label">留空时默认使用以下提示词</div>
|
||||
<div class="prompt-preview">{{ defaultAiPrompt }}</div>
|
||||
<div class="section-title">筛选条件</div>
|
||||
<textarea v-model="filterConditionInput" class="prompt-input" rows="4" placeholder="请输入筛选条件" />
|
||||
<div class="condition-actions">
|
||||
<button type="button" class="opt-btn" :disabled="savingCondition" @click="saveFilterCondition">
|
||||
{{ savingCondition ? '保存中...' : '保存' }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="secret-card">
|
||||
<div class="section-title">密钥</div>
|
||||
<input v-model="cozeApiKey" class="secret-input" type="password" autocomplete="off" spellcheck="false" />
|
||||
<div class="section-title condition-list-title">备选区</div>
|
||||
<div v-if="!filterConditions.length" class="empty-conditions">暂无筛选条件,输入后保存即可加入备选区</div>
|
||||
<ul v-else class="condition-list">
|
||||
<li v-for="condition in filterConditions" :key="condition.id" class="condition-item">
|
||||
<label class="condition-check">
|
||||
<input
|
||||
v-model="selectedFilterConditionId"
|
||||
type="radio"
|
||||
name="similar-asin-filter-condition"
|
||||
:value="condition.id"
|
||||
@change="applySelectedFilterCondition(condition)"
|
||||
/>
|
||||
<span :title="condition.conditionText">{{ condition.conditionText }}</span>
|
||||
</label>
|
||||
<button type="button" class="link-danger" @click="removeFilterCondition(condition.id)">删除</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="run-row">
|
||||
@@ -47,7 +62,7 @@
|
||||
</aside>
|
||||
|
||||
<section class="right-panel">
|
||||
<div class="panel-header">相似ASIN检测</div>
|
||||
<div class="panel-header">货源查询</div>
|
||||
<div class="task-list-wrap">
|
||||
<div class="clean-result-summary">
|
||||
<div class="summary-card">
|
||||
@@ -93,7 +108,7 @@
|
||||
<ul v-else class="task-list clean-result-list">
|
||||
<li v-for="item in currentItems" :key="`cur-${item.taskId}`" class="task-item">
|
||||
<div class="left">
|
||||
<span class="id">{{ item.sourceFilename || '相似ASIN检测' }}</span>
|
||||
<span class="id">{{ item.sourceFilename || '货源查询' }}</span>
|
||||
<div class="files">任务 ID:{{ item.taskId }}</div>
|
||||
<div class="files">行数:{{ item.rowCount ?? '-' }}</div>
|
||||
</div>
|
||||
@@ -113,7 +128,7 @@
|
||||
<ul v-else class="task-list clean-result-list">
|
||||
<li v-for="item in historyOnlyItems" :key="`his-${item.resultId}-${item.taskId}`" class="task-item">
|
||||
<div class="left">
|
||||
<span class="id">{{ item.sourceFilename || '相似ASIN检测' }}</span>
|
||||
<span class="id">{{ item.sourceFilename || '货源查询' }}</span>
|
||||
<div class="files">任务 ID:{{ item.taskId ?? '-' }}</div>
|
||||
<div v-if="item.resultFilename" class="files">
|
||||
{{ item.resultFilename || '下载结果' }}
|
||||
@@ -153,13 +168,17 @@ import { ElMessage } from 'element-plus'
|
||||
import BrandTopBar from '@/pages/brand/components/BrandTopBar.vue'
|
||||
import {
|
||||
activateSimilarAsinTask,
|
||||
addSimilarAsinFilterCondition,
|
||||
deleteSimilarAsinFilterCondition,
|
||||
deleteSimilarAsinHistory,
|
||||
deleteSimilarAsinTask,
|
||||
getSimilarAsinDashboard,
|
||||
getSimilarAsinHistory,
|
||||
getSimilarAsinResultDownloadUrl,
|
||||
getSimilarAsinTaskProgressBatch,
|
||||
listSimilarAsinFilterConditions,
|
||||
parseSimilarAsin,
|
||||
type SimilarAsinFilterConditionVo,
|
||||
type SimilarAsinParsedGroup,
|
||||
type SimilarAsinDashboardVo,
|
||||
type SimilarAsinHistoryItem,
|
||||
@@ -171,6 +190,7 @@ import {
|
||||
import { expandBrandFolderRecursive, type BrandExpandFolderItem } from '@/shared/api/brand'
|
||||
import { getPywebviewApi } from '@/shared/bridges/pywebview'
|
||||
import { getTaskPollIntervalMs } from '@/shared/task-progress-config'
|
||||
import { getStoredApiSecret } from '@/shared/utils/api-secret-store'
|
||||
import { createCategorizedTimers } from '@/shared/utils/categorized-timers'
|
||||
|
||||
const selectedFileNames = ref<string[]>([])
|
||||
@@ -179,14 +199,12 @@ const parseResult = ref<SimilarAsinParseVo | null>(null)
|
||||
const parsedGroups = ref<SimilarAsinParsedGroup[]>([])
|
||||
type TaskSummary = Pick<SimilarAsinParseVo, 'taskId' | 'totalRows' | 'acceptedRows' | 'groupCount' | 'droppedRows'>
|
||||
const queuedTaskSummary = ref<TaskSummary | null>(null)
|
||||
const defaultAiPrompt = `1. 图案与形象限制:不含各国国旗及类似图案,无各国领导人画像;不含圣诞老人形象;排除迪士尼、漫威、三丽鸥等所有指定动漫IP的图案与关联物品,且不涉及知名油画作品图案。
|
||||
2. 品类排除:非图书、刀具、服装;不含药品、带容器的粉末及液体;与吸烟行为无关,无医疗标志。
|
||||
3. 功能与配件要求:不可充电且不带电池,无磁吸功能;配件多的情况下需完全匹配。
|
||||
4. 规格与外观限制:不含体积大的家具类物品(如椅子、桌子、大镜子、柜子);不带任何品牌logo;无多种款式可选。`
|
||||
const aiPrompt = ref('')
|
||||
const cozeApiKey = ref('')
|
||||
const filterConditionInput = ref('')
|
||||
const filterConditions = ref<SimilarAsinFilterConditionVo[]>([])
|
||||
const selectedFilterConditionId = ref<number | null>(null)
|
||||
const parsing = ref(false)
|
||||
const pushing = ref(false)
|
||||
const savingCondition = ref(false)
|
||||
const queuePayloadText = ref('')
|
||||
const pollingTaskIds = ref<number[]>([])
|
||||
const pendingFileTaskIds = ref<number[]>([])
|
||||
@@ -206,11 +224,7 @@ const dashboard = ref<SimilarAsinDashboardVo>({
|
||||
})
|
||||
const historyItems = ref<SimilarAsinHistoryItem[]>([])
|
||||
|
||||
const parsedRows = computed<SimilarAsinParsedRow[]>(() =>
|
||||
parseResult.value?.items?.length
|
||||
? parseResult.value.items
|
||||
: parsedGroups.value.flatMap((group) => group.items || []),
|
||||
)
|
||||
const parsedRows = computed<SimilarAsinParsedRow[]>(() => parseResult.value?.items || [])
|
||||
const previewRows = computed(() => parsedRows.value)
|
||||
const visibleTaskSummary = computed(() => parseResult.value || queuedTaskSummary.value)
|
||||
const currentItems = computed(() => historyItems.value.filter((i) => i.taskId != null && pollingTaskIds.value.includes(i.taskId)))
|
||||
@@ -221,12 +235,18 @@ const historyOnlyItems = computed(() =>
|
||||
}),
|
||||
)
|
||||
|
||||
function effectiveAiPrompt() {
|
||||
return aiPrompt.value.trim() || defaultAiPrompt
|
||||
function selectedFilterConditionText() {
|
||||
const selectedId = selectedFilterConditionId.value
|
||||
if (selectedId == null) return ''
|
||||
return filterConditions.value.find((item) => item.id === selectedId)?.conditionText?.trim() || ''
|
||||
}
|
||||
|
||||
function effectiveFilterCondition() {
|
||||
return filterConditionInput.value.trim() || selectedFilterConditionText()
|
||||
}
|
||||
|
||||
function effectiveCozeApiKey() {
|
||||
return cozeApiKey.value.trim()
|
||||
return getStoredApiSecret('similar-asin').trim()
|
||||
}
|
||||
|
||||
function maskSecret(secret: string) {
|
||||
@@ -347,13 +367,64 @@ async function selectFolder() {
|
||||
}
|
||||
}
|
||||
|
||||
async function loadFilterConditions() {
|
||||
try {
|
||||
filterConditions.value = await listSimilarAsinFilterConditions()
|
||||
const ids = new Set(filterConditions.value.map((item) => item.id))
|
||||
if (selectedFilterConditionId.value != null && !ids.has(selectedFilterConditionId.value)) {
|
||||
selectedFilterConditionId.value = null
|
||||
}
|
||||
} catch (e) {
|
||||
ElMessage.error(e instanceof Error ? e.message : '加载筛选条件失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function saveFilterCondition() {
|
||||
const text = filterConditionInput.value.trim()
|
||||
if (!text) {
|
||||
ElMessage.warning('请输入筛选条件')
|
||||
return
|
||||
}
|
||||
savingCondition.value = true
|
||||
try {
|
||||
const saved = await addSimilarAsinFilterCondition(text)
|
||||
await loadFilterConditions()
|
||||
if (saved?.id) selectedFilterConditionId.value = saved.id
|
||||
ElMessage.success('筛选条件已保存')
|
||||
} catch (e) {
|
||||
ElMessage.error(e instanceof Error ? e.message : '保存筛选条件失败')
|
||||
} finally {
|
||||
savingCondition.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function applySelectedFilterCondition(condition: SimilarAsinFilterConditionVo) {
|
||||
filterConditionInput.value = condition.conditionText || ''
|
||||
}
|
||||
|
||||
async function removeFilterCondition(id: number) {
|
||||
try {
|
||||
await deleteSimilarAsinFilterCondition(id)
|
||||
if (selectedFilterConditionId.value === id) selectedFilterConditionId.value = null
|
||||
await loadFilterConditions()
|
||||
ElMessage.success('筛选条件已删除')
|
||||
} catch (e) {
|
||||
ElMessage.error(e instanceof Error ? e.message : '删除筛选条件失败')
|
||||
}
|
||||
}
|
||||
|
||||
async function parseFiles() {
|
||||
if (!uploadedFiles.value.length) {
|
||||
ElMessage.warning('请先选择 Excel')
|
||||
return
|
||||
}
|
||||
const filterCondition = effectiveFilterCondition()
|
||||
if (!filterCondition) {
|
||||
ElMessage.warning('请输入筛选条件,或在备选区选择一个筛选条件')
|
||||
return
|
||||
}
|
||||
if (!effectiveCozeApiKey()) {
|
||||
ElMessage.warning('请先填写密钥')
|
||||
ElMessage.warning('请先在左上角设置中填写货源查询密钥')
|
||||
return
|
||||
}
|
||||
parsing.value = true
|
||||
@@ -363,20 +434,10 @@ async function parseFiles() {
|
||||
originalFilename: f.originalFilename,
|
||||
relativePath: f.relativePath,
|
||||
}))
|
||||
const res = await parseSimilarAsin(files, effectiveAiPrompt(), effectiveCozeApiKey())
|
||||
const res = await parseSimilarAsin(files, filterCondition, effectiveCozeApiKey())
|
||||
parseResult.value = res
|
||||
queuedTaskSummary.value = null
|
||||
parsedGroups.value = res.items?.length
|
||||
? [{
|
||||
sourceFileKey: res.items[0]?.sourceFileKey,
|
||||
sourceFilename: res.items[0]?.sourceFilename,
|
||||
groupKey: `similar-asin:${res.taskId}`,
|
||||
baseId: '',
|
||||
displayId: res.items[0]?.displayId,
|
||||
itemCount: res.items.length,
|
||||
items: res.items,
|
||||
}]
|
||||
: []
|
||||
parsedGroups.value = []
|
||||
queuePayloadText.value = ''
|
||||
ElMessage.success(`解析完成,共 ${res.acceptedRows} 条`)
|
||||
} catch (e) {
|
||||
@@ -390,7 +451,7 @@ async function pushToPythonQueue() {
|
||||
const api = getPywebviewApi()
|
||||
const currentParseResult = parseResult.value
|
||||
const taskId = currentParseResult?.taskId
|
||||
if (!taskId || !parsedRows.value.length) {
|
||||
if (!taskId) {
|
||||
ElMessage.warning('请先解析文件')
|
||||
return
|
||||
}
|
||||
@@ -399,7 +460,7 @@ async function pushToPythonQueue() {
|
||||
return
|
||||
}
|
||||
if (!effectiveCozeApiKey()) {
|
||||
ElMessage.warning('请先填写密钥')
|
||||
ElMessage.warning('请先在左上角设置中填写货源查询密钥')
|
||||
return
|
||||
}
|
||||
pushing.value = true
|
||||
@@ -409,41 +470,12 @@ async function pushToPythonQueue() {
|
||||
ts: Date.now(),
|
||||
data: {
|
||||
taskId,
|
||||
prompt: currentParseResult.aiPrompt || effectiveAiPrompt(),
|
||||
prompt: currentParseResult.aiPrompt || effectiveFilterCondition(),
|
||||
api_key: effectiveCozeApiKey(),
|
||||
groups: parsedGroups.value.map((group) => ({
|
||||
sourceFileKey: group.sourceFileKey || '',
|
||||
sourceFilename: group.sourceFilename || '',
|
||||
groupKey: group.groupKey || '',
|
||||
baseId: group.baseId || '',
|
||||
displayId: group.displayId || '',
|
||||
items: (group.items || []).map((row) => ({
|
||||
sourceFileKey: row.sourceFileKey || '',
|
||||
sourceFilename: row.sourceFilename || '',
|
||||
rowToken: row.rowToken || '',
|
||||
groupKey: row.groupKey || '',
|
||||
id: row.displayId,
|
||||
asin: row.asin,
|
||||
country: row.country,
|
||||
price: row.price || '',
|
||||
url: row.url || '',
|
||||
title: row.title || '',
|
||||
target_urls: [],
|
||||
})),
|
||||
})),
|
||||
rows: parsedRows.value.map((row) => ({
|
||||
sourceFileKey: row.sourceFileKey || '',
|
||||
sourceFilename: row.sourceFilename || '',
|
||||
rowToken: row.rowToken || '',
|
||||
groupKey: row.groupKey || '',
|
||||
id: row.displayId,
|
||||
asin: row.asin,
|
||||
country: row.country,
|
||||
price: row.price || '',
|
||||
url: row.url || '',
|
||||
title: row.title || '',
|
||||
target_urls: [],
|
||||
})),
|
||||
sourceFileCount: currentParseResult.sourceFileCount || 0,
|
||||
totalRows: currentParseResult.totalRows || 0,
|
||||
acceptedRows: currentParseResult.acceptedRows || 0,
|
||||
groupCount: currentParseResult.groupCount || 0,
|
||||
},
|
||||
}
|
||||
queuePayloadText.value = JSON.stringify(payloadForDisplay(payload), null, 2)
|
||||
@@ -747,6 +779,7 @@ async function deleteTaskRecord(item: SimilarAsinHistoryItem) {
|
||||
onMounted(async () => {
|
||||
loadPollingIds()
|
||||
await Promise.all([
|
||||
loadFilterConditions().catch(() => undefined),
|
||||
loadDashboard().catch(() => undefined),
|
||||
loadHistory().catch(() => undefined),
|
||||
])
|
||||
@@ -779,12 +812,20 @@ onUnmounted(() => {
|
||||
.btn-run:disabled { opacity: .55; cursor: not-allowed; }
|
||||
.selected-files { margin-top: 14px; color: #999; font-size: 12px; word-break: break-all; }
|
||||
.selected-files span { display: block; margin: 4px 0; }
|
||||
.prompt-card, .secret-card { margin-bottom: 18px; }
|
||||
.prompt-input { width: 100%; box-sizing: border-box; resize: vertical; min-height: 180px; padding: 10px 12px; border: 1px solid #333; border-radius: 8px; background: #202020; color: #d8d8d8; font-size: 12px; line-height: 1.6; outline: none; }
|
||||
.secret-input { width: 100%; box-sizing: border-box; height: 38px; padding: 0 12px; border: 1px solid #333; border-radius: 8px; background: #202020; color: #d8d8d8; font-size: 12px; outline: none; }
|
||||
.prompt-input:focus, .secret-input:focus { border-color: #3498db; }
|
||||
.prompt-default-label { margin-top: 10px; color: #8d8d8d; font-size: 12px; }
|
||||
.prompt-preview { margin-top: 10px; padding: 12px; border: 1px solid #2a2a2a; border-radius: 8px; background: #202020; color: #9ea7b3; font-size: 12px; line-height: 1.6; white-space: pre-wrap; }
|
||||
.prompt-card { margin-bottom: 14px; }
|
||||
.prompt-input { width: 100%; box-sizing: border-box; resize: vertical; min-height: 96px; max-height: 140px; padding: 8px 12px; border: 1px solid #333; border-radius: 8px; background: #202020; color: #d8d8d8; font-size: 12px; line-height: 1.5; outline: none; }
|
||||
.prompt-input:focus { border-color: #3498db; }
|
||||
.condition-actions { display: flex; justify-content: flex-end; margin-top: 8px; }
|
||||
.condition-actions .opt-btn { padding: 6px 14px; }
|
||||
.condition-list-title { margin-top: 10px; }
|
||||
.empty-conditions { color: #666; font-size: 12px; padding: 10px 4px; }
|
||||
.condition-list { list-style: none; margin: 0; padding: 0; max-height: 96px; overflow: auto; display: flex; flex-direction: column; gap: 6px; }
|
||||
.condition-item { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px; border-bottom: 1px solid #303030; }
|
||||
.condition-item:last-child { border-bottom: none; }
|
||||
.condition-check { display: flex; align-items: center; gap: 8px; min-width: 0; color: #cfd6df; font-size: 12px; cursor: pointer; }
|
||||
.condition-check input { width: 16px; height: 16px; margin: 0; flex: 0 0 auto; }
|
||||
.condition-check span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.link-danger { border: none; background: transparent; color: #ff8f8f; cursor: pointer; font-size: 12px; padding: 2px 0; white-space: nowrap; }
|
||||
.parse-card, .queue-payload { margin-top: 14px; padding: 12px; border: 1px solid #2a2a2a; border-radius: 8px; background: #202020; color: #b8c1cc; font-size: 12px; }
|
||||
.queue-payload { max-height: 220px; overflow: auto; color: #8fd3ff; white-space: pre-wrap; }
|
||||
.panel-header { padding: 16px 20px; border-bottom: 1px solid #2a2a2a; font-size: 15px; font-weight: 600; color: #ddd; }
|
||||
|
||||
@@ -34,13 +34,16 @@
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<div class="top-right"></div>
|
||||
<div class="top-right">
|
||||
<BrandApiSecretSettingsButton />
|
||||
</div>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
|
||||
import BrandApiSecretSettingsButton from '@/pages/brand/components/BrandApiSecretSettingsButton.vue'
|
||||
import { getCurrentUserAppColumnKeys } from '@/shared/api/permission'
|
||||
|
||||
type ActiveNavKey =
|
||||
@@ -85,7 +88,7 @@ const navGroups: ReadonlyArray<NavGroup> = [
|
||||
{ key: 'variant', label: '变体分析' },
|
||||
{ key: 'brand', label: '品牌检测', href: '/brand' },
|
||||
{ key: 'appearance-patent', label: '外观专利检测', href: '/new_web_source/appearance-patent.html' },
|
||||
{ key: 'similar-asin', label: '相似ASIN检测', href: '/new_web_source/similar-asin.html' },
|
||||
{ key: 'similar-asin', label: '货源查询', href: '/new_web_source/similar-asin.html' },
|
||||
{ key: 'dedupe', label: '数据去重', href: '/new_web_source/dedupe.html' },
|
||||
{ key: 'split', label: '数据拆分', href: '/new_web_source/split.html' },
|
||||
{ key: 'convert', label: '格式转换', href: '/new_web_source/convert.html' },
|
||||
@@ -248,8 +251,11 @@ onMounted(async () => {
|
||||
}
|
||||
|
||||
.top-right {
|
||||
width: 60px;
|
||||
width: 140px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
|
||||
@@ -1604,7 +1604,13 @@ export function getAppearancePatentResultDownloadUrl(resultId: number) {
|
||||
return getJavaDownloadUrl(`/appearance-patent/results/${resultId}/download`);
|
||||
}
|
||||
|
||||
// ========== 相似ASIN检测 ==========
|
||||
// ========== 货源查询 ==========
|
||||
|
||||
export interface SimilarAsinFilterConditionVo {
|
||||
id: number;
|
||||
conditionText: string;
|
||||
createdAt?: string;
|
||||
}
|
||||
|
||||
export interface SimilarAsinParsedRow {
|
||||
rowIndex: number;
|
||||
@@ -1696,7 +1702,7 @@ export interface SimilarAsinTaskBatchVo {
|
||||
missingTaskIds?: number[];
|
||||
}
|
||||
|
||||
export function parseSimilarAsin(files: UploadedFileRef[], aiPrompt: string, apiKey?: string) {
|
||||
export function parseSimilarAsin(files: UploadedFileRef[], filterCondition: string, apiKey?: string) {
|
||||
return unwrapJavaResponse(
|
||||
post<
|
||||
JavaApiResponse<SimilarAsinParseVo>,
|
||||
@@ -1704,12 +1710,41 @@ export function parseSimilarAsin(files: UploadedFileRef[], aiPrompt: string, api
|
||||
>(`${JAVA_API_PREFIX}/similar-asin/parse`, {
|
||||
user_id: getCurrentUserId(),
|
||||
files,
|
||||
ai_prompt: aiPrompt,
|
||||
ai_prompt: filterCondition,
|
||||
api_key: apiKey,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function listSimilarAsinFilterConditions() {
|
||||
return unwrapJavaResponse(
|
||||
get<JavaApiResponse<SimilarAsinFilterConditionVo[]>>(
|
||||
`${JAVA_API_PREFIX}/similar-asin/filter-conditions`,
|
||||
{ params: { user_id: getCurrentUserId() } },
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
export function addSimilarAsinFilterCondition(conditionText: string) {
|
||||
return unwrapJavaResponse(
|
||||
post<
|
||||
JavaApiResponse<SimilarAsinFilterConditionVo>,
|
||||
{ user_id: number; condition_text: string }
|
||||
>(`${JAVA_API_PREFIX}/similar-asin/filter-conditions`, {
|
||||
user_id: getCurrentUserId(),
|
||||
condition_text: conditionText,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function deleteSimilarAsinFilterCondition(id: number) {
|
||||
return unwrapJavaResponse(
|
||||
del<JavaApiResponse<null>>(`${JAVA_API_PREFIX}/similar-asin/filter-conditions/${id}`, {
|
||||
params: { user_id: getCurrentUserId() },
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function getSimilarAsinDashboard() {
|
||||
return unwrapJavaResponse(
|
||||
get<JavaApiResponse<SimilarAsinDashboardVo>>(
|
||||
|
||||
156
frontend-vue/src/shared/utils/api-secret-store.ts
Normal file
156
frontend-vue/src/shared/utils/api-secret-store.ts
Normal file
@@ -0,0 +1,156 @@
|
||||
export type ApiSecretModuleKey = 'appearance-patent' | 'similar-asin'
|
||||
|
||||
export type ApiSecretRetention = 'session' | '1d' | '7d' | '30d' | 'forever'
|
||||
|
||||
type ApiSecretRecord = {
|
||||
value: string
|
||||
retention: ApiSecretRetention
|
||||
expiresAt: number | null
|
||||
updatedAt: number
|
||||
}
|
||||
|
||||
export type ApiSecretSnapshot = {
|
||||
value: string
|
||||
retention: ApiSecretRetention
|
||||
expiresAt: number | null
|
||||
updatedAt: number | null
|
||||
exists: boolean
|
||||
}
|
||||
|
||||
const STORAGE_PREFIX = 'brand:api-secret'
|
||||
|
||||
function currentUserStorageId() {
|
||||
if (typeof window === 'undefined') return '0'
|
||||
return window.localStorage.getItem('uid') || '0'
|
||||
}
|
||||
|
||||
function buildStorageKey(moduleKey: ApiSecretModuleKey) {
|
||||
return `${STORAGE_PREFIX}:${currentUserStorageId()}:${moduleKey}`
|
||||
}
|
||||
|
||||
function readStorageRecord(storage: Storage, moduleKey: ApiSecretModuleKey): ApiSecretRecord | null {
|
||||
const raw = storage.getItem(buildStorageKey(moduleKey))
|
||||
if (!raw) return null
|
||||
try {
|
||||
const parsed = JSON.parse(raw) as Partial<ApiSecretRecord>
|
||||
if (typeof parsed.value !== 'string') return null
|
||||
const retention = normalizeRetention(parsed.retention)
|
||||
const expiresAt = typeof parsed.expiresAt === 'number' ? parsed.expiresAt : null
|
||||
const updatedAt = typeof parsed.updatedAt === 'number' ? parsed.updatedAt : Date.now()
|
||||
return {
|
||||
value: parsed.value,
|
||||
retention,
|
||||
expiresAt,
|
||||
updatedAt,
|
||||
}
|
||||
} catch {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeRetention(value: unknown): ApiSecretRetention {
|
||||
switch (value) {
|
||||
case '1d':
|
||||
case '7d':
|
||||
case '30d':
|
||||
case 'forever':
|
||||
case 'session':
|
||||
return value
|
||||
default:
|
||||
return 'session'
|
||||
}
|
||||
}
|
||||
|
||||
function retentionToExpiresAt(retention: ApiSecretRetention, now: number) {
|
||||
switch (retention) {
|
||||
case '1d':
|
||||
return now + 24 * 60 * 60 * 1000
|
||||
case '7d':
|
||||
return now + 7 * 24 * 60 * 60 * 1000
|
||||
case '30d':
|
||||
return now + 30 * 24 * 60 * 60 * 1000
|
||||
case 'forever':
|
||||
return null
|
||||
case 'session':
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function isExpired(record: ApiSecretRecord) {
|
||||
return record.expiresAt != null && record.expiresAt <= Date.now()
|
||||
}
|
||||
|
||||
function clearStorageRecord(storage: Storage, moduleKey: ApiSecretModuleKey) {
|
||||
storage.removeItem(buildStorageKey(moduleKey))
|
||||
}
|
||||
|
||||
function getLiveRecord(moduleKey: ApiSecretModuleKey): ApiSecretRecord | null {
|
||||
if (typeof window === 'undefined') return null
|
||||
|
||||
const sessionRecord = readStorageRecord(window.sessionStorage, moduleKey)
|
||||
if (sessionRecord) {
|
||||
return sessionRecord
|
||||
}
|
||||
|
||||
const localRecord = readStorageRecord(window.localStorage, moduleKey)
|
||||
if (!localRecord) return null
|
||||
if (isExpired(localRecord)) {
|
||||
clearStorageRecord(window.localStorage, moduleKey)
|
||||
return null
|
||||
}
|
||||
return localRecord
|
||||
}
|
||||
|
||||
export function getStoredApiSecret(moduleKey: ApiSecretModuleKey) {
|
||||
return getLiveRecord(moduleKey)?.value || ''
|
||||
}
|
||||
|
||||
export function getStoredApiSecretSnapshot(moduleKey: ApiSecretModuleKey): ApiSecretSnapshot {
|
||||
const record = getLiveRecord(moduleKey)
|
||||
if (!record) {
|
||||
return {
|
||||
value: '',
|
||||
retention: 'session',
|
||||
expiresAt: null,
|
||||
updatedAt: null,
|
||||
exists: false,
|
||||
}
|
||||
}
|
||||
return {
|
||||
value: record.value,
|
||||
retention: record.retention,
|
||||
expiresAt: record.expiresAt,
|
||||
updatedAt: record.updatedAt,
|
||||
exists: true,
|
||||
}
|
||||
}
|
||||
|
||||
export function saveStoredApiSecret(
|
||||
moduleKey: ApiSecretModuleKey,
|
||||
value: string,
|
||||
retention: ApiSecretRetention,
|
||||
) {
|
||||
if (typeof window === 'undefined') return
|
||||
|
||||
const trimmedValue = value.trim()
|
||||
clearStoredApiSecret(moduleKey)
|
||||
if (!trimmedValue) return
|
||||
|
||||
const now = Date.now()
|
||||
const record: ApiSecretRecord = {
|
||||
value: trimmedValue,
|
||||
retention,
|
||||
expiresAt: retentionToExpiresAt(retention, now),
|
||||
updatedAt: now,
|
||||
}
|
||||
|
||||
const storage = retention === 'session' ? window.sessionStorage : window.localStorage
|
||||
storage.setItem(buildStorageKey(moduleKey), JSON.stringify(record))
|
||||
}
|
||||
|
||||
export function clearStoredApiSecret(moduleKey: ApiSecretModuleKey) {
|
||||
if (typeof window === 'undefined') return
|
||||
clearStorageRecord(window.sessionStorage, moduleKey)
|
||||
clearStorageRecord(window.localStorage, moduleKey)
|
||||
}
|
||||
@@ -1,732 +0,0 @@
|
||||
java-server | 08:17:25.47 INFO ==>
|
||||
java-server | 08:17:25.47 INFO ==> Welcome to the Bitnami java container
|
||||
java-server | 08:17:25.48 INFO ==> Subscribe to project updates by watching https://github.com/bitnami/containers
|
||||
java-server | 08:17:25.48 INFO ==> Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami/ for more information.
|
||||
java-server | 08:17:25.48 INFO ==>
|
||||
java-server |
|
||||
java-server | Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
|
||||
java-server |
|
||||
java-server | . ____ _ __ _ _
|
||||
java-server | /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
|
||||
java-server | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
|
||||
java-server | \\/ ___)| |_)| | | | | || (_| | ) ) ) )
|
||||
java-server | ' |____| .__|_| |_|_| |_\__, | / / / /
|
||||
java-server | =========|_|==============|___/=/_/_/_/
|
||||
java-server |
|
||||
java-server | :: Spring Boot :: (v3.3.9)
|
||||
java-server |
|
||||
java-server | 2026-05-05 16:17:26.296 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final
|
||||
java-server | 2026-05-05 16:17:26.332 [main] INFO c.nanri.aiimage.AiImageApplication - Starting AiImageApplication v0.0.1-SNAPSHOT using Java 21.0.7 with PID 12 (/app/aiimage-backend-0.0.1-SNAPSHOT.jar started by root in /app)
|
||||
java-server | 2026-05-05 16:17:26.332 [main] INFO c.nanri.aiimage.AiImageApplication - No active profile set, falling back to 1 default profile: "default"
|
||||
java-server | 2026-05-05 16:17:27.253 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||
java-server | 2026-05-05 16:17:27.255 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||
java-server | 2026-05-05 16:17:27.282 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 0 Redis repository interfaces.
|
||||
java-server | 2026-05-05 16:17:27.882 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 18080 (http)
|
||||
java-server | 2026-05-05 16:17:27.890 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-18080"]
|
||||
java-server | 2026-05-05 16:17:27.891 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||
java-server | 2026-05-05 16:17:27.891 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.36]
|
||||
java-server | 2026-05-05 16:17:27.910 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||
java-server | 2026-05-05 16:17:27.910 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1549 ms
|
||||
java-server | Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
|
||||
java-server | _ _ |_ _ _|_. ___ _ | _
|
||||
java-server | | | |\/|_)(_| | |_\ |_)||_|_\
|
||||
java-server | / |
|
||||
java-server | 3.5.7
|
||||
java-server | 2026-05-05 16:17:29.176 [main] WARN c.b.m.core.metadata.TableInfoHelper - Can not find table primary key in Class: "com.nanri.aiimage.modules.permission.model.entity.UserColumnPermissionEntity".
|
||||
java-server | 2026-05-05 16:17:29.176 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class com.nanri.aiimage.modules.permission.model.entity.UserColumnPermissionEntity ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
|
||||
java-server | 2026-05-05 16:17:29.476 [main] INFO o.a.r.s.s.RocketMQMessageListenerContainerRegistrar - Register the listener to container, listenerBeanName:taskFileJobConsumer, containerBeanName:org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer_1
|
||||
java-server | 2026-05-05 16:17:29.569 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration -
|
||||
java-server |
|
||||
java-server | Using generated security password: b8933522-c036-4732-bc90-2809f85408b4
|
||||
java-server |
|
||||
java-server | This generated password is for development use only. Your security configuration must be updated before running your application in production.
|
||||
java-server |
|
||||
java-server | 2026-05-05 16:17:29.582 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
|
||||
java-server | 2026-05-05 16:17:29.849 [main] INFO o.a.r.s.a.RocketMQAutoConfiguration - a producer (aiimage-backend-producer) init on namesrv 121.196.149.225:9876
|
||||
java-server | 2026-05-05 16:17:30.220 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 1 endpoint beneath base path '/actuator'
|
||||
java-server | 2026-05-05 16:17:30.276 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-18080"]
|
||||
java-server | 2026-05-05 16:17:30.285 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 18080 (http) with context path '/'
|
||||
java-server | 2026-05-05 16:17:30.393 [main] INFO o.a.r.s.s.DefaultRocketMQListenerContainer - running container: DefaultRocketMQListenerContainer{consumerGroup='aiimage-result-file-job-consumer', namespace='', namespaceV2='', nameServer='121.196.149.225:9876', topic='aiimage-result-file-job', consumeMode=CONCURRENTLY, selectorType=TAG, selectorExpression='*', messageModel=CLUSTERING', tlsEnable=false, instanceName=DEFAULT}
|
||||
java-server | 2026-05-05 16:17:30.407 [main] INFO c.nanri.aiimage.AiImageApplication - Started AiImageApplication in 4.495 seconds (process running for 4.922)
|
||||
java-server | 2026-05-05 16:17:30.419 [aiimage-scheduling-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||
java-server | 2026-05-05 16:17:30.569 [aiimage-scheduling-2] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@31f426dd
|
||||
java-server | 2026-05-05 16:17:30.572 [aiimage-scheduling-2] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
|
||||
java-server | 2026-05-05 16:17:30.608 [http-nio-18080-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||
java-server | 2026-05-05 16:17:30.608 [http-nio-18080-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
|
||||
java-server | 2026-05-05 16:17:30.610 [http-nio-18080-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
|
||||
java-server | 2026-05-05 16:17:30.801 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6363 status=SUCCESS
|
||||
java-server | 2026-05-05 16:17:30.831 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6363/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=191
|
||||
java-server | 2026-05-05 16:17:31.055 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:17:31.061 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=24
|
||||
java-server | 2026-05-05 16:17:31.386 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:17:31.391 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=22
|
||||
java-server | 2026-05-05 16:17:44.290 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/brand/tasks status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=35
|
||||
java-server | 2026-05-05 16:17:45.747 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:17:45.752 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/history status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=33
|
||||
java-server | 2026-05-05 16:17:45.896 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=43
|
||||
java-server | 2026-05-05 16:17:46.015 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:17:46.116 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:17:46.122 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:17:48.143 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/files/upload status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=50
|
||||
java-server | 2026-05-05 16:17:50.648 [http-nio-18080-exec-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] parse timing taskId=6594 files=1 rows=12 groups=8 totalMs=1030 parseMs=380 groupMs=0 taskInsertMs=31 payloadJsonMs=233 payloadStoreMs=335 persistMs=48 responseMs=0
|
||||
java-server | 2026-05-05 16:17:50.651 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/parse status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=1041
|
||||
java-server | 2026-05-05 16:17:51.477 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6594/activate status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=54
|
||||
java-server | 2026-05-05 16:17:51.592 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:17:51.712 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/history status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:17:56.017 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=24
|
||||
java-server | 2026-05-05 16:17:56.134 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:17:57.289 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:17:57.294 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:18:00.005 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:18:00.013 [aiimage-scheduling-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:18:03.991 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:03.996 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:18:06.142 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=24
|
||||
java-server | 2026-05-05 16:18:06.245 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:18:16.284 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=32
|
||||
java-server | 2026-05-05 16:18:16.398 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:18:19.848 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:19.854 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:18:26.405 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=25
|
||||
java-server | 2026-05-05 16:18:26.524 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:18:30.008 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [finalize-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:18:30.009 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:30.014 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=30
|
||||
java-server | 2026-05-05 16:18:33.287 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:33.293 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:18:36.542 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:18:36.651 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:18:40.422 [http-nio-18080-exec-10] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:40.427 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:18:46.686 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:18:46.802 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:18:56.826 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:18:56.959 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=21
|
||||
java-server | 2026-05-05 16:18:57.163 [http-nio-18080-exec-10] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:18:57.169 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:19:06.967 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=33
|
||||
java-server | 2026-05-05 16:19:07.077 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:19:07.374 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:07.379 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:19:17.101 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=29
|
||||
java-server | 2026-05-05 16:19:17.211 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:19:17.970 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:17.976 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:19:23.559 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:23.565 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:19:27.333 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:19:27.466 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:19:36.358 [http-nio-18080-exec-10] ERROR c.n.a.c.e.GlobalExceptionHandler - Unhandled exception
|
||||
java-server | org.springframework.web.servlet.resource.NoResourceFoundException: No static resource .
|
||||
java-server | at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:586)
|
||||
java-server | at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)
|
||||
java-server | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
|
||||
java-server | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
|
||||
java-server | at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
|
||||
java-server | at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at com.nanri.aiimage.config.RequestTraceFilter.doFilterInternal(RequestTraceFilter.java:48)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128)
|
||||
java-server | at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
java-server | at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:181)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
|
||||
java-server | at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
java-server | at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
java-server | at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
java-server | at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
java-server | at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
|
||||
java-server | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
|
||||
java-server | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
|
||||
java-server | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
|
||||
java-server | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
|
||||
java-server | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
|
||||
java-server | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
|
||||
java-server | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
|
||||
java-server | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
|
||||
java-server | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
|
||||
java-server | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
|
||||
java-server | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
|
||||
java-server | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
|
||||
java-server | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
|
||||
java-server | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
|
||||
java-server | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
|
||||
java-server | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
|
||||
java-server | at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||
java-server | 2026-05-05 16:19:36.360 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/ status=200 remote=59.82.83.216 forwardedHost=121.196.149.225 forwardedProto=http forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.2231.103 Safari/537.36 costMs=4
|
||||
java-server | 2026-05-05 16:19:36.459 [http-nio-18080-exec-9] ERROR c.n.a.c.e.GlobalExceptionHandler - Unhandled exception
|
||||
java-server | org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.
|
||||
java-server | at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:586)
|
||||
java-server | at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)
|
||||
java-server | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
|
||||
java-server | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
|
||||
java-server | at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
|
||||
java-server | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
|
||||
java-server | at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at com.nanri.aiimage.config.RequestTraceFilter.doFilterInternal(RequestTraceFilter.java:48)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128)
|
||||
java-server | at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
|
||||
java-server | at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:181)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
|
||||
java-server | at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
|
||||
java-server | at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
|
||||
java-server | at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224)
|
||||
java-server | at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
|
||||
java-server | at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
java-server | at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
|
||||
java-server | at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
|
||||
java-server | at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
|
||||
java-server | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
|
||||
java-server | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
|
||||
java-server | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
|
||||
java-server | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
|
||||
java-server | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
|
||||
java-server | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
|
||||
java-server | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
|
||||
java-server | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
|
||||
java-server | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
|
||||
java-server | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
|
||||
java-server | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
|
||||
java-server | at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
|
||||
java-server | at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
|
||||
java-server | at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
|
||||
java-server | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
|
||||
java-server | at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
|
||||
java-server | at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
|
||||
java-server | at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
|
||||
java-server | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
|
||||
java-server | at java.base/java.lang.Thread.run(Thread.java:1583)
|
||||
java-server | 2026-05-05 16:19:36.463 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/favicon.ico status=200 remote=59.82.83.216 forwardedHost=121.196.149.225 forwardedProto=http forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.2231.103 Safari/537.36 costMs=5
|
||||
java-server | 2026-05-05 16:19:37.465 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=29
|
||||
java-server | 2026-05-05 16:19:37.606 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:19:37.877 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6384 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:37.883 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6384/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=34
|
||||
java-server | 2026-05-05 16:19:40.514 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:40.519 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:19:42.757 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:42.762 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:19:42.765 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6586/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=211
|
||||
java-server | 2026-05-05 16:19:47.603 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:19:47.719 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:19:47.736 [http-nio-18080-exec-6] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:47.741 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:19:56.837 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:19:56.842 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:19:57.745 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:19:57.860 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:20:00.005 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:20:00.005 [aiimage-scheduling-1] INFO c.n.a.m.z.s.ZiniaoShopIndexRefreshService - [ziniao-index] skip refresh because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:20:00.013 [aiimage-scheduling-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:20:00.472 [http-nio-18080-exec-5] INFO c.n.a.m.t.s.TaskFileJobPublisher - [task-file-job] mq published jobId=1365 taskId=6594 moduleType=APPEARANCE_PATENT topic=aiimage-result-file-job
|
||||
java-server | 2026-05-05 16:20:00.482 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6594/result status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=221
|
||||
java-server | 2026-05-05 16:20:00.585 [coze-task-0] INFO c.n.a.m.a.c.AppearancePatentCozeClient - [appearance-patent] coze request url=https://api.coze.cn/v1/workflow/run body={"workflow_id":"7632683471312355338","parameters":{"title_list":["KOPOX 170PCS Hook and Eye Sewing Kit with Garment Buttons, Hook and Eye Closures, Fabric Snap Buttons, Garment Snap Buttons for Skirts Pants Dresses, Clothing and DIY Crafts","WIRESTER Green Aluminum Round Bike Bell, Classic Ring Bicycle Bell, Bike Accessories Bell Ring for Adults Kids Girls Boys","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can Bring Good Luck and Peace to Motorcycle Accessories","Motorcycle Bell - Bicycle Bells for Men, Stainless Steel Bring Good Luck and Peace","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can bring good luck and peace to motorcycle accessories","Motorcycle for Bell, Bicycle Bells for Men, Stainless Steel Brings Good Luck and Peace for Motorcycle Accessories, One Size, Metal, Una talla, Metal","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel Provides Good Treats and Peace for Motorcycle Accessories, Metal, No Gemstone, Metal, No Gemstone","Motorcycle for Bells - Bicycle bells for men, stainless steel can bring good luck and peace to motorcycle accessories"],"url_list":["https://m.media-amazon.com/images/I/91KtKyLQstL._AC_SX425_.jpg","https://m.media-amazon.com/images/I/51dETWpSQXL._AC_SX466_.jpg","https://m.media-amazon.com/images/I/81vJjZcgf5L._AC_SX466_.jpg","https://m.media-amazon.com/images/I/71sGtlqHXzL._AC_SX466_.jpg","https://m.media-amazon.com/images/I/71IzidKhklL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71ASKPXDUHL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71jfXEIPGOL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71tYUk0XWvL._AC_SX466_.jpg"],"items":[{"group_key":"f037a1b87dbf486d940ea2e25f194027::1@2","row_id":"1","asin":"B0D792ND9V","country":"英国","title":"KOPOX 170PCS Hook and Eye Sewing Kit with Garment Buttons, Hook and Eye Closures, Fabric Snap Buttons, Garment Snap Buttons for Skirts Pants Dresses, Clothing and DIY Crafts","url":"https://m.media-amazon.com/images/I/91KtKyLQstL._AC_SX425_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::2@3","row_id":"2_1","asin":"B0D14L34S7","country":"英国","title":"WIRESTER Green Aluminum Round Bike Bell, Classic Ring Bicycle Bell, Bike Accessories Bell Ring for Adults Kids Girls Boys","url":"https://m.media-amazon.com/images/I/51dETWpSQXL._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::3@7","row_id":"3_1","asin":"B0CWQFZMGY","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can Bring Good Luck and Peace to Motorcycle Accessories","url":"https://m.media-amazon.com/images/I/81vJjZcgf5L._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::4@9","row_id":"4_1","asin":"B0CX87XXWJ","country":"英国","title":"Motorcycle Bell - Bicycle Bells for Men, Stainless Steel Bring Good Luck and Peace","url":"https://m.media-amazon.com/images/I/71sGtlqHXzL._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::5@10","row_id":"5_1","asin":"B0CR3PMR8L","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can bring good luck and peace to motorcycle accessories","url":"https://m.media-amazon.com/images/I/71IzidKhklL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::6@11","row_id":"6","asin":"B0DK3L6FD4","country":"英国","title":"Motorcycle for Bell, Bicycle Bells for Men, Stainless Steel Brings Good Luck and Peace for Motorcycle Accessories, One Size, Metal, Una talla, Metal","url":"https://m.media-amazon.com/images/I/71ASKPXDUHL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::8@12","row_id":"8","asin":"B0D9QNV6FT","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel Provides Good Treats and Peace for Motorcycle Accessories, Metal, No Gemstone, Metal, No Gemstone","url":"https://m.media-amazon.com/images/I/71jfXEIPGOL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::10@13","row_id":"10_1","asin":"B0DBZG716J","country":"英国","title":"Motorcycle for Bells - Bicycle bells for men, stainless steel can bring good luck and peace to motorcycle accessories","url":"https://m.media-amazon.com/images/I/71tYUk0XWvL._AC_SX466_.jpg"}],"prompt":"请帮我排查以下亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。 请直接给出明确结论(有侵权风险 或 未发现明显侵权风险),并严格按照以下三个维度提供精简的排查理由: 外观维度: 评估产品外形、图案设计是否与欧洲/英国常见外观专利雷同。 专利维度: 评估产品的核心技术或物理结构是否存在侵权可能。 标题维度: 排查标题中是否包含大牌商标、敏感词或版权保护词汇。 结论:XX"},"is_async":true}
|
||||
java-server | 2026-05-05 16:20:00.967 [coze-task-0] INFO c.n.a.m.a.c.AppearancePatentCozeClient - [appearance-patent] coze submit response status=200 OK body={"execute_id":"7636319564359794723","detail":{"logid":"202605051620001443DB557D71573D26D7"},"code":0,"msg":"","debug_url":"https://www.coze.cn/work_flow?execute_id=7636319564359794723&space_id=7519005192466022436&workflow_id=7632683471312355338&execute_mode=2"}
|
||||
java-server | 2026-05-05 16:20:01.005 [coze-task-0] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze async submitted taskId=6594 jobId=1365 chunk=8 batch=1/1 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:01.081 [coze-task-0] INFO c.n.a.m.t.s.TaskResultFileJobWorker - [task-file-job] process deferred jobId=1365 taskId=6594 moduleType=APPEARANCE_PATENT resultId=8943 elapsedMs=580
|
||||
java-server | 2026-05-05 16:20:01.237 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:01.237 [coze-task-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:01.284 [coze-task-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll start taskId=6594 stateId=4138 executeId=7636319564359794723 jobId=1365 chunk=8 batch=1/1
|
||||
java-server | 2026-05-05 16:20:01.405 [coze-task-1] INFO c.n.a.m.a.c.AppearancePatentCozeClient - [appearance-patent] coze history response executeId=7636319564359794723 status=200 OK body={"code":0,"msg":"","data":[{"debug_url":"https://www.coze.cn/work_flow?execute_id=7636319564359794723&space_id=7519005192466022436&workflow_id=7632683471312355338&execute_mode=2","output":"{\"node_status\":\"{}\",\"Output\":\"\"}","error_code":"","update_time":1777969201,"token":"0","usage":{"token_count":0,"output_count":0,"input_count":0},"connector_id":"1024","create_time":1777969201,"is_output_trimmed":false,"connector_uid":"2939430754097600","run_mode":2,"node_execute_status":{},"execute_id":"7636319564359794723","bot_id":"0","execute_status":"Running","logid":"202605051620001443DB557D71573D26D7"}],"detail":{"logid":"20260505162001F6047AEE90C5EC5A6965"}}
|
||||
java-server | 2026-05-05 16:20:01.406 [coze-task-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll pending taskId=6594 stateId=4138 executeId=7636319564359794723 status=RUNNING
|
||||
java-server | 2026-05-05 16:20:06.256 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:06.256 [coze-task-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:06.270 [coze-task-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:06
|
||||
java-server | 2026-05-05 16:20:07.863 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:20:07.975 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:20:10.506 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:10.512 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:20:11.274 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:11.274 [coze-task-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:11.293 [coze-task-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:11
|
||||
java-server | 2026-05-05 16:20:16.292 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:16.292 [coze-task-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:16.306 [coze-task-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:16
|
||||
java-server | 2026-05-05 16:20:18.009 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=31
|
||||
java-server | 2026-05-05 16:20:18.133 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:20:19.379 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:19.385 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:20:21.309 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:21.309 [coze-task-5] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:21.328 [coze-task-5] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:21
|
||||
java-server | 2026-05-05 16:20:22.521 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:22.527 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:20:26.328 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:26.328 [coze-task-6] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:26.343 [coze-task-6] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:26
|
||||
java-server | 2026-05-05 16:20:28.139 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:20:28.264 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:20:30.005 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [finalize-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:20:31.346 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:31.346 [coze-task-7] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:31.360 [coze-task-7] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:31
|
||||
java-server | 2026-05-05 16:20:35.362 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:35.368 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:20:36.364 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:36.364 [coze-task-8] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:36.378 [coze-task-8] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:36
|
||||
java-server | 2026-05-05 16:20:38.275 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:20:38.386 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:20:41.383 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:41.383 [coze-task-9] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:41.402 [coze-task-9] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:41
|
||||
java-server | 2026-05-05 16:20:44.456 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:44.461 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:20:46.402 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:46.402 [coze-task-10] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:46.416 [coze-task-10] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:46
|
||||
java-server | 2026-05-05 16:20:48.410 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=30
|
||||
java-server | 2026-05-05 16:20:48.525 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=21
|
||||
java-server | 2026-05-05 16:20:51.081 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:51.087 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:20:51.419 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:51.419 [coze-task-11] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:51.438 [coze-task-11] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:51
|
||||
java-server | 2026-05-05 16:20:56.438 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:20:56.438 [coze-task-12] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:20:56.454 [coze-task-12] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:20:56
|
||||
java-server | 2026-05-05 16:20:58.564 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=34
|
||||
java-server | 2026-05-05 16:20:58.691 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=22
|
||||
java-server | 2026-05-05 16:20:59.581 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:20:59.587 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:21:01.456 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:21:01.456 [coze-task-13] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4138 taskId=6594 executeId=7636319564359794723
|
||||
java-server | 2026-05-05 16:21:01.469 [coze-task-13] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6594 stateId=4138 executeId=7636319564359794723 lastPolledAt=2026-05-05T16:21:01
|
||||
java-server | 2026-05-05 16:21:03.723 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6449 status=FAILED
|
||||
java-server | 2026-05-05 16:21:03.728 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6449/result status=200 remote=8.139.195.39 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=33
|
||||
java-server | 2026-05-05 16:21:08.709 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:21:08.822 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:21:13.311 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:13.316 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:18.832 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=22
|
||||
java-server | 2026-05-05 16:21:18.950 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:21:19.067 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/history status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:21:22.898 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:22.904 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:24.906 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/results/8943/download status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=142
|
||||
java-server | 2026-05-05 16:21:26.669 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:26.675 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:28.958 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:21:29.068 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:21:31.247 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:31.252 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:35.479 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6378 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:35.484 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6378/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:39.074 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=19
|
||||
java-server | 2026-05-05 16:21:39.180 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:21:43.039 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6331 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:43.044 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6331/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:45.526 [http-nio-18080-exec-9] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] parse timing taskId=6595 files=1 rows=12 groups=8 totalMs=98 parseMs=20 groupMs=0 taskInsertMs=17 payloadJsonMs=0 payloadStoreMs=4 persistMs=54 responseMs=0
|
||||
java-server | 2026-05-05 16:21:45.527 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/parse status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=100
|
||||
java-server | 2026-05-05 16:21:45.768 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6403 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:45.773 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6403/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=34
|
||||
java-server | 2026-05-05 16:21:46.730 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:46.736 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=24
|
||||
java-server | 2026-05-05 16:21:46.811 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6595/activate status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=47
|
||||
java-server | 2026-05-05 16:21:46.934 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:21:47.075 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/history status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=40
|
||||
java-server | 2026-05-05 16:21:49.205 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:21:49.313 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:21:55.237 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:21:55.243 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:21:59.346 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:21:59.460 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:22:00.004 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:22:00.013 [aiimage-scheduling-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-stale-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:22:01.969 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:01.975 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:22:05.389 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:05.394 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:22:09.473 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:22:09.602 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:22:19.607 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:22:19.742 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:22:20.372 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:20.377 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:22:20.942 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6280 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:20.947 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6280/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=25
|
||||
java-server | 2026-05-05 16:22:25.123 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:25.128 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:22:29.758 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:22:29.890 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:22:30.004 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [finalize-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:22:36.061 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:36.067 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:22:38.294 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:38.299 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:22:39.882 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:22:40.013 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=19
|
||||
java-server | 2026-05-05 16:22:50.019 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:22:50.132 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:22:52.102 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:52.107 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=29
|
||||
java-server | 2026-05-05 16:22:53.681 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:22:53.686 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:00.157 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:23:00.271 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=21
|
||||
java-server | 2026-05-05 16:23:03.853 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6356 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:03.858 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6356/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:09.399 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:09.405 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:10.306 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:23:10.427 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:23:11.669 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:11.675 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:20.447 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:23:20.568 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:23:27.437 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:27.442 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:23:30.501 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:30.507 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=30
|
||||
java-server | 2026-05-05 16:23:30.580 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:23:30.706 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:23:40.719 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=28
|
||||
java-server | 2026-05-05 16:23:40.897 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:23:43.488 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:43.494 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:50.892 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:23:51.027 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:23:51.651 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:51.656 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:23:58.091 [http-nio-18080-exec-7] INFO c.n.a.m.t.s.TaskFileJobPublisher - [task-file-job] mq published jobId=1366 taskId=6595 moduleType=APPEARANCE_PATENT topic=aiimage-result-file-job
|
||||
java-server | 2026-05-05 16:23:58.100 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6595/result status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=174
|
||||
java-server | 2026-05-05 16:23:58.178 [coze-task-14] INFO c.n.a.m.a.c.AppearancePatentCozeClient - [appearance-patent] coze request url=https://api.coze.cn/v1/workflow/run body={"workflow_id":"7632683471312355338","parameters":{"title_list":["KOPOX 170PCS Hook and Eye Sewing Kit with Garment Buttons, Hook and Eye Closures, Fabric Snap Buttons, Garment Snap Buttons for Skirts Pants Dresses, Clothing and DIY Crafts","WIRESTER Green Aluminum Round Bike Bell, Classic Ring Bicycle Bell, Bike Accessories Bell Ring for Adults Kids Girls Boys","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can Bring Good Luck and Peace to Motorcycle Accessories","Motorcycle Bell - Bicycle Bells for Men, Stainless Steel Bring Good Luck and Peace","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can bring good luck and peace to motorcycle accessories","Motorcycle for Bell, Bicycle Bells for Men, Stainless Steel Brings Good Luck and Peace for Motorcycle Accessories, One Size, Metal, Una talla, Metal","Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel Provides Good Treats and Peace for Motorcycle Accessories, Metal, No Gemstone, Metal, No Gemstone","Motorcycle for Bells - Bicycle bells for men, stainless steel can bring good luck and peace to motorcycle accessories"],"url_list":["https://m.media-amazon.com/images/I/91KtKyLQstL._AC_SX425_.jpg","https://m.media-amazon.com/images/I/51dETWpSQXL._AC_SX466_.jpg","https://m.media-amazon.com/images/I/81vJjZcgf5L._AC_SX466_.jpg","https://m.media-amazon.com/images/I/71sGtlqHXzL._AC_SX466_.jpg","https://m.media-amazon.com/images/I/71IzidKhklL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71ASKPXDUHL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71jfXEIPGOL._AC_SX385_.jpg","https://m.media-amazon.com/images/I/71tYUk0XWvL._AC_SX466_.jpg"],"items":[{"group_key":"f037a1b87dbf486d940ea2e25f194027::1@2","row_id":"1","asin":"B0D792ND9V","country":"英国","title":"KOPOX 170PCS Hook and Eye Sewing Kit with Garment Buttons, Hook and Eye Closures, Fabric Snap Buttons, Garment Snap Buttons for Skirts Pants Dresses, Clothing and DIY Crafts","url":"https://m.media-amazon.com/images/I/91KtKyLQstL._AC_SX425_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::2@3","row_id":"2_1","asin":"B0D14L34S7","country":"英国","title":"WIRESTER Green Aluminum Round Bike Bell, Classic Ring Bicycle Bell, Bike Accessories Bell Ring for Adults Kids Girls Boys","url":"https://m.media-amazon.com/images/I/51dETWpSQXL._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::3@7","row_id":"3_1","asin":"B0CWQFZMGY","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can Bring Good Luck and Peace to Motorcycle Accessories","url":"https://m.media-amazon.com/images/I/81vJjZcgf5L._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::4@9","row_id":"4_1","asin":"B0CX87XXWJ","country":"英国","title":"Motorcycle Bell - Bicycle Bells for Men, Stainless Steel Bring Good Luck and Peace","url":"https://m.media-amazon.com/images/I/71sGtlqHXzL._AC_SX466_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::5@10","row_id":"5_1","asin":"B0CR3PMR8L","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel can bring good luck and peace to motorcycle accessories","url":"https://m.media-amazon.com/images/I/71IzidKhklL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::6@11","row_id":"6","asin":"B0DK3L6FD4","country":"英国","title":"Motorcycle for Bell, Bicycle Bells for Men, Stainless Steel Brings Good Luck and Peace for Motorcycle Accessories, One Size, Metal, Una talla, Metal","url":"https://m.media-amazon.com/images/I/71ASKPXDUHL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::8@12","row_id":"8","asin":"B0D9QNV6FT","country":"英国","title":"Motorcycle for Bells - Bicycle Bells for Men, Stainless Steel Provides Good Treats and Peace for Motorcycle Accessories, Metal, No Gemstone, Metal, No Gemstone","url":"https://m.media-amazon.com/images/I/71jfXEIPGOL._AC_SX385_.jpg"},{"group_key":"f037a1b87dbf486d940ea2e25f194027::10@13","row_id":"10_1","asin":"B0DBZG716J","country":"英国","title":"Motorcycle for Bells - Bicycle bells for men, stainless steel can bring good luck and peace to motorcycle accessories","url":"https://m.media-amazon.com/images/I/71tYUk0XWvL._AC_SX466_.jpg"}],"prompt":"请帮我排查以下亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。 请直接给出明确结论(有侵权风险 或 未发现明显侵权风险),并严格按照以下三个维度提供精简的排查理由: 外观维度: 评估产品外形、图案设计是否与欧洲/英国常见外观专利雷同。 专利维度: 评估产品的核心技术或物理结构是否存在侵权可能。 标题维度: 排查标题中是否包含大牌商标、敏感词或版权保护词汇。 结论:XX"},"is_async":true}
|
||||
java-server | 2026-05-05 16:23:58.351 [coze-task-14] INFO c.n.a.m.a.c.AppearancePatentCozeClient - [appearance-patent] coze submit response status=200 OK body={"execute_id":"7636320588616892443","detail":{"logid":"20260505162358630B5DA5EDD272894E15"},"code":0,"msg":"","debug_url":"https://www.coze.cn/work_flow?execute_id=7636320588616892443&space_id=7519005192466022436&workflow_id=7632683471312355338&execute_mode=2"}
|
||||
java-server | 2026-05-05 16:23:58.377 [coze-task-14] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze async submitted taskId=6595 jobId=1366 chunk=8 batch=1/1 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:23:58.433 [coze-task-14] INFO c.n.a.m.t.s.TaskResultFileJobWorker - [task-file-job] process deferred jobId=1366 taskId=6595 moduleType=APPEARANCE_PATENT resultId=8944 elapsedMs=322
|
||||
java-server | 2026-05-05 16:23:58.489 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:23:58.494 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:24:00.004 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:24:00.037 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=33 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:24:00.037 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=33 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:24:00.037 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=33 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:24:00.037 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=33 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:24:01.024 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:24:01.159 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:24:02.099 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:02.100 [coze-task-15] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:02.113 [coze-task-15] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:02
|
||||
java-server | 2026-05-05 16:24:07.117 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:07.118 [coze-task-16] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:07.135 [coze-task-16] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:07
|
||||
java-server | 2026-05-05 16:24:08.518 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:08.523 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:24:11.173 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:24:11.283 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:24:12.135 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:12.135 [coze-task-17] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:12.151 [coze-task-17] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:12
|
||||
java-server | 2026-05-05 16:24:16.059 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:16.064 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:24:17.152 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:17.153 [coze-task-18] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:17.170 [coze-task-18] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:17
|
||||
java-server | 2026-05-05 16:24:21.306 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:24:21.417 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:24:22.171 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:22.171 [coze-task-19] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:22.185 [coze-task-19] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:22
|
||||
java-server | 2026-05-05 16:24:27.189 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:27.189 [coze-task-20] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:27.208 [coze-task-20] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:27
|
||||
java-server | 2026-05-05 16:24:30.301 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:30.306 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:24:30.950 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:30.955 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=24
|
||||
java-server | 2026-05-05 16:24:31.446 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:24:31.559 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:24:32.206 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:32.206 [coze-task-21] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:32.224 [coze-task-21] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:32
|
||||
java-server | 2026-05-05 16:24:37.224 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:37.224 [coze-task-22] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:37.237 [coze-task-22] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:37
|
||||
java-server | 2026-05-05 16:24:41.586 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:24:41.701 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:24:42.242 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:42.242 [coze-task-23] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:42.260 [coze-task-23] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:42
|
||||
java-server | 2026-05-05 16:24:44.457 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:44.462 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:24:47.260 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:47.260 [coze-task-24] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:47.273 [coze-task-24] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:47
|
||||
java-server | 2026-05-05 16:24:51.723 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:24:51.838 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=17
|
||||
java-server | 2026-05-05 16:24:52.276 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:52.276 [coze-task-25] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:52.290 [coze-task-25] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:52
|
||||
java-server | 2026-05-05 16:24:54.602 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6383 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:54.607 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6383/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=32
|
||||
java-server | 2026-05-05 16:24:57.294 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:24:57.294 [coze-task-26] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:24:57.312 [coze-task-26] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:24:57
|
||||
java-server | 2026-05-05 16:24:57.425 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:24:57.430 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:25:01.851 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:25:01.996 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=19
|
||||
java-server | 2026-05-05 16:25:02.311 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:02.311 [coze-task-27] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:02.324 [coze-task-27] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:02
|
||||
java-server | 2026-05-05 16:25:02.957 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:02.963 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:25:06.882 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:06.887 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:25:07.327 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:07.328 [coze-task-28] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:07.345 [coze-task-28] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:07
|
||||
java-server | 2026-05-05 16:25:11.977 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:25:12.086 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=19
|
||||
java-server | 2026-05-05 16:25:12.341 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:12.341 [coze-task-29] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:12.355 [coze-task-29] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:12
|
||||
java-server | 2026-05-05 16:25:14.298 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/6586/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=156
|
||||
java-server | 2026-05-05 16:25:17.359 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:17.360 [coze-task-30] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:17.377 [coze-task-30] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:17
|
||||
java-server | 2026-05-05 16:25:17.937 [http-nio-18080-exec-3] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:17.942 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:25:22.123 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:25:22.227 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:25:22.376 [aiimage-scheduling-2] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:22.376 [coze-task-31] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:22.390 [coze-task-31] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:22
|
||||
java-server | 2026-05-05 16:25:27.394 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:27.394 [coze-task-32] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:27.411 [coze-task-32] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:27
|
||||
java-server | 2026-05-05 16:25:31.413 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:31.418 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:25:32.266 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=27
|
||||
java-server | 2026-05-05 16:25:32.396 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:25:32.411 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:32.411 [coze-task-33] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:32.425 [coze-task-33] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:32
|
||||
java-server | 2026-05-05 16:25:35.252 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:35.257 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:25:37.429 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:37.429 [coze-task-34] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:37.442 [coze-task-34] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:37
|
||||
java-server | 2026-05-05 16:25:39.554 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6435 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:39.560 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6435/result status=200 remote=8.139.195.39 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=33
|
||||
java-server | 2026-05-05 16:25:41.409 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:41.414 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:25:42.409 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=26
|
||||
java-server | 2026-05-05 16:25:42.445 [aiimage-scheduling-1] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:42.446 [coze-task-35] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:42.459 [coze-task-35] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:42
|
||||
java-server | 2026-05-05 16:25:42.527 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:25:47.464 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:47.464 [coze-task-36] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:47.478 [coze-task-36] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:47
|
||||
java-server | 2026-05-05 16:25:52.481 [aiimage-scheduling-3] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:52.481 [coze-task-37] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:52.499 [coze-task-37] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:52
|
||||
java-server | 2026-05-05 16:25:52.554 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=21
|
||||
java-server | 2026-05-05 16:25:52.672 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:25:57.172 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:25:57.177 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:25:57.499 [aiimage-scheduling-4] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll picked pending states count=1
|
||||
java-server | 2026-05-05 16:25:57.499 [coze-task-38] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll worker entered stateId=4141 taskId=6595 executeId=7636320588616892443
|
||||
java-server | 2026-05-05 16:25:57.512 [coze-task-38] INFO c.n.a.m.a.s.AppearancePatentTaskService - [appearance-patent] coze poll skipped by claim guard taskId=6595 stateId=4141 executeId=7636320588616892443 lastPolledAt=2026-05-05T16:25:57
|
||||
java-server | 2026-05-05 16:26:00.004 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:26:00.033 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=29 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:26:00.033 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=29 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:26:00.033 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=29 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:26:00.033 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=29 thread=aiimage-scheduling-3
|
||||
java-server | 2026-05-05 16:26:02.669 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=23
|
||||
java-server | 2026-05-05 16:26:02.775 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=15
|
||||
java-server | 2026-05-05 16:26:06.707 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:06.712 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:26:08.604 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6325 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:08.609 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6325/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:26:12.798 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=22
|
||||
java-server | 2026-05-05 16:26:12.903 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:26:13.013 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/history status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=18
|
||||
java-server | 2026-05-05 16:26:14.912 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6329 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:14.918 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6329/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:26:17.829 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/results/8944/download status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=94
|
||||
java-server | 2026-05-05 16:26:19.674 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6269 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:19.679 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6269/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
java-server | 2026-05-05 16:26:22.908 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:26:23.021 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=16
|
||||
java-server | 2026-05-05 16:26:29.144 [http-nio-18080-exec-5] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6348 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:29.150 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6348/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=28
|
||||
java-server | 2026-05-05 16:26:30.004 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [finalize-check] skip because another instance holds the distributed lock
|
||||
java-server | 2026-05-05 16:26:33.031 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/appearance-patent/tasks/progress/batch status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=11
|
||||
java-server | 2026-05-05 16:26:33.142 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=GET uri=/api/appearance-patent/dashboard status=200 remote=171.222.250.173 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0 costMs=20
|
||||
java-server | 2026-05-05 16:26:38.915 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.PriceTrackTaskService - [price-track] submitResult rejected taskId=6323 status=SUCCESS
|
||||
java-server | 2026-05-05 16:26:38.920 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=81fe57de426c host=81fe57de426c method=POST uri=/api/price-track/tasks/6323/result status=200 remote=121.199.179.245 forwardedHost=121.196.149.225:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=27
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user