From c502afb588ba60469ef1095ecb1b57b3e423a3d0 Mon Sep 17 00:00:00 2001 From: super <2903208875@qq.com> Date: Thu, 23 Apr 2026 20:48:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9F=A5=E8=AF=A2asin?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aiimage-backend (2).log | 6468 ----------------- .../__pycache__/approve.cpython-312.pyc | Bin 56353 -> 55959 bytes .../__pycache__/del_brand.cpython-312.pyc | Bin 30775 -> 30776 bytes app/amazon/__pycache__/main.cpython-312.pyc | Bin 29925 -> 29925 bytes .../__pycache__/match_action.cpython-312.pyc | Bin 33631 -> 33733 bytes .../__pycache__/price_match.cpython-312.pyc | Bin 52331 -> 56585 bytes app/assets/convert.js | 2 +- app/assets/dedupe.js | 2 +- app/assets/delete-brand.js | 2 +- app/assets/split.js | 2 +- app/main.py | 2 +- app/new_web_source/convert.html | 6 +- app/new_web_source/dedupe.html | 6 +- app/new_web_source/delete-brand.html | 6 +- app/new_web_source/split.html | 6 +- app/web_source/brand.html | 3 +- .../config/ModuleCleanupProperties.java | 2 +- .../PermissionMenuSchemaInitializer.java | 1 + .../service/PriceTrackTaskService.java | 5 +- .../model/vo/ProductRiskShopQueueItemVo.java | 13 +- .../controller/QueryAsinTaskController.java | 374 + .../mapper/QueryAsinShopCandidateMapper.java | 10 + .../model/dto/QueryAsinCartRatioDto.java | 16 + .../model/dto/QueryAsinCountryAsinsDto.java | 18 + .../dto/QueryAsinCountryMetricRowDto.java | 25 + .../model/dto/QueryAsinCountrySectionDto.java | 19 + .../model/dto/QueryAsinCreateTaskRequest.java | 27 + .../model/dto/QueryAsinShopPayloadDto.java | 49 + .../dto/QueryAsinSubmitResultRequest.java | 20 + .../model/dto/QueryAsinTaskBatchRequest.java | 15 + .../model/dto/QueryAsinTaskItemDto.java | 45 + .../entity/QueryAsinShopCandidateEntity.java | 20 + .../model/vo/QueryAsinCreateTaskVo.java | 14 + .../model/vo/QueryAsinHistoryVo.java | 13 + .../model/vo/QueryAsinResultItemVo.java | 57 + .../model/vo/QueryAsinTaskBatchVo.java | 15 + .../QueryAsinExcelAssemblyService.java | 112 + .../service/QueryAsinResolveService.java | 221 + .../service/QueryAsinTaskCacheService.java | 168 + .../service/QueryAsinTaskService.java | 960 +++ .../controller/QueryAsinController.java | 125 + .../shopkey/mapper/QueryAsinMapper.java | 55 + .../dto/QueryAsinCountryUpdateRequest.java | 13 + .../model/dto/QueryAsinCreateRequest.java | 32 + .../shopkey/model/entity/QueryAsinEntity.java | 44 + .../model/vo/QueryAsinImportProgressVo.java | 16 + .../model/vo/QueryAsinImportStartVo.java | 9 + .../shopkey/model/vo/QueryAsinItemVo.java | 21 + .../shopkey/model/vo/QueryAsinPageVo.java | 15 + .../shopkey/service/QueryAsinService.java | 828 +++ .../service/ShopManageGroupService.java | 8 + .../TaskScopePayloadStorageService.java | 3 +- .../src/main/resources/db/V31__query_asin.sql | 28 + ...uery_asin_allow_multiple_rows_per_shop.sql | 32 + .../db/V33__query_asin_task_candidate.sql | 8 + backend/__pycache__/config.cpython-312.pyc | Bin 1510 -> 1510 bytes backend/blueprints/admin_api.py | 287 +- backend/web_source/admin.html | 707 +- frontend-vue/query-asin.html | 13 + .../brand/components/BrandPatrolDeleteTab.vue | 22 + .../brand/components/BrandPriceTrackTab.vue | 29 + .../brand/components/BrandProductRiskTab.vue | 31 + .../brand/components/BrandQueryAsinTab.vue | 1167 +++ .../brand/components/BrandShopMatchTab.vue | 13 +- .../pages/brand/components/BrandTopBar.vue | 2 + frontend-vue/src/query-asin-main.ts | 13 + frontend-vue/src/shared/api/java-modules.ts | 160 + frontend-vue/vite.config.ts | 1 + new_web_source/assets/brand-UU-ckLq6.js | 1 + new_web_source/assets/convert-7wWJ02Tw.css | 1 + new_web_source/assets/convert.js | 1 + new_web_source/assets/dedupe-BpNHwt51.css | 1 + new_web_source/assets/dedupe.js | 1 + .../assets/delete-brand-CWLpe7lu.css | 1 + new_web_source/assets/delete-brand.js | 1 + new_web_source/assets/el-input-CezJelDw.css | 1 + .../assets/listingFilters-BpGOU_pJ.js | 1 + .../assets/listingFilters-CK58rX4v.css | 1 + .../assets/patrol-delete-BPu1AAPM.css | 1 + new_web_source/assets/patrol-delete.js | 1 + .../assets/price-track-85NbckiJ.css | 1 + .../assets/price-track-RLJUgMl_.css | 1 + new_web_source/assets/price-track.js | 1 + .../assets/product-risk-cfL3Ch5-.css | 1 + new_web_source/assets/product-risk.js | 1 + new_web_source/assets/pywebview-CeWJDVeG.js | 55 + new_web_source/assets/pywebview-ij4pgMq8.css | 1 + new_web_source/assets/query-asin-B5e5m-vs.css | 1 + new_web_source/assets/query-asin-Ba06RE4W.css | 1 + new_web_source/assets/query-asin-CcqwgsLE.css | 1 + new_web_source/assets/query-asin.js | 1 + new_web_source/assets/shop-match-Banz7DWL.css | 1 + new_web_source/assets/shop-match.js | 1 + new_web_source/assets/split-CRUIYKS6.css | 1 + new_web_source/assets/split.js | 1 + new_web_source/assets/zh-cn-DyKmB71i.js | 1 + new_web_source/convert.html | 6 +- new_web_source/dedupe.html | 6 +- new_web_source/delete-brand.html | 8 +- new_web_source/patrol-delete.html | 8 +- new_web_source/price-track.html | 8 +- new_web_source/product-risk.html | 6 +- new_web_source/query-asin.html | 18 + new_web_source/shop-match.html | 8 +- new_web_source/split.html | 6 +- 105 files changed, 6027 insertions(+), 6535 deletions(-) delete mode 100644 aiimage-backend (2).log create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/controller/QueryAsinTaskController.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/mapper/QueryAsinShopCandidateMapper.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCartRatioDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryAsinsDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryMetricRowDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountrySectionDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCreateTaskRequest.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinShopPayloadDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinSubmitResultRequest.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskBatchRequest.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskItemDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/entity/QueryAsinShopCandidateEntity.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinCreateTaskVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinHistoryVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinResultItemVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinTaskBatchVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinExcelAssemblyService.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinResolveService.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskCacheService.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskService.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/QueryAsinController.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/mapper/QueryAsinMapper.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCountryUpdateRequest.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCreateRequest.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/entity/QueryAsinEntity.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportProgressVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportStartVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinItemVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinPageVo.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/QueryAsinService.java create mode 100644 backend-java/src/main/resources/db/V31__query_asin.sql create mode 100644 backend-java/src/main/resources/db/V32__query_asin_allow_multiple_rows_per_shop.sql create mode 100644 backend-java/src/main/resources/db/V33__query_asin_task_candidate.sql create mode 100644 frontend-vue/query-asin.html create mode 100644 frontend-vue/src/pages/brand/components/BrandQueryAsinTab.vue create mode 100644 frontend-vue/src/query-asin-main.ts create mode 100644 new_web_source/assets/brand-UU-ckLq6.js create mode 100644 new_web_source/assets/convert-7wWJ02Tw.css create mode 100644 new_web_source/assets/convert.js create mode 100644 new_web_source/assets/dedupe-BpNHwt51.css create mode 100644 new_web_source/assets/dedupe.js create mode 100644 new_web_source/assets/delete-brand-CWLpe7lu.css create mode 100644 new_web_source/assets/delete-brand.js create mode 100644 new_web_source/assets/el-input-CezJelDw.css create mode 100644 new_web_source/assets/listingFilters-BpGOU_pJ.js create mode 100644 new_web_source/assets/listingFilters-CK58rX4v.css create mode 100644 new_web_source/assets/patrol-delete-BPu1AAPM.css create mode 100644 new_web_source/assets/patrol-delete.js create mode 100644 new_web_source/assets/price-track-85NbckiJ.css create mode 100644 new_web_source/assets/price-track-RLJUgMl_.css create mode 100644 new_web_source/assets/price-track.js create mode 100644 new_web_source/assets/product-risk-cfL3Ch5-.css create mode 100644 new_web_source/assets/product-risk.js create mode 100644 new_web_source/assets/pywebview-CeWJDVeG.js create mode 100644 new_web_source/assets/pywebview-ij4pgMq8.css create mode 100644 new_web_source/assets/query-asin-B5e5m-vs.css create mode 100644 new_web_source/assets/query-asin-Ba06RE4W.css create mode 100644 new_web_source/assets/query-asin-CcqwgsLE.css create mode 100644 new_web_source/assets/query-asin.js create mode 100644 new_web_source/assets/shop-match-Banz7DWL.css create mode 100644 new_web_source/assets/shop-match.js create mode 100644 new_web_source/assets/split-CRUIYKS6.css create mode 100644 new_web_source/assets/split.js create mode 100644 new_web_source/assets/zh-cn-DyKmB71i.js create mode 100644 new_web_source/query-asin.html diff --git a/aiimage-backend (2).log b/aiimage-backend (2).log deleted file mode 100644 index b2ea59f..0000000 --- a/aiimage-backend (2).log +++ /dev/null @@ -1,6468 +0,0 @@ -nization because synchronization is not active -JDBC Connection [HikariProxyConnection@2001715600 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@248a58e1] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f90b97c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1687827552 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f90b97c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38302d01] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1375807522 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee27fd4] was not registered for synchronization because synchronization is not active -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38302d01] -JDBC Connection [HikariProxyConnection@1466740204 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:52.010105700(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ee27fd4] -2026-04-23 14:10:52.153 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-7 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@172d4457] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1991311090 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@738af97d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1374267903 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:52.189497600(LocalDateTime), null, 1034(Long), cancelled(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@172d4457] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -JDBC Connection [HikariProxyConnection@1188552107 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 43(Integer) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@738af97d] -2026-04-23 14:10:52.275 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-10 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2dfdae6d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2116052099 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 43(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":43,"chunkTotal":60,"totalLines":300,"keptRows":["HAISIWLKJ","Lotus & Ivory","TRITON LINEN","HolidayIdeas","Occasion Gallery"],"invalidBrands":[],"queryFailedBrands":[]}(String), 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0(String), 2026-04-23T14:10:52.247007100(LocalDateTime), 2026-04-23T14:10:52.247007100(LocalDateTime) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2dfdae6d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a2423f9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1719348689 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -JDBC Connection [HikariProxyConnection@293778986 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 41(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ea3ff39] was not registered for synchronization because synchronization is not active -<== Updates: 1 -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:52 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] from current transaction -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a2423f9] -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 41(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":41,"chunkTotal":60,"totalLines":300,"keptRows":["THE Unltd India","TUOTPE","CleverDelights","ABHOOH","The Coloring Table"],"invalidBrands":[],"queryFailedBrands":[]}(String), b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399(String), 2026-04-23T14:10:52.363047700(LocalDateTime), 2026-04-23T14:10:52.363047700(LocalDateTime) -JDBC Connection [HikariProxyConnection@780187278 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -2026-04-23 14:10:52.435 [http-nio-18080-exec-8] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=115 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f56e779] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1899617328 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:52 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ea3ff39] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69b683ea] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@674096082 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:52 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f56e779] -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Total: 41 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69b683ea] -2026-04-23 14:10:52.524 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=79 -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 40, 0, 2026-04-23 14:10:47, null, 2026-04-23 14:10:02, 2026-04-23 14:10:47 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":41,"processedLineCount":205,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 41(Integer), 0(Integer), 2026-04-23T14:10:52.247007100(LocalDateTime), null, 2026-04-23T14:10:52.247007100(LocalDateTime), 102(Long) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Total: 41 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 40, 0, 2026-04-23 14:10:47, null, 2026-04-23 14:10:02, 2026-04-23 14:10:47 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":41,"processedLineCount":205,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 41(Integer), 0(Integer), 2026-04-23T14:10:52.363047700(LocalDateTime), null, 2026-04-23T14:10:52.363047700(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4a931822] -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d22a394] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1803445064 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:52.740705500(LocalDateTime), null, 1034(Long), cancelled(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c358e67] -2026-04-23 14:10:52.777 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=43/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d22a394] -2026-04-23 14:10:52.832 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-9 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d019de] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@791431247 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -2026-04-23 14:10:52.861 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=41/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f20d6d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1053452044 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:52.864263200(LocalDateTime), null, 1034(Long), cancelled(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@37d019de] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -JDBC Connection [HikariProxyConnection@1821740603 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 44(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67955e3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2106594033 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:52.943779100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f20d6d] -2026-04-23 14:10:52.957 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1307 thread=http-nio-18080-exec-7 -2026-04-23 14:10:52.958 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1309 -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 44(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":44,"chunkTotal":60,"totalLines":300,"keptRows":["Grelucgo","Merkaunis","Gitika Goyal Home","April Cornell","Luckin Sports"],"invalidBrands":[],"queryFailedBrands":[]}(String), b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe(String), 2026-04-23T14:10:52.924263200(LocalDateTime), 2026-04-23T14:10:52.924263200(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67955e3] -2026-04-23 14:10:53.029 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1096 thread=http-nio-18080-exec-10 -2026-04-23 14:10:53.030 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1098 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Total: 43 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 41, 0, 2026-04-23 14:10:52, null, 2026-04-23 14:10:02, 2026-04-23 14:10:52 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":43,"processedLineCount":215,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 43(Integer), 0(Integer), 2026-04-23T14:10:52.924263200(LocalDateTime), null, 2026-04-23T14:10:52.924263200(LocalDateTime), 102(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b2d3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@167724811 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:53 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b2d3] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@635bd285] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1849783063 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@169f2196] -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@635bd285] -2026-04-23 14:10:53.442 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=44/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60c525db] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@195514577 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:53.523780800(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bee2496] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1138235392 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:53.538784900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60c525db] -2026-04-23 14:10:53.621 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1235 thread=http-nio-18080-exec-9 -2026-04-23 14:10:53.622 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1237 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bee2496] -2026-04-23 14:10:53.625 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-4 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23167d2d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1074729754 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23167d2d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4036a451] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -JDBC Connection [HikariProxyConnection@56277478 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 46(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bb87d3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1356293645 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 46(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":46,"chunkTotal":60,"totalLines":300,"keptRows":["Nasitos","Albassa","Heneger","eccwai","Jieqier"],"invalidBrands":[],"queryFailedBrands":[]}(String), 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1(String), 2026-04-23T14:10:53.716514600(LocalDateTime), 2026-04-23T14:10:53.716514600(LocalDateTime) -JDBC Connection [HikariProxyConnection@1601391361 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:54 -==> Parameters: 1034(Long) -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4036a451] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@421bee51] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@939187823 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@421bee51] -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:54 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bb87d3] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@358b7ebd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1767039680 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@358b7ebd] -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Total: 44 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 43, 0, 2026-04-23 14:10:53, null, 2026-04-23 14:10:02, 2026-04-23 14:10:53 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":44,"processedLineCount":220,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 44(Integer), 0(Integer), 2026-04-23T14:10:53.716514600(LocalDateTime), null, 2026-04-23T14:10:53.716514600(LocalDateTime), 102(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7848aa8d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@439314676 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:54.040424300(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5459b0f1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@279650721 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:54.047437200(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b1a051a] -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5459b0f1] -2026-04-23 14:10:54.122 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-8 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d41730c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2097085426 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7848aa8d] -2026-04-23 14:10:54.135 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@618741de] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@730718928 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d41730c] -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@618741de] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -JDBC Connection [HikariProxyConnection@414723680 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 45(Integer) -2026-04-23 14:10:54.205 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=46/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -JDBC Connection [HikariProxyConnection@1038560851 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 42(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 45(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":45,"chunkTotal":60,"totalLines":300,"keptRows":["Drake Waterfowl","Modern Leisure","Zrlljp","COVERKING","LAMINET"],"invalidBrands":[],"queryFailedBrands":[]}(String), 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8(String), 2026-04-23T14:10:54.196956400(LocalDateTime), 2026-04-23T14:10:54.196956400(LocalDateTime) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 42(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":42,"chunkTotal":60,"totalLines":300,"keptRows":["Fokitut","パレットライフ","ASPMIZ","Wnanan","LeLehome"],"invalidBrands":[],"queryFailedBrands":[]}(String), c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9(String), 2026-04-23T14:10:54.228986800(LocalDateTime), 2026-04-23T14:10:54.228986800(LocalDateTime) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26e4abf8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1312504992 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:54.288512800(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Updates: 1 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26e4abf8] -2026-04-23 14:10:54.376 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1108 thread=http-nio-18080-exec-4 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -2026-04-23 14:10:54.376 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1108 -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Total: 45 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 44, 0, 2026-04-23 14:10:54, null, 2026-04-23 14:10:02, 2026-04-23 14:10:54 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":45,"processedLineCount":225,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 45(Integer), 0(Integer), 2026-04-23T14:10:54.196956400(LocalDateTime), null, 2026-04-23T14:10:54.196956400(LocalDateTime), 102(Long) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Total: 45 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 44, 0, 2026-04-23 14:10:54, null, 2026-04-23 14:10:02, 2026-04-23 14:10:54 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":45,"processedLineCount":225,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 45(Integer), 0(Integer), 2026-04-23T14:10:54.228986800(LocalDateTime), null, 2026-04-23T14:10:54.228986800(LocalDateTime), 102(Long) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558db625] -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -2026-04-23 14:10:54.621 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=45/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@226af4e4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60fd9b13] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@383353645 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:54.703502200(LocalDateTime), null, 1034(Long), cancelled(String) -2026-04-23 14:10:54.759 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=42/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60fd9b13] -2026-04-23 14:10:54.783 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1092 thread=http-nio-18080-exec-8 -2026-04-23 14:10:54.784 [http-nio-18080-exec-8] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1094 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3340e6e1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1745894890 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:54.844314300(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3340e6e1] -2026-04-23 14:10:54.939 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1218 thread=http-nio-18080-exec-2 -2026-04-23 14:10:54.939 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1218 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cf032ce] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1347028335 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:55 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cf032ce] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c17c876] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@830274424 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c17c876] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11594a3f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2076332573 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:10:56.389299500(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11594a3f] -2026-04-23 14:10:56.485 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-6 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ab8e238] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@304762652 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5ab8e238] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -JDBC Connection [HikariProxyConnection@2101569667 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 47(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 47(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":47,"chunkTotal":60,"totalLines":300,"keptRows":["AXIERI","LUSHVIDA","SSYAQRA","Aijoviko","GEWONELIFE"],"invalidBrands":[],"queryFailedBrands":[]}(String), b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00(String), 2026-04-23T14:10:56.575417100(LocalDateTime), 2026-04-23T14:10:56.575417100(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Total: 47 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 45, 0, 2026-04-23 14:10:54, null, 2026-04-23 14:10:02, 2026-04-23 14:10:54 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":47,"processedLineCount":235,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 47(Integer), 0(Integer), 2026-04-23T14:10:56.575417100(LocalDateTime), null, 2026-04-23T14:10:56.575417100(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e50d8c] -2026-04-23 14:10:57.084 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=47/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11cead4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@952886764 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:10:57.167201100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11cead4] -2026-04-23 14:10:57.259 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1186 thread=http-nio-18080-exec-6 -2026-04-23 14:10:57.260 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1187 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c94d4b7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2113941957 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:10:57 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c94d4b7] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47331cca] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1292388855 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47331cca] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38443396] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1544351998 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:01.077306700(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38443396] -2026-04-23 14:11:01.168 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-3 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68a4ed99] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1631237659 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68a4ed99] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -JDBC Connection [HikariProxyConnection@2110726834 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 50(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 50(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":50,"chunkTotal":60,"totalLines":300,"keptRows":["Billiard City","Dallonan","VASLIM","Yoquare","Leading Linens"],"invalidBrands":[],"queryFailedBrands":[]}(String), 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69(String), 2026-04-23T14:11:01.259470900(LocalDateTime), 2026-04-23T14:11:01.259470900(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Total: 48 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 47, 0, 2026-04-23 14:10:57, null, 2026-04-23 14:10:02, 2026-04-23 14:10:57 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":48,"processedLineCount":240,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 48(Integer), 0(Integer), 2026-04-23T14:11:01.259470900(LocalDateTime), null, 2026-04-23T14:11:01.259470900(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@676228b] -2026-04-23 14:11:01.763 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=50/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@17a67c3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@389964987 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:01.845225500(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@17a67c3] -2026-04-23 14:11:01.938 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1192 thread=http-nio-18080-exec-3 -2026-04-23 14:11:01.939 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1195 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9a19c01] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@105460720 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:02 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9a19c01] -2026-04-23 14:11:02.441 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=132 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cdd5072] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@297436908 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:02 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cdd5072] -2026-04-23 14:11:02.567 [http-nio-18080-exec-8] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=116 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a0ca515] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1178742959 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:02 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a0ca515] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@131a0d06] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1289827965 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@131a0d06] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6967bbd7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@484243412 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:03.506287100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6967bbd7] -2026-04-23 14:11:03.602 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@780eb39e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1023532524 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@780eb39e] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -JDBC Connection [HikariProxyConnection@1282133465 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 49(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 49(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":49,"chunkTotal":60,"totalLines":300,"keptRows":["CKIKU","Vrisssot","ITWMTTO","PARTISKY","Ammbeetty"],"invalidBrands":[],"queryFailedBrands":[]}(String), f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef(String), 2026-04-23T14:11:03.697817400(LocalDateTime), 2026-04-23T14:11:03.697817400(LocalDateTime) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ca4563c] was not registered for synchronization because synchronization is not active -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -JDBC Connection [HikariProxyConnection@434706127 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:04 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ca4563c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3abf9a80] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1422143069 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Total: 49 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3abf9a80] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4bb67601] was not registered for synchronization because synchronization is not active -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 48, 0, 2026-04-23 14:11:01, null, 2026-04-23 14:10:02, 2026-04-23 14:11:01 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":49,"processedLineCount":245,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 49(Integer), 0(Integer), 2026-04-23T14:11:03.697817400(LocalDateTime), null, 2026-04-23T14:11:03.697817400(LocalDateTime), 102(Long) -JDBC Connection [HikariProxyConnection@1697960694 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:04 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4bb67601] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70a3e72] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2138326764 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70a3e72] -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72294ee6] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d5f6f55] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@165577966 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:04 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7d5f6f55] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15c7a450] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@333726842 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fb4ee89] was not registered for synchronization because synchronization is not active -2026-04-23 14:11:04.223 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=49/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15c7a450] -JDBC Connection [HikariProxyConnection@932468756 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:04.203109(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@360d5a41] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1555902845 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:04.265136600(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5fbb01b3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@348642619 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:04.304137(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fb4ee89] -2026-04-23 14:11:04.314 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-7 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c6f06ab] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2055155589 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c6f06ab] -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@360d5a41] -2026-04-23 14:11:04.355 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-6 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4879f743] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@351544269 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -JDBC Connection [HikariProxyConnection@1192805411 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 48(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59c906d0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@833212843 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:04.397648900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5fbb01b3] -2026-04-23 14:11:04.400 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1221 thread=http-nio-18080-exec-2 -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4879f743] -2026-04-23 14:11:04.400 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1222 -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 48(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":48,"chunkTotal":60,"totalLines":300,"keptRows":["Suppromo","RestfulGlow","gogoparti","Surmente","luccido"],"invalidBrands":[],"queryFailedBrands":[]}(String), cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca(String), 2026-04-23T14:11:04.388650200(LocalDateTime), 2026-04-23T14:11:04.388650200(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -JDBC Connection [HikariProxyConnection@1410820948 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 53(Integer) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59c906d0] -2026-04-23 14:11:04.484 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-10 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b97f215] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@886741534 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 53(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":53,"chunkTotal":60,"totalLines":300,"keptRows":["LVTXIII","Jolly Camper","YH Poker","Wewoch","PLOYMONO"],"invalidBrands":[],"queryFailedBrands":[]}(String), 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8(String), 2026-04-23T14:11:04.443655(LocalDateTime), 2026-04-23T14:11:04.443655(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b97f215] -<== Updates: 1 -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] from current transaction -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -Creating a new SqlSession -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -JDBC Connection [HikariProxyConnection@1236779678 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 51(Integer) -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Total: 50 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Total: 0 -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 49, 0, 2026-04-23 14:11:04, null, 2026-04-23 14:10:02, 2026-04-23 14:11:04 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] from current transaction -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 51(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":51,"chunkTotal":60,"totalLines":300,"keptRows":["Craft And Party","Pufogu","NEWOOK","WWXBDY","CAIT CHAPMAN HOME COLLECTION"],"invalidBrands":[],"queryFailedBrands":[]}(String), 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045(String), 2026-04-23T14:11:04.579356(LocalDateTime), 2026-04-23T14:11:04.579356(LocalDateTime) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":50,"processedLineCount":250,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 50(Integer), 0(Integer), 2026-04-23T14:11:04.388650200(LocalDateTime), null, 2026-04-23T14:11:04.388650200(LocalDateTime), 102(Long) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Total: 50 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b1e1e51] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@296161694 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 49, 0, 2026-04-23 14:11:04, null, 2026-04-23 14:10:02, 2026-04-23 14:11:04 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":50,"processedLineCount":250,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 50(Integer), 0(Integer), 2026-04-23T14:11:04.443655(LocalDateTime), null, 2026-04-23T14:11:04.443655(LocalDateTime), 102(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:04 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b1e1e51] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bab125] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2091764501 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4046d4cf] -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bab125] -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Total: 50 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -2026-04-23 14:11:04.823 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=48/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 49, 0, 2026-04-23 14:11:04, null, 2026-04-23 14:10:02, 2026-04-23 14:11:04 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":50,"processedLineCount":250,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 50(Integer), 0(Integer), 2026-04-23T14:11:04.579356(LocalDateTime), null, 2026-04-23T14:11:04.579356(LocalDateTime), 102(Long) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@660ce686] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7da3b4b0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1513025620 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:04.904003200(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -2026-04-23 14:11:04.954 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=53/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4543fc8d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@42249409 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:04.956516900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -<== Columns: total -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7da3b4b0] -<== Row: 0 -<== Total: 1 -2026-04-23 14:11:04.985 [http-nio-18080-exec-7] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1159 thread=http-nio-18080-exec-7 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d6ee933] -2026-04-23 14:11:04.986 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1160 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18098fc] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@741989987 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:05.037029900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4543fc8d] -2026-04-23 14:11:05.049 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-9 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c2575a3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1083828125 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -2026-04-23 14:11:05.075 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=51/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c2575a3] -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18098fc] -2026-04-23 14:11:05.130 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1171 thread=http-nio-18080-exec-6 -2026-04-23 14:11:05.131 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1172 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -JDBC Connection [HikariProxyConnection@1538671004 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 55(Integer) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@300766ad] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2019967411 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:05.162407200(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a858d18] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@925198175 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 55(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":55,"chunkTotal":60,"totalLines":300,"keptRows":["RAINISH","Jectivs","Castle Selection","Jenylinen","MANGATA CASA"],"invalidBrands":[],"queryFailedBrands":[]}(String), 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e(String), 2026-04-23T14:11:05.144893900(LocalDateTime), 2026-04-23T14:11:05.144893900(LocalDateTime) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:05 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a858d18] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49fc2b60] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1072136714 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49fc2b60] -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@300766ad] -2026-04-23 14:11:05.250 [http-nio-18080-exec-10] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1110 thread=http-nio-18080-exec-10 -2026-04-23 14:11:05.251 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1112 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Total: 53 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 50, 0, 2026-04-23 14:11:05, null, 2026-04-23 14:10:02, 2026-04-23 14:11:05 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":53,"processedLineCount":265,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 53(Integer), 0(Integer), 2026-04-23T14:11:05.144893900(LocalDateTime), null, 2026-04-23T14:11:05.144893900(LocalDateTime), 102(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77e894a1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@993055422 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:05.437544100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77e894a1] -2026-04-23 14:11:05.511 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-8 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b679450] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1043373934 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@b679450] -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33f3023d] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -JDBC Connection [HikariProxyConnection@2085831846 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 52(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 52(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":52,"chunkTotal":60,"totalLines":300,"keptRows":["Zachely","Hahuho","maxmill","Veblandy","OFILA"],"invalidBrands":[],"queryFailedBrands":[]}(String), 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86(String), 2026-04-23T14:11:05.592585400(LocalDateTime), 2026-04-23T14:11:05.592585400(LocalDateTime) -2026-04-23 14:11:05.673 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=55/60 stored=true newlyCompletedFile=false finishedFiles=0 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Total: 54 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6fc27e76] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1941199681 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:05.755221200(LocalDateTime), null, 1034(Long), cancelled(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 53, 0, 2026-04-23 14:11:05, null, 2026-04-23 14:10:02, 2026-04-23 14:11:05 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":54,"processedLineCount":270,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 54(Integer), 0(Integer), 2026-04-23T14:11:05.592585400(LocalDateTime), null, 2026-04-23T14:11:05.592585400(LocalDateTime), 102(Long) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6fc27e76] -2026-04-23 14:11:05.851 [http-nio-18080-exec-9] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1170 thread=http-nio-18080-exec-9 -2026-04-23 14:11:05.852 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1172 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71d0b79d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6649e064] was not registered for synchronization because synchronization is not active -2026-04-23 14:11:05.981 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=52/60 stored=true newlyCompletedFile=false finishedFiles=0 -JDBC Connection [HikariProxyConnection@587122951 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:06 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6649e064] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2834ad32] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@22487696 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1aa368] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@481150508 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:06.064628900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2834ad32] -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1aa368] -2026-04-23 14:11:06.136 [http-nio-18080-exec-8] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=966 thread=http-nio-18080-exec-8 -2026-04-23 14:11:06.137 [http-nio-18080-exec-8] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=968 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34efc7e4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@164777805 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:06.333722700(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34efc7e4] -2026-04-23 14:11:06.421 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-3 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e82a2f4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1604955856 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e82a2f4] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -JDBC Connection [HikariProxyConnection@1307203964 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 54(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 54(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":54,"chunkTotal":60,"totalLines":300,"keptRows":["DORCEV","AONCHLIU","Classic Accessories","VHC Brands","Little Funny"],"invalidBrands":[],"queryFailedBrands":[]}(String), 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9(String), 2026-04-23T14:11:06.514281200(LocalDateTime), 2026-04-23T14:11:06.514281200(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Total: 55 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 54, 0, 2026-04-23 14:11:06, null, 2026-04-23 14:10:02, 2026-04-23 14:11:06 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":55,"processedLineCount":275,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 55(Integer), 0(Integer), 2026-04-23T14:11:06.514281200(LocalDateTime), null, 2026-04-23T14:11:06.514281200(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e9340d] -2026-04-23 14:11:07.023 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=54/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2156c926] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@626343885 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:07.107118300(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2156c926] -2026-04-23 14:11:07.203 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1248 thread=http-nio-18080-exec-3 -2026-04-23 14:11:07.204 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1250 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@437fb22a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1800686511 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cac1204] was not registered for synchronization because synchronization is not active -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:07 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@437fb22a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78b67d56] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1181118088 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -JDBC Connection [HikariProxyConnection@1147751879 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78b67d56] -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:07 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cac1204] -2026-04-23 14:11:12.437 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=118 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69e70b4d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1893958823 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:07 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69e70b4d] -2026-04-23 14:11:12.533 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks/1034 status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=88 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cddf91f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1080154105 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:12.622597300(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cddf91f] -2026-04-23 14:11:12.716 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-6 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f1a14a9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1236444205 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f1a14a9] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -JDBC Connection [HikariProxyConnection@954529078 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 56(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 56(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":56,"chunkTotal":60,"totalLines":300,"keptRows":["ART pinecone","TEKTRUM","BTF Home","GRANDDECO","MDS-MEGADECORSUPPLY"],"invalidBrands":[],"queryFailedBrands":[]}(String), 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30(String), 2026-04-23T14:11:12.809228(LocalDateTime), 2026-04-23T14:11:12.809228(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 65, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 56, 60, <>, 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30, 2026-04-23 14:11:13, 2026-04-23 14:11:13 -<== Total: 56 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 55, 0, 2026-04-23 14:11:07, null, 2026-04-23 14:10:02, 2026-04-23 14:11:07 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":56,"processedLineCount":280,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 56(Integer), 0(Integer), 2026-04-23T14:11:12.809228(LocalDateTime), null, 2026-04-23T14:11:12.809228(LocalDateTime), 102(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d092db7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@786975325 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:13 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d092db7] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5714e3de] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@61085726 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b9b48d4] -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5714e3de] -2026-04-23 14:11:13.330 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=56/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@111ecfd4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@546582741 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:13.411008800(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2074c87b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1150413756 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:13.417016500(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@111ecfd4] -2026-04-23 14:11:13.502 [http-nio-18080-exec-6] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1254 thread=http-nio-18080-exec-6 -2026-04-23 14:11:13.503 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1256 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2074c87b] -2026-04-23 14:11:13.510 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ffe2c4d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1381261890 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ffe2c4d] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -JDBC Connection [HikariProxyConnection@1744319117 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 57(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 57(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":57,"chunkTotal":60,"totalLines":300,"keptRows":["LuoluoHouse","Queenker","misaya","ZFUNCING","Tache Home Fashion"],"invalidBrands":[],"queryFailedBrands":[]}(String), aa199f88a502a520fbca5aac282e934cdc803693ff20d14dee3ee70c67669226(String), 2026-04-23T14:11:13.604540200(LocalDateTime), 2026-04-23T14:11:13.604540200(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 65, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 56, 60, <>, 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30, 2026-04-23 14:11:13, 2026-04-23 14:11:13 -<== Row: 66, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 57, 60, <>, aa199f88a502a520fbca5aac282e934cdc803693ff20d14dee3ee70c67669226, 2026-04-23 14:11:14, 2026-04-23 14:11:14 -<== Total: 57 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 56, 0, 2026-04-23 14:11:13, null, 2026-04-23 14:10:02, 2026-04-23 14:11:13 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":57,"processedLineCount":285,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 57(Integer), 0(Integer), 2026-04-23T14:11:13.604540200(LocalDateTime), null, 2026-04-23T14:11:13.604540200(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78bdc37a] -2026-04-23 14:11:14.140 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=57/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7584e546] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@193612282 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:14.223452100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7584e546] -2026-04-23 14:11:14.320 [http-nio-18080-exec-2] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1216 thread=http-nio-18080-exec-2 -2026-04-23 14:11:14.321 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1218 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24332563] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@255489154 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:14 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24332563] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ebabf8d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@597661956 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ebabf8d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b0f85bd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@462709307 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:16.377172900(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b0f85bd] -2026-04-23 14:11:16.472 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-3 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4bf0b24e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1607287839 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4bf0b24e] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -JDBC Connection [HikariProxyConnection@1862444835 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 60(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 60(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":60,"chunkTotal":60,"totalLines":300,"keptRows":["CG PLUS","BOODVON","HolYudaica","Yeele","jejeloiu"],"invalidBrands":[],"queryFailedBrands":[]}(String), 8eee614caa743195842f985b6731132a48cf5821d5dc0120c862bb3c0b52fe26(String), 2026-04-23T14:11:16.562496200(LocalDateTime), 2026-04-23T14:11:16.562496200(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 65, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 56, 60, <>, 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30, 2026-04-23 14:11:13, 2026-04-23 14:11:13 -<== Row: 66, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 57, 60, <>, aa199f88a502a520fbca5aac282e934cdc803693ff20d14dee3ee70c67669226, 2026-04-23 14:11:14, 2026-04-23 14:11:14 -<== Row: 67, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 60, 60, <>, 8eee614caa743195842f985b6731132a48cf5821d5dc0120c862bb3c0b52fe26, 2026-04-23 14:11:17, 2026-04-23 14:11:17 -<== Total: 58 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 57, 0, 2026-04-23 14:11:14, null, 2026-04-23 14:10:02, 2026-04-23 14:11:14 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":58,"processedLineCount":290,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 58(Integer), 0(Integer), 2026-04-23T14:11:16.562496200(LocalDateTime), null, 2026-04-23T14:11:16.562496200(LocalDateTime), 102(Long) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62a17138] was not registered for synchronization because synchronization is not active -<== Updates: 1 -JDBC Connection [HikariProxyConnection@803919344 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] from current transaction -==> Parameters: 1034(Long) -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Total: 1 -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:16 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14764fd9] -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62a17138] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f89009b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@105415907 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f89009b] -2026-04-23 14:11:17.061 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=60/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39883d22] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1978925590 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:17.143025500(LocalDateTime), null, 1034(Long), cancelled(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cafcd4a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@619056031 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:17.219087500(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39883d22] -2026-04-23 14:11:17.235 [http-nio-18080-exec-3] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1241 thread=http-nio-18080-exec-3 -2026-04-23 14:11:17.236 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1243 -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cafcd4a] -2026-04-23 14:11:17.306 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-4 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a6dd783] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1981583051 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a6dd783] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -JDBC Connection [HikariProxyConnection@408653794 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 59(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 59(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":59,"chunkTotal":60,"totalLines":300,"keptRows":["Savannan","SXMFFHCG","Peryiter","IVAPUPU","HOMOTEK"],"invalidBrands":[],"queryFailedBrands":[]}(String), 22353633a9114fe989c7c0a5160fa5e9b74589915535830f640b2980c30aceb9(String), 2026-04-23T14:11:17.393305(LocalDateTime), 2026-04-23T14:11:17.393305(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 65, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 56, 60, <>, 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30, 2026-04-23 14:11:13, 2026-04-23 14:11:13 -<== Row: 66, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 57, 60, <>, aa199f88a502a520fbca5aac282e934cdc803693ff20d14dee3ee70c67669226, 2026-04-23 14:11:14, 2026-04-23 14:11:14 -<== Row: 68, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 59, 60, <>, 22353633a9114fe989c7c0a5160fa5e9b74589915535830f640b2980c30aceb9, 2026-04-23 14:11:17, 2026-04-23 14:11:17 -<== Row: 67, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 60, 60, <>, 8eee614caa743195842f985b6731132a48cf5821d5dc0120c862bb3c0b52fe26, 2026-04-23 14:11:17, 2026-04-23 14:11:17 -<== Total: 59 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 58, 0, 2026-04-23 14:11:17, null, 2026-04-23 14:10:02, 2026-04-23 14:11:17 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":59,"processedLineCount":295,"completed":false,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 59(Integer), 0(Integer), 2026-04-23T14:11:17.393305(LocalDateTime), null, 2026-04-23T14:11:17.393305(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e662f2b] -2026-04-23 14:11:17.884 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=59/60 stored=true newlyCompletedFile=false finishedFiles=0 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67c228d8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1642825525 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 0(Integer), 1(Integer), 2026-04-23T14:11:17.967378(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67c228d8] -2026-04-23 14:11:18.058 [http-nio-18080-exec-4] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=0/1 elapsedMs=1174 thread=http-nio-18080-exec-4 -2026-04-23 14:11:18.059 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1176 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33dd5aa9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@407044994 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 0, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:18 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33dd5aa9] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15e23392] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1286814613 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15e23392] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9872c15] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@999055469 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 2026-04-23T14:11:18.616826100(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9872c15] -2026-04-23 14:11:18.696 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 chunks=1 files=1 thread=http-nio-18080-exec-5 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fb9bcc6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@979733235 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fb9bcc6] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -JDBC Connection [HikariProxyConnection@2147077846 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 58(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 1034(Long), BRAND(String), https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String), 58(Integer), 60(Integer), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkIndex":58,"chunkTotal":60,"totalLines":300,"keptRows":["Bringsine","Chees D Zone","Avanti Linens","Heritage Lace","Elvira Palacios"],"invalidBrands":[],"queryFailedBrands":[]}(String), 0d31f64e5e921d4b5e6644e95216b9d88f4e14406324d08be8925ebd3b96b7c2(String), 2026-04-23T14:11:18.773253700(LocalDateTime), 2026-04-23T14:11:18.773253700(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) ORDER BY chunk_index ASC,id ASC -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 16, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 1, 60, <>, 4b1fcd058b9ad9103980477ddefe986765a011862a7a28b6877a75d517f964fd, 2026-04-23 14:10:12, 2026-04-23 14:10:12 -<== Row: 10, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 2, 60, <>, 8122e81bf13a75011d9d3f0b2145230bff4cb1f21d79511799a5145efe4fef67, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 14, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 3, 60, <>, 415a7886981a81879aef0a2abf234c2332110e7b1b685743e813f4d807dd8e45, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 12, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 4, 60, <>, 4216acfc569e06c1c9257648063e893e70458aba4ca65aa4d0e97515d4b7458c, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 11, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 5, 60, <>, e07325c7df2fab34232184f700193472ef6592e86e44c403f46edb665cb73df6, 2026-04-23 14:10:09, 2026-04-23 14:10:09 -<== Row: 17, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 6, 60, <>, 1c3f70af4decd790c957f41c93fdcdd056e62d39e1addd4234b8a4af3ac9163e, 2026-04-23 14:10:13, 2026-04-23 14:10:13 -<== Row: 13, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 7, 60, <>, e688ec62979df771e12f2392c3591ef20ffff09edc96a13713c3bf1712839c07, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 15, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 8, 60, <>, dc485b0ed5082b402b876927b70435db68ed94d9933acc0dfe7e15e84c5e44ce, 2026-04-23 14:10:10, 2026-04-23 14:10:10 -<== Row: 21, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 9, 60, <>, f9fe86d196f378e2ec360b6ef65d9cc8c0bf395e2f236fc37be2c986c897ea03, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 18, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 10, 60, <>, ee95ca9a4e3cc2e04a67b9cc9ec8f844ea592425014b541fd99c329507a56c38, 2026-04-23 14:10:16, 2026-04-23 14:10:16 -<== Row: 22, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 11, 60, <>, e3b05f8f9b5b598b56128685b1cd2e3c3b255aa9e0d0da24141d680128019e7e, 2026-04-23 14:10:19, 2026-04-23 14:10:19 -<== Row: 23, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 12, 60, <>, eb0bf2dd79b0f9bbd80aa4ade5e5ef9d9d57859828f5a9c611eb384c064eb8f9, 2026-04-23 14:10:20, 2026-04-23 14:10:20 -<== Row: 19, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 13, 60, <>, dbc1508761ee99cbcc668880cc5909e0e76288970b56bf0eb2694051cc2e1411, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 20, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 14, 60, <>, 5390340c0d51b7633a470ce8298a8c21cbc283c8dcbe8e9a2ddd1b9d9b29e82a, 2026-04-23 14:10:18, 2026-04-23 14:10:18 -<== Row: 24, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 15, 60, <>, d9b3fdf442776e030d65e13eddfbc40452ad338b7cf8824f0256b9747d4d2627, 2026-04-23 14:10:22, 2026-04-23 14:10:22 -<== Row: 28, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 16, 60, <>, d40f0a9e697f92f3f0c4ebe97ce5d9c6eafdff11c8c765f2cdbfdbf945fbed33, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 26, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 17, 60, <>, b9f95322824c9ad7b930b05f8cb71d049aa56d8e001a201de588d1fe26975946, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 30, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 18, 60, <>, f7ff9a4f626f7366dfbbb57ce5f6c35cc7af41520d05fe6bf4613c9088249e83, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 25, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 19, 60, <>, 4a9a837ea1b6154dcbb304be2022be541a14e5320d85447aba70dda956443b62, 2026-04-23 14:10:25, 2026-04-23 14:10:25 -<== Row: 29, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 20, 60, <>, 756b3c43e6c6909e03bec79ee154b422bd219bd3debbb449efbc4f664edb0f0d, 2026-04-23 14:10:28, 2026-04-23 14:10:28 -<== Row: 27, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 21, 60, <>, 30b0db58b82cdd17d9b4e5211e8eeed52d3a7f9c99430373051222d27a9c1bae, 2026-04-23 14:10:26, 2026-04-23 14:10:26 -<== Row: 32, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 22, 60, <>, 7b816137391106907535abb3b52f9af8fa5b24e373961774bd22e66ff65f090a, 2026-04-23 14:10:30, 2026-04-23 14:10:30 -<== Row: 31, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 23, 60, <>, c93556e31c3088e2c0d943731b000f1d8d10be17a1b67cd30c197f16c6232ffa, 2026-04-23 14:10:29, 2026-04-23 14:10:29 -<== Row: 37, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 24, 60, <>, 470f7eb67d6f6d04a36e903d3ad96829fc712400fda6d21f3d1ce5504bcc6705, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 33, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 25, 60, <>, 35e144974ab36465a355fb0599c4cbb0f4db7958a57165ee2dafc26fa347a7ed, 2026-04-23 14:10:32, 2026-04-23 14:10:32 -<== Row: 35, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 26, 60, <>, 44b87ee0a432f080799f99311002bfde5458da80ec47b119895edda1558dcd50, 2026-04-23 14:10:34, 2026-04-23 14:10:34 -<== Row: 34, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 27, 60, <>, d7b26c41836040ce93686ac085e448e940d10faf41086ffb30c2aa5933e3b7c0, 2026-04-23 14:10:33, 2026-04-23 14:10:33 -<== Row: 38, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 28, 60, <>, 0dd212a0d518345460694676b87b1c85abe8ee91c978553771428c5ed5d51b93, 2026-04-23 14:10:36, 2026-04-23 14:10:36 -<== Row: 36, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 29, 60, <>, b7d1560314bac3a52996e90debea61f2ca5c68c4f780aabdd09e52d8e9cd9207, 2026-04-23 14:10:35, 2026-04-23 14:10:35 -<== Row: 40, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 30, 60, <>, 3c2288fb2cf0bf158cd33275a5e215030e8f1e8ff49ae8cf263a5e2af7ddaf5b, 2026-04-23 14:10:39, 2026-04-23 14:10:39 -<== Row: 39, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 31, 60, <>, 1e84a9db16f78c25026021b8ee0701a3593b45aa66f3fa52094a4d4ee67414b5, 2026-04-23 14:10:37, 2026-04-23 14:10:37 -<== Row: 41, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 32, 60, <>, c7a32a5bcaf73a330c74eb3bcd85fd1b8a3563021fefd31744ed1be558e71369, 2026-04-23 14:10:40, 2026-04-23 14:10:40 -<== Row: 42, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 33, 60, <>, 001a822e5f4798a99b7f53b454147b47b1fa1892681c333316af408575830dbf, 2026-04-23 14:10:41, 2026-04-23 14:10:41 -<== Row: 46, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 34, 60, <>, 49496144791a4316666da236d15da4ec7b9b5995185df64be4e0b399e74c172a, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 44, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 35, 60, <>, 76c173ecac7f3e9aba47e7fd18837aa0a3a04a484bcf1d5340e502779cc8b87a, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 43, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 36, 60, <>, a8345daf871983a8de25038bd79c4a44b7f265acd2c5057d9faf08badce86a8d, 2026-04-23 14:10:42, 2026-04-23 14:10:42 -<== Row: 45, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 37, 60, <>, 3ecb788a5c0e6575f6f45e438c5ea4172f93171d5884865b1dbf6ba04ab0106e, 2026-04-23 14:10:44, 2026-04-23 14:10:44 -<== Row: 47, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 38, 60, <>, 1f2e4384e7de5028ab7ec44d76c5bda76ca31a1a80596a8c842571e62b0493f0, 2026-04-23 14:10:45, 2026-04-23 14:10:45 -<== Row: 49, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 39, 60, <>, 05bdb50deb2c16a320b9157c1ffc9bb5adf591d82f56acd311d6c70a6dfcb4b1, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 48, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 40, 60, <>, ba285e0c14f3cf6f8cbadeea4753ac59892c7d5f6cf4b1f8b3bd527a015b452f, 2026-04-23 14:10:47, 2026-04-23 14:10:47 -<== Row: 51, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 41, 60, <>, b7a88372a0a601f03267d0d5a58d79320255beafb593b189e83cd71e1491f399, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 55, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 42, 60, <>, c586731303df70443010bd00fa5dd4bf7d97a55f378c0a95f46ce21042422bd9, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 50, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 43, 60, <>, 270e661579986db4d5f79ccad2a047c2b798f5d4ac3a058fbce9ebb294a5e3e0, 2026-04-23 14:10:52, 2026-04-23 14:10:52 -<== Row: 52, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 44, 60, <>, b0fe90cc4979be95d22b7cc2c477edd556fc12709c6d100d212a0449d7e9fefe, 2026-04-23 14:10:53, 2026-04-23 14:10:53 -<== Row: 54, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 45, 60, <>, 6a36483a7775b2cab627eb890f924f7df5316e394cb2bec33907e7c9a5ac79e8, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 53, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 46, 60, <>, 967e4d38d81722190ff6dde4ef9aa82b89dce3b8f894e6bf270757ddfc7f4cd1, 2026-04-23 14:10:54, 2026-04-23 14:10:54 -<== Row: 56, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 47, 60, <>, b7a0786d729a9e2eb1ef82d3fbb1c321bb79035235a14d71b72a866529282a00, 2026-04-23 14:10:57, 2026-04-23 14:10:57 -<== Row: 59, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 48, 60, <>, cf225771e38e0a658f6829629a70a074a75aa30b35862550dd6360c1579a5eca, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 58, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 49, 60, <>, f3efb5ceb57a420fa4618860668d52f256765e9b51883472a7ace37fabb538ef, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 57, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 50, 60, <>, 418a56829a9494025251a669ab111392bdc0c3cf8a59a9b4880e3a0b30722a69, 2026-04-23 14:11:01, 2026-04-23 14:11:01 -<== Row: 61, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 51, 60, <>, 8f9afba89088f97f82dd9da0db403e2848feee4e3fdf43622755d4848f9ef045, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 63, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 52, 60, <>, 7662cd42190744a1015648397737a58281299e2c713d8660d99a2d9c9aeafc86, 2026-04-23 14:11:06, 2026-04-23 14:11:06 -<== Row: 60, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 53, 60, <>, 7e1cec13d3ea8f10ac2b5ebd2aa3718677b5d3871753a08440d6238c98fcc8f8, 2026-04-23 14:11:04, 2026-04-23 14:11:04 -<== Row: 64, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 54, 60, <>, 5046f397617703d821aef6baa450bac08db241587b543c0390f50da9763ad7d9, 2026-04-23 14:11:07, 2026-04-23 14:11:07 -<== Row: 62, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 55, 60, <>, 6f54501b247dd8be6b43f3f0ceabf63413ff83983e5859ac9db1155d5985aa8e, 2026-04-23 14:11:05, 2026-04-23 14:11:05 -<== Row: 65, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 56, 60, <>, 074490f7ac3bda91f258b6fa9b2fb4c9ceaa8520fef6e54e6fd01fcf2389eb30, 2026-04-23 14:11:13, 2026-04-23 14:11:13 -<== Row: 66, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 57, 60, <>, aa199f88a502a520fbca5aac282e934cdc803693ff20d14dee3ee70c67669226, 2026-04-23 14:11:14, 2026-04-23 14:11:14 -<== Row: 69, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 58, 60, <>, 0d31f64e5e921d4b5e6644e95216b9d88f4e14406324d08be8925ebd3b96b7c2, 2026-04-23 14:11:19, 2026-04-23 14:11:19 -<== Row: 68, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 59, 60, <>, 22353633a9114fe989c7c0a5160fa5e9b74589915535830f640b2980c30aceb9, 2026-04-23 14:11:17, 2026-04-23 14:11:17 -<== Row: 67, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, 60, 60, <>, 8eee614caa743195842f985b6731132a48cf5821d5dc0120c862bb3c0b52fe26, 2026-04-23 14:11:17, 2026-04-23 14:11:17 -<== Total: 60 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 1034(Long), BRAND(String), 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 102, 1034, BRAND, https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, 1b23bbd895b2c6eb721c8f4d596b5e1bed9be0c12db7ee2038a9b04c6b53d632, <>, <>, 60, 59, 0, 2026-04-23 14:11:17, null, 2026-04-23 14:10:02, 2026-04-23 14:11:17 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx(String), {"fileUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx","originalFilename":"","relativePath":"","mainSheetName":"","chunkTotal":60,"totalLines":300,"receivedChunkCount":60,"processedLineCount":300,"completed":true,"invalidBrands":[],"queryFailedBrands":[]}(String), 60(Integer), 60(Integer), 1(Integer), 2026-04-23T14:11:18.773253700(LocalDateTime), null, 2026-04-23T14:11:18.773253700(LocalDateTime), 102(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND completed = ?) -==> Parameters: 1034(Long), BRAND(String), 1(Integer) -<== Columns: total -<== Row: 1 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3bd0373c] -2026-04-23 14:11:19.199 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 fileUrl=https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx chunk=58/60 stored=true newlyCompletedFile=true finishedFiles=1 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c8eb664] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@260218376 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,progress_current=?,progress_total=?,updated_at=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: running(String), 1(Integer), 1(Integer), 2026-04-23T14:11:19.285948400(LocalDateTime), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c8eb664] -2026-04-23 14:11:19.361 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-finalize] taskId=1034 all files completed, trying finalize lock -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@240f8d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1418565932 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE id=? -==> Parameters: 1034(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, running, 1, <>, <>, 1, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:19 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@240f8d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6482ede7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@942692009 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT scope_key,state_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: scope_key, state_json -<== Row: https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/nanri-image/brand_input/1/1776924600499/173.xlsx, <> -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6482ede7] -2026-04-23 14:11:19.480 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-finalize] taskId=1034 aggregateFiles=1 expectedFiles=1 thread=http-nio-18080-exec-5 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@643afbc7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@636182578 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE brand_crawl_tasks SET status=?,result_paths=?,progress_current=?,progress_total=?,error_message=? WHERE (id = ? AND status <> ?) -==> Parameters: success(String), {"urls":["https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/brand/33583db7-5f11-45a4-b28b-5d0926b0d0e2/173.xlsx"],"zip_url":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/brand/aff219ae-2483-40db-b585-8c9304ee40b1/173.zip"}(String), 1(Integer), 1(Integer), null, 1034(Long), cancelled(String) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@643afbc7] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -JDBC Connection [HikariProxyConnection@663548719 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 1034(Long), BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] from current transaction -==> Preparing: DELETE FROM biz_task_chunk WHERE (task_id = ? AND module_type = ?) -==> Parameters: 1034(Long), BRAND(String) -<== Updates: 60 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] from current transaction -==> Preparing: DELETE FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 1034(Long), BRAND(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6231b426] -2026-04-23 14:11:21.318 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-finalize] taskId=1034 finalized success files=1 elapsedMs=1916 -2026-04-23 14:11:21.360 [http-nio-18080-exec-5] INFO c.n.a.m.b.service.BrandTaskService - [brand-submit] taskId=1034 finishedFiles=1/1 elapsedMs=3031 thread=http-nio-18080-exec-5 -2026-04-23 14:11:21.361 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/brand/tasks/1034/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=3033 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23f02a76] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2004316852 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (user_id = ?) ORDER BY id DESC limit 100 -==> Parameters: 1(Long) -<== Columns: id, user_id, file_paths, status, task_type, result_paths, error_message, progress_current, progress_total, desc, strategy, created_at, updated_at -<== Row: 1034, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 173.xlsx, Terms, 2026-04-23 14:10:01, 2026-04-23 14:11:21 -<== Row: 1033, 1, <>, cancelled, 1, <>, <>, 0, 1, [Terms] 1.xlsx, Terms, 2026-04-23 14:09:47, 2026-04-23 14:09:59 -<== Row: 1032, 1, <>, cancelled, 1, <>, <>, 0, 1, [Terms] 1.xlsx, Terms, 2026-04-23 14:08:35, 2026-04-23 14:09:38 -<== Row: 973, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 172.xlsx, Terms, 2026-04-15 00:55:04, 2026-04-15 00:55:16 -<== Row: 972, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 172.xlsx, Terms, 2026-04-15 00:53:49, 2026-04-15 00:54:02 -<== Row: 971, 1, <>, cancelled, 1, <>, <>, 0, 1, [Terms] 1.xlsx, Terms, 2026-04-15 00:49:58, 2026-04-15 00:53:35 -<== Row: 886, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 嵌入 品牌测试1.xlsx, Terms, 2026-04-08 17:33:28, 2026-04-08 17:33:35 -<== Row: 870, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 品牌文档格式_模板 - 副本.xlsx, Terms, 2026-04-08 14:49:17, 2026-04-08 14:49:30 -<== Row: 747, 1, <>, success, 1, <>, <>, 3, 3, [Terms] 1.xlsx, 2.xlsx, 3.xlsx, Terms, 2026-03-30 22:07:25, 2026-03-30 22:07:51 -<== Row: 746, 1, <>, success, 1, <>, <>, 2, 2, [Terms] 172.xlsx, 173.xlsx, Terms, 2026-03-30 21:02:42, 2026-03-30 21:05:22 -<== Row: 745, 1, <>, cancelled, 1, <>, <>, 0, 2, [Terms] 172.xlsx, 173.xlsx, Terms, 2026-03-30 20:50:15, 2026-03-30 20:51:07 -<== Row: 735, 1, <>, cancelled, 1, <>, <>, 0, 1, [Terms] 1.xlsx, Terms, 2026-03-30 20:21:23, 2026-03-30 20:23:03 -<== Row: 728, 1, <>, failed, 1, <>, <>, 0, 3, [Terms] 1.xlsx, 2.xlsx, 3.xlsx, Terms, 2026-03-30 19:36:15, 2026-03-30 19:54:00 -<== Row: 727, 1, <>, failed, 1, <>, <>, 0, 3, [Terms] 1.xlsx, 2.xlsx, 3.xlsx, Terms, 2026-03-30 19:34:56, 2026-03-30 19:52:00 -<== Row: 724, 1, <>, failed, 1, <>, <>, 0, 3, [Terms] 1.xlsx, 2.xlsx, 3.xlsx, Terms, 2026-03-30 19:31:07, 2026-03-30 19:48:00 -<== Row: 723, 1, <>, cancelled, 1, <>, <>, 0, 1, [Terms] 3.10.xlsx, Terms, 2026-03-30 19:29:40, 2026-03-30 19:29:47 -<== Row: 663, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 172.xlsx, Terms, 2026-03-29 14:46:12, 2026-03-29 14:46:27 -<== Row: 646, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 嵌入 品牌测试2.xlsx, Terms, 2026-03-28 14:25:47, 2026-03-28 14:25:52 -<== Row: 594, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 172.xlsx, Terms, 2026-03-27 12:32:08, 2026-03-27 12:32:22 -<== Row: 566, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-27 09:50:41, 2026-03-27 09:50:43 -<== Row: 556, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-26 21:49:04, 2026-03-26 21:49:07 -<== Row: 555, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 172.xlsx, Terms, 2026-03-26 21:32:24, 2026-03-26 21:32:39 -<== Row: 472, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 3.10.xlsx, Terms, 2026-03-25 15:07:05, 2026-03-25 15:07:13 -<== Row: 471, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 3.10.xlsx, Terms, 2026-03-25 15:04:03, 2026-03-25 15:04:11 -<== Row: 452, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 12:38:22, 2026-03-25 12:38:24 -<== Row: 451, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 11:50:32, 2026-03-25 11:50:34 -<== Row: 448, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 11:24:03, 2026-03-25 11:24:05 -<== Row: 447, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 11:00:53, 2026-03-25 11:00:54 -<== Row: 446, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 11:00:15, 2026-03-25 11:00:17 -<== Row: 445, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 10:23:34, 2026-03-25 10:23:36 -<== Row: 444, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-25 09:39:42, 2026-03-25 09:39:44 -<== Row: 443, 1, <>, success, 1, <>, <>, 1, 1, [Simple] 单独测试.xlsx, Simple, 2026-03-25 00:24:51, 2026-03-25 00:25:07 -<== Row: 441, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 单独测试.xlsx, Terms, 2026-03-24 23:04:29, 2026-03-24 23:04:39 -<== Row: 440, 1, <>, cancelled, 2, <>, <>, 0, 1, [Terms] 3.10.xlsx, Terms, 2026-03-24 22:20:38, 2026-03-24 22:22:14 -<== Row: 439, 1, <>, cancelled, 2, <>, <>, 0, 1, [Terms] 3.10.xlsx, Terms, 2026-03-24 22:20:09, 2026-03-24 22:22:12 -<== Row: 438, 1, <>, cancelled, 2, <>, <>, 0, 1, [Terms] 3.10.xlsx, Terms, 2026-03-24 22:19:34, 2026-03-24 22:22:09 -<== Row: 437, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 3.10.xlsx, Terms, 2026-03-24 22:15:17, 2026-03-24 22:15:31 -<== Row: 436, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 3.10.xlsx, Terms, 2026-03-24 22:11:01, 2026-03-24 22:11:14 -<== Row: 275, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 郭涵香跑品牌_单独测试.xlsx, Terms, 2026-03-17 18:19:56, 2026-03-17 18:19:59 -<== Row: 274, 1, <>, success, 1, <>, <>, 1, 1, [Simple] 刘建煌-3-17.xlsx, Simple, 2026-03-17 17:57:46, 2026-03-17 18:23:21 -<== Row: 273, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 刘建煌-3-17.xlsx, Terms, 2026-03-17 17:47:46, 2026-03-17 17:55:37 -<== Row: 268, 1, <>, success, 1, <>, <>, 1, 1, [Simple] 周洪3-17.xlsx, Simple, 2026-03-17 15:26:58, 2026-03-17 16:05:49 -<== Row: 267, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 周洪3-17.xlsx, Terms, 2026-03-17 15:09:34, 2026-03-17 15:25:11 -<== Row: 262, 1, <>, success, 1, <>, <>, 3, 3, [Simple] 郭丽平跑品牌.xlsx, 郭建贵跑品牌.xlsx, 郭涵香跑品牌.xlsx, Simple, 2026-03-17 13:58:17, 2026-03-17 14:18:43 -<== Row: 260, 1, <>, success, 1, <>, <>, 1, 1, [Terms] 郭建贵跑品牌.xlsx, Terms, 2026-03-17 13:51:39, 2026-03-17 13:55:35 -<== Total: 45 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23f02a76] -2026-04-23 14:11:21.508 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/brand/tasks status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=139 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f415d4e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@349680653 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 50 -==> Parameters: DEDUPE(String), 1(Long) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f415d4e] -2026-04-23 14:11:59.574 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/dedupe/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=104 -2026-04-23 14:12:00.055 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-4 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59a16acd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1570694433 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40f9893a] -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T13:57:00.056314100(LocalDateTime) -JDBC Connection [HikariProxyConnection@1659480333 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T13:57:00.099753300(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59a16acd] -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40f9893a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6b71b2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@701405968 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T13:52:00.186491100(LocalDateTime) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40f9893a] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40f9893a] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40f9893a] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:11:55, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:11:27, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:12:00, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:10:43, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:11:43, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:11:36, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:11:18, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:11:57, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:11:32, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:11:26, null, null -<== Total: 10 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6b71b2] -2026-04-23 14:12:00.231 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=10 threshold=2026-04-23T13:52:00.186491100 timeoutMinutes=20 initialThreshold=2026-04-23T13:52:00.186491100 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78b39fb9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1492486140 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78b39fb9] -2026-04-23 14:12:00.322 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776924715169 timeoutMinutes=20 updatedAt=2026-04-23T06:11:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18d71957] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2096956323 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18d71957] -2026-04-23 14:12:00.412 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776924687154 timeoutMinutes=20 updatedAt=2026-04-23T06:11:27 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7983489f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1497295705 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7983489f] -2026-04-23 14:12:00.503 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776924720152 timeoutMinutes=20 updatedAt=2026-04-23T06:12 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58115551] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@993339772 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58115551] -2026-04-23 14:12:00.590 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776924642609 timeoutMinutes=20 updatedAt=2026-04-23T06:10:43 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8f6c432] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1520415648 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8f6c432] -2026-04-23 14:12:00.678 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776924702642 timeoutMinutes=20 updatedAt=2026-04-23T06:11:43 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26294b41] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@415292642 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26294b41] -2026-04-23 14:12:00.764 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776924696268 timeoutMinutes=20 updatedAt=2026-04-23T06:11:36 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f3ccf7c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@61072025 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f3ccf7c] -2026-04-23 14:12:00.849 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776924677734 timeoutMinutes=20 updatedAt=2026-04-23T06:11:18 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@99cbebf] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@13813727 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@99cbebf] -2026-04-23 14:12:00.933 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776924717197 timeoutMinutes=20 updatedAt=2026-04-23T06:11:57 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51601c2b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1030040062 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51601c2b] -2026-04-23 14:12:01.019 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776924692453 timeoutMinutes=20 updatedAt=2026-04-23T06:11:32 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7de3284d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@749990558 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7de3284d] -2026-04-23 14:12:01.104 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776924685654 timeoutMinutes=20 updatedAt=2026-04-23T06:11:26 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cab9ce1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@149839993 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T13:52:01.104630900(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cab9ce1] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b8603c4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1534777025 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T13:52:01.149644500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6b8603c4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49d8451e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@303818690 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T13:52:01.193840600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49d8451e] -2026-04-23 14:12:01.237 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=10 finalized=0 failed=0 skipped=10 elapsedMs=1182 thread=aiimage-scheduling-4 -2026-04-23 14:12:01.238 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1183 thread=aiimage-scheduling-4 -2026-04-23 14:12:01.238 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1183 thread=aiimage-scheduling-4 -2026-04-23 14:12:01.238 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1183 thread=aiimage-scheduling-4 -2026-04-23 14:12:02.020 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/files/upload status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=22 -2026-04-23 14:12:02.066 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/files/excel-info status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f955c53] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@520762258 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, request_json, created_by, user_id, created_at, updated_at, finished_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: DEDUPE-2047196789178245120(String), DEDUPE(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), {"files":[{"fileKey":"85a4599331594136ac216466a11fdc24","originalFilename":"172.xlsx"}],"selectedColumns":["ASIN","价格","卖家名称"],"keepIntegerIds":false,"keepUnderscoreIds":true,"keepIntegerMainIdsWhenNoSubIds":true,"userId":1}(String), user:1(String), 1(Long), 2026-04-23T14:12:04.276117600(LocalDateTime), 2026-04-23T14:12:04.276117600(LocalDateTime), 2026-04-23T14:12:04.276117600(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f955c53] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eb3bc25] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@73789080 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT data_value FROM biz_dedupe_total_data WHERE data_value IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -==> Parameters: B07KHJNPN4(String), B07TF7WMWV(String), B07DJ2GZY3(String), B0B7QPKCP8(String), B0977Q1416(String), B085ZBC9DD(String), B07RGN3ZWC(String), B0851ZHG15(String), B09XDJWSLC(String), B0CNJPWZWM(String), B0B2NJMWVT(String), B08DNQTH8F(String), B0BTKP6JGT(String) -<== Columns: data_value -<== Row: B08DNQTH8F -<== Row: B09XDJWSLC -<== Row: B0B2NJMWVT -<== Row: B0BTKP6JGT -<== Row: B0CNJPWZWM -<== Total: 5 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eb3bc25] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d22367f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@566090873 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, result_filename, result_file_url, result_file_size, result_content_type, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3610(Long), DEDUPE(String), 172.xlsx(String), 172.xlsx(String), result/dedupe/0b42ed13-46b5-4b52-bb12-2e15e583ffe5/172_cleaned.xlsx(String), 3649(Long), application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(String), 1(Integer), 1(Long), 2026-04-23T14:12:04.757660300(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d22367f] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ebccd4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@171235030 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: DEDUPE-2047196789178245120(String), DEDUPE(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"85a4599331594136ac216466a11fdc24","originalFilename":"172.xlsx"}],"selectedColumns":["ASIN","价格","卖家名称"],"keepIntegerIds":false,"keepUnderscoreIds":true,"keepIntegerMainIdsWhenNoSubIds":true,"userId":1}(String), [{"sourceFilename":"172.xlsx","outputFilename":"172.xlsx","success":true,"downloadUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/dedupe/0b42ed13-46b5-4b52-bb12-2e15e583ffe5/172_cleaned.xlsx?Expires=1776928324&OSSAccessKeyId=LTAI5tNpyvzMNz9f2dHarsm8&Signature=UQWy3%2BeBAzTIwc16%2BXO3Nqxagjc%3D"}](String), user:1(String), 1(Long), 2026-04-23T14:12:04.276117600(LocalDateTime), 2026-04-23T14:12:04.838146700(LocalDateTime), 2026-04-23T14:12:04.276117600(LocalDateTime), 3610(Long) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1ebccd4] -2026-04-23 14:12:04.921 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/dedupe/run status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=660 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23cc548f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@30239002 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 50 -==> Parameters: DEDUPE(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5249, 3610, DEDUPE, 172.xlsx, null, 172.xlsx, result/dedupe/0b42ed13-46b5-4b52-bb12-2e15e583ffe5/172_cleaned.xlsx, 3649, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, null, 1, null, 1, 2026-04-23 14:12:05 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23cc548f] -2026-04-23 14:12:05.044 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/dedupe/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=98 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a86c094] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@663083203 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: SPLIT(String), 1(Long) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a86c094] -2026-04-23 14:12:07.519 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/split/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:12:09.600 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/files/upload status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=5 -2026-04-23 14:12:09.646 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/files/excel-info status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=36 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a1e83b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2016822469 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, request_json, created_by, user_id, created_at, updated_at, finished_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: SPLIT-2047196833369432064(String), SPLIT(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), {"files":[{"fileKey":"56f93835f0e7417499f2be84f5b6d892","originalFilename":"173.xlsx"}],"selectedColumns":["品牌","ASIN","价格","卖家名称","关键词"],"splitMode":"rows_per_file","rowsPerFile":50,"userId":1}(String), user:1(String), 1(Long), 2026-04-23T14:12:14.811842200(LocalDateTime), 2026-04-23T14:12:14.811842200(LocalDateTime), 2026-04-23T14:12:14.811842200(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a1e83b] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@336a4e2e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1511446233 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3611(Long), SPLIT(String), 173.xlsx(String), 173.zip(String), result/split/605cd0dd-6e89-4305-8d50-6975daadd1dd/173.zip(String), 85370(Long), application/zip(String), 877(Integer), 1(Integer), 1(Long), 2026-04-23T14:12:15.947849300(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@336a4e2e] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@377b413] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@589889933 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: SPLIT-2047196833369432064(String), SPLIT(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"56f93835f0e7417499f2be84f5b6d892","originalFilename":"173.xlsx"}],"selectedColumns":["品牌","ASIN","价格","卖家名称","关键词"],"splitMode":"rows_per_file","rowsPerFile":50,"userId":1}(String), [{"resultId":5250,"sourceFilename":"173.xlsx","outputFilename":"173.zip","success":true,"rowCount":877,"downloadUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/split/605cd0dd-6e89-4305-8d50-6975daadd1dd/173.zip?Expires=1776928335&OSSAccessKeyId=LTAI5tNpyvzMNz9f2dHarsm8&Signature=ldqNvTCrUp%2FMfkgrQirBhWEuj5U%3D","entryCount":18,"entries":[{"filename":"173_split_1.xlsx","rowCount":50},{"filename":"173_split_2.xlsx","rowCount":50},{"filename":"173_split_3.xlsx","rowCount":50},{"filename":"173_split_4.xlsx","rowCount":50},{"filename":"173_split_5.xlsx","rowCount":50},{"filename":"173_split_6.xlsx","rowCount":50},{"filename":"173_split_7.xlsx","rowCount":50},{"filename":"173_split_8.xlsx","rowCount":50},{"filename":"173_split_9.xlsx","rowCount":50},{"filename":"173_split_10.xlsx","rowCount":50},{"filename":"173_split_11.xlsx","rowCount":50},{"filename":"173_split_12.xlsx","rowCount":50},{"filename":"173_split_13.xlsx","rowCount":50},{"filename":"173_split_14.xlsx","rowCount":50},{"filename":"173_split_15.xlsx","rowCount":50},{"filename":"173_split_16.xlsx","rowCount":50},{"filename":"173_split_17.xlsx","rowCount":50},{"filename":"173_split_18.xlsx","rowCount":27}]}](String), user:1(String), 1(Long), 2026-04-23T14:12:14.811842200(LocalDateTime), 2026-04-23T14:12:16.072767(LocalDateTime), 2026-04-23T14:12:14.811842200(LocalDateTime), 3611(Long) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@377b413] -2026-04-23 14:12:16.155 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/split/run status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1350 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b0d218f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1512334925 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: SPLIT(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5250, 3611, SPLIT, 173.xlsx, null, 173.zip, result/split/605cd0dd-6e89-4305-8d50-6975daadd1dd/173.zip, 85370, application/zip, 877, 1, null, 1, 2026-04-23 14:12:16 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b0d218f] -2026-04-23 14:12:16.274 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/split/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=96 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f95d6f2] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1474739b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@743046861 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 200 -==> Parameters: CONVERT(String), 1(Long) -JDBC Connection [HikariProxyConnection@1113729052 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,template_code,template_name,output_filename,required_source_columns_json,header_columns_json,field_mapping_json,defaults_json,preamble_lines_json,blank_header_rows_after_schema,is_default,built_in,enabled,created_at,updated_at FROM biz_convert_template WHERE (enabled = ?) ORDER BY is_default DESC,id ASC -==> Parameters: 1(Integer) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f95d6f2] -2026-04-23 14:12:18.534 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/convert/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=78 -<== Columns: id, template_code, template_name, output_filename, required_source_columns_json, header_columns_json, field_mapping_json, defaults_json, preamble_lines_json, blank_header_rows_after_schema, is_default, built_in, enabled, created_at, updated_at -<== Row: 1, uk_offer, 五国模板, 英国.txt、法国.txt、德国.txt、西班牙.txt、意大利.txt, <>, <>, <>, <>, <>, 1, 1, 1, 1, 2026-03-20 12:47:10, 2026-03-22 02:02:20 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1474739b] -2026-04-23 14:12:18.560 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/convert/templates status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=104 -2026-04-23 14:12:20.531 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/files/upload status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=5 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f8928be] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1574899955 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,template_code,template_name,output_filename,required_source_columns_json,header_columns_json,field_mapping_json,defaults_json,preamble_lines_json,blank_header_rows_after_schema,is_default,built_in,enabled,created_at,updated_at FROM biz_convert_template WHERE (template_code = ? AND enabled = ?) limit 1 -==> Parameters: uk_offer(String), 1(Integer) -<== Columns: id, template_code, template_name, output_filename, required_source_columns_json, header_columns_json, field_mapping_json, defaults_json, preamble_lines_json, blank_header_rows_after_schema, is_default, built_in, enabled, created_at, updated_at -<== Row: 1, uk_offer, 五国模板, 英国.txt、法国.txt、德国.txt、西班牙.txt、意大利.txt, <>, <>, <>, <>, <>, 1, 1, 1, 1, 2026-03-20 12:47:10, 2026-03-22 02:02:20 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f8928be] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23a85b7d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@861677464 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, request_json, created_by, user_id, created_at, updated_at, finished_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: CONVERT-2047196864554082304(String), CONVERT(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), {"files":[{"fileKey":"23932d7e72e3442e8a173975d97e5df5","originalFilename":"173.xlsx"}],"templateId":"uk_offer","userId":1}(String), user:1(String), 1(Long), 2026-04-23T14:12:22.246453400(LocalDateTime), 2026-04-23T14:12:22.246453400(LocalDateTime), 2026-04-23T14:12:22.246453400(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@23a85b7d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@457a80b5] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1408660321 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, result_filename, result_file_url, result_file_size, result_content_type, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3612(Long), CONVERT(String), 173.xlsx(String), 173.zip(String), result/convert/72c9ea9b-8652-4b74-877c-e0091ca65e35/173.zip(String), 57569(Long), application/zip(String), 1(Integer), 1(Long), 2026-04-23T14:12:22.710663700(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@457a80b5] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e3944d7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1043618058 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: CONVERT-2047196864554082304(String), CONVERT(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"23932d7e72e3442e8a173975d97e5df5","originalFilename":"173.xlsx"}],"templateId":"uk_offer","userId":1}(String), [{"resultId":5251,"sourceFilename":"173.xlsx","outputFilename":"173.zip","success":true,"downloadUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/convert/72c9ea9b-8652-4b74-877c-e0091ca65e35/173.zip?Expires=1776928342&OSSAccessKeyId=LTAI5tNpyvzMNz9f2dHarsm8&Signature=o9NR9oRgF9yEVdBrGcy0McPCgKw%3D"}](String), user:1(String), 1(Long), 2026-04-23T14:12:22.246453400(LocalDateTime), 2026-04-23T14:12:22.795852700(LocalDateTime), 2026-04-23T14:12:22.246453400(LocalDateTime), 3612(Long) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e3944d7] -2026-04-23 14:12:22.875 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/convert/run status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=715 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67b50f87] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@365321127 wrapping com.mysql.cj.jdbc.ConnectionImpl@d4817e9] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 200 -==> Parameters: CONVERT(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5251, 3612, CONVERT, 173.xlsx, null, 173.zip, result/convert/72c9ea9b-8652-4b74-877c-e0091ca65e35/173.zip, 57569, application/zip, null, 1, null, 1, 2026-04-23 14:12:23 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67b50f87] -2026-04-23 14:12:22.996 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/convert/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=93 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c336e9d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@703213043 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: DELETE_BRAND(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5248, 3609, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, 郭亚芳.xlsx, result/delete_brand/4e09b6a6-b05a-4f03-9846-b34a357f4761/郭亚芳.xlsx, 3538, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 12:58:13 -<== Row: 5247, 3608, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, null, null, 0, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 0, null, 1, 2026-04-23 12:54:54 -<== Row: 5244, 3605, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/1ac59e28-6395-46b3-bf72-7459b0f1019f/郭亚芳.xlsx, 3487, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:42 -<== Row: 5243, 3604, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/31541018-b92a-4f5f-8a6c-46ffc16fcb85/郭亚芳.xlsx, 3488, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:39 -<== Total: 4 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c336e9d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4368f5ad] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1249087256 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? ) -==> Parameters: 3609(Long), 3608(Long), 3605(Long), 3604(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3604, DELETE_BRAND-2047155910509993984, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:38, 2026-04-23 11:30:46, 2026-04-23 11:30:46, null -<== Row: 3605, DELETE_BRAND-2047155926691618816, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:42, 2026-04-23 11:31:31, 2026-04-23 11:31:31, null -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Row: 3609, DELETE_BRAND-2047178198437515264, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:58:12, 2026-04-23 12:58:59, 2026-04-23 12:58:59, null -<== Total: 4 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4368f5ad] -2026-04-23 14:12:25.014 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/delete-brand/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=124 -2026-04-23 14:12:29.737 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/files/upload status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=6 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6dd2a05d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@505844398 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6dd2a05d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@420bbe10] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@983776836 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@420bbe10] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22d40848] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1347378097 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, request_json, created_by, user_id, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: DELETE_BRAND-2047196901073887232(String), DELETE_BRAND(String), IMMEDIATE(String), RUNNING(String), 1(Integer), {"files":[{"fileKey":"957e0e70c056496f865df19b88fd9ffd","originalFilename":"郭亚芳.xlsx"}],"userId":1}(String), user:1(String), 1(Long), 2026-04-23T14:12:30.953759700(LocalDateTime), 2026-04-23T14:12:30.953759700(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22d40848] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a52db1d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@255944111 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,cache_type,cache_key,company_name,payload_json,expires_at,created_at,updated_at FROM biz_ziniao_memory_store WHERE (cache_type = ? AND cache_key = ?) LIMIT 1 -==> Parameters: SHOP_INDEX_ENTRY(String), n:郭亚芳(String) -<== Columns: id, cache_type, cache_key, company_name, payload_json, expires_at, created_at, updated_at -<== Row: 1482, SHOP_INDEX_ENTRY, n:郭亚芳, rongchuang123, <>, 2026-04-23 18:11:48, 2026-04-23 01:52:44, 2026-04-23 06:11:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a52db1d] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a17fda8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@699293313 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, source_file_url, result_file_size, result_content_type, row_count, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3613(Long), DELETE_BRAND(String), 郭亚芳.xlsx(String), 957e0e70c056496f865df19b88fd9ffd(String), 0(Long), application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(String), 1(Integer), 0(Integer), 1(Long), 2026-04-23T14:12:31.196851(LocalDateTime) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a17fda8] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@378257e0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@572880028 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: DELETE_BRAND-2047196901073887232(String), DELETE_BRAND(String), IMMEDIATE(String), RUNNING(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"957e0e70c056496f865df19b88fd9ffd","originalFilename":"郭亚芳.xlsx"}],"userId":1}(String), [{"resultId":5252,"fileKey":"957e0e70c056496f865df19b88fd9ffd","sourceFilename":"郭亚芳.xlsx","shopName":"郭亚芳","companyName":"rongchuang123","matched":true,"shopId":"27730548558377","platform":"亚马逊","matchStatus":"MATCHED","totalRows":1,"taskId":3613,"countryCount":1,"countries":[],"truncated":false,"previewRows":[],"success":true}](String), user:1(String), 1(Long), 2026-04-23T14:12:30.953759700(LocalDateTime), 2026-04-23T14:12:31.289437100(LocalDateTime), 3613(Long) -<== Updates: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@378257e0] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -JDBC Connection [HikariProxyConnection@1098213319 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] from current transaction -==> Preparing: INSERT INTO biz_task_scope_state ( task_id, module_type, scope_key, scope_hash, parsed_payload_json, chunk_total, received_chunk_count, completed, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3613(Long), DELETE_BRAND(String), 957e0e70c056496f865df19b88fd9ffd(String), bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61(String), "oss:task-parsed/delete_brand/3613/bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61.json"(String), 0(Integer), 0(Integer), 0(Integer), 2026-04-23T14:12:31.470981600(LocalDateTime), 2026-04-23T14:12:31.470981600(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5465c35c] -2026-04-23 14:12:31.879 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/run status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=930 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b4f19a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@833856446 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: DELETE_BRAND(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5252, 3613, DELETE_BRAND, 郭亚芳.xlsx, 957e0e70c056496f865df19b88fd9ffd, null, null, 0, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 0, null, 1, 2026-04-23 14:12:31 -<== Row: 5248, 3609, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, 郭亚芳.xlsx, result/delete_brand/4e09b6a6-b05a-4f03-9846-b34a357f4761/郭亚芳.xlsx, 3538, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 12:58:13 -<== Row: 5247, 3608, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, null, null, 0, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 0, null, 1, 2026-04-23 12:54:54 -<== Row: 5244, 3605, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/1ac59e28-6395-46b3-bf72-7459b0f1019f/郭亚芳.xlsx, 3487, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:42 -<== Row: 5243, 3604, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/31541018-b92a-4f5f-8a6c-46ffc16fcb85/郭亚芳.xlsx, 3488, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:39 -<== Total: 5 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b4f19a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d4f0fc7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1029117397 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? ) -==> Parameters: 3613(Long), 3609(Long), 3608(Long), 3605(Long), 3604(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3604, DELETE_BRAND-2047155910509993984, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:38, 2026-04-23 11:30:46, 2026-04-23 11:30:46, null -<== Row: 3605, DELETE_BRAND-2047155926691618816, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:42, 2026-04-23 11:31:31, 2026-04-23 11:31:31, null -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Row: 3609, DELETE_BRAND-2047178198437515264, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:58:12, 2026-04-23 12:58:59, 2026-04-23 12:58:59, null -<== Row: 3613, DELETE_BRAND-2047196901073887232, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:12:31, 2026-04-23 14:12:31, null, null -<== Total: 5 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d4f0fc7] -2026-04-23 14:12:32.030 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/delete-brand/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=117 -2026-04-23 14:12:41.340 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=249 -2026-04-23 14:12:47.580 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=211 -2026-04-23 14:12:53.828 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=215 -2026-04-23 14:13:00.086 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=233 -2026-04-23 14:13:04.754 [http-nio-18080-exec-5] INFO c.n.a.m.d.s.DeleteBrandRunService - [DeleteBrand] Received submitResult for taskId: 3613, files count: 1 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -JDBC Connection [HikariProxyConnection@1335670956 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Columns: scope_key, parsed_payload_json -<== Row: 957e0e70c056496f865df19b88fd9ffd, <> -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -2026-04-23 14:13:05.112 [http-nio-18080-exec-5] INFO c.n.a.m.d.s.DeleteBrandRunService - [DeleteBrand] submitResult processing chunk -> taskId: 3613, file: 郭亚芳.xlsx, chunkIndex: 1/1, processedRows: 1/1 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ? AND chunk_index = ?) limit 1 -==> Parameters: 3613(Long), DELETE_BRAND(String), bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61(String), 1(Integer) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: INSERT INTO biz_task_chunk ( task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3613(Long), DELETE_BRAND(String), 957e0e70c056496f865df19b88fd9ffd(String), bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61(String), 1(Integer), 1(Integer), {"fileKey":"957e0e70c056496f865df19b88fd9ffd","sourceFilename":"郭亚芳.xlsx","fileIndex":null,"fileTotal":null,"chunkIndex":1,"chunkTotal":1,"processedRows":1,"totalRows":1,"currentCountry":"德国","currentAsin":"B0BRZZR3N2","countries":[{"country":"德国","items":[{"asin":"B0BRZZR3N2","status":"查询不到"}]}]}(String), 942cfda717452cc9aecaf15d208397ee6475a2b1b48dbe17bee49427ef60658f(String), 2026-04-23T14:13:05.116158800(LocalDateTime), 2026-04-23T14:13:05.116158800(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_chunk WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) -==> Parameters: 3613(Long), DELETE_BRAND(String), bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3613(Long), DELETE_BRAND(String), bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 103, 3613, DELETE_BRAND, 957e0e70c056496f865df19b88fd9ffd, bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61, <>, <>, 0, 0, 0, null, null, 2026-04-23 14:12:31, 2026-04-23 14:12:31 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,chunk_total=?,received_chunk_count=?,completed=?,last_chunk_at=?,last_error=?,updated_at=? WHERE (id = ?) -==> Parameters: 957e0e70c056496f865df19b88fd9ffd(String), 1(Integer), 1(Integer), 1(Integer), 2026-04-23T14:13:05.116158800(LocalDateTime), null, 2026-04-23T14:13:05.116158800(LocalDateTime), 103(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -2026-04-23 14:13:05.476 [http-nio-18080-exec-5] INFO c.n.a.m.d.s.DeleteBrandRunService - [DeleteBrand] File chunk transmission fully reached via chunkTotal for taskId: 3613, file: 郭亚芳.xlsx -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Columns: scope_key, parsed_payload_json -<== Row: 957e0e70c056496f865df19b88fd9ffd, <> -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,chunk_index,chunk_total,payload_json,payload_hash,created_at,updated_at FROM biz_task_chunk WHERE (task_id = ? AND module_type = ?) ORDER BY scope_hash ASC,chunk_index ASC,id ASC -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, chunk_index, chunk_total, payload_json, payload_hash, created_at, updated_at -<== Row: 70, 3613, DELETE_BRAND, 957e0e70c056496f865df19b88fd9ffd, bedc598e8f17c5a054d0d00f321533732dd84da6ac7c69a027186959e41a5a61, 1, 1, <>, 942cfda717452cc9aecaf15d208397ee6475a2b1b48dbe17bee49427ef60658f, 2026-04-23 14:13:05, 2026-04-23 14:13:05 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: DELETE_BRAND-2047196901073887232(String), DELETE_BRAND(String), IMMEDIATE(String), RUNNING(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"957e0e70c056496f865df19b88fd9ffd","originalFilename":"郭亚芳.xlsx"}],"userId":1}(String), [{"resultId":5252,"fileKey":"957e0e70c056496f865df19b88fd9ffd","sourceFilename":"郭亚芳.xlsx","shopName":"郭亚芳","companyName":"rongchuang123","matched":true,"shopId":"27730548558377","platform":"亚马逊","matchStatus":"MATCHED","totalRows":1,"taskId":3613,"countryCount":1,"countries":[],"truncated":false,"previewRows":[],"success":true}](String), user:1(String), 1(Long), 2026-04-23T14:12:30.953759700(LocalDateTime), 2026-04-23T14:13:05.886442200(LocalDateTime), 3613(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -2026-04-23 14:13:06.004 [http-nio-18080-exec-5] INFO c.n.a.m.d.s.DeleteBrandRunService - [DeleteBrand] tryFinalizeTask calling finalizeTask -> finishedFiles: 1, expectedFiles: 1 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND task_id = ?) ORDER BY id ASC -==> Parameters: DELETE_BRAND(String), 3613(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5252, 3613, DELETE_BRAND, 郭亚芳.xlsx, 957e0e70c056496f865df19b88fd9ffd, null, null, 0, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 0, null, 1, 2026-04-23 14:12:31 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -2026-04-23 14:13:06.123 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=2 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: UPDATE biz_file_result SET task_id=?, module_type=?, source_filename=?, source_file_url=?, result_filename=?, result_file_url=?, result_file_size=?, result_content_type=?, row_count=?, success=?, user_id=?, created_at=? WHERE id=? -==> Parameters: 3613(Long), DELETE_BRAND(String), 郭亚芳.xlsx(String), 957e0e70c056496f865df19b88fd9ffd(String), 郭亚芳.xlsx(String), result/delete_brand/237ae6a8-8e23-4757-a2d0-f7fb0e82dad7/郭亚芳.xlsx(String), 3537(Long), application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(String), 1(Integer), 1(Integer), 1(Long), 2026-04-23T14:12:31(LocalDateTime), 5252(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: DELETE_BRAND-2047196901073887232(String), DELETE_BRAND(String), IMMEDIATE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), {"files":[{"fileKey":"957e0e70c056496f865df19b88fd9ffd","originalFilename":"郭亚芳.xlsx"}],"userId":1}(String), [{"resultId":5252,"fileKey":"957e0e70c056496f865df19b88fd9ffd","sourceFilename":"郭亚芳.xlsx","shopName":"郭亚芳","companyName":"rongchuang123","matched":true,"shopId":"27730548558377","platform":"亚马逊","matchStatus":"MATCHED","totalRows":1,"outputFilename":"郭亚芳.xlsx","downloadUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/delete_brand/237ae6a8-8e23-4757-a2d0-f7fb0e82dad7/郭亚芳.xlsx","taskId":3613,"countryCount":1,"countries":[],"truncated":false,"previewRows":[],"success":true}](String), user:1(String), 1(Long), 2026-04-23T14:12:30.953759700(LocalDateTime), 2026-04-23T14:13:06.341630400(LocalDateTime), 2026-04-23T14:13:06.341630400(LocalDateTime), 3613(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: SELECT parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Columns: parsed_payload_json -<== Row: <> -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: DELETE FROM biz_task_chunk WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] from current transaction -==> Preparing: DELETE FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3613(Long), DELETE_BRAND(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ac56e17] -2026-04-23 14:13:06.984 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/3613/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=2315 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475812d4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@759876202 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND task_id = ? AND success = ?) ORDER BY id DESC limit 1 -==> Parameters: DELETE_BRAND(String), 3613(Long), 1(Integer) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5252, 3613, DELETE_BRAND, 郭亚芳.xlsx, 957e0e70c056496f865df19b88fd9ffd, 郭亚芳.xlsx, result/delete_brand/237ae6a8-8e23-4757-a2d0-f7fb0e82dad7/郭亚芳.xlsx, 3537, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 14:12:31 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475812d4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@231be30a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@617777935 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND task_id = ? AND success = ?) ORDER BY id DESC limit 1 -==> Parameters: DELETE_BRAND(String), 3613(Long), 1(Integer) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5252, 3613, DELETE_BRAND, 郭亚芳.xlsx, 957e0e70c056496f865df19b88fd9ffd, 郭亚芳.xlsx, result/delete_brand/237ae6a8-8e23-4757-a2d0-f7fb0e82dad7/郭亚芳.xlsx, 3537, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 14:12:31 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@231be30a] -2026-04-23 14:13:12.513 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/delete-brand/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=357 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e2c1b92] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1867688039 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: DELETE_BRAND(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5252, 3613, DELETE_BRAND, 郭亚芳.xlsx, 957e0e70c056496f865df19b88fd9ffd, 郭亚芳.xlsx, result/delete_brand/237ae6a8-8e23-4757-a2d0-f7fb0e82dad7/郭亚芳.xlsx, 3537, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 14:12:31 -<== Row: 5248, 3609, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, 郭亚芳.xlsx, result/delete_brand/4e09b6a6-b05a-4f03-9846-b34a357f4761/郭亚芳.xlsx, 3538, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 12:58:13 -<== Row: 5247, 3608, DELETE_BRAND, 郭亚芳.xlsx, 070c187b900f4db298ecaca058316ab3, null, null, 0, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 0, null, 1, 2026-04-23 12:54:54 -<== Row: 5244, 3605, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/1ac59e28-6395-46b3-bf72-7459b0f1019f/郭亚芳.xlsx, 3487, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:42 -<== Row: 5243, 3604, DELETE_BRAND, 郭亚芳.xlsx, 9a11fd9d56574377b318baaad7a7a67e, 郭亚芳.xlsx, result/delete_brand/31541018-b92a-4f5f-8a6c-46ffc16fcb85/郭亚芳.xlsx, 3488, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 1, 1, null, 1, 2026-04-23 11:29:39 -<== Total: 5 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5e2c1b92] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14e0e43b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@716086718 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? ) -==> Parameters: 3613(Long), 3609(Long), 3608(Long), 3605(Long), 3604(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3604, DELETE_BRAND-2047155910509993984, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:38, 2026-04-23 11:30:46, 2026-04-23 11:30:46, null -<== Row: 3605, DELETE_BRAND-2047155926691618816, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 11:29:42, 2026-04-23 11:31:31, 2026-04-23 11:31:31, null -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Row: 3609, DELETE_BRAND-2047178198437515264, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:58:12, 2026-04-23 12:58:59, 2026-04-23 12:58:59, null -<== Row: 3613, DELETE_BRAND-2047196901073887232, DELETE_BRAND, IMMEDIATE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:12:31, 2026-04-23 14:13:06, 2026-04-23 14:13:06, null -<== Total: 5 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14e0e43b] -2026-04-23 14:13:12.695 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/delete-brand/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=146 -2026-04-23 14:14:00.043 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-1 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6591a611] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@54406549 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T13:59:00.043338900(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44b7357a] -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6591a611] -JDBC Connection [HikariProxyConnection@363803867 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T13:59:00.132260300(LocalDateTime) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c18c642] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1414614782 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T13:54:00.173001800(LocalDateTime) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44b7357a] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44b7357a] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44b7357a] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@44b7357a] -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:13:29, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:13:16, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:13:56, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:13:55, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:13:10, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:13:00, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:12:38, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:13:10, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:13:38, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:13:51, null, null -<== Total: 10 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c18c642] -2026-04-23 14:14:00.226 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=10 threshold=2026-04-23T13:54:00.173001800 timeoutMinutes=20 initialThreshold=2026-04-23T13:54:00.173001800 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69fa5e7b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@321568720 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69fa5e7b] -2026-04-23 14:14:00.312 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776924809208 timeoutMinutes=20 updatedAt=2026-04-23T06:13:29 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6712e598] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1545627271 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6712e598] -2026-04-23 14:14:00.397 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776924796020 timeoutMinutes=20 updatedAt=2026-04-23T06:13:16 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@461375c2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@920483517 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@461375c2] -2026-04-23 14:14:00.484 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776924836486 timeoutMinutes=20 updatedAt=2026-04-23T06:13:56 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@679d5487] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@981307603 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@679d5487] -2026-04-23 14:14:00.587 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776924835260 timeoutMinutes=20 updatedAt=2026-04-23T06:13:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f53fc3b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@845659706 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f53fc3b] -2026-04-23 14:14:00.679 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776924789965 timeoutMinutes=20 updatedAt=2026-04-23T06:13:10 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40ab8b02] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1614349576 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40ab8b02] -2026-04-23 14:14:00.767 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776924779771 timeoutMinutes=20 updatedAt=2026-04-23T06:13 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5981c821] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1173273480 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5981c821] -2026-04-23 14:14:00.854 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776924841058 timeoutMinutes=20 updatedAt=2026-04-23T06:12:38 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@595f9a0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1384315379 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@595f9a0] -2026-04-23 14:14:00.943 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776924789928 timeoutMinutes=20 updatedAt=2026-04-23T06:13:10 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30befddf] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@441211537 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30befddf] -2026-04-23 14:14:01.029 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776924818094 timeoutMinutes=20 updatedAt=2026-04-23T06:13:38 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cf112c8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2070302860 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3cf112c8] -2026-04-23 14:14:01.114 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776924830734 timeoutMinutes=20 updatedAt=2026-04-23T06:13:51 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f94debc] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1271395540 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T13:54:01.114130(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f94debc] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@317489f3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1749864543 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T13:54:01.160148800(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@317489f3] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7faed0e2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1778447861 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T13:54:01.208666(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7faed0e2] -2026-04-23 14:14:01.254 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=10 finalized=0 failed=0 skipped=10 elapsedMs=1211 thread=aiimage-scheduling-1 -2026-04-23 14:14:01.254 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1211 thread=aiimage-scheduling-1 -2026-04-23 14:14:01.254 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1211 thread=aiimage-scheduling-1 -2026-04-23 14:14:01.254 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1211 thread=aiimage-scheduling-1 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bb12b6a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1347052983 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bb12b6a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558c4fa6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@129291270 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@558c4fa6] -2026-04-23 14:16:00.054 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7dc6b251] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1654810823 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:01:00.054838600(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efb799f] -JDBC Connection [HikariProxyConnection@580217393 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:01:00.145861900(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7dc6b251] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ebd327] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1249361169 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T13:56:00.191985(LocalDateTime) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efb799f] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efb799f] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efb799f] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7efb799f] -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:14:55, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:15:50, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:15:56, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:14:34, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:14:39, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:15:31, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:15:24, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:15:36, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:15:50, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:15:13, null, null -<== Total: 10 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ebd327] -2026-04-23 14:16:00.237 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=10 threshold=2026-04-23T13:56:00.191985 timeoutMinutes=20 initialThreshold=2026-04-23T13:56:00.191985 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bac6a1e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@662891687 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7bac6a1e] -2026-04-23 14:16:00.322 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776924895405 timeoutMinutes=20 updatedAt=2026-04-23T06:14:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7ba57ce6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1673598230 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7ba57ce6] -2026-04-23 14:16:00.407 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776924950184 timeoutMinutes=20 updatedAt=2026-04-23T06:15:50 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51ed03d6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@33494849 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@51ed03d6] -2026-04-23 14:16:00.493 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776924955984 timeoutMinutes=20 updatedAt=2026-04-23T06:15:56 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8d9524d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@831718195 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8d9524d] -2026-04-23 14:16:00.578 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776924873891 timeoutMinutes=20 updatedAt=2026-04-23T06:14:34 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c08d624] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@234995410 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c08d624] -2026-04-23 14:16:00.665 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776924879385 timeoutMinutes=20 updatedAt=2026-04-23T06:14:39 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@154548a6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@527828444 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@154548a6] -2026-04-23 14:16:00.750 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776924931484 timeoutMinutes=20 updatedAt=2026-04-23T06:15:31 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ee7759a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@299370648 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2ee7759a] -2026-04-23 14:16:00.836 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776924923706 timeoutMinutes=20 updatedAt=2026-04-23T06:15:24 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34d9733e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@562535322 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34d9733e] -2026-04-23 14:16:00.920 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776924935507 timeoutMinutes=20 updatedAt=2026-04-23T06:15:36 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@339aa11e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1277523152 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@339aa11e] -2026-04-23 14:16:01.005 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776924950265 timeoutMinutes=20 updatedAt=2026-04-23T06:15:50 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7750e948] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@295974125 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7750e948] -2026-04-23 14:16:01.090 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776924912612 timeoutMinutes=20 updatedAt=2026-04-23T06:15:13 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c0505f5] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1282384276 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T13:56:01.090614500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c0505f5] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8e79e77] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@475596851 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T13:56:01.135298600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8e79e77] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36f13a93] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@38866460 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T13:56:01.184331200(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36f13a93] -2026-04-23 14:16:01.229 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=10 finalized=0 failed=0 skipped=10 elapsedMs=1175 thread=aiimage-scheduling-2 -2026-04-23 14:16:01.229 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1175 thread=aiimage-scheduling-2 -2026-04-23 14:16:01.229 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1175 thread=aiimage-scheduling-2 -2026-04-23 14:16:01.229 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1175 thread=aiimage-scheduling-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@370cd5d4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1043081751 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@370cd5d4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@373c6dcb] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1716497549 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@373c6dcb] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3da56c36] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e9ebda2] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79117196] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d01b525] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1710512252 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,user_id,shop_name,created_at FROM biz_product_risk_shop_candidate WHERE (user_id = ?) ORDER BY id DESC -==> Parameters: 1(Long) -JDBC Connection [HikariProxyConnection@278809868 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT user_id,country_codes_json,updated_at FROM biz_product_risk_country_pref WHERE user_id=? -==> Parameters: 1(Long) -JDBC Connection [HikariProxyConnection@740847231 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -<== Columns: id, user_id, shop_name, created_at -<== Row: 315, 1, 郭亚芳, 2026-04-11 10:19:38 -<== Row: 2, 1, 魏振峰, 2026-04-04 21:38:57 -<== Total: 2 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e9ebda2] -2026-04-23 14:16:59.718 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/candidates status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=83 -<== Columns: user_id, country_codes_json, updated_at -<== Row: 1, ["DE"], 2026-04-05 20:42:12 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3da56c36] -2026-04-23 14:16:59.727 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/country-preference status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=90 -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 11 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79117196] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22744444] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1559371143 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Total: 11 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22744444] -2026-04-23 14:17:00.264 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=626 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@661ba429] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1889558296 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,cache_type,cache_key,company_name,payload_json,expires_at,created_at,updated_at FROM biz_ziniao_memory_store WHERE (cache_type = ? AND cache_key = ?) LIMIT 1 -==> Parameters: SHOP_INDEX_ENTRY(String), n:郭亚芳(String) -<== Columns: id, cache_type, cache_key, company_name, payload_json, expires_at, created_at, updated_at -<== Row: 1482, SHOP_INDEX_ENTRY, n:郭亚芳, rongchuang123, <>, 2026-04-23 18:11:48, 2026-04-23 01:52:44, 2026-04-23 06:11:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@661ba429] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@392aff2c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@36384460 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,cache_type,cache_key,company_name,payload_json,expires_at,created_at,updated_at FROM biz_ziniao_memory_store WHERE (cache_type = ? AND cache_key = ?) LIMIT 1 -==> Parameters: SHOP_INDEX_ENTRY(String), n:魏振峰(String) -<== Columns: id, cache_type, cache_key, company_name, payload_json, expires_at, created_at, updated_at -<== Row: 1477, SHOP_INDEX_ENTRY, n:魏振峰, rongchuang123, <>, 2026-04-23 18:11:48, 2026-04-20 15:32:49, 2026-04-23 06:11:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@392aff2c] -2026-04-23 14:17:03.530 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/match-shops status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=145 -2026-04-23 14:17:04.664 [http-nio-18080-exec-6] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@d4817e9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value. -JDBC Connection [HikariProxyConnection@1943760205 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d01b525] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77e91799] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1776135132 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Columns: total -<== Row: 11 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@77e91799] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f58ff4f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@506515719 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: total -<== Row: 11 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6f58ff4f] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50731afc] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@916121970 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -JDBC Connection [HikariProxyConnection@1030428885 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, created_by, user_id, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: PRODUCT_RISK_RESOLVE-2047198050061524992(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), user:1(String), 1(Long), 2026-04-23T14:17:04.892483100(LocalDateTime), 2026-04-23T14:17:04.892483100(LocalDateTime) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50731afc] -2026-04-23 14:17:04.904 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=5247 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71b2d538] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@315884882 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@71b2d538] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59e7e38c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1042015901 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -<== Columns: total -<== Row: 11 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@59e7e38c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7094afe4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@369744377 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: total -<== Row: 11 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] from current transaction -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7094afe4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4774a588] was not registered for synchronization because synchronization is not active -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, source_file_url, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) -JDBC Connection [HikariProxyConnection@306891021 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 27730548558377(String), 0(Integer), 1(Long), 2026-04-23T14:17:05.052071600(LocalDateTime) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4774a588] -2026-04-23 14:17:05.100 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=190 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198050061524992(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), {"items":[{"matched":true,"platform":"亚马逊","shopName":"郭亚芳","shopId":"27730548558377","companyName":"rongchuang123","openStoreUrl":null,"matchedUserId":17543915345493,"matchStatus":"MATCHED","matchMessage":null}],"user_id":1,"schedule_time":null}(String), [{"resultId":5257,"taskId":3618,"platform":"亚马逊","matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":"rongchuang123","matchStatus":"MATCHED","matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:17:04.892483100(LocalDateTime), 2026-04-23T14:17:04.892483100(LocalDateTime), 3618(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636b4cc4] -2026-04-23 14:17:05.294 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=478 -2026-04-23 14:17:05.311 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=5 -2026-04-23 14:17:11.380 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:17:17.447 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:17:23.512 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:17:29.577 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -JDBC Connection [HikariProxyConnection@299133070 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:17:05 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -2026-04-23 14:17:30.853 [http-nio-18080-exec-9] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3618 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: INSERT INTO biz_task_scope_state ( task_id, module_type, scope_key, scope_hash, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String), "oss:task-scope/product_risk_resolve/3618/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 0(Integer), 0(Integer), 0(Integer), 2026-04-23T14:17:30.905040300(LocalDateTime), 2026-04-23T14:17:30.905040300(LocalDateTime), 2026-04-23T14:17:30.905040300(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -2026-04-23 14:17:31.285 [http-nio-18080-exec-9] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3618 shop=郭亚芳 incomingShopDone=true mergedDone=true mergedRows=0 payloadCountries=1 mergedShopDoneFlag=true -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: UPDATE biz_file_result SET task_id=?, module_type=?, source_filename=?, source_file_url=?, result_file_size=?, row_count=?, success=?, error_message=?, user_id=?, created_at=? WHERE id=? -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 27730548558377(String), 0(Long), 0(Integer), 1(Integer), 没有数据(String), 1(Long), 2026-04-23T14:17:05(LocalDateTime), 5257(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 104, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:17:31, null, 2026-04-23 14:17:31, 2026-04-23 14:17:31 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: DELETE FROM biz_task_scope_state WHERE id=? -==> Parameters: 104(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -2026-04-23 14:17:31.733 [http-nio-18080-exec-9] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop finished without data taskId=3618 shop=郭亚芳 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198050061524992(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), [{"resultId":5257,"taskId":3618,"platform":null,"matched":true,"success":true,"error":"没有数据","shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"SUCCESS","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:17:04.892483100(LocalDateTime), 2026-04-23T14:17:31.782357(LocalDateTime), 2026-04-23T14:17:31.782357(LocalDateTime), 3618(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -2026-04-23 14:17:31.877 [http-nio-18080-exec-9] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3618 oldStatus=RUNNING newStatus=SUCCESS ok=1 fail=0 allDone=true matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=0 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3618(Long), PRODUCT_RISK_RESOLVE(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b4f9c] -2026-04-23 14:17:32.164 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3618/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1460 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24a8202e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2142119737 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? ) -==> Parameters: 3618(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24a8202e] -2026-04-23 14:17:35.879 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=271 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a73a297] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1286195368 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a73a297] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@28d9eb06] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1331266448 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@28d9eb06] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30dad135] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@857510333 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id=? -==> Parameters: 3618(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@30dad135] -2026-04-23 14:17:36.670 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=781 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e25ff] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@492f417e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1622444243 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -JDBC Connection [HikariProxyConnection@967873616 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: total -<== Row: 2 -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Total: 1 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@492f417e] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2279fc32] was not registered for synchronization because synchronization is not active -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -JDBC Connection [HikariProxyConnection@300842418 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20e25ff] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ea9ee27] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1031474128 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: total -<== Row: 12 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2279fc32] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2bd74f7c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1176682072 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ea9ee27] -2026-04-23 14:17:36.837 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=161 -<== Columns: total -<== Row: 12 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2bd74f7c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36bf2a1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@307683615 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36bf2a1] -2026-04-23 14:17:36.912 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=220 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58451c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1001844398 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58451c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@35d91071] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2011939699 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Columns: total -<== Row: 12 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@35d91071] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24dac28f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1501369597 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -JDBC Connection [HikariProxyConnection@685534826 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, created_by, user_id, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: PRODUCT_RISK_RESOLVE-2047198184811929600(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), user:1(String), 1(Long), 2026-04-23T14:17:37.019119800(LocalDateTime), 2026-04-23T14:17:37.019119800(LocalDateTime) -<== Columns: total -<== Row: 12 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24dac28f] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f5afb30] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1575394030 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f5afb30] -2026-04-23 14:17:37.108 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=190 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] from current transaction -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, source_file_url, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String), 魏振峰(String), 27543917795757(String), 0(Integer), 1(Long), 2026-04-23T14:17:37.174714300(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198184811929600(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), {"items":[{"matched":true,"platform":"亚马逊","shopName":"魏振峰","shopId":"27543917795757","companyName":"rongchuang123","openStoreUrl":null,"matchedUserId":17543915345493,"matchStatus":"MATCHED","matchMessage":null}],"user_id":1,"schedule_time":null}(String), [{"resultId":5258,"taskId":3619,"platform":"亚马逊","matched":true,"success":false,"error":null,"shopName":"魏振峰","shopId":"27543917795757","companyName":"rongchuang123","matchStatus":"MATCHED","matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:17:37.019119800(LocalDateTime), 2026-04-23T14:17:37.019119800(LocalDateTime), 3619(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@299d9252] -2026-04-23 14:17:37.408 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=464 -2026-04-23 14:17:37.424 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -2026-04-23 14:17:43.498 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:17:49.561 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:17:55.637 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:18:00.052 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-4 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c16456e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1003543093 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:03:00.052774300(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@c16456e] -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50c9c73d] -JDBC Connection [HikariProxyConnection@319355041 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:03:00.146522400(LocalDateTime) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1dc6a4c5] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@600162086 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T13:58:00.184489500(LocalDateTime) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50c9c73d] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:17:23, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:16:58, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:17:55, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:17:34, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:17:36, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:16:57, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:17:33, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:16:50, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:17:31, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:17:39, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:16:59, null, null -<== Total: 11 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1dc6a4c5] -2026-04-23 14:18:00.230 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=11 threshold=2026-04-23T13:58:00.184489500 timeoutMinutes=20 initialThreshold=2026-04-23T13:58:00.184489500 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2d42963e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@84606943 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50c9c73d] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50c9c73d] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@50c9c73d] -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2d42963e] -2026-04-23 14:18:00.313 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925043273 timeoutMinutes=20 updatedAt=2026-04-23T06:17:23 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bd174a9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1645996683 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bd174a9] -2026-04-23 14:18:00.398 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925017609 timeoutMinutes=20 updatedAt=2026-04-23T06:16:58 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79aab924] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@688848516 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79aab924] -2026-04-23 14:18:00.483 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925080709 timeoutMinutes=20 updatedAt=2026-04-23T06:17:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c311486] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1618929597 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c311486] -2026-04-23 14:18:00.568 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925054340 timeoutMinutes=20 updatedAt=2026-04-23T06:17:34 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae66649] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@246931127 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae66649] -2026-04-23 14:18:00.654 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925056414 timeoutMinutes=20 updatedAt=2026-04-23T06:17:36 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@712e2a98] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@142859994 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@712e2a98] -2026-04-23 14:18:00.742 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925017084 timeoutMinutes=20 updatedAt=2026-04-23T06:16:57 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d899acd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1039338766 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d899acd] -2026-04-23 14:18:00.829 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925053420 timeoutMinutes=20 updatedAt=2026-04-23T06:17:33 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1c0e7e2e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1830862992 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1c0e7e2e] -2026-04-23 14:18:00.915 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925010191 timeoutMinutes=20 updatedAt=2026-04-23T06:16:50 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60ad7871] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@264082756 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60ad7871] -2026-04-23 14:18:00.997 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925051380 timeoutMinutes=20 updatedAt=2026-04-23T06:17:31 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d0f2ba9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1458224777 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d0f2ba9] -2026-04-23 14:18:01.082 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925059065 timeoutMinutes=20 updatedAt=2026-04-23T06:17:39 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@469c198d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1659510932 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@469c198d] -2026-04-23 14:18:01.169 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925019269 timeoutMinutes=20 updatedAt=2026-04-23T06:16:59 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2499dd13] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@40892540 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T13:58:01.169041500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2499dd13] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ebfb6d1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@69508944 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T13:58:01.214199600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6ebfb6d1] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cd31915] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1338586464 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T13:58:01.257764100(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cd31915] -2026-04-23 14:18:01.301 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=11 finalized=0 failed=0 skipped=11 elapsedMs=1249 thread=aiimage-scheduling-4 -2026-04-23 14:18:01.301 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1249 thread=aiimage-scheduling-4 -2026-04-23 14:18:01.301 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1249 thread=aiimage-scheduling-4 -2026-04-23 14:18:01.302 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1250 thread=aiimage-scheduling-4 -2026-04-23 14:18:01.694 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -JDBC Connection [HikariProxyConnection@96876796 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, null, null, null, 0, null, 1, 2026-04-23 14:17:37 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:07.534 [http-nio-18080-exec-6] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3619 payloadShopCount=1 payloadKeys=[魏振峰] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String), 7cdd62e0a3eb56ad7a3735f34d41653c7f2e084ea79252bb097441fe47bf807d(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:07.733 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: INSERT INTO biz_task_scope_state ( task_id, module_type, scope_key, scope_hash, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String), 魏振峰(String), 7cdd62e0a3eb56ad7a3735f34d41653c7f2e084ea79252bb097441fe47bf807d(String), "oss:task-scope/product_risk_resolve/3619/7cdd62e0a3eb56ad7a3735f34d41653c7f2e084ea79252bb097441fe47bf807d.json"(String), 0(Integer), 0(Integer), 0(Integer), 2026-04-23T14:18:07.584623100(LocalDateTime), 2026-04-23T14:18:07.584623100(LocalDateTime), 2026-04-23T14:18:07.584623100(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:07.965 [http-nio-18080-exec-6] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3619 shop=魏振峰 incomingShopDone=true mergedDone=true mergedRows=0 payloadCountries=1 mergedShopDoneFlag=true -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: UPDATE biz_file_result SET task_id=?, module_type=?, source_filename=?, source_file_url=?, result_file_size=?, row_count=?, success=?, error_message=?, user_id=?, created_at=? WHERE id=? -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String), 魏振峰(String), 27543917795757(String), 0(Long), 0(Integer), 1(Integer), 没有数据(String), 1(Long), 2026-04-23T14:17:37(LocalDateTime), 5258(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String), 7cdd62e0a3eb56ad7a3735f34d41653c7f2e084ea79252bb097441fe47bf807d(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 105, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 7cdd62e0a3eb56ad7a3735f34d41653c7f2e084ea79252bb097441fe47bf807d, <>, <>, 0, 0, 0, 2026-04-23 14:18:08, null, 2026-04-23 14:18:08, 2026-04-23 14:18:08 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: DELETE FROM biz_task_scope_state WHERE id=? -==> Parameters: 105(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:08.395 [http-nio-18080-exec-6] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop finished without data taskId=3619 shop=魏振峰 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198184811929600(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), [{"resultId":5258,"taskId":3619,"platform":null,"matched":true,"success":true,"error":"没有数据","shopName":"魏振峰","shopId":"27543917795757","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"SUCCESS","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:17:37.019119800(LocalDateTime), 2026-04-23T14:18:08.448594900(LocalDateTime), 2026-04-23T14:18:08.448594900(LocalDateTime), 3619(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:08.544 [http-nio-18080-exec-6] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3619 oldStatus=RUNNING newStatus=SUCCESS ok=1 fail=0 allDone=true matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=0 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3619(Long), PRODUCT_RISK_RESOLVE(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3808541d] -2026-04-23 14:18:08.817 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3619/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1476 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f6e80ca] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@592219004 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? ) -==> Parameters: 3619(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7f6e80ca] -2026-04-23 14:18:14.032 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=268 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39dbcd5c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1092629036 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39dbcd5c] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@294e7c7f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1310258471 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3619(Long), 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@294e7c7f] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b014a1f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@842604949 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id=? -==> Parameters: 3619(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b014a1f] -2026-04-23 14:18:15.233 [http-nio-18080-exec-9] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1190 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a2abfbe] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@84225a3] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@795963978 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -JDBC Connection [HikariProxyConnection@462477740 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a2abfbe] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@305efb4e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1867937204 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3619(Long), 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@84225a3] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d788859] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@604953960 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@305efb4e] -2026-04-23 14:18:15.449 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=192 -<== Columns: total -<== Row: 13 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d788859] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13c91b54] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1779065652 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c31d793] was not registered for synchronization because synchronization is not active -<== Columns: total -<== Row: 13 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@13c91b54] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7054edb6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@723274579 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -JDBC Connection [HikariProxyConnection@1298710756 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,cache_type,cache_key,company_name,payload_json,expires_at,created_at,updated_at FROM biz_ziniao_memory_store WHERE (cache_type = ? AND cache_key = ?) LIMIT 1 -==> Parameters: SHOP_INDEX_ENTRY(String), n:郭亚芳(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7054edb6] -2026-04-23 14:18:15.638 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=365 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3593d8d1] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6de2b363] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@134391056 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -JDBC Connection [HikariProxyConnection@1719736005 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: 1(Long) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -<== Columns: id, cache_type, cache_key, company_name, payload_json, expires_at, created_at, updated_at -<== Row: 1482, SHOP_INDEX_ENTRY, n:郭亚芳, rongchuang123, <>, 2026-04-23 18:11:48, 2026-04-23 01:52:44, 2026-04-23 06:11:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c31d793] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e0644b5] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2093580713 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,cache_type,cache_key,company_name,payload_json,expires_at,created_at,updated_at FROM biz_ziniao_memory_store WHERE (cache_type = ? AND cache_key = ?) LIMIT 1 -==> Parameters: SHOP_INDEX_ENTRY(String), n:魏振峰(String) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3593d8d1] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33332605] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@416097762 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6de2b363] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@199e457b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1629455488 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3619(Long), 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: id, cache_type, cache_key, company_name, payload_json, expires_at, created_at, updated_at -<== Row: 1477, SHOP_INDEX_ENTRY, n:魏振峰, rongchuang123, <>, 2026-04-23 18:11:48, 2026-04-20 15:32:49, 2026-04-23 06:11:48 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3e0644b5] -2026-04-23 14:18:15.747 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/match-shops status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=220 -<== Columns: total -<== Row: 13 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@33332605] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475cd7d1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1844822577 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@199e457b] -2026-04-23 14:18:15.819 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=151 -<== Columns: total -<== Row: 13 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@475cd7d1] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48867643] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1766183645 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48867643] -2026-04-23 14:18:15.931 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=263 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -JDBC Connection [HikariProxyConnection@387887500 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, created_by, user_id, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:18:17.693690(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] from current transaction -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, source_file_url, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 27730548558377(String), 0(Integer), 1(Long), 2026-04-23T14:18:17.852547500(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), {"items":[{"matched":true,"platform":"亚马逊","shopName":"郭亚芳","shopId":"27730548558377","companyName":"rongchuang123","openStoreUrl":null,"matchedUserId":17543915345493,"matchStatus":"MATCHED","matchMessage":null}],"user_id":1,"schedule_time":null}(String), [{"resultId":5259,"taskId":3620,"platform":"亚马逊","matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":"rongchuang123","matchStatus":"MATCHED","matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:18:17.693690(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@723a700f] -2026-04-23 14:18:18.081 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=464 -2026-04-23 14:18:18.108 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=2 -2026-04-23 14:18:24.190 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20a95f0a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@523488302 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20a95f0a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f881652] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1160994214 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f881652] -2026-04-23 14:18:30.278 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=72 -2026-04-23 14:18:36.338 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:18:42.399 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:18:48.463 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:18:54.529 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:19:00.585 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:19:06.643 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:19:12.710 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:19:18.786 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:19:24.851 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:19:30.903 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:19:36.961 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=45 -2026-04-23 14:19:43.027 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:19:49.100 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:19:55.172 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:20:00.044 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-3 -2026-04-23 14:20:00.044 [aiimage-scheduling-1] INFO c.n.a.m.z.s.ZiniaoShopIndexRefreshService - [ziniao-index] skip refresh because another instance holds the distributed lock -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@236faac5] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@402104207 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:05:00.044924900(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f4f732b] -JDBC Connection [HikariProxyConnection@2113177169 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:05:00.133580(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@236faac5] -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f4f732b] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75ca60e0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@732812574 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T14:00:00.179880900(LocalDateTime) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f4f732b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f4f732b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f4f732b] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:19:55, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:19:31, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:19:57, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:19:17, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:19:06, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:19:51, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:18:56, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:19:20, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:19:49, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:19:48, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:20:00, null, null -<== Row: 3621, PRODUCT_RISK_RESOLVE-2047198409195528192, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:177, 177, 2026-04-23 06:18:31, 2026-04-23 06:19:44, null, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75ca60e0] -2026-04-23 14:20:00.230 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=12 threshold=2026-04-23T14:00:00.179880900 timeoutMinutes=20 initialThreshold=2026-04-23T14:00:00.179880900 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36d46382] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@272619736 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36d46382] -2026-04-23 14:20:00.318 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925194920 timeoutMinutes=20 updatedAt=2026-04-23T06:19:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c7bb96c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@698750226 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c7bb96c] -2026-04-23 14:20:00.410 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925170620 timeoutMinutes=20 updatedAt=2026-04-23T06:19:31 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d331b2e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@216166205 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d331b2e] -2026-04-23 14:20:00.500 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925196891 timeoutMinutes=20 updatedAt=2026-04-23T06:19:57 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d0318af] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@681349706 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d0318af] -2026-04-23 14:20:00.592 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925156658 timeoutMinutes=20 updatedAt=2026-04-23T06:19:17 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@dfe0463] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1216193299 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@dfe0463] -2026-04-23 14:20:00.682 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925145572 timeoutMinutes=20 updatedAt=2026-04-23T06:19:06 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@770b2273] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@170655213 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@770b2273] -2026-04-23 14:20:00.770 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925191182 timeoutMinutes=20 updatedAt=2026-04-23T06:19:51 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@501ffa2f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2125021925 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@501ffa2f] -2026-04-23 14:20:00.861 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925136060 timeoutMinutes=20 updatedAt=2026-04-23T06:18:56 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5935440d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1993610118 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5935440d] -2026-04-23 14:20:00.950 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925159826 timeoutMinutes=20 updatedAt=2026-04-23T06:19:20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@296f478c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1510570880 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@296f478c] -2026-04-23 14:20:01.038 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925189295 timeoutMinutes=20 updatedAt=2026-04-23T06:19:49 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38b3cb74] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1806940361 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38b3cb74] -2026-04-23 14:20:01.130 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925188025 timeoutMinutes=20 updatedAt=2026-04-23T06:19:48 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e0fe355] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1749121419 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4e0fe355] -2026-04-23 14:20:01.221 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925199874 timeoutMinutes=20 updatedAt=2026-04-23T06:20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cad741d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1829314966 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3621(Long), PRODUCT_RISK_RESOLVE(String) -2026-04-23 14:20:01.247 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5cad741d] -2026-04-23 14:20:01.309 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3621 lastPayloadHeartbeatMillis=1776925184131 timeoutMinutes=20 updatedAt=2026-04-23T06:19:44 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@721efda] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@807108287 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T14:00:01.309182700(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@721efda] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@266be5c9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@775717345 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T14:00:01.361049600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@266be5c9] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a51f37] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2140792711 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T14:00:01.408847(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a51f37] -2026-04-23 14:20:01.456 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=12 finalized=0 failed=0 skipped=12 elapsedMs=1412 thread=aiimage-scheduling-3 -2026-04-23 14:20:01.456 [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=1412 thread=aiimage-scheduling-3 -2026-04-23 14:20:01.456 [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=1412 thread=aiimage-scheduling-3 -2026-04-23 14:20:01.456 [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=1412 thread=aiimage-scheduling-3 -2026-04-23 14:20:07.310 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -JDBC Connection [HikariProxyConnection@930703377 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -2026-04-23 14:20:08.650 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -==> Preparing: INSERT INTO biz_task_scope_state ( task_id, module_type, scope_key, scope_hash, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 0(Integer), 0(Integer), 0(Integer), 2026-04-23T14:20:08.693016900(LocalDateTime), 2026-04-23T14:20:08.693016900(LocalDateTime), 2026-04-23T14:20:08.693016900(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -2026-04-23 14:20:09.126 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=1 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:20:09.166941900(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -2026-04-23 14:20:09.243 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16ad266c] -2026-04-23 14:20:09.322 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=787 -2026-04-23 14:20:13.379 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:20:19.451 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:20:25.518 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@112c6ae4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2130301973 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@112c6ae4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60056b87] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@302794281 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@60056b87] -2026-04-23 14:20:31.573 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:20:37.643 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:20:43.703 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:20:49.776 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:20:55.843 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:21:01.905 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:21:07.981 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:21:14.051 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=45 -2026-04-23 14:21:20.117 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:21:26.171 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -JDBC Connection [HikariProxyConnection@41882701 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -2026-04-23 14:21:30.764 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:20:09, null, 2026-04-23 14:20:09, 2026-04-23 14:20:09 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:21:31.037838500(LocalDateTime), 2026-04-23T14:21:31.037838500(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -2026-04-23 14:21:31.362 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=2 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:21:31.400543800(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -2026-04-23 14:21:31.481 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3665c28] -2026-04-23 14:21:31.563 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=953 -2026-04-23 14:21:32.195 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -2026-04-23 14:21:38.262 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:21:44.333 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:21:50.402 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:21:56.470 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:22:00.055 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-1 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cdc5399] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1222256636 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:07:00.055844500(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69ef75db] -JDBC Connection [HikariProxyConnection@1307455423 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:07:00.145146(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cdc5399] -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69ef75db] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8ab1754] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1989528899 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T14:02:00.198016900(LocalDateTime) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69ef75db] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69ef75db] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@69ef75db] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:21:24, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:20:38, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:21:57, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:21:14, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:21:47, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:20:58, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:21:46, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:21:50, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:21:50, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:21:54, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:21:41, null, null -<== Row: 3621, PRODUCT_RISK_RESOLVE-2047198409195528192, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:177, 177, 2026-04-23 06:18:31, 2026-04-23 06:21:45, null, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@8ab1754] -2026-04-23 14:22:00.246 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=12 threshold=2026-04-23T14:02:00.198016900 timeoutMinutes=20 initialThreshold=2026-04-23T14:02:00.198016900 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a8b2a48] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@986354170 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a8b2a48] -2026-04-23 14:22:00.334 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925283545 timeoutMinutes=20 updatedAt=2026-04-23T06:21:24 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@42a97573] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1908657668 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@42a97573] -2026-04-23 14:22:00.423 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925237486 timeoutMinutes=20 updatedAt=2026-04-23T06:20:38 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@10eb5f5b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@434156248 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@10eb5f5b] -2026-04-23 14:22:00.510 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925316708 timeoutMinutes=20 updatedAt=2026-04-23T06:21:57 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f29d2b2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1701990795 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f29d2b2] -2026-04-23 14:22:00.598 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925274249 timeoutMinutes=20 updatedAt=2026-04-23T06:21:14 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68d5163e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@159970772 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68d5163e] -2026-04-23 14:22:00.686 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925307046 timeoutMinutes=20 updatedAt=2026-04-23T06:21:47 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@456e6919] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@88793964 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@456e6919] -2026-04-23 14:22:00.774 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925257550 timeoutMinutes=20 updatedAt=2026-04-23T06:20:58 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d4eb87c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@190724205 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3d4eb87c] -2026-04-23 14:22:00.871 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925305971 timeoutMinutes=20 updatedAt=2026-04-23T06:21:46 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a2f036] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1315382726 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6a2f036] -2026-04-23 14:22:00.959 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925309702 timeoutMinutes=20 updatedAt=2026-04-23T06:21:50 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b456fd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@327562717 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b456fd] -2026-04-23 14:22:01.048 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925309716 timeoutMinutes=20 updatedAt=2026-04-23T06:21:50 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57023787] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2007076900 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57023787] -2026-04-23 14:22:01.136 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925313816 timeoutMinutes=20 updatedAt=2026-04-23T06:21:54 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72ef1980] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@882357845 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72ef1980] -2026-04-23 14:22:01.224 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925321122 timeoutMinutes=20 updatedAt=2026-04-23T06:21:41 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41373791] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1268647214 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3621(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41373791] -2026-04-23 14:22:01.312 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3621 lastPayloadHeartbeatMillis=1776925304487 timeoutMinutes=20 updatedAt=2026-04-23T06:21:45 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cd259bb] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@346120207 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T14:02:01.312409200(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6cd259bb] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cf438a4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@34973952 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T14:02:01.361006500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7cf438a4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f421880] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@44968660 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T14:02:01.409071900(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f421880] -2026-04-23 14:22:01.486 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=12 finalized=0 failed=0 skipped=12 elapsedMs=1431 thread=aiimage-scheduling-1 -2026-04-23 14:22:01.486 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1431 thread=aiimage-scheduling-1 -2026-04-23 14:22:01.486 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1431 thread=aiimage-scheduling-1 -2026-04-23 14:22:01.486 [aiimage-scheduling-1] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1431 thread=aiimage-scheduling-1 -2026-04-23 14:22:02.540 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:22:08.608 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:22:14.679 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:22:20.752 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:22:26.829 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f3309bb] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@297924045 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f3309bb] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16135b39] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@835380881 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@16135b39] -2026-04-23 14:22:32.893 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:22:38.957 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:22:45.024 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:22:51.097 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -JDBC Connection [HikariProxyConnection@809845175 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -2026-04-23 14:22:53.405 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:21:31, null, 2026-04-23 14:20:09, 2026-04-23 14:21:31 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:22:53.732521900(LocalDateTime), 2026-04-23T14:22:53.732521900(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -2026-04-23 14:22:54.075 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=3 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:22:54.115889700(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -2026-04-23 14:22:54.233 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455fc462] -2026-04-23 14:22:54.314 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1027 -2026-04-23 14:22:57.161 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:23:03.228 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:23:09.285 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:23:15.349 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:23:21.425 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:23:27.484 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:23:33.550 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:23:39.615 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:23:45.689 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:23:51.750 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:23:57.803 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:24:00.041 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-2 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40bf2d3c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@187510783 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:09:00.043027800(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e6ae02a] -JDBC Connection [HikariProxyConnection@965015633 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:09:00.131976500(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@40bf2d3c] -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e6ae02a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@728496b9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1273729816 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T14:04:00.182848(LocalDateTime) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e6ae02a] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e6ae02a] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e6ae02a] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:23:49, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:23:12, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:24:00, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:23:56, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:23:53, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:23:07, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:23:10, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:23:02, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:23:52, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:23:06, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:23:42, null, null -<== Row: 3621, PRODUCT_RISK_RESOLVE-2047198409195528192, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:177, 177, 2026-04-23 06:18:31, 2026-04-23 06:23:15, null, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@728496b9] -2026-04-23 14:24:00.232 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=12 threshold=2026-04-23T14:04:00.182848 timeoutMinutes=20 initialThreshold=2026-04-23T14:04:00.182848 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52ad623e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@71964556 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52ad623e] -2026-04-23 14:24:00.321 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925428634 timeoutMinutes=20 updatedAt=2026-04-23T06:23:49 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62fee311] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1543225826 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@62fee311] -2026-04-23 14:24:00.412 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925391657 timeoutMinutes=20 updatedAt=2026-04-23T06:23:12 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6daf9984] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2027686219 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6daf9984] -2026-04-23 14:24:00.504 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925440345 timeoutMinutes=20 updatedAt=2026-04-23T06:24 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38eac5cb] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@689445099 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38eac5cb] -2026-04-23 14:24:00.592 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925435601 timeoutMinutes=20 updatedAt=2026-04-23T06:23:56 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2534c1a8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1268685912 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2534c1a8] -2026-04-23 14:24:00.687 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925432549 timeoutMinutes=20 updatedAt=2026-04-23T06:23:53 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25ef144d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@643152089 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25ef144d] -2026-04-23 14:24:00.775 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925386726 timeoutMinutes=20 updatedAt=2026-04-23T06:23:07 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b88f9af] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@639162351 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b88f9af] -2026-04-23 14:24:00.866 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925389763 timeoutMinutes=20 updatedAt=2026-04-23T06:23:10 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b7716] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1017291571 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5b7716] -2026-04-23 14:24:00.957 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925382424 timeoutMinutes=20 updatedAt=2026-04-23T06:23:02 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70cd2be6] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@729088302 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70cd2be6] -2026-04-23 14:24:01.050 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925431847 timeoutMinutes=20 updatedAt=2026-04-23T06:23:52 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@73949267] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1780418024 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@73949267] -2026-04-23 14:24:01.140 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925385588 timeoutMinutes=20 updatedAt=2026-04-23T06:23:06 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@571b1944] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@4963946 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@571b1944] -2026-04-23 14:24:01.229 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925421643 timeoutMinutes=20 updatedAt=2026-04-23T06:23:42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b4f33c2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1947325654 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3621(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b4f33c2] -2026-04-23 14:24:01.319 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3621 lastPayloadHeartbeatMillis=1776925395474 timeoutMinutes=20 updatedAt=2026-04-23T06:23:15 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@759f059b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2001529289 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T14:04:01.319485300(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@759f059b] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9e3bee] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@220218811 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T14:04:01.367825600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9e3bee] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1993e5e7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1755577456 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T14:04:01.416452200(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1993e5e7] -2026-04-23 14:24:01.465 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=12 finalized=0 failed=0 skipped=12 elapsedMs=1424 thread=aiimage-scheduling-2 -2026-04-23 14:24:01.465 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1424 thread=aiimage-scheduling-2 -2026-04-23 14:24:01.465 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1424 thread=aiimage-scheduling-2 -2026-04-23 14:24:01.465 [aiimage-scheduling-2] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1424 thread=aiimage-scheduling-2 -2026-04-23 14:24:03.880 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:24:09.958 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -2026-04-23 14:24:16.014 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:24:22.081 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=44 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -JDBC Connection [HikariProxyConnection@935497437 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -2026-04-23 14:24:25.473 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:22:54, null, 2026-04-23 14:20:09, 2026-04-23 14:22:54 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:24:25.787963900(LocalDateTime), 2026-04-23T14:24:25.787963900(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -2026-04-23 14:24:26.123 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=4 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:24:26.166280600(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -2026-04-23 14:24:26.242 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64e79e0b] -2026-04-23 14:24:26.323 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1008 -2026-04-23 14:24:28.095 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b05a6e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@670681568 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68b05a6e] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f940679] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1964854479 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f940679] -2026-04-23 14:24:34.165 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:24:40.239 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:24:46.292 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:24:52.360 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:24:58.427 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:04.497 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:25:10.566 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:16.631 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:22.704 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:25:28.762 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:34.825 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:40.882 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -JDBC Connection [HikariProxyConnection@1514830898 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -2026-04-23 14:25:45.354 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:24:26, null, 2026-04-23 14:20:09, 2026-04-23 14:24:26 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:25:45.659677500(LocalDateTime), 2026-04-23T14:25:45.659677500(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -2026-04-23 14:25:46.055 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=5 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:25:46.094411600(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -2026-04-23 14:25:46.168 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@18f8a717] -2026-04-23 14:25:46.246 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1048 -2026-04-23 14:25:46.913 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -2026-04-23 14:25:52.986 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:25:59.061 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=46 -2026-04-23 14:26:00.049 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-4 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34b539c7] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1814211729 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:11:00.050746800(LocalDateTime) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a874b47] -JDBC Connection [HikariProxyConnection@1087996810 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -==> Parameters: running(String), 2026-04-23T14:11:00.143297700(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34b539c7] -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a874b47] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3040f401] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@765892815 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T14:06:00.194410600(LocalDateTime) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a874b47] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a874b47] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a874b47] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:25:04, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:25:52, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:26:00, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:24:31, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:25:23, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:25:21, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:25:55, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:25:28, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:25:52, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:25:41, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:25:42, null, null -<== Row: 3621, PRODUCT_RISK_RESOLVE-2047198409195528192, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:177, 177, 2026-04-23 06:18:31, 2026-04-23 06:25:03, null, null -<== Total: 12 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3040f401] -2026-04-23 14:26:00.241 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=12 threshold=2026-04-23T14:06:00.194410600 timeoutMinutes=20 initialThreshold=2026-04-23T14:06:00.194410600 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72fc015e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1168835580 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@72fc015e] -2026-04-23 14:26:00.325 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925504041 timeoutMinutes=20 updatedAt=2026-04-23T06:25:04 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@472e68bd] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1439332343 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@472e68bd] -2026-04-23 14:26:00.414 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925552468 timeoutMinutes=20 updatedAt=2026-04-23T06:25:52 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@221180] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@889060025 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@221180] -2026-04-23 14:26:00.499 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925559888 timeoutMinutes=20 updatedAt=2026-04-23T06:26 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636e53bc] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1943072832 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@636e53bc] -2026-04-23 14:26:00.588 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925470871 timeoutMinutes=20 updatedAt=2026-04-23T06:24:31 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@685df91d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2034213913 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@685df91d] -2026-04-23 14:26:00.676 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925522623 timeoutMinutes=20 updatedAt=2026-04-23T06:25:23 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3aa872e0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1027269049 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3aa872e0] -2026-04-23 14:26:00.764 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925521028 timeoutMinutes=20 updatedAt=2026-04-23T06:25:21 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c31aea8] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@100138172 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c31aea8] -2026-04-23 14:26:00.850 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925555120 timeoutMinutes=20 updatedAt=2026-04-23T06:25:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a15b8d1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@723524053 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5a15b8d1] -2026-04-23 14:26:00.935 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925527915 timeoutMinutes=20 updatedAt=2026-04-23T06:25:28 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@290eccc0] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1579825664 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@290eccc0] -2026-04-23 14:26:01.019 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925552144 timeoutMinutes=20 updatedAt=2026-04-23T06:25:52 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2426e297] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2073121311 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2426e297] -2026-04-23 14:26:01.104 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925541439 timeoutMinutes=20 updatedAt=2026-04-23T06:25:41 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7af06f1c] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1766918287 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7af06f1c] -2026-04-23 14:26:01.189 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925542328 timeoutMinutes=20 updatedAt=2026-04-23T06:25:42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@487f1676] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@823007466 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3621(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@487f1676] -2026-04-23 14:26:01.274 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3621 lastPayloadHeartbeatMillis=1776925503246 timeoutMinutes=20 updatedAt=2026-04-23T06:25:03 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@453e1e15] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1967287394 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T14:06:01.274886300(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@453e1e15] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@376a1d1e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@43086672 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T14:06:01.319802500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@376a1d1e] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@764d04d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1610727250 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T14:06:01.362366500(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@764d04d] -2026-04-23 14:26:01.407 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=12 finalized=0 failed=0 skipped=12 elapsedMs=1358 thread=aiimage-scheduling-4 -2026-04-23 14:26:01.407 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] price-track summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1358 thread=aiimage-scheduling-4 -2026-04-23 14:26:01.407 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] shop-match summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1358 thread=aiimage-scheduling-4 -2026-04-23 14:26:01.407 [aiimage-scheduling-4] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] patrol-delete summary scanned=0 finalized=0 failed=0 skipped=0 elapsedMs=1358 thread=aiimage-scheduling-4 -2026-04-23 14:26:05.115 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:26:11.187 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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 -2026-04-23 14:26:17.262 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:26:23.333 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=46 -2026-04-23 14:26:29.401 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da23b9e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1796753168 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ?) ORDER BY updated_at ASC limit 100 -==> Parameters: DELETE_BRAND(String), RUNNING(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6da23b9e] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7068afc9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@216667281 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT scope_key,parsed_payload_json FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND parsed_payload_json IS NOT NULL) -==> Parameters: 3608(Long), DELETE_BRAND(String) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7068afc9] -2026-04-23 14:26:35.469 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=45 -2026-04-23 14:26:41.530 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:26:47.606 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:26:53.674 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:26:59.746 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:27:05.815 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -JDBC Connection [HikariProxyConnection@1242812376 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -2026-04-23 14:27:07.143 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:25:46, null, 2026-04-23 14:20:09, 2026-04-23 14:25:46 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:27:07.686618900(LocalDateTime), 2026-04-23T14:27:07.686618900(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -2026-04-23 14:27:08.309 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=6 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:27:08.390731700(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -2026-04-23 14:27:08.525 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f78d1e9] -2026-04-23 14:27:08.707 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1775 -2026-04-23 14:27:11.894 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=49 -2026-04-23 14:27:17.952 [http-nio-18080-exec-2] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -2026-04-23 14:27:24.005 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:27:30.067 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=41 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -JDBC Connection [HikariProxyConnection@1475960582 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -2026-04-23 14:27:34.747 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:27:08, null, 2026-04-23 14:20:09, 2026-04-23 14:27:08 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -==> Preparing: UPDATE biz_task_scope_state SET scope_key=?,state_json=?,last_chunk_at=?,updated_at=? WHERE (id = ?) -==> Parameters: 郭亚芳(String), "oss:task-scope/product_risk_resolve/3620/293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77.json"(String), 2026-04-23T14:27:34.979735900(LocalDateTime), 2026-04-23T14:27:34.979735900(LocalDateTime), 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -2026-04-23 14:27:35.301 [http-nio-18080-exec-1] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=false mergedDone=false mergedRows=7 payloadCountries=1 mergedShopDoneFlag=null -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":false,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:27:35.339443100(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -2026-04-23 14:27:35.414 [http-nio-18080-exec-1] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=RUNNING ok=0 fail=0 allDone=false matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=1 assembledCount=0 fallbackMatchedCount=0 batchErrors=[] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7348e8d0] -2026-04-23 14:27:35.492 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=911 -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -JDBC Connection [HikariProxyConnection@391363075 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, null, null, null, 0, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -2026-04-23 14:27:35.582 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult received taskId=3620 payloadShopCount=1 payloadKeys=[郭亚芳] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:27:35, null, 2026-04-23 14:20:09, 2026-04-23 14:27:35 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -2026-04-23 14:27:35.841 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop merged taskId=3620 shop=郭亚芳 incomingShopDone=true mergedDone=true mergedRows=7 payloadCountries=1 mergedShopDoneFlag=true -2026-04-23 14:27:36.093 [http-nio-18080-exec-4] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=1 -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: UPDATE biz_file_result SET task_id=?, module_type=?, source_filename=?, source_file_url=?, result_filename=?, result_file_url=?, result_file_size=?, result_content_type=?, row_count=?, success=?, user_id=?, created_at=? WHERE id=? -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 郭亚芳(String), 27730548558377(String), 郭亚芳.zip(String), result/product_risk_resolve/4283bd99-63de-4efb-95b0-19d9692077d4/郭亚芳.zip(String), 3870(Long), application/zip(String), 7(Integer), 1(Integer), 1(Long), 2026-04-23T14:18:18(LocalDateTime), 5259(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -2026-04-23 14:27:36.244 [http-nio-18080-exec-7] INFO c.n.a.m.p.s.ProductRiskTaskService - [product-risk] shop assembled taskId=3620 shop=郭亚芳 rowCount=7 file=郭亚芳.zip -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND scope_hash = ?) limit 1 -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String), 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77(String) -<== Columns: id, task_id, module_type, scope_key, scope_hash, parsed_payload_json, state_json, chunk_total, received_chunk_count, completed, last_chunk_at, last_error, created_at, updated_at -<== Row: 108, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 293926381c909e24a580db36feb2f0a1a3a679316d0cd0a146c00468e2aaaf77, <>, <>, 0, 0, 0, 2026-04-23 14:27:35, null, 2026-04-23 14:20:09, 2026-04-23 14:27:35 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: DELETE FROM biz_task_scope_state WHERE id=? -==> Parameters: 108(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (task_id = ? AND module_type = ?) ORDER BY id ASC -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/4283bd99-63de-4efb-95b0-19d9692077d4/郭亚芳.zip, 3870, application/zip, 7, 1, null, 1, 2026-04-23 14:18:18 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=?, finished_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047198355411050496(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), SUCCESS(String), 1(Integer), 1(Integer), 0(Integer), [{"resultId":5259,"taskId":3620,"platform":null,"matched":true,"success":true,"error":null,"shopName":"郭亚芳","shopId":"27730548558377","companyName":null,"matchStatus":null,"matchMessage":null,"taskStatus":"SUCCESS","outputFilename":"郭亚芳.zip","downloadUrl":"https://nanri-ai-images.oss-cn-hangzhou.aliyuncs.com/result/product_risk_resolve/4283bd99-63de-4efb-95b0-19d9692077d4/%E9%83%AD%E4%BA%9A%E8%8A%B3.zip?Expires=1776929256&OSSAccessKeyId=LTAI5tNpyvzMNz9f2dHarsm8&Signature=9Uq5eOk5qkFBmrVIYXspZoTOaes%3D","scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:18:17.693690(LocalDateTime), 2026-04-23T14:27:36.611243600(LocalDateTime), 2026-04-23T14:27:36.611243600(LocalDateTime), 3620(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -2026-04-23 14:27:36.688 [http-nio-18080-exec-7] WARN c.n.a.m.p.s.ProductRiskTaskService - [product-risk] submitResult status evaluated taskId=3620 oldStatus=RUNNING newStatus=SUCCESS ok=1 fail=0 allDone=true matchedShopCount=1 skippedUnmatchedCount=0 waitingCount=0 assembledCount=1 fallbackMatchedCount=0 batchErrors=[] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] from current transaction -==> Preparing: SELECT id,task_id,module_type,scope_key,scope_hash,parsed_payload_json,state_json,chunk_total,received_chunk_count,completed,last_chunk_at,last_error,created_at,updated_at FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ?) -==> Parameters: 3620(Long), PRODUCT_RISK_RESOLVE(String) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b879b1b] -2026-04-23 14:27:36.922 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/3620/result status=200 remote=127.0.0.1 forwardedHost=127.0.0.1:18080 forwardedProto=- forwardedPort=- requestId=- userAgent=python-requests/2.32.5 costMs=1418 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd66824] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@284800231 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? ) -==> Parameters: 3620(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3620, PRODUCT_RISK_RESOLVE-2047198355411050496, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:18:18, 2026-04-23 14:27:37, 2026-04-23 14:27:37, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd66824] -2026-04-23 14:27:42.250 [http-nio-18080-exec-5] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=131 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68821a3a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@637277145 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/4283bd99-63de-4efb-95b0-19d9692077d4/郭亚芳.zip, 3870, application/zip, 7, 1, null, 1, 2026-04-23 14:18:18 -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 14 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@68821a3a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e6be282] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@679381979 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3620(Long), 3619(Long), 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Row: 3620, PRODUCT_RISK_RESOLVE-2047198355411050496, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:18:18, 2026-04-23 14:27:37, 2026-04-23 14:27:37, null -<== Total: 14 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e6be282] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52b01847] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@591306593 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id=? -==> Parameters: 3620(Long) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3620, PRODUCT_RISK_RESOLVE-2047198355411050496, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:18:18, 2026-04-23 14:27:37, 2026-04-23 14:27:37, null -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@52b01847] -2026-04-23 14:27:43.134 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=874 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@12289567] was not registered for synchronization because synchronization is not active -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61425e1a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@653534237 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_id,module_type,source_filename,source_file_url,result_filename,result_file_url,result_file_size,result_content_type,row_count,success,error_message,user_id,created_at FROM biz_file_result WHERE (module_type = ? AND user_id = ?) ORDER BY created_at DESC limit 100 -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long) -JDBC Connection [HikariProxyConnection@68070220 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: id, task_id, module_type, source_filename, source_file_url, result_filename, result_file_url, result_file_size, result_content_type, row_count, success, error_message, user_id, created_at -<== Row: 5259, 3620, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/4283bd99-63de-4efb-95b0-19d9692077d4/郭亚芳.zip, 3870, application/zip, 7, 1, null, 1, 2026-04-23 14:18:18 -<== Row: 5258, 3619, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:37 -<== Row: 5257, 3618, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-23 14:17:05 -<== Row: 5202, 3535, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:55 -<== Row: 5201, 3534, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:14:22 -<== Row: 5192, 3532, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 20:13:20 -<== Row: 5191, 3531, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 19:25:07 -<== Row: 5182, 3522, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/244e72d5-6c4c-4870-9db2-d8a4ad8451e0/魏振峰.zip, 4080, application/zip, 14, 1, null, 1, 2026-04-22 18:42:39 -<== Row: 5181, 3521, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/76dfbf50-0424-4fdf-85ed-f7f75023251e/郭亚芳.zip, 3884, application/zip, 8, 1, null, 1, 2026-04-22 18:31:12 -<== Row: 5175, 3515, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, 魏振峰.zip, result/product_risk_resolve/80da25fc-fb6b-4308-ac70-044406072047/魏振峰.zip, 3776, application/zip, 4, 1, null, 1, 2026-04-22 18:26:47 -<== Row: 5169, 3513, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:26:09 -<== Row: 5163, 3510, PRODUCT_RISK_RESOLVE, 魏振峰, 27543917795757, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:24:27 -<== Row: 5162, 3509, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, null, null, 0, null, 0, 1, 没有数据, 1, 2026-04-22 18:23:56 -<== Row: 4916, 3321, PRODUCT_RISK_RESOLVE, 郭亚芳, 27730548558377, 郭亚芳.zip, result/product_risk_resolve/1eabb3b0-f923-435e-9453-d4557651f98d/郭亚芳.zip, 26505, application/zip, 1127, 1, null, 1, 2026-04-21 17:26:53 -<== Total: 14 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@12289567] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@101eb4ac] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@399355518 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE id IN ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) -==> Parameters: 3620(Long), 3619(Long), 3618(Long), 3535(Long), 3534(Long), 3532(Long), 3531(Long), 3522(Long), 3521(Long), 3515(Long), 3513(Long), 3510(Long), 3509(Long), 3321(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61425e1a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@490ea8b2] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@986680583 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3321, PRODUCT_RISK_RESOLVE-2046641835309801472, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-21 17:26:53, 2026-04-22 03:52:00, 2026-04-22 03:52:00, null -<== Row: 3509, PRODUCT_RISK_RESOLVE-2046897782740631552, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:23:56, 2026-04-22 18:24:26, 2026-04-22 18:24:26, null -<== Row: 3510, PRODUCT_RISK_RESOLVE-2046897914852818944, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:24:27, 2026-04-22 18:25:01, 2026-04-22 18:25:01, null -<== Row: 3513, PRODUCT_RISK_RESOLVE-2046898342315311104, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:09, 2026-04-22 18:26:45, 2026-04-22 18:26:45, null -<== Row: 3515, PRODUCT_RISK_RESOLVE-2046898501350735872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:26:47, 2026-04-22 18:31:02, 2026-04-22 18:31:02, null -<== Row: 3521, PRODUCT_RISK_RESOLVE-2046899610509262848, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:31:11, 2026-04-22 18:42:15, 2026-04-22 18:42:15, null -<== Row: 3522, PRODUCT_RISK_RESOLVE-2046902493405421568, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 18:42:39, 2026-04-22 18:59:21, 2026-04-22 18:59:21, null -<== Row: 3531, PRODUCT_RISK_RESOLVE-2046913182916321280, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 19:25:07, 2026-04-22 19:25:42, 2026-04-22 19:25:42, null -<== Row: 3532, PRODUCT_RISK_RESOLVE-2046925313988587520, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:13:20, 2026-04-22 20:14:19, 2026-04-22 20:14:19, null -<== Row: 3534, PRODUCT_RISK_RESOLVE-2046925576606543872, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:22, 2026-04-22 20:14:52, 2026-04-22 20:14:52, null -<== Row: 3535, PRODUCT_RISK_RESOLVE-2046925712116117504, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-22 20:14:54, 2026-04-22 20:15:20, 2026-04-22 20:15:20, null -<== Row: 3618, PRODUCT_RISK_RESOLVE-2047198050061524992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:05, 2026-04-23 14:17:32, 2026-04-23 14:17:32, null -<== Row: 3619, PRODUCT_RISK_RESOLVE-2047198184811929600, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:17:37, 2026-04-23 14:18:08, 2026-04-23 14:18:08, null -<== Row: 3620, PRODUCT_RISK_RESOLVE-2047198355411050496, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, SUCCESS, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 14:18:18, 2026-04-23 14:27:37, 2026-04-23 14:27:37, null -<== Total: 14 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@101eb4ac] -2026-04-23 14:27:43.259 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/history status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=119 -<== Columns: total -<== Row: 14 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@490ea8b2] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7fd118b4] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1126593732 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: total -<== Row: 14 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7fd118b4] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e18f7ae] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1769687137 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1e18f7ae] -2026-04-23 14:27:43.381 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=236 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67fac52a] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1763637216 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_product_risk_shop_candidate WHERE (user_id = ?) -==> Parameters: 1(Long) -<== Columns: total -<== Row: 2 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67fac52a] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34ba8f73] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@98099035 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status IN (?,?)) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String), FAILED(String) -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -JDBC Connection [HikariProxyConnection@797175097 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -==> Preparing: INSERT INTO biz_file_task ( task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, created_by, user_id, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: PRODUCT_RISK_RESOLVE-2047200728376287232(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), user:1(String), 1(Long), 2026-04-23T14:27:43.452606800(LocalDateTime), 2026-04-23T14:27:43.452606800(LocalDateTime) -<== Columns: total -<== Row: 14 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@34ba8f73] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26e4dd50] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1178931176 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), SUCCESS(String) -<== Columns: total -<== Row: 14 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26e4dd50] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22abab0e] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@581303382 wrapping com.mysql.cj.jdbc.ConnectionImpl@356fd808] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_file_task WHERE (module_type = ? AND user_id = ? AND status = ?) -==> Parameters: PRODUCT_RISK_RESOLVE(String), 1(Long), FAILED(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22abab0e] -2026-04-23 14:27:43.540 [http-nio-18080-exec-7] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=GET uri=/api/product-risk-resolve/dashboard status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=154 -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] from current transaction -==> Preparing: INSERT INTO biz_file_result ( task_id, module_type, source_filename, source_file_url, success, user_id, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) -==> Parameters: 3628(Long), PRODUCT_RISK_RESOLVE(String), 魏振峰(String), 27543917795757(String), 0(Integer), 1(Long), 2026-04-23T14:27:43.627750700(LocalDateTime) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] from current transaction -==> Preparing: UPDATE biz_file_task SET task_no=?, module_type=?, task_mode=?, status=?, source_file_count=?, success_file_count=?, failed_file_count=?, request_json=?, result_json=?, created_by=?, user_id=?, created_at=?, updated_at=? WHERE id=? -==> Parameters: PRODUCT_RISK_RESOLVE-2047200728376287232(String), PRODUCT_RISK_RESOLVE(String), PYTHON_QUEUE(String), RUNNING(String), 1(Integer), 0(Integer), 0(Integer), {"items":[{"matched":true,"platform":"亚马逊","shopName":"魏振峰","shopId":"27543917795757","companyName":"rongchuang123","openStoreUrl":null,"matchedUserId":17543915345493,"matchStatus":"MATCHED","matchMessage":null}],"user_id":1,"schedule_time":null}(String), [{"resultId":5267,"taskId":3628,"platform":"亚马逊","matched":true,"success":false,"error":null,"shopName":"魏振峰","shopId":"27543917795757","companyName":"rongchuang123","matchStatus":"MATCHED","matchMessage":null,"taskStatus":"RUNNING","outputFilename":null,"downloadUrl":null,"scheduledAt":null}](String), user:1(String), 1(Long), 2026-04-23T14:27:43.452606800(LocalDateTime), 2026-04-23T14:27:43.452606800(LocalDateTime), 3628(Long) -<== Updates: 1 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ab6c150] -2026-04-23 14:27:43.913 [http-nio-18080-exec-6] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=507 -2026-04-23 14:27:43.942 [http-nio-18080-exec-10] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=2 -2026-04-23 14:27:49.998 [http-nio-18080-exec-1] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:27:56.062 [http-nio-18080-exec-3] INFO c.n.a.config.RequestTraceFilter - request-trace instance=DESKTOP-28DDG0J host=DESKTOP-28DDG0J method=POST uri=/api/product-risk-resolve/tasks/progress/batch status=200 remote=127.0.0.1 forwardedHost=127.0.0.1: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=42 -2026-04-23 14:28:00.048 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] scan started thread=aiimage-scheduling-3 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@274f5d6f] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@161336020 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: DELETE_BRAND(String), RUNNING(String), 2026-04-23T14:13:00.049812200(LocalDateTime) -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -Creating a new SqlSession -Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d8b913b] -<== Row: 3608, DELETE_BRAND-2047177364358283264, DELETE_BRAND, IMMEDIATE, RUNNING, 1, 1, 0, <>, <>, null, user:1, 1, 2026-04-23 12:54:53, 2026-04-23 12:54:54, null, null -JDBC Connection [HikariProxyConnection@2113380500 wrapping com.mysql.cj.jdbc.ConnectionImpl@4e3a6c83] will be managed by Spring -<== Total: 1 -==> Preparing: SELECT id,user_id,file_paths,status,task_type,result_paths,error_message,progress_current,progress_total,`desc`,strategy,created_at,updated_at FROM brand_crawl_tasks WHERE (status = ? AND updated_at < ?) -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@274f5d6f] -==> Parameters: running(String), 2026-04-23T14:13:00.146154400(LocalDateTime) -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25dbcf92] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2015513187 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRODUCT_RISK_RESOLVE(String), RUNNING(String), 2026-04-23T14:08:00.187472(LocalDateTime) -<== Total: 0 -Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d8b913b] -<== Columns: id, task_no, module_type, task_mode, status, source_file_count, success_file_count, failed_file_count, request_json, result_json, error_message, created_by, user_id, created_at, updated_at, finished_at, scheduled_at -<== Row: 3391, PRODUCT_RISK_RESOLVE-2046791818004668416, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:126, 126, 2026-04-22 03:22:52, 2026-04-23 06:27:35, null, null -<== Row: 3469, PRODUCT_RISK_RESOLVE-2046885173669666816, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:193, 193, 2026-04-22 09:33:49, 2026-04-23 06:26:59, null, null -<== Row: 3473, PRODUCT_RISK_RESOLVE-2046886738874867712, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:122, 122, 2026-04-22 09:40:03, 2026-04-23 06:27:55, null, null -<== Row: 3490, PRODUCT_RISK_RESOLVE-2046893979229233152, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:145, 145, 2026-04-22 10:08:49, 2026-04-23 06:27:47, null, null -<== Row: 3541, PRODUCT_RISK_RESOLVE-2046963185660469248, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:134, 134, 2026-04-22 14:43:49, 2026-04-23 06:27:18, null, null -<== Row: 3542, PRODUCT_RISK_RESOLVE-2046967337874628608, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:131, 131, 2026-04-22 15:00:19, 2026-04-23 06:27:28, null, null -<== Row: 3544, PRODUCT_RISK_RESOLVE-2046967734513180672, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:195, 195, 2026-04-22 15:01:53, 2026-04-23 06:27:58, null, null -<== Row: 3545, PRODUCT_RISK_RESOLVE-2046967803782111232, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:186, 186, 2026-04-22 15:02:10, 2026-04-23 06:26:55, null, null -<== Row: 3551, PRODUCT_RISK_RESOLVE-2046970409241812992, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:189, 189, 2026-04-22 15:12:31, 2026-04-23 06:27:45, null, null -<== Row: 3562, PRODUCT_RISK_RESOLVE-2046993399224475648, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:188, 188, 2026-04-22 16:43:52, 2026-04-23 06:26:46, null, null -<== Row: 3617, PRODUCT_RISK_RESOLVE-2047198026414956544, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:179, 179, 2026-04-23 06:16:59, 2026-04-23 06:27:43, null, null -<== Row: 3621, PRODUCT_RISK_RESOLVE-2047198409195528192, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:177, 177, 2026-04-23 06:18:31, 2026-04-23 06:27:52, null, null -<== Row: 3629, PRODUCT_RISK_RESOLVE-2047200779929395200, PRODUCT_RISK_RESOLVE, PYTHON_QUEUE, RUNNING, 1, 0, 0, <>, <>, null, user:125, 125, 2026-04-23 06:27:56, 2026-04-23 06:27:56, null, null -<== Total: 13 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25dbcf92] -2026-04-23 14:28:00.232 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk candidates=13 threshold=2026-04-23T14:08:00.187472 timeoutMinutes=20 initialThreshold=2026-04-23T14:08:00.187472 initialTimeoutMinutes=20 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c94e3ab] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1204296948 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3391(Long), PRODUCT_RISK_RESOLVE(String) -Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d8b913b] -Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d8b913b] -Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5d8b913b] -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c94e3ab] -2026-04-23 14:28:00.316 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3391 lastPayloadHeartbeatMillis=1776925655415 timeoutMinutes=20 updatedAt=2026-04-23T06:27:35 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4513b673] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1577163969 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3469(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4513b673] -2026-04-23 14:28:00.400 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3469 lastPayloadHeartbeatMillis=1776925619286 timeoutMinutes=20 updatedAt=2026-04-23T06:26:59 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d773287] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@898605428 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3473(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d773287] -2026-04-23 14:28:00.483 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3473 lastPayloadHeartbeatMillis=1776925680821 timeoutMinutes=20 updatedAt=2026-04-23T06:27:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76201f72] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@580384827 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3490(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76201f72] -2026-04-23 14:28:00.566 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3490 lastPayloadHeartbeatMillis=1776925666668 timeoutMinutes=20 updatedAt=2026-04-23T06:27:47 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bf43e93] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@760836368 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3541(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bf43e93] -2026-04-23 14:28:00.651 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3541 lastPayloadHeartbeatMillis=1776925638059 timeoutMinutes=20 updatedAt=2026-04-23T06:27:18 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b09e37] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2076850228 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3542(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1b09e37] -2026-04-23 14:28:00.734 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3542 lastPayloadHeartbeatMillis=1776925647970 timeoutMinutes=20 updatedAt=2026-04-23T06:27:28 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3dda01b1] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@941519131 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3544(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3dda01b1] -2026-04-23 14:28:00.820 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3544 lastPayloadHeartbeatMillis=1776925678275 timeoutMinutes=20 updatedAt=2026-04-23T06:27:58 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@670a5028] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@179311345 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3545(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@670a5028] -2026-04-23 14:28:00.905 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3545 lastPayloadHeartbeatMillis=1776925614772 timeoutMinutes=20 updatedAt=2026-04-23T06:26:55 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c1263d9] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@422374755 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3551(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2c1263d9] -2026-04-23 14:28:00.992 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3551 lastPayloadHeartbeatMillis=1776925665107 timeoutMinutes=20 updatedAt=2026-04-23T06:27:45 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b24c8cc] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@68643034 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3562(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b24c8cc] -2026-04-23 14:28:01.075 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3562 lastPayloadHeartbeatMillis=1776925606188 timeoutMinutes=20 updatedAt=2026-04-23T06:26:46 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@63af769d] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@2127605900 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3617(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@63af769d] -2026-04-23 14:28:01.160 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3617 lastPayloadHeartbeatMillis=1776925662997 timeoutMinutes=20 updatedAt=2026-04-23T06:27:43 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4dca1c77] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1439269069 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3621(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 1 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4dca1c77] -2026-04-23 14:28:01.244 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3621 lastPayloadHeartbeatMillis=1776925672046 timeoutMinutes=20 updatedAt=2026-04-23T06:27:52 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1dda6226] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@7269454 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT COUNT( * ) AS total FROM biz_task_scope_state WHERE (task_id = ? AND module_type = ? AND state_json IS NOT NULL) -==> Parameters: 3629(Long), PRODUCT_RISK_RESOLVE(String) -<== Columns: total -<== Row: 0 -<== Total: 1 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1dda6226] -2026-04-23 14:28:01.332 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk skip recent-task-heartbeat taskId=3629 lastPayloadHeartbeatMillis=1776925675759 timeoutMinutes=20 updatedAt=2026-04-23T06:27:56 -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b11137] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1236568245 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PRICE_TRACK(String), RUNNING(String), 2026-04-23T14:08:01.333937100(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b11137] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61730e15] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1858372517 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: SHOP_MATCH(String), RUNNING(String), 2026-04-23T14:08:01.377721300(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61730e15] -Creating a new SqlSession -SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455b935b] was not registered for synchronization because synchronization is not active -JDBC Connection [HikariProxyConnection@1008811587 wrapping com.mysql.cj.jdbc.ConnectionImpl@1b651fb3] will not be managed by Spring -==> Preparing: SELECT id,task_no,module_type,task_mode,status,source_file_count,success_file_count,failed_file_count,request_json,result_json,error_message,created_by,user_id,created_at,updated_at,finished_at,scheduled_at FROM biz_file_task WHERE (module_type = ? AND status = ? AND updated_at < ?) limit 200 -==> Parameters: PATROL_DELETE(String), RUNNING(String), 2026-04-23T14:08:01.420836600(LocalDateTime) -<== Total: 0 -Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@455b935b] -2026-04-23 14:28:01.466 [aiimage-scheduling-3] INFO c.n.a.m.d.s.DeleteBrandStaleTaskService - [stale-check] product-risk summary scanned=13 finalized=0 failed=0 skipped=13 elapsedMs=1418 thread=aiimage-scheduling-3 -2026-04-23 14:28:01.466 [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=1418 thread=aiimage-scheduling-3 -2026-04-23 14:28:01.466 [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=1418 thread=aiimage-scheduling-3 -2026-04-23 14:28:01.466 [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=1418 thread=aiimage-scheduling-3 - - - diff --git a/app/amazon/__pycache__/approve.cpython-312.pyc b/app/amazon/__pycache__/approve.cpython-312.pyc index 7ad524be7377c91206ad098267923847a4e7f452..859dd8ca81f1bf1dfed253f1acbccd2def5a0125 100644 GIT binary patch delta 4211 zcma)8dr(tn7XR)|Zr*_lxk*R}5Fmhnf><8n1B+NeS6OWFSu3U7*rEt{6MXeXY}egl zODpuVmDXZ$S7&L(SJPVRW2N<3t!|=G(yX&%XNr&6>1?dF(q|^}O1qp_+2zZn zym~XUmk7eMM4?1{60fx@m(zU2W@d?sPsZQ5;;L=DZZow+%X4-mueV3=274rL1Z@Q$ zvst=?7#_J~PAcpmLL#+yke-3s=w~7!K)DiszQ>rs)1qVt;w7S- zmu>)Ypc#>ZQPwFR(xH$j6{g_TZN~gjJSUtLet5-*_MY@*SL%9@A?a-b$Y~LjlWjN|EXBH(x##~BKDVRkiuUT1ukf0}SO0=Q` zAAUbAHbPYHK%F!nxt9(bqYz0<>q#(^m}arKR8HN{DLgBxM#MxF9^VyP7!}G+bm#DK z6msf^G)6h09%V--s#h5BYOPK^e5j~?^GOarODQxiji_DQ$#Iq9Ad+Xal$~2J`3` zemjen;Vc@7q8zdag%FFc?@BYl-fv~HK9)#67Cs`bQ}XLf*V7cLPZH%K1?2@Vd?lpB zL4)IuaM8~ANqo}KYowqqTcf2&lnL@?rND$-83Qjgiw_%54ppU1WWWuXE1IOKT#O!_ zCQ;%9h48Zm3G$JZD47a|p9=kxk<&UPWkW)xi{;~aR2Sun3dNj2BQa`)4PKua|GbS! zv5vfkP)nr^>5A-->n?`GlF26yF(|Z{lo`8`ZFPs|wbWX)PO=!SrP5Q%g$C^YU{ZdQ z4NTp6<@MVK-Wu5Q`oJGsZgy_E`No!;pKQJT*Oq~Ix^JJ@ajW~atgNg6y(S<2dBP%4 zz~6mP&ItDiHTgrU<_9@Y14p*s!AGp_r#~#BXdwl^y|*YPT`%Opmhdk!D9JF63|aVi z&m`$}An}hqiKV24({+Lcrhs}?^|~s-?i6b6j)117VO3*w{ral<>Q#0j62K!Mt97ib zt*Z;D?1IoBRMplmZwSbEp>~a3!0+$Np<=LiUmD{e{e+`RbR~inD8US>8}!AEjY7j3 zdu6p_WmZF@y}ruvLPO(D3Dm+rp&&LPzuwrQ@<-`gWY_iPj>-M{w3a7=bPP?X%lwcdXtvHz>oC4lIz|;9~Gw2PR0D_}Its zg##Iibthb(xqRGQ{L_IuRt~ZHwimnRwKw}BQ?Ik!c2&EoBj;^xu#`rIF?Z)+*`Zk) zovCH6KT_YKeQ-Yw7kyM(+8*&JsAjYY4;>_rZ%v;%%R-;jO*g}II=eUyrn3<_Fn(!K z&MsuWOet2)&SlQ$GO!RLAP2%-k_`=B*BQ_7Qb1|kw$+3;Hmlr!>(o=)2$xEvXP{?} zLJzBP#9#8Xk$l8Z=?O8UG-KINJ4Qj1$%l3*1nu>*2nj#T#fVB#CNiR`Cwea&KpvMu zRBXy8%89y=G6%}~5#`X4fEz9~m`F_Hl0^v^Q1epw8G4L+WnnWEYK@h`N$cUF6LIl; z{Q^-Tszb8Uy@R&^+z}Gz;IRm;K@O_5dt@z2LKtOPN3WwpRNMwY_ZmqJJq3zIks zW6`Np1sPd~c(_P&8* zn}mlTAn-8Yu{~zIrYDh#z#TodB+|zLbz_6W2^isMs&fV+p`~l=4o6i@LsPv|SdSCm z(Kknguw-<_lW@K#Mnlns;{1^;lgLIWb`miGoRAf;#@mGwBGCkcBLW8NFP<>2s6lB% z%xGL8?%-+r74o|TR|FcD??2G&k218#?#WPGM$4QVk%sp&y^$$BnFpWuW)$^jO!sC? z_mn*4nZLxB@w6Y1K+&%7#AbGvb{Beb7kf-gJWK69cKO$=J}5&5^Y&%!%MPl~jrC_0 z^vQw}WU$>sl%b4jnRx?{V&kBJj)Ja&u5?f4T#u>T(_FF8$1eJZEvIb`U|2tA^K!PX zh26EimOkO!1kb{!J)G?-w-k(}O!$U11f_Cq64>cyZC=*awV-=xZ$aNIPkFVEeJ&V{ zSmS${mm^cIv#}keu?qeqh^B~CJM2T{mU&HomEMASJV_{iW?LkYg z&^O_n)1$HYG?hUW(&*n)d)3Lr$}A6?3esE4wv@H4?O5Nj(v$v#M?dqbrZmVPjqSnx zWW>dNj~Hzd-f+G!$;TG@b>j~fdv$sKxWu-ZKR+OlnDpqr8L_7C5v81lFP=9x_iKv0 znxaQR2{0Zya^MA?%FxdQoJ=s57NIj1W$9$*OiHn)G@m(}&%okrk+LjXa!wv!mLWNp z!2lhuj`5^KNZHg30uh)(h56(GJh{qfoPi+G#0k1puE_H}d?g_{LOHoBY*6ObD z(F74jkRUzJUESACvC+gW(jtPCP&zmL#TME;4(L$VSqIy0f9uVbwsfPQ#HUVWXank+ zx(0{6%HeDf?D*cP1(qyO7`%H&g{vVZBeDH-s(~~|Ai}Y>)>-pHm7}SKG@Fo&cb#5D zW#fmZt@3=pTSph;PCT=pZbos*{gw${%Y@yX)Ppe|{Uo1eGBg5f3|aLTOm0($>ac5>m(6YV4_9UW6}F%^ z$IDKE`G(HavFx%g)6XSz$-Uf|?u08`VedRISLEXg{rXr>Lb+F8e&e@xhnewLxQV^R zUT!MPL77BbLWNqy>Se86#_sfkOZ#%q8IrED6~Sy2mlvFfl-jL|EsC~+jwu~k-C9pn z{#8Z6gZp#cQRjD4^a2Xs_-I`7L&r^cgP&*TmQSI-u;tH zRuayc+{6kKI-5G~Ng4fBioS9TeKA^DE@dvp#?PI`Tr8A<%*AO8a4tzDKwpw8%L|!H zY9B-D){H(%|n4#*p;*Vi>v^I>RDCZaYx)t5|VxvPCew9*8ebZTb0 z9(P}hrwZ`dYhyE6A{Dw|q;<6pr;tk=B>*pwTTI9XDj zc)EgO48i4e3B{CAU3?IQh~C^m;#~3|;o+aZ7v2lbrf1X4#I99AMCQK7!n0>y+R$#f|qu#N9t2+JuQJnq$JSUJWe;}kAgwS-gd zpj)vb`aC9Q2+qc-T}(B}X?D<$DY!B4TW`WLor~dEmzvYNG+ZpQl5>U~lEb5MCt%8=)~xBhY&ZE=o{x+HJ@L(a{2f z#+d!GR^$hN08v8-@Uu+4{V?Ekg0u!4240m%H!LLxK^4*T$_4paJ)HDwv(~E?)O?(v z=Gb)w2#FpxK?9{1Xn5;DYC^1_-b?H!Iaw;w>;+$-PpJTf=HP3kzaSK~27{Bs6D zb6-)=z}na2Va{=Bu5mvVi3|u&d_-TMBV2FPC@&@<3U1o1SKbSW)}1TN3a?hsx}98{ zpoO2ktdEZ8%#mOiqc<8MkDVk$a|sbPiej8cv*ku#6oCQPY67lGb5#+Gg%4&p| zd!TfJ4*Gm1yoG4%=q)^$JoCNe8F2DsD0%2yY%uO%s%gwmC$KgiYhuR}llD^&r?-{_ zMC}+sDKO})(XC#GGT|l>=5wCR$bQyl!Dp_rurO1Rg#n+aZaekYueBg7^gG=;XZ1=%~C_0KY#rJtKeg*=?0? zl_wFN4zs-fytr5#^-Pe#NeMv_7UGTs8o#XsjzoYueD8D5?_WS>wdm=jb z$i1n}dnnUs!+W0ki?G$oA4Uf69xF0EaIdxyk+XFa!1@#aRMpE6h@rE4ZosovxaH(C zP;;mNK7FVZUOQy<-#Ih|z{!V;r2M~;Rtfyq$!xA(jSb$|@nz!+LwnB+op{^I(`X}= z4lp3AaaVD5wXWMNR@r;t^A6va@4zn(>>GOH)K{ku7g~pHpZDL`b9^KuzZ9v~hxJFX zVP9K1h==5uDnmD^LtyBtQ|jLk;9VF)Y#9p-5eHK1Bmw_)ST+O1W!D>u0KzhUoEj<4D5 z;s=x)Rz8J%diWZbdqCl0c)pIWs;RB6gZW2tK`dNzBvp&;!w?V@&gC}3rX#V?I-OSW zRvbcsLToca@IDI%Pf274DAXah)9{;9Cu0WnhL;rA^>NKbefrdwW`@YA@arQEGQ`41 z-ds$Fq=eoC|M2EG$=slJD(reQUB2f0hBF(2?0g7XZdhXot-kSTUwKnQFv@;i%kEJ$ zDVlSCuMW*2iP*H8rBHEnPOK^>B(XB{!C$SJjjBOi+`e@Io#Pmc+MCkwgqW~Ge6l9U zuKk2Hg(P(Jlz!IO$EF3?w3gU5bNiM{j9B67WvfF`ge@x+N2#ZSel6RlwFb0SpP|Lk zw!Cv(Coe8sB5JKc?b47!s-6ix(V38&J+qr;H+x%_wagO}CIs1u{cKzxYY(vYAe(j_ ziRU)WbvAF>y&$9@w5EOY0#T{g*+d^Bvgs(o9(j|zxxhEkmmy}(5lwS@wevzWp-ubY zmJ7hDqqCf^XzqrTv^w$btx1H@_8mb*Px+Khz8`jZOKH2~;`B@4LP_TYF=76t)j@VK z+`KOZXyBg9naaDjVhA?jI|8U@!q+bw<~jPbGrF}i?uIDD0m%0++6dmq->>V;_xv?r ze}Q}c?u6vOV3T*;SJ16_FROTJDNSC?nihwq4;94;Xu9OcMdM}Xl!{E^N}j&VPF`h5 zL|;`I$|>S%a#8sN;u_7AH6+p3G{uTC3*BX*%aZ6WJ5x^3UD?IbM~i6DDMcn?5sg>@ zf&dfJ8f3v3Iv%lt1{$$~W(T7AF}U6`@SuSQPn*bQrN86!poBs#6L#A5@JS%| zpFQIRF!xLOYH$_~b|k`t^KtO@J2~KJcr~-*HSmFdup@y43rECr z!Pl4qrLUZ`fjro7+yKkYt6|BxX>j>@rS3&8#;e+{y8oy-^8MS+Hvz2WlW+Bt#Bq+*@iqtJYMx>sR51#;3qT7ncGH{KrMB zEK`EIg<9%QdjABePh|4@t@b`^e!!alv2{X|s!`Hd4W)at8XgxDmWwOUEnkC5d2pnH zoIchk_0_diw=ES-Q&0;*4TX(w#topqXlmm;pA1*JCBRPTN419+qNA{fEo$EsU>`yA zpdrC$={98d8-f|RXxVZozVf~w4iZvzbR2nstA}W29dPkM`FwkGgtH&Cv}2= zu^7!EDHS~ngquuqfKB!-X{l*9cX}=@?qw@O*@SIkXc{0?y2f<@rLA9OXqE+3R?(K< zqbg|64X7rec~Gu;S-w-=SkOGFIjco2M(6j+3x2o-s{A)Ey#X4Qf^a(k!%=V#5);Rt zp56}pC2gn=Oln`<$Ch-nCAiR$&fQy5RG6rJF!`UV%>63u%d>aR77e+lliF7L?QKR; zU)Vk?sG1Rx=pBvA`t*)~-qEAaXj#&ya(1hncSAB{f5#mIhz8=_?7XsQ^1bBz1*znP zxL8DA$jvS_lNYV2h<=~JoDcGBk7f}c+A}NS$-m@Gb1oW3T(#>fCzDr;NJM{>%9NVu zk8&)fEUIEDGPuUlh;z+EVcN`;Y3OSymNJI!qOi1!p%JG`gQN{)S2Xiz2Hh2hD&0ti%iU8*#(;zlP~u==bgu=BgE_rp?NNv~AX#7I_V9Ta z5`LX|{BMT0geAYKt6R?}!WVmOAQ2wzeRgGtBNveLeBk3kM3`vL8zC+wjSwQY`uky7 zXoX}UNl)-?2oZSh96vmZ<&`7EO5_Dg#HY7^A0}?Dh4AC&()BpFyx#5N!~a2I(XyUF zsBS!W{PVM~ef1kZe;KU?$j$k%xX%Q#;p2U~fgFbV)}trwiGDK}54ZJi1k3&3^dAHN E0jH6zegFUf diff --git a/app/amazon/__pycache__/del_brand.cpython-312.pyc b/app/amazon/__pycache__/del_brand.cpython-312.pyc index 2796b78318d473bdae5aee313928a2fbc87f189d..29fec4d21478644039c065ab004c55a6ee42c814 100644 GIT binary patch delta 96 zcmdn~fpNzNM&8rByj%=GPHz delta 94 zcmdn-fpPl>M&8rByj%=G@U-qprsGE5mom&OYlJ8Nlu=|9nVc^zFVCF<15v zlWYa#5>F45;i=&IV0DqrqrUa@*JSCrT-u5WsR07?Mjv|M` zuJMfte*F%aAj2z_`Y=J_Q|3?#NJ2&`d%rHYWLyt~S z;R~Vqz!}O^Eumz+0Eb#o+p;;mpvI3?>4P}~XY@%COC1`p-}scE;X-_DSTEAQ-jDeG zsIN{?bEZ%j=0XWN0%2p(KI!RJ2=u#4D`@$(#7PG4&cbHy?B~53;rDI`nJ5SE!rchR zEAo>PUF1FULW4Ew#`nImRw)%}${umjTHQP2cx3-Q2Sb4skuWN2=Y#)rA7@Qy#b>^hF;m1hOmJJHw{U>OFeWh9$jgf{k1N1RBzf_ysOw1nLna0_)>2k z)Q{*Br(4tBWxJLQJo9R)M}{S^ zlFPbAC(hNwT*LHSaUBQ}4lTsqAn%-+C`dq`7Sf`WGoA=JF7u8dsxMqhA*xHEBr#jJ zJ3`+hXhm5m#AUw}JhCY}DC$|thWd_8_XUX4-M&5kEOiyy*0tlKxYEZ z4}$zyy0Qu$eXv{I{MdheYeiy$%BW! zIeT{E<->d@h*et9n7r9m$F;Xvd6GXniRUMdY`fL}(!~DXPn>$k%mbmHCLO}=(=;@nn#CkXI`0N;@Vnb`mOH|GY)a<3o2in0`m zmOq5E%VO7&XfUSgXt&uR%Gf$v?PJ;wzP-U}v(+`UcedI2E>M8bL+B4BV+mt|Mq}H35PM)NnjKhn1ZrP&PY^o5kdf9Bxb84Q5a6E4o6XVYmG@pOm0blI2egHJ!PP|XndeLAI0GD z>KKc^?(unvq6FrIzkYMDU=)&4b_-6a$yCLQ>m-m+jWeo4Mg8gNUT&h@;?prR6mv-j znQ5EBkW@TgQ;L#t+L}1IMa*<5xN40>o+<=`^|NsAnmFxjl3Ad<^k$wk*o6_h)+kZB zNO{&UXg2!l1%LAs&)A&Zc5~xbpE&vHZLl$GrwkXDG`Y=Z&X! zp*1JLS7LbP_Yvw8KxY(yzX%0l^0nc~?HGc&H)}xo*%<~R6E8aN>^=GSl2Z6p0As-wo0_4LY;J4H7vngTsoq>6ma}Fex0pZ*fjR=809f>p zD&TLx88810GIk8Fx276Nau^G=iHhrNoed-#@gLx0*6R3AVW`{mcd1}1hukFDpbjTC zb}6Q6)@b~j##wozI@3Vr?s?ZrKG#Dth6*%lin?h^ahp;`OtZc;MH~v)7ciK4 zKqIn~-KONB&=J!ko&bEkv0wF?##4ew&02<>ZB1s>Lq*2jjF{t&m~$f{Yx|1cg8oEE zI|C%`4E?{-&T3a^m8+&h70P+zVB5EDYSQ5MRudz92GTrP#Xve3xgX^xbS!a-&od>N)Ceh@hpQewjOUCQ$N>3aW zne9oVl$xE2?TY@KfrSHULmF4m-0O;*2lw+OR73)Vd(l}DhZOr1uDC_#8ZN|~H8q~8 za>W#0Qr zln^?dfmzpbl$91{go>(+XGY=~pq(A9NmBHMbD*OZ$qthn{S|)rOo>W-X<{991ef!1 zIpSsCM#f(xa9flF7?X7Jtz+_z`mWaYdXE2h!WT=W4+wPuALA3zXV}HZpmok~`9C9c z$@!K2RjKUX$nYQW=B^{?6prjpT0Bk|UlaHfKp|A8?~=|p1jzqh_z8f{K!BN*Aw&>z zSo|&gLbt0&w92~)!ptU+PT)BL|3QGHd#~m{6Y4(+{Dr`b4U?|-?_EOu7l4KJ7K+{{ zPq$0ny?PLW#jm+}>|VS1gXDt<5$&pGEqE1V}Z?lc36zV8nk$;1m4j zmKcHM*qG;}svR zTz$_=-L0aR(#)f-#2gPrhzmAv>w2PUim3iZNPZ>VmvpeTa zuyst)X|wX;KMYkJ}C{+}n z!s|UU-r!O3u^u%a2eL*_49|hQhK~n%4cIezw7eN+h(v;Com>)&h*&^GM<&3b6-?^+ zMKfY@NyP?gcKA#5#DKvhkT&!woT-7=v(9NzZ=j=SKdTXb0Sgii6F80Qsxs+!)PcvU zN>HlIuk-1FE&W98t0+R1Qv;|eL{Wadio$Ewm|JzC>LrTTi+bL05JZ5E6}5nIClyg0 zM0HRi)oF-Wn2)CsZxq!X=rr;he8%XEXozb1HKL|79)G*luJ*@@v4T~M*DQ(yux4l&HaH@;N-bMwJxjvqVkvW-)F~Qj8lw0zOt| z#z(6a`3WbPs9!|+Y*7_a73KPk^9)%;W2YVGxs14^OwAZOlYzFX{hY{oUA$G~@aMVl z1{-gWdLvQ#@#;0^U1B_+80CValvzg$_yg!jipcRvBy>KRpx*?^NR3L*Jw?-OfM(Gw zG?Hz>1J&|a$NU8?Or%{(WaHXI1tb!7D+M1~n_*dW|73RCq9%({PcrwWx|>E+_aad* zYM}z)xa@(A@X`?eKl`$yL3ZZg{mYC+vsHwkijIuSC{ZIQ`eOx_M6)LoYA~B;rFb%> z8ghy{NSoYm1^*_wXeD{WM{CT93ZEuwT2!s1`rt5$bUD@JhAi3e`Dz!lgwMj$)hWqK zMFy6ay)bMD*a8|SYv2D1-!%%8&Y*dlHR)8ytKY zzwEWVIlXQp$h&ZF%_2FdYlI?_x%hmtrjvAZn-I)&7Lt0=!T#TqBxd=m2-dhRt6=`_ z^(p(5sgy4*8bKN*Jm^p0(|Bc<(QhG66pLv}v~*??vjx(TNS`Y*awL3NQDre98VQ{7 zd)$|0MCTB-ogAfv#}i<$UW`x&&;jaEW;=BN-4jgR!eFv;L>r_%_kKPhHrf0GAnomJ z?6#tLXJcLfFa0k8IQ}kcK@FRkqiY9 z**PfN<@e-0GqUW}-z&Us<-Nh-<25Cg1qFA2ite#6ojZOTpL1Yi z-C?}Hyb%Asyawm3cLbW&uR?gRqC_sd08$nBCv~|v#ckeP??jV|4sSEx)9v{Wju?39 zl`q~N{PHb)>y?+MPM!JF+0(_2UM-n;DscPwuV(BE8-UX*$wvO%&?`{u28PnR;KpOa6D8N;GoD!=rdQ*djZQku;Zqx* zlU0rzR^$9lOO(6c-TUU=ajrVx*+e77CYmy3-l@Uem77eOxUeiuRgM1W$R5z#G+JNY z6EZqq!>y%@i<^RpJA=DA#<|Wf0GC=4RK3{whgzBJT}f%h1GKHdi1H$0(OpXJht(Ke`xzq zRWNbII9D{mS+8;FAufHK%e(>8mB%Vi?0;c%SWOu$FIR>188^7(K~<1jGGXA3D~~Bp z6b=>*W(Bi11ud0V4OL;5GGu;pcQ2y2#IGn;n|vLQR<3eAubU3Xz-anzDV31&6~)A^ zy3VD|xo;e*8FBu0-34^M;=L8Y#Oe#}xiN%RS2s zmj&cQj|MF(Mx56Sdgz~Z5t?=JU0C@&Qu3YmA{5aF zIc2MB?DTJQ)>`55J9SwiJT5r%06%iA+9IPaE;rS#q({{>(4*SyIx96=QsUP4Qy<$^ zwZ-hmi_6rtF7~pEg~8>OsyZ_pl$Xit;@FTz4l1EI7FZ!OLujkYtzkl`Np1x*hRE!g zf(6c)hRlxXRa+1#du6oy(334?qmro zhb63hC(yz>up;3CfgyZos|DrYpKQITZ2AxyyasNbcN)$3>1~;K<3mY!bejR`a6(Kv zcBs{wxoc!6M=l*WSEXT4rww0ys3_hjDi=0lc%>E+V+xMU@bS28dy4kV0vo87OPhNG zANd{JT4KD*_=tj4RD+uBB zW9}my&Aka{H?M>I?{Bt%iRYS=|K}2k!R)RqtZdTY(p{wtedKErD*pFID->SD1c~AY z(gJE0E&$~ciTlL@Dn>US=hr^2ox3liY=4*3--2)sz(4FLSdhYRGwGeFe@ zEUkY){bzyfwE|3?dh*MGr>9>3$6L?7IrXEbr|{vax1X3A8JTIFj_CZ6Th9zQ!y@oU);T6Jvi~#wp6Jj}__&%r;Mik3|D|my9hT$H_5sz8wBbV1!%73}ZU>6Ds0t<=>DL?uAxFU{jupo=1G0fO+)$d+ zzayB~7~BbO_1)0JZqBq0*C012AM6=!8-6HgSp_{ZET=fz3DWr{N>&e44Jt^BOA2u- zCZOq%LC{%zg)14^AL7=)^X3e9DCr8fVx%m@t%PS-&ctp&Qin_nacP6whB`*<>)-QT z*m{+#52sQoMd1QUV;tBMibgt;EJYjBrl{Xh38GB=BV;n=bH#^P!*EFs%jcYor0O{|% ze}dh4KXZAto&F#(wBLqdGY#jB+e+MlB4X?W)ZM?C9b$`Q|+KQXUI~OGT>M)PCk;y3Aag z#9U5dYg3ua=_)tNUd~N-Q*6+bTPK%=SOj!PuBt0kg!D;u4=6&}Ea5!B5>6ol^ccm0 z)|gV|E@sDKliV(LELRR8jk#FDDP{=0QdQ4EvngZh^~|`Qg+VJEhQOt+R2ljxaA#i= zk`IzHoxt_NrWol^L@FK+38{rr1wTpVpCa%FNfKa^=@q&r75iHHx_Vl8;a>@#l(_Id zf%BO5rlYs8)0={}1ggA$Mko*{?0rEdzec7%#i71a=neeH!Hh+dgmIm~4S))#O!y}< z_&ovgKM>(F{O&=s{3ank$2SfJ`=uBL$#{Z*bZ&DAC7tCj2$e@bvNJ`fTLiu&FmHKe zICscN0XPkj^BXy}WL|2y4TSmufdGNz*&GPB$@t$0%wKw?m}w)ggM-}W7C7wnEqik2 z-M0GzKNM~B!@mXrr>v%?zQ&0voUuX+vGOp1Rsxp^ND=QNlyse!miJ2-PRhDEygp$$ znfWP!pAjHm4Z@oQ-Xd@g>-$qsD$eV#><>RmQ`=D!y2H3>wi*rcVM-!Kmd_9uQfG)D z-#$Z4tgQ$~#3$;veI23h?3R_&?22G|VVEMsd)~-1_~1h`glBhz2vgJ=dL11Z=wVbz zZ>GPNl)}~6aOnAhVF+?k+3WQP(s#od81||FZvX1&ts`$t1%`!oB0)b=ApAWLLK=Zl z{OO?-bO}!%YDa^(^>9Pd5D`+$d_zR;NxvbI9}o!Q>xcKDZ*lb#rMkxz=s|Rck{;pm Kz>lBEMgI*H3XxC% diff --git a/app/amazon/__pycache__/price_match.cpython-312.pyc b/app/amazon/__pycache__/price_match.cpython-312.pyc index 8fbcf0599ffde4f42d81fbe1d7dd54df1d0abf12..b3bad90cd09e40011ac40d539e473c12060d1c57 100644 GIT binary patch delta 16453 zcmbVz3wTpiw*NUvP9AO2CQaHTZPTRhhQ5J9i+~nNdA2;|B~U_73MqYgk^;pO0}eBQ zRw=XRDrk{1zB+ua6u*1F z|M{AA_SuiM*IxUvetYfRe?K8V`l>wcJ)JIwf#(;dfAc(l{pGj@wbtrtYb$m&yY{!X z6!$-={;T}BP1Do>d7fb0%x0EnHp_T+vz(Xla$do6-Ev;Zt9W&{jMwln^c~A<>08Ig z(RX||w^_mK4>6lL-T+j|n|b3QcC(5%!Izp(1ghbafW~wrI4vZo%?s?$+2!-KdFK=t z@7=q%ND`;0zO|@*cQM~qyr5*^vhuaH8#k`suU@;Mw9-*pS-D>+g`Dz`yj^GtsrP%@ z>grp0cSzCf5_a#;y8}bs9p<*MeBp+Q#nbQh?V48_;z~;brKM#~nNR`E7UlrCW9bG# zDqX#1acRx6@+INYv&%|KO7~~pp*pu$Dp0<8Jxn_yObCV53pVRj~Y~LT5Y`?_(UG8 z6u-ZGUV%eFL#~$>lDS23N>MJ%66NHK#k9+>5M>8VqD)lmVFbNT6)DSeqUAa*MP=ANC!IK|O(mw=N~(Rvh^|C+q!gdHy9$P%QG^*{C4nL{Hb6I})TFa4 zdAcZMW<=|OCz$mB*|J_dkR6i9j>NA5XSiTmOe_io(m zX}h&4U)A$$Y@eVz^N6MVg%X>;VvMdSRBW^ z$J^HA>IiA;+Xcbh;;W;z=ptjG4#z-9gE=YtP>i>IN3+LQx5L*0Wm;Q&o|bku{W3(c zt8+Dg4nx{@+VMOv4S?*d+pC3&Bl8O1LNQ9BtMj^jbyyy);r`@>yM)$ecV#mecz4ll zY0p4*Z!xI$05cJ{g4I~BC8wRvJDGR7;ABBCw>G$O^NE6?dP?7q&l=UIo>+Z6eng)=sLvkO=Sqr5a1LvyMWm40 zqB9&@a&*bDnxi!%+N?osR_~gDvY<9=SX+ttwoNrUJ^Kaq8TAX=GumL`y5P3$J=!6M zE2y=76z>?dmyFoU2JL0oWsE6xsy|BlEPXM-_2CR6MU&Y7!vLi8#Ipj=oG8k{J{(saaulG44 zQTE@^KWehG>*$gVR&V@A7sfje-hA>90N1heKMyb2Xp(PF81Fth#}VS(g3v0|POY=T zN)V=+8Uevf6iElFoQb$}w!=L@%loF-R=&rP!G8UH4+;VFA_8YQ_H!q z1wP47l8UzqJ27Dw5)Y7&-0KsZYP!ycRN)#z8Y)m-vv+4GE>bHj+zpMITJF%}$oQ(fbXldSI{(wwoL706o|bJz#SKQq!~Ic&c@bF*S5R*TpN zu!YpEw02|#yF6;SY470D6gHc}N%B&znLS9}&fTgKsxfCQ$<8aW?}MPQ3<-`DX$XBE zLk}Q1NgDIg0__ky#Ej~54=kNfGq9*yGDc0Qw^Rya%!HOP%^$VcZ*g+?i224xg_M#+ zQzk!dWha@G2UdJh!gA&>lm;&2%bc|=XZ@m4R=`=l*urjNIm?%OWE@u^l%f#il{`aC zEQIj+ax)3$S=e~;d0s}AhiQ=W8n=p%fnO~AwC)&Q=Zpgl!l;OcZl-0_QM@(33)G;R1$mw?P}`)O|xi z0*V?X{`2_RfaDb<2sed3B$N0uvd}18UQdhg6G#hby@1^7cTuQl^$8a-|0PU_2`2z* z6b8s!bMIk)*U!yMVA(7Emie350xIjBRgXMyFYpsqxPsyH%MC-sU7 zdJ7{$n#nY&)bEIKVFmjiq-NpM)rw|x?Py_9XoY^QLp6mo-raz5X)vzY(*i4pr`}DC zKs~xIA`i}tO!$5Is)3|b&9f&M?S1hm5ZW|xT;gA*WvrsiSju3K2=>@kPxxH z{`e@~lYWaZZ@n1L8?EH}9JA6N-vU;e99x{5ViM!P(~>C0gXLC6_^=FZF}pfHK7~(> zlHEX#FV5E4qG~aaN?TH#XsBYkxUKPkq!PpgaBw8DY2+V^(^(@HNU@7XsKjxKo2ozr zcLq2fY?xk}PSZ1@(>u384s;)BL?fTcXL;BL+2gV&SeEJB4K-XYNt~5^n_5kLjz2L< zFjJ(iaPzaFi%h(nDxk=pG&Rt@-T;{w;e!oL>h%7CW7d5)V`AWadU+P=rKmS|&pO;4M^t*2xwdqlO z(H=3 zF;mPs8(wMs*;Bm-jakT7iP>irQh88!b{BhaNX-5gA5vYjj5U+vHO0E9t`^PYcQq-h zY!I&S+#(zZx24iyYN)-5gxv)Bo{I$l;T42FWhh^SmSbW>Umn-IyKh!!6sXQ#r zQ^OZxFRZq+xx~5BnfuK&XySfoh5rt{nR}<+1Q;n4L^U(q^M=X1;Z=o>H*nM+TxB%m z_?=OG8ZPnw$=yQNtSIiP9RIY)I4zzUr}@xHOGS$a3xt>`I>l*XKEIS-)~$|=Z&BU2 z2&ZWLdAktouN^MTdbnsXW6a5wCKDc*3}Lp61tnE$mn~klV8i+hhhvT-qqL%^yfnj+m+5dItb?d=aMQp3 z*o|LaoGj>{3;}!%t!pc#I2`vDwe5PK!Q{(JwM z-A+2z&s1K(wAG}4{U6!ikYgJr0tyWcqaee0&ub{m ztB*}eF35CeH?r*H-CER=D}CSPh1%5dVZ|y!p$G` zI$?KA8xwJ0uR=sE7|4N5(`EZ-lRs`qC1abOl?mHO=jI2Lm{s_M=w z)rVAqy8+IZc1hdXB5AvWLqd2T$q+kQXJ0uGX zTb6-;x~Kg8l>EN5kcT;Pk4?>xQN;8!A|SqUK|JR?pTU z`;5Nk_w5TubMr?F*No1ZGdg`1_%ezzCKyF-<`;}2J@Zx!lkU8R>GytjIykqjX(V~a zz_x+-p3OtqOS)=DP03HJIKJXXwQwwOBI|U~$)cch>D8iP(4xBaTi!3-GHTBp&E7RyPyud~oa6~cZcq7wky}%4sTpf}|HO`AnYu>7 zIC3V|D9CT!MApg?SHnKpdX|J5(%5qH*M_G9^(pL?X$xXqdgjep3v##Vm|xo#8sO`l z;;cHW>|J9O2Oqz;&a0cN_(Kv+c|Xs#Jx?~oEww_*$7w8Z_}K1*@SoHe{*&e|2>)5Z zLHN(HGNd|9U6TCINhNg#`6o&Rq<#{EIX{V2x&rWF;2`;vBsnHnHFXu-CmGthncOEu zN{pGwVN3;0ovYcNt-8h~Zg;4zC1dI}2Zu4)n0hTw5*%jZTyE7yJ{#Yyaub3ObfA9FbL z<-d|gJZbUSyxOg3fD0<%;^O!mGT^br=JN4y1x2G__&jpW<4}4SUezEYipKPS&8_6q z+zLL?t!zl*?NBJ5PXHg8jCUMTY}P}OT>R#(kk10YbogaJ{$zM(y0r~)d=`{3bf}!p zkcO_9>s;R50xrnH0wfEOR3W(sh?5J+suqQ0)oVhsMQcMca=CHrZZqfz7M=E%7C6|B z_$V>bi+~~GqeM64{)EXYit51G0mp}R!{o;9G2I?W4RMRstXa86XeS>wW#)(wBlwZv zLP}TXi0dX9cnc{=_7Zz@Hv6akMa{>R@rRIy$_MhJ@8)4L=KU(kin)+EJ({j|#tMIg z5Aubto1ICHwO7mj$dHltETt3k6%uw&mdwVI+&%7@?T`hsBx%XzJ?4#c@!y4!2atGxM4Y}3LD|&C}1psqtqQE(mal z0~Hd}L(fSb@5AJchbrx8b)?p)FvKHqBf(A+dWijdDU~=z1z4CR@1*b`hENx@H$q%f z>rU|XO*Iu;DYX|MFXJ?VFZF@%+1ZE5Q{T&trEJm23CqdvzL#cS0@Z}zWEoi0dE4vj z;VuL{age;^50RKd>FhF6aL6K?EAOv9lqsJLV%U7*PYrJoc2F*GBTd(VLEZ??|R9 zZZ7cisfd1ojr7E+@YGE=>9q3e0fT;dB)3fBpci9+k3rOb!%e008~6l&0&nyiMH%>@ z*sW!-D=?9}kDAR1B9s-4=S-2!q~9PK4$LMl(QHo?<-jiq;4Gu&KS$k{D|{3w?`^^leOwd=pt`wu13n z{AP0MVe5Sc(Im>D=?XCxHfU-wNsJdQ=j>+@D!~JLYPnA#g&796Ri>#gkvgvUtbMY5 zGTaXG*|^QBhr?RzEYUz*t4(n77^4N}Pq_lmX;p%ioH?4D8n~mnT8!YsvBPFCk>ow1 zBQHHtc9+zlxzXFD4qbzZQy$=G%2>7og`F2jf7 z(MPmK^nmBUyqPTT%w&^EYo{$Ys&n~F(F$#q@fN=kwm&+*^+9Xrr_!4k9!+7b$h|V> zJNU|?2g+pmUr6PrHa*U~{$D-UNXhY(f^tZv*N|=uJO&$z z&rkgrPGdiN7PJExiK|*DR`Tq7eXVdpV{B{n`T)!#x`o3Uk9QXUkQ51GZ@>z^u~OY>O{dDC zYND;(g2lEX*@g?Fr1E?WtwutXimIGCD#p7pl9EtAA=X2Y{L~WaO$h^SwTfP=5$2PR zf0&{?28*Nj0Qtuc?@J%epLt>4Pv!+H;IMY{Q2u>zjdj$R`oz5B^LmnojCn_@$VPHF zFq)Wrr22-VuuFRl?x&=kOzT^IwP|$vU6*IUC6VMjxFnLiob6IxGg`amkD4q`EIGd9 z#NM90J)U6k>Yxpv(tX3GEq}}_JE0x5q>fnf1}%BL=04}ZmaEgR3cx{XA1k+i`>gxU&~O*qQQ(s z6H<<@I0!(237N)_10s!>@&-+Ly-9tk1ADJ(f@>Q_XDzt8DY&g3--_Ut#tDu|bbiIi z5}ViwQ>2L>o9sO*C>M0jA2Qv2xpdG}1#eJ+!91eR7}RG3KGbJTRI*HZ(L^g}xcbEGo{FCQVBylBb=e2{Vu9b^zsh4wwl5e~w~(Basmrvot22t07cuW@HOuq4cM~hM%X7H*aya;SuSm1PE`M)!+KOcPZ<9F)OS7c` zrwpB7Q!7c-A_DB|aS4b#u`v*$nBj6P`Ez*@x%!08tcBY=T3Ekj^d_)eRG~rl>qw=L zlq%{X3ppEgiAB`$inB7Jf7*PHR@C|su+k@NsyH-EywV@XtKj%6Y~sLF#YK2gRA2-% zs@ITv1ak?mrUGb0Js*SqSr8_c9)f94Of{4(wUM-D?xw}KLs$rT6744K7SIX5vWTNYM~o=?ABCFIqooVH2lzuy!-Mah-a4=OhOusc_kMJ3NB zMcsu|z~X6AOpY%qW27&jjk!@?T5_>_+RmgX$tDlr0Emqv@`++Hc^_Id(~dC!vN2PP zl84l9`Np@kMIkEv7GCeSf^PEBA)Rg!t)dE$QOr4KSY*ua*^y$A^T310q8$} zD$|-zA!5PpJqY@I0J|m*PR){`HAP|yf(}yBZB3jhCVy*m78CyI0I4%`D=#3{!{ zX0ghh{%~gF9W%>1C#EvTt_G}Z;Pp-M{sgQc1Kis<=q%Air#cFdl$Bh2CR3i!=pgrZ zrr2O4M#KjELuCMIbWs&Ne0v3{y!|^^%Wh{KAH|wZko9M9EdATlh4~Jg0N<<@@V7on zgn3gU$RC#!GL6st?y9F4(#pzz9AFbAl}Bqa5mla>_+Vm-8u-I|3gkuAeKxA@aA%bB z)BiVhPco5p{zYQaKmXY#Hg+~Hvi}K9h6^UIJm;7JHcHxG3kxu`5J)?oS$ux@(a$dY z3%H*lfPUbk1mM}&t51ARUL~^UGu0GP!Yvds{+xr9Jm0RQ+tuyl?DOSpF}d;lW9-j~ z_l5QxT*~3X1?)4Ty_XU!#JDh+RP^2(C`AEgAaS7-2<;qW&mOwj^@FkVo#20VnuUE> zgl=W&hMsyCC@iGgVjjy*?TDA*Cq;z^u-FnLVEma-!rHwaU;Qrdcr2t)+2i)Y_B8;> zbSwNKW~AOH>M)QuyY@+rrX9f0nJNKBitnh!qFY;Pw&?!$yKEQr2~6R@78hLlR^!FN zx@M>zkYWIQ`Ccm6gpwm|YApxnCfB|zA71BR8Hy}Gc&xQ?cUG$3ppy?Z3=gu-|! z8?b&2+;pkM3RN!Y-in0V(VgN=1>(Smm=DE)b5|3_o%JN{#WdZgh&%tu(W`@Lq~gVa zn0dpd`4ciOaV<+~9yj+VoDH!703C^z6Kr?piKe0C{2^1p5zWVjq^^z+4e3WJKfdiE zvZJ7P^_lp-xIxF=UAocaoSyqn7WWnnCRZF+U2_y*R9Y8=az-4p1|73Tb7qXD=k--w z&Kk`uolr69v;Py^z;Va5U5c&-yy8X?XMjS^{~2-K7qo2&ZUf-63lQhEFqSIoG4&{W zTKgLMHU_QphxLf!!a#QPuDgG53QImFbNqGRV<^?9aA4wcg;RA_e4>zE@+tb zfqM4WU%C71&cDUR>|!aPV-1T*^W)~g&Jk1f`=)9{T~NW_ykN$dD}^&xCCPr3F{`#f z_NFBX!fzHAuS}P{m6i+Pw^bPP8+H2X8M5EZEnKIO{cdj3`h3Oj3p6X!xZjtht+aA~ zFe)L>AFLe2{2@(_;dIR^Blm}CX{+M6pc+$yaoj3nfD0NiIhdqbUBU(JmCDum++aQj zAA>VA>y+H!+{%h|EH}(@@G-2>tk2_y6LQvPa>EtH_c|3H1T_~u$v#IETh!FJLEu?C5bu_iQcws-r)2$<&|7-E{5Y{P>PcEjiZt{OGX2|@C ze#gL{*z7BqfD>8R4*BXQ;VZ-#;79TCaDT?DH(8S38bgl1Y6jQYm0zXuA%2ml>wJj3~wP%T`FYr$vc;Ftp)tFs50rG z68i83MDxZB)=B2QVVxJ9Lp7NriYpk?Y=7K?ah-dl_mr)67WR`j%xvHjC?~*co4<}82ZvHTa=P{C*(?Q#XgMfK!OkuoIlh<`~XJOU?~wo z?dXvmd+O;Mul3ygB^iIZdyYf!ldrBUfyp%QSCx^;bm&*h1Jw4`V?k<^>99VC%ywWL z<^2$TPR*M;Oc~*OkOh49OR>z9Nu?I{3dYefP8Ed%UHX^VLl~NI$EgBEyg0$pvPC_T zPh|%=_-3;58CXxezb9wje1FSmPQeR}XBva0m6x-Ja+ZwFuX>~L7mZg_hv%>F$$4Sg znQ6UShBM{_w`{wXmUX)EWMi*+D6RBXN}SO&A=gh!n2;x=>L+p-OY*J!BwgHu++xyB z$dipRM^v|F^*{esFB^E@G@$S1YnJD7@6L2C&*0w6;2hb}$KP$vhFP^I6EnxKHE1LJ;%WG=?dN7BQT0IkQM8_5nNPh%d~ zpD~h73>b&xJs3G&5BbNhw*=O(+zPgbpI~TUU}iXQH8UIt@;k$!(duOra++&&^VTn= z&_t7rDJ&k%cHUBLlyT+3oLLhL1}@i2@8G%(;Q+G1l+nVH2{{eSuY^DVqgJd6M{U~? z4(!@31>hWbg2UWku^pLT(n=awTZl5b?Wd)b~DPzwh7A^|E1 z#spWd3#SF48Yx$>Eg4P;X@OB&`d1PUNnr+-Y`HqOuo|=#Qn$lhe?)TvdH~z;P~-EL zj*WL-80+to&f>trGeS0b`>I2E7}f0||9;hBgo&GpU(~}vy{3&M;hj<&wO?{?hc_f^ zg`cNYLbN}{yt~NuchcDadFY)=b{=`_o!meVM$@i)5<~Q~hGNl!_(?%39To55XA{b+ z^zKD`DZGd=6tVhHzIG&33_6`JVJgMI7coR9ECr%;o=-yQV(Fh0by)ZcW~8(9_K_7* z&xJeG?M?3a!sF!ByDJOUDcFiz4AQS!)c0`gVz%pnuNWHmud0|fHG406i=nTHhJMR? HYuWz?+4XD2 delta 12663 zcmb_?33OCdw)VYs>(-E}RE8QeRfft`nZpzyOd(+kqs&7>C~^x(2uZwE5rVe}u;^~= zm)78E1!OQdbb|zm#@0ObwKyY+Q~)IwsPt-aSp8oALGg9B_UiZVeQr(A_||*>`tMq` z@4jc)=bU}c+2`B))B`Vbe>%V!-j9uqVc=;v{Z&)Rd(Rm*XmUr-oLJW`wl%vOy>*SE zYio;JEN*Y<*x1xs=W1`Sb8T^LZ)>d^*s1v&7sFy*c)lwkY2$4v+#Y5%FDQYk1Rkhb zPyy9+s+}70XMH}o$7dnC4Ni6v=`)nE9Rr^l{!77DkxvskAZbZrIXjvBEb)GJ+W>1+ zv!rXRMUk%{nWi*yG=3scOfZs>XJW_+ixs}}l}bU;N8-9HG5pD3H&}A|O)HtUR2##3 zW95!9WF*5(7VS{|pWaO2C%j*iT?tqrcY1rb~=utujY0k-r?*_*6M<6?y5sOi4BmG7b znPOLyRk?4Z*dTp(HCwG@-c)L961X>GC)Vh>xAc5X!ocLb7L{rS6cB63>Ea>9H;RGX zCFu&bnmkdquq&YSHf?bScu$Ml-7a@~HkMt6WDXGMOl!v$x9IY^1DqR{6RtR@<=*Cn zT3)fKU0j1HDp+3bRzX~g6>(@{9g=z=P6HjE*Z_P$v1v@e;OP)yQFU@{mbMOf56)LchFA(O@qQrN6RS6g zZCl(`TVR>HOK5#Hd460yx4@|-mWr~4Q?Mw`hqxZeawJ&u1S6IsPeqMKjuK!z4j_A& z;rP6rbG}uwy!BgE0-yD5zMZ#yJB{3|$l8~tWf$QVVq?j;@ma|mU;(<-LJa(L?wAcK zLBEGzt?Se{4Fl5ne^s#4$+*h&)g?v(z4%_~3HHTQo zz#}tCc>T{HeWthva~~oXYIo^QusDrwmnaHk#oXMk2Qh0JlF>-^AwezB-a2FN7`2G) zNA+nhd{rdIJ^u!i0P9cbLt(A1iOH4kF>Ud)II zW~}$NijR@CITlhluYg@LuzX%3tNIO;XjG7Cd8UEg^QW;zwCi_QFABu*oM1()CH9a% zFDR(Fi=su^*NBo&VCk?%gO)&+@fc=lbcmgYuql=G{=}T-GjY<#`dUU|xivMmfo?+%P zEVG{>)7IyZ(@Wyhlmh4Dy?m(X$sprXLAsi>FSC*#=bOkYc?M1+X~=W4O{8dPno%q9 zf_gKo#vYaUgqD#MyPPDxK0_&JBn8>IG*hqW(}wIYOWKwdJ)B_3i}4ym%}6n!T!GsR zYemeEVgxP;vYSoB6=x(pRuiul^nJ19@2j1xfe6bg#>NS{K2^w``*cy#bazOTBwbKi z8hPDfB=bJdlJ(2YI(;}jmAIzlaS10`a@duw#U8{V`Fuoh!{&Q>aAf zeTeZHW#J`4-fhCoQG(5(;z7Zgl9~K@WlBzdDBWlAh7b%RI3-JHvRS4z3)YvzQE()D zyn_;Pe1(zm^|0Mmi6QrF6P*xAS>yngpH#y|_`dO@*{7_#C)1lXzgVv!6Cs3UQTWoUQl;C9P zx!`^@PQ6VR4$09xl}?R+Z6-)D5YI9b8b{-_+iXC#lpVBT^BYXY6trQHg#~$3h6=hH zDh8%5=gwj<=%;;s6N{q8O^e1yips;q^^+}Bg>)Nwx3aMRbN@dz zWJMc}4JH3XLwWK#E{j^n`7oE$C5x1Eh>?s^u9PR`3)6+_!#sBPBz-_{IGT{S&9t^QHA%Q-pZ=qr#x+Xm^P(g z-44!-Pl*OtJxfx;>X}Vi)~7F1g$_kg(WB}<*2#3jsq3|eR&_RjB%dL&f(5f+kql8A zTpg6GmejCW@l3LNGs({74rkI4F4QgR$1py_4nrq;G?eS%y9Z>B6g8$4Mz@g*Eg)!w zCsGr1cRgG_iOcXAz`06CLzNg7sqAiu6sbtPt>fdPg+?}WxGvZ2j@0G4Ks>05pL2wh z3}l@!TFVCq%2RwXAk>Y~3$=Z7@6u7Wd!Z~T;;fzGz+s!W0Pxt0?sh!6Wk5{IHdqo6 zy@+8gqQ=^--Z+?SYDn3cZwA`=4Z1D{FUCUpW{2W+kUIg`l z6X^Cv0pBfHv=zxIBw=7HJCt_-$h}x(&BLupOJ78eg5uM_1=OwXt%&|)KW05DYVwR&VE{WPXi%+I+5L98QNT5VS9WfaO@7a~LPB_xC7H?1q#$H;%R z7MRvy0;1}G+OxT%0o}ykkjZVU$kT19s$R@IPu^|YQTjTvcwCCbNZtk#h;0Q|vZ39z z(cJ(j9I>j)<7oiT(o;x|J!L07?eXNbr+D&A`{;xnu%kU&Gz{}K^VglsHBBrTX?L^k zf#vt^QK&w$)qY`1BdffFiYM!cts`}yt>dynQ_nFOxg+a2GItwMbScU8ZQIyUWOb*V zEh3$rN4s3f?CS;7bq#UMo8zYE)#;gc(y9~S>%G$KdYj^$ae5hioL5e+uT*}>PS1f4 ze_qW zAmd-M;+C8w%R?!R@C!d7Z{fRPNZQZ1nboYotX2rD0Qg)`3cR2?%&+DIhoEsQ(L)EH zoCj6yu0*Z?@te40&>|+qM*{IOC{=3MkjNwY7+F z4nY`-WISN$y1jn^J*?D5H(H8KZE^@o4mi=p7#(#2UxuNfCy_&L6ZTDs9FIheM1w?& zg!V~~Mb;q!sKj^-Kr%AO?;faN=M4PE0~uQORbn8`a8h)V#jK8eK#r%PhB~m`mxrJE z>hY()`SroCPoEb50SRIQ>G}23asW;sm5)@V@5fX+Fg0?KSO89;xSJe$B&CW*1aM7= z^e|Y395viv`(WN$+904S$HlOVG|DDN-eTd?X@rQ-Umi(kHxcWjc{(Zt|O#8MFro{mOTVq~0M;+W4s!FO^ zs?V?%8?pDH2Q`Df$#-@bGQ<;Hk6B6CV@H)S9;-xpt1MQHqy=Q8J;Dhwk%PTcM`j#y zsP&VerdLf|_oR_ti<*!_5EHJ|Dt!h(2){d&mm^m;NHHKHPBPr#eCvF1LcA}YBpkL{ z;-wf#+m{f6QNB1SZs$1K16`uTL3Jba0AdPOL9~&8Ekpqb_MBrKFP*C5>e4OF0=-F?2{GoktxhckOJe5nRwTkYOV4A2p~! zWSlsG_Rg4rT95X%q&Tvx2OVOaE>j*X#8|S((8G4}$a* zx8CD338{jvMdvfqX0&NE?qK&Ok?W^S$|Fk9@UF)l;9bmi3;P=WifUL*Waa9_n+=oCrhqV4t1iI7a&k7zx$8!JAxV=%>S#F z1_z9aU`K1R?VG_qK4D&qT#Jf_~s#dpuRVm1@p7**c656Bv+5+n{}{37ld)A zYz-F^+Y{AR0Vc%BiKS3LEJH#~UkcgwM4=5W(^5F`)lHrT0V3t11q#d*t>on=ij8RY zvHTzuk}cv(#PDRwjATgs9%uT-p`%~C+WXZj{?$s?#Fl)(JSEJ8ae6Y(Lcz)fQF3luE2O6-g|T z(MV9Epz*ejRu;sF?^%Gm#aK_jx854#wCJYvx5ie!b_RJY}R9taX4mm0Z=bcTwAz>SfBnW0hPjWOu7J)Z6@SmLN!4|V zkp$@Ih+Um9i~WN&i`LE`vgIGQ_B#jbU`V2W@ml}J&3;?{N4A#hD7R`S-O3|jA;HB z=~Y>C$1v|Gl4qAH-bqy;pI%a{XWlhb&SjXhrP^98e|CJ8s#eLrH$?^6 z=af7oozrr2$8<60^xE3V+&Qzoc06}(G>_Tic}$rM+06Tlc5XTMzScgshu zK+nBDu5#Wee+g5MIefC=0r*kA`-1+5MnSs z2fU765a^GnBLN!8@bEJS;m+c*XVL-H=*U~oY>f-wclctZSkXeR_gOik6hnlQ&J+_J zff*1*TxeV@9#;lQPmZ4~&Pj@hh9lIXWTaTnc({|mt|ZguQ;zUtQNK+E*aq+ljMd4e zlHSu6va&DM8a0yoY#axOW}6)}l=<2mo*e3fBm0Op7cfVzlG(`k67Q~tdhq(F5|ZLF zZdU+NopPpShI;8s3`V>2!pck}^G@Zd9kj>UWc#V&VE2B1Dyc|L&GAN+4oQOXcMoZHBvVxj? z_IWD@nj|It4mJ)OCQbc%6TMbhBm)34s-!+#GD&w2 zKSKbjAZr40U8xup=YS2esnN`tO>T^#xI2 z+?(?Ty2!p=w%hb*L_OvicNhT;#{1wMfuK>Xz8fBXu+@t4|4FM+5~Am5L6ia)z2HcQ zzH|I%rQLN#6y1Yzmj;f$(8B7H&=OyP!NLu{`NfQ42Yw^$6SI-a0n%ZE&u@P5tFKQ# za^rzt-Prrmmyh;;bL@BD9C?CldeIT1gCYy)9{|YnFW#r3ZnK+|yfhxXu#GQ0$Q~g7 z`BFzJ+W8Zl=s?L7YEgWOz!h-ozQJW(Mr6%MrUU6nhJrVq+VfS<&u=_??8^uK^~NJV zzd?50cy;%U!NDM2%?Rapf4R5EX^nuorq&H@Q5Y3>oJfJ{e&l9i8xg-9ePnRPAv7lY z;J8V}As~UoC0m=kjhi4$Q%%ugliMR>SqxB!-AIlhnS+J7Ev{{H*sK}^I+JDKN)abL z>>}X{>S^D8>;X=%j7FucF8EiE28YqG1sbK0)!?DM2|N8`u;1&j{W`+FY@9&@xUr&p zgXs2bYM}o?3TUBI4Wg@cqdUMh1!AdxF(3X{umI(&UF{9@PZqyHA#mTpc#;A1rXlEM zYsjvb?Xfk0>^)6jjo@!f$)xY)L1o2d)A)f+ul$7ttedMH_k}IxK-J;K-l9wP(o43o zy>qUalMhVz*qqbDUNc&Hq)W!^-g_?^^M|v``V)>V>|ZdHUEMQ(*j{kF{9xPh)*<`k zeY37-mtj&?4{!xnvL_B@PaH0&7|to`?*tf^Q~93^my@_}UQf+|T!4SJbQ$(`Md99` zhP@5`%ys_tn=jj10QO!FLdA~WrM)wcmk#C*+WcwLFPo|Xwg<%yPpv+z>z##wckPgE z5`s+p@E1?HWSe@Xe8^S4ah2OkgazBlB2BZ~XP$aAiUX4l zlpK%sCye_@Q}NeZ9UKL;ta%AL@Nd6=neE!Z1`}w@GUBgzl^d*jMb!_;cG{V|E4JE; zwpv7^(7PXRshIdAK*ZW{SM{mG`uK-tKQP;GEq}q$?;6PMxB1Nz2WMT@*MxG+&Yo3Q z%+4XR^OCvn_=+p~u^07Y5ejR^{osMKzl(Xjc+8?viZ`;xEz~I9v{`_Ev$S;KWW`(d zJmB9}W6Hal%*AnvcPAAu%~6~)R2Qw7#GJ3RtWYaIOi%)UL8Dzbk-v~&UpSV(P^y9o z7sm3KGLb`mvUX7^?^oFu74ZIS%=H)Wm{JP4T?+pw?P5LeudGrnR`VCtJbYY?(=N^8 z0kcn7n#NyF%0sOyYVC>%>MQZ~6=T#_N>tF{D`R*}nZT_u!^b4;DkC?{S8=Nh+$RPeJ_a6s zeF6u5{s(Uz*3sZ3byWr8dApp=CQrXz5r+}MfO?bL1Lh(N4CzI$PRYf>@8~G#Wt-&shA#5VE+Ayz*`;JA(|r zo2B@I8~FRXpRze&iy~G*xyCT$f$}&Y8cb{%_{V!+u_WUejb1Puj@igIv4Tp7Bd!mu zvGEkUB~ZMcNPhM~F_A1fl5*Z^Heoa`h{uBf1pslv`ApVEbm#NbNpet(lw0%T0rY7F z_}2~yP8HJn?Bw3_nOr)Y<~K7;iEvGX^jt|i}!h4sWtS7#Mxp*)@APPe%aJ?5k2$y0WxMmtgbU_xNhhGlW zsbtJR{(UHK;u=h?LxRwACWNJM)r)H}r3$$Q;5sloA03dIm;noF-o@D}L>1d}$gzv? zPvDDc^4djfXm4D*IJb))&ObGCp9i(x*^0($eDj)BV0<$#M6JfIVxI&!7ezGJ6gOkN;plQCV#tharAY2 z_T$Y5n~z&B*~@QQ^+wYOXDCP<;o?){N3s}O^36O`tYL(+nDir@%^0&+eRI@6-bcsT zuD8;wi|14*&Ke4UzE`2G9nGI(oV6wVxe^|DaUzVs$%=(IG8UA+V8PM_&cr+K0q5f& zs9L6k)j}1Si5V0T{U6MD6p0Un>j*M_0b)rsZ+K?y2q$x^>%Wt^k#!2@Ubch1$*ooJC6f6vko2O@)M?Qru+bBEJ1Z^OA>R&9D$WOu z1vDM-w`hcTB3|au>%wnNJ@jSw=^F$6;3TvV)ztobBECEzzimOjZ)i?x_Mm%Q*v z`BZv>aGp+2K+y)jrZyST{u)cyAwe4((AS7f9uNFMU=ajcMOc1tZ-!(&$qrPp>10D7 zuWL6Z&{>m^qxVg?4+837j8u-;&_zM-p+G_KKUU9HM4~bZrigY0c5WpSitOnQ?L~>l zkQ_up_ux9@=+;H^E{+~TiV#{x&ykI{6Vu9(lmZE8CT(dGI$GRQ#QRC*)rCc?73_qY pa7WBexV2rmPRY(v.value.slice(0,8)),I=T(()=>d.value.find(a=>a.id===c.value)||null);async function P(a){const e=k();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const l of a){const p=typeof l=="string"?l:l.absolutePath,V=typeof l=="string"?void 0:l.relativePath,y=await e.upload_file_to_java(p,V);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${p}`);t.push(y.data)}return t}async function B(a){const e=await J();d.value=e||[];const t=d.value.find(p=>p.id===c.value);if(t){c.value=t.id;return}const l=d.value.find(p=>p.isDefault);if(l){c.value=l.id;return}c.value=d.value[0]?.id||""}async function N(a,e){v.value=a,g.value="",f.value=await P(a),i.success(e)}async function $(){const a=k();if(!a?.select_brand_xlsx_files){i.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await a.select_brand_xlsx_files();if(!e?.length)return;await N(e,`已选择 ${e.length} 个待转换文件`)}catch(e){i.error(e instanceof Error?e.message:"选择失败")}}async function D(){const a=k();if(!a?.select_brand_folder){i.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await a.select_brand_folder();if(!e)return;g.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await Y(e);if(t.success&&t.items?.length){v.value=t.items.map(l=>l.relativePath),f.value=await P(t.items),i.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}i.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){i.error(e instanceof Error?e.message:"选择失败")}}async function R(){if(!f.value.length){i.warning("请先选择待转换 Excel 文件或文件夹");return}if(!c.value){i.warning("请先选择模板");return}try{m.value=!0;const a=await L({files:f.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),templateId:c.value,archiveName:f.value.some(e=>!!e.relativePath)&&g.value?g.value:void 0});h.value=a,b.value=a.items||[],await x(),i.success("格式转换完成")}catch(a){i.error(a instanceof Error?a.message:"格式转换失败")}finally{m.value=!1}}async function x(){try{const a=await O();b.value=a.items||[],h.value={total:a.items?.length||0,successCount:a.items?.filter(e=>e.success).length||0,failedCount:a.items?.filter(e=>!e.success).length||0,items:a.items||[]}}catch{}}async function S(a){try{await G(a),await x(),i.success("已删除")}catch(e){i.error(e instanceof Error?e.message:"删除失败")}}async function U(a){const e=k();if(!a.downloadUrl){i.warning("当前结果没有下载地址");return}const t=a.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.txt`;if(e?.save_file_from_url_new){const l=await e.save_file_from_url_new(a.downloadUrl,t);l.success?i.success(`已保存:${l.path||t}`):l.error&&l.error!=="用户取消"&&i.error(l.error);return}}return H(()=>{B().catch(()=>{}),x().catch(()=>{})}),(a,e)=>(n(),o("div",Z,[z(K,{active:"convert"}),s("div",ee,[s("aside",se,[e[5]||(e[5]=s("div",{class:"section-title"},"选择文件",-1)),s("div",te,[e[1]||(e[1]=s("div",{class:"hint"},"选择需要转换的 Excel 文件或文件夹,将按所选模板生成 txt 文件。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:$},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:D},"选择文件夹")]),s("div",ae,[v.value.length?(n(),o(w,{key:0},[(n(!0),o(w,null,F(C.value,t=>(n(),o("span",{key:t},r(t),1))),128)),v.value.length>C.value.length?(n(),o("span",le," 还有 "+r(v.value.length-C.value.length)+" 个文件未展开显示 ",1)):_("",!0)],64)):(n(),o("span",ne,"暂未选择待转换文件"))])]),e[6]||(e[6]=s("div",{class:"section-title"},"模板选择",-1)),s("div",oe,[(n(!0),o(w,null,F(d.value,t=>(n(),o("label",{key:t.id,class:E(["radio-item",{active:c.value===t.id}])},[M(s("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>c.value=l),type:"radio",value:t.id,name:"convert-template"},null,8,ie),[[j,c.value]]),s("div",re,[s("div",null,[s("span",ce,[q(r(t.templateName)+" ",1),t.isDefault?(n(),o("span",ue,"默认")):t.builtIn?(n(),o("span",de,"内置")):(n(),o("span",ve,"自定义"))]),s("div",pe,"输出文件:"+r(t.outputFilename),1)])])],2))),128)),d.value.length?_("",!0):(n(),o("div",_e,"暂无可用模板"))]),e[7]||(e[7]=s("div",{class:"section-title"},"转换说明",-1)),s("div",fe,[s("label",me,[e[3]||(e[3]=s("input",{type:"checkbox",checked:"",disabled:""},null,-1)),s("div",null,[e[2]||(e[2]=s("span",{class:"label"},"按当前模板输出",-1)),s("div",he,"当前模板:"+r(I.value?.templateName||"未加载模板"),1)])]),e[4]||(e[4]=s("label",{class:"radio-item active"},[s("input",{type:"checkbox",checked:"",disabled:""}),s("div",null,[s("span",{class:"label"},"SKU 使用雪花ID-序号"),s("div",{class:"desc"},"例如 1773816146796-1")])],-1))]),s("div",ye,[s("button",{type:"button",class:"btn-run",disabled:m.value,onClick:R},r(m.value?"转换中...":"开始转换"),9,ge),s("span",be,r(m.value?"正在生成并上传结果,请稍候…":"选择文件后即可执行格式转换,结果会显示在右侧供下载"),1)])]),s("section",we,[e[12]||(e[12]=s("div",{class:"panel-header"},"转换结果",-1)),s("div",ke,[s("div",Ce,[s("div",xe,[e[8]||(e[8]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,r(h.value.total),1)]),s("div",Fe,[e[9]||(e[9]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,r(h.value.successCount),1)]),s("div",Pe,[e[10]||(e[10]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,r(h.value.failedCount),1)])]),s("div",Ee,[e[11]||(e[11]=s("div",{class:"result-list-header"},[s("span",null,"生成的结果压缩包列表")],-1)),b.value.length===0?(n(),o("div",Te," 暂无转换结果,完成格式转换后会在这里展示结果压缩包 ")):(n(),o("ul",Ie,[(n(!0),o(w,null,F(b.value,t=>(n(),o("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",Be,[s("span",{class:"id",title:t.sourceFilename},r(t.sourceFilename||"-"),9,Ne),t.outputFilename?(n(),o("div",$e,"压缩包文件:"+r(t.outputFilename),1)):_("",!0),t.error?(n(),o("div",De,"错误信息:"+r(t.error),1)):_("",!0)]),s("div",Re,[s("span",{class:E(["status",t.success?"success":"failed"])},r(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(n(),o("button",{key:0,type:"button",class:"download",onClick:l=>U(t)}," 下载压缩包 ",8,Se)):_("",!0),t.resultId?(n(),o("button",{key:1,type:"button",class:"btn-delete",onClick:l=>S(t.resultId)}," 删除 ",8,Ue)):_("",!0)])]))),128))]))])])])])]))}}),Ae=Q(Ve,[["__scopeId","data-v-7c280b44"]]);W(Ae).use(X).mount("#app"); +import{d as A,o as H,a as n,c as o,b as z,B as K,e as s,F as w,r as F,t as r,f as _,n as E,w as M,s as j,u as q,g as u,h as T,x as J,i as k,E as i,y as L,z as O,A as G,_ as Q,p as W,q as X}from"./pywebview-CeWJDVeG.js";import{e as Y}from"./brand-UU-ckLq6.js";const Z={class:"page-shell module-page"},ee={class:"main-content"},se={class:"left-panel"},te={class:"upload-zone"},ae={class:"selected-files clean-placeholder"},le={key:0,class:"more-line"},ne={key:1},oe={class:"option-group"},ie=["value"],re={class:"template-item-content"},ce={class:"label"},ue={key:0,class:"template-tag"},de={key:1,class:"template-tag muted"},ve={key:2,class:"template-tag custom"},pe={class:"desc"},_e={key:0,class:"empty-option"},fe={class:"option-group"},me={class:"radio-item active"},he={class:"desc"},ye={class:"run-row"},ge=["disabled"],be={class:"loading-msg"},we={class:"right-panel"},ke={class:"task-list-wrap"},Ce={class:"clean-result-summary"},xe={class:"summary-card"},Fe={class:"summary-card"},Pe={class:"summary-card"},Ee={class:"result-list-wrap"},Te={key:0,class:"empty-tasks"},Ie={key:1,class:"task-list clean-result-list"},Be={class:"left"},Ne=["title"],$e={key:0,class:"files"},De={key:1,class:"files"},Re={class:"task-right"},Se=["onClick"],Ue=["onClick"],Ve=A({__name:"BrandConvertTab",setup(He){const v=u([]),g=u(""),f=u([]),m=u(!1),b=u([]),h=u({total:0,successCount:0,failedCount:0,items:[]}),d=u([]),c=u(""),C=T(()=>v.value.slice(0,8)),I=T(()=>d.value.find(a=>a.id===c.value)||null);async function P(a){const e=k();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const l of a){const p=typeof l=="string"?l:l.absolutePath,V=typeof l=="string"?void 0:l.relativePath,y=await e.upload_file_to_java(p,V);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${p}`);t.push(y.data)}return t}async function B(a){const e=await J();d.value=e||[];const t=d.value.find(p=>p.id===c.value);if(t){c.value=t.id;return}const l=d.value.find(p=>p.isDefault);if(l){c.value=l.id;return}c.value=d.value[0]?.id||""}async function N(a,e){v.value=a,g.value="",f.value=await P(a),i.success(e)}async function $(){const a=k();if(!a?.select_brand_xlsx_files){i.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await a.select_brand_xlsx_files();if(!e?.length)return;await N(e,`已选择 ${e.length} 个待转换文件`)}catch(e){i.error(e instanceof Error?e.message:"选择失败")}}async function D(){const a=k();if(!a?.select_brand_folder){i.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await a.select_brand_folder();if(!e)return;g.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await Y(e);if(t.success&&t.items?.length){v.value=t.items.map(l=>l.relativePath),f.value=await P(t.items),i.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}i.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){i.error(e instanceof Error?e.message:"选择失败")}}async function R(){if(!f.value.length){i.warning("请先选择待转换 Excel 文件或文件夹");return}if(!c.value){i.warning("请先选择模板");return}try{m.value=!0;const a=await L({files:f.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),templateId:c.value,archiveName:f.value.some(e=>!!e.relativePath)&&g.value?g.value:void 0});h.value=a,b.value=a.items||[],await x(),i.success("格式转换完成")}catch(a){i.error(a instanceof Error?a.message:"格式转换失败")}finally{m.value=!1}}async function x(){try{const a=await O();b.value=a.items||[],h.value={total:a.items?.length||0,successCount:a.items?.filter(e=>e.success).length||0,failedCount:a.items?.filter(e=>!e.success).length||0,items:a.items||[]}}catch{}}async function S(a){try{await G(a),await x(),i.success("已删除")}catch(e){i.error(e instanceof Error?e.message:"删除失败")}}async function U(a){const e=k();if(!a.downloadUrl){i.warning("当前结果没有下载地址");return}const t=a.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.txt`;if(e?.save_file_from_url_new){const l=await e.save_file_from_url_new(a.downloadUrl,t);l.success?i.success(`已保存:${l.path||t}`):l.error&&l.error!=="用户取消"&&i.error(l.error);return}}return H(()=>{B().catch(()=>{}),x().catch(()=>{})}),(a,e)=>(n(),o("div",Z,[z(K,{active:"convert"}),s("div",ee,[s("aside",se,[e[5]||(e[5]=s("div",{class:"section-title"},"选择文件",-1)),s("div",te,[e[1]||(e[1]=s("div",{class:"hint"},"选择需要转换的 Excel 文件或文件夹,将按所选模板生成 txt 文件。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:$},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:D},"选择文件夹")]),s("div",ae,[v.value.length?(n(),o(w,{key:0},[(n(!0),o(w,null,F(C.value,t=>(n(),o("span",{key:t},r(t),1))),128)),v.value.length>C.value.length?(n(),o("span",le," 还有 "+r(v.value.length-C.value.length)+" 个文件未展开显示 ",1)):_("",!0)],64)):(n(),o("span",ne,"暂未选择待转换文件"))])]),e[6]||(e[6]=s("div",{class:"section-title"},"模板选择",-1)),s("div",oe,[(n(!0),o(w,null,F(d.value,t=>(n(),o("label",{key:t.id,class:E(["radio-item",{active:c.value===t.id}])},[M(s("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>c.value=l),type:"radio",value:t.id,name:"convert-template"},null,8,ie),[[j,c.value]]),s("div",re,[s("div",null,[s("span",ce,[q(r(t.templateName)+" ",1),t.isDefault?(n(),o("span",ue,"默认")):t.builtIn?(n(),o("span",de,"内置")):(n(),o("span",ve,"自定义"))]),s("div",pe,"输出文件:"+r(t.outputFilename),1)])])],2))),128)),d.value.length?_("",!0):(n(),o("div",_e,"暂无可用模板"))]),e[7]||(e[7]=s("div",{class:"section-title"},"转换说明",-1)),s("div",fe,[s("label",me,[e[3]||(e[3]=s("input",{type:"checkbox",checked:"",disabled:""},null,-1)),s("div",null,[e[2]||(e[2]=s("span",{class:"label"},"按当前模板输出",-1)),s("div",he,"当前模板:"+r(I.value?.templateName||"未加载模板"),1)])]),e[4]||(e[4]=s("label",{class:"radio-item active"},[s("input",{type:"checkbox",checked:"",disabled:""}),s("div",null,[s("span",{class:"label"},"SKU 使用雪花ID-序号"),s("div",{class:"desc"},"例如 1773816146796-1")])],-1))]),s("div",ye,[s("button",{type:"button",class:"btn-run",disabled:m.value,onClick:R},r(m.value?"转换中...":"开始转换"),9,ge),s("span",be,r(m.value?"正在生成并上传结果,请稍候…":"选择文件后即可执行格式转换,结果会显示在右侧供下载"),1)])]),s("section",we,[e[12]||(e[12]=s("div",{class:"panel-header"},"转换结果",-1)),s("div",ke,[s("div",Ce,[s("div",xe,[e[8]||(e[8]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,r(h.value.total),1)]),s("div",Fe,[e[9]||(e[9]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,r(h.value.successCount),1)]),s("div",Pe,[e[10]||(e[10]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,r(h.value.failedCount),1)])]),s("div",Ee,[e[11]||(e[11]=s("div",{class:"result-list-header"},[s("span",null,"生成的结果压缩包列表")],-1)),b.value.length===0?(n(),o("div",Te," 暂无转换结果,完成格式转换后会在这里展示结果压缩包 ")):(n(),o("ul",Ie,[(n(!0),o(w,null,F(b.value,t=>(n(),o("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",Be,[s("span",{class:"id",title:t.sourceFilename},r(t.sourceFilename||"-"),9,Ne),t.outputFilename?(n(),o("div",$e,"压缩包文件:"+r(t.outputFilename),1)):_("",!0),t.error?(n(),o("div",De,"错误信息:"+r(t.error),1)):_("",!0)]),s("div",Re,[s("span",{class:E(["status",t.success?"success":"failed"])},r(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(n(),o("button",{key:0,type:"button",class:"download",onClick:l=>U(t)}," 下载压缩包 ",8,Se)):_("",!0),t.resultId?(n(),o("button",{key:1,type:"button",class:"btn-delete",onClick:l=>S(t.resultId)}," 删除 ",8,Ue)):_("",!0)])]))),128))]))])])])])]))}}),Ae=Q(Ve,[["__scopeId","data-v-7c280b44"]]);W(Ae).use(X).mount("#app"); diff --git a/app/assets/dedupe.js b/app/assets/dedupe.js index 8819953..6ba331f 100644 --- a/app/assets/dedupe.js +++ b/app/assets/dedupe.js @@ -1 +1 @@ -import{d as z,o as W,a as n,c as o,b as q,B as J,e as s,F as C,r as F,t as i,f as b,n as I,w as P,v as B,g as u,h as L,i as x,E as r,j as O,k as G,l as Q,m as X,_ as Y,p as Z,q as ee}from"./pywebview-9YBa--7x.js";import{e as se}from"./brand-CRmRvyGD.js";const te={class:"page-shell module-page"},le={class:"main-content"},ae={class:"left-panel"},ne={class:"upload-zone"},oe={class:"selected-files clean-placeholder"},re={key:0,class:"more-line"},ie={key:1},ue={class:"option-group column-option-group"},ce={class:"column-toolbar"},de={class:"column-count"},ve={key:0,class:"column-grid"},pe=["value"],fe={key:1,class:"empty-column-state"},_e={class:"option-group"},me={class:"run-row"},he=["disabled"],ge={class:"loading-msg"},ye={class:"right-panel"},be={class:"task-list-wrap"},we={class:"clean-result-summary"},ke={class:"summary-card"},Ce={class:"summary-card"},Ie={class:"summary-card"},xe={class:"result-list-wrap"},Ee={key:0,class:"empty-tasks"},De={key:1,class:"task-list clean-result-list"},Fe={class:"left"},Pe=["title"],Be={key:0,class:"files"},Se={key:1,class:"files"},Ue={class:"task-right"},Ne=["onClick"],$e=["onClick"],Ae=z({__name:"BrandDedupeTab",setup(Ke){const p=u([]),c=u([]),f=u([]),w=u(""),d=u([]),S=u(!1),_=u(!0),m=u(!0),h=u(!1),k=u([]),g=u({total:0,successCount:0,failedCount:0,items:[]}),E=L(()=>f.value.slice(0,8));function $(){c.value=[...p.value]}function A(){c.value=[]}async function U(l){const e=x();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const a of l){const v=typeof a=="string"?a:a.absolutePath,j=typeof a=="string"?void 0:a.relativePath,y=await e.upload_file_to_java(v,j);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${v}`);t.push(y.data)}return t}async function N(l){const e=await X(l);if(!e.headers?.length){r.error("读取 Excel 表头失败"),p.value=[],c.value=[];return}const t=["id","ASIN","国家","价格","卖家名称"],a=[...t.filter(v=>e.headers?.includes(v)),...(e.headers||[]).filter(v=>!t.includes(v))];p.value=a,c.value=t.filter(v=>a.includes(v))}async function H(l,e){f.value=l,w.value="",d.value=await U(l),d.value.length>0&&await N(d.value[0].fileKey),r.success(e)}async function K(){const l=x();if(!l?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await l.select_brand_xlsx_files();if(!e?.length)return;await H(e,`已选择 ${e.length} 个待清洗文件`)}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function R(){const l=x();if(!l?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await l.select_brand_folder();if(!e)return;w.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await se(e);if(t.success&&t.items?.length){f.value=t.items.map(a=>a.relativePath),d.value=await U(t.items),d.value.length>0&&await N(d.value[0].fileKey),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function V(){if(!d.value.length){r.warning("请先选择待清洗 Excel 文件或文件夹");return}if(!c.value.length){r.warning("请至少选择一列保留列");return}if(!S.value&&!_.value&&!m.value){r.warning("请至少选择一种 ID 保留规则");return}try{h.value=!0;const l=await O({files:d.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),selectedColumns:c.value,keepIntegerIds:S.value,keepUnderscoreIds:_.value,keepIntegerMainIdsWhenNoSubIds:m.value,archiveName:d.value.some(e=>!!e.relativePath)&&w.value?w.value:void 0});g.value=l,k.value=l.items||[],await D(),r.success("数据去重完成")}catch(l){r.error(l instanceof Error?l.message:"去重失败")}finally{h.value=!1}}async function D(){try{const l=await G();k.value=l.items||[],g.value={total:l.items?.length||0,successCount:l.items?.filter(e=>e.success).length||0,failedCount:l.items?.filter(e=>!e.success).length||0,items:l.items||[]}}catch{}}async function M(l){try{await Q(l),await D(),r.success("已删除")}catch(e){r.error(e instanceof Error?e.message:"删除失败")}}async function T(l){const e=x();if(!l.downloadUrl){r.warning("当前结果没有下载地址");return}const t=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}_cleaned.xlsx`;if(e?.save_file_from_url_new){const a=await e.save_file_from_url_new(l.downloadUrl,t);a.success?r.success(`已保存:${a.path||t}`):a.error&&a.error!=="用户取消"&&r.error(a.error);return}}return W(()=>{D().catch(()=>{})}),(l,e)=>(n(),o("div",te,[q(J,{active:"dedupe"}),s("div",le,[s("aside",ae,[e[7]||(e[7]=s("div",{class:"section-title"},"选择文件",-1)),s("div",ne,[e[3]||(e[3]=s("div",{class:"hint"},"选择需要清洗的 Excel 文件或文件夹,后续将按所选规则输出处理结果。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:K},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:R},"选择文件夹")]),s("div",oe,[f.value.length?(n(),o(C,{key:0},[(n(!0),o(C,null,F(E.value,t=>(n(),o("span",{key:t},i(t),1))),128)),f.value.length>E.value.length?(n(),o("span",re," 还有 "+i(f.value.length-E.value.length)+" 个文件未展开显示 ",1)):b("",!0)],64)):(n(),o("span",ie,"暂未选择待清洗文件"))])]),e[8]||(e[8]=s("div",{class:"section-title"},"保留列设置",-1)),s("div",ue,[s("div",ce,[s("span",de,"已选择 "+i(c.value.length)+" / "+i(p.value.length)+" 列",1),s("div",{class:"column-actions"},[s("button",{type:"button",class:"opt-btn small",onClick:$},"全选"),s("button",{type:"button",class:"opt-btn small",onClick:A},"清空")])]),p.value.length?(n(),o("div",ve,[(n(!0),o(C,null,F(p.value,t=>(n(),o("label",{key:t,class:I(["column-item",{active:c.value.includes(t)}])},[P(s("input",{"onUpdate:modelValue":e[0]||(e[0]=a=>c.value=a),type:"checkbox",value:t},null,8,pe),[[B,c.value]]),s("span",null,i(t),1)],2))),128))])):(n(),o("div",fe,"请选择 Excel 文件后读取表头并填充可保留列")),e[4]||(e[4]=s("div",{class:"desc"},"读取首个 Excel 文件的第一行作为表头,用于动态选择需要保留的列。",-1))]),e[9]||(e[9]=s("div",{class:"section-title"},"ID 保留规则",-1)),s("div",_e,[s("label",{class:I(["radio-item",{active:_.value}])},[P(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>_.value=t),type:"checkbox"},null,512),[[B,_.value]]),e[5]||(e[5]=s("div",null,[s("span",{class:"label"},"保留子链接"),s("div",{class:"desc"},"例如 1_1、2_3 这种带下划线的子项 ID")],-1))],2),s("label",{class:I(["radio-item",{active:m.value}])},[P(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>m.value=t),type:"checkbox"},null,512),[[B,m.value]]),e[6]||(e[6]=s("div",null,[s("span",{class:"label"},"仅剩主链接无子链接"),s("div",{class:"desc"},"当某个主链接只有 13 这类主 ID、没有 13_1 这类对应子 ID 时,自动保留该主 ID")],-1))],2)]),s("div",me,[s("button",{type:"button",class:"btn-run",disabled:h.value,onClick:V},i(h.value?"清洗中...":"开始清洗"),9,he),s("span",ge,i(h.value?"正在处理文件并上传结果,请稍候…":"选择文件、列和 ID 规则后即可执行清洗,结果会显示在右侧供下载"),1)])]),s("section",ye,[e[14]||(e[14]=s("div",{class:"panel-header"},"去重结果",-1)),s("div",be,[s("div",we,[s("div",ke,[e[10]||(e[10]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,i(g.value.total),1)]),s("div",Ce,[e[11]||(e[11]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,i(g.value.successCount),1)]),s("div",Ie,[e[12]||(e[12]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,i(g.value.failedCount),1)])]),s("div",xe,[e[13]||(e[13]=s("div",{class:"result-list-header"},[s("span",null,"处理后的 Excel 列表")],-1)),k.value.length===0?(n(),o("div",Ee," 暂无去重结果,完成数据去重后会在这里展示输出文件 ")):(n(),o("ul",De,[(n(!0),o(C,null,F(k.value,t=>(n(),o("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",Fe,[s("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Pe),t.outputFilename?(n(),o("div",Be,"输出文件:"+i(t.outputFilename),1)):b("",!0),t.error?(n(),o("div",Se,"错误信息:"+i(t.error),1)):b("",!0)]),s("div",Ue,[s("span",{class:I(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(n(),o("button",{key:0,type:"button",class:"download",onClick:a=>T(t)}," 下载文件 ",8,Ne)):b("",!0),t.resultId?(n(),o("button",{key:1,type:"button",class:"btn-delete",onClick:a=>M(t.resultId)}," 删除 ",8,$e)):b("",!0)])]))),128))]))])])])])]))}}),He=Y(Ae,[["__scopeId","data-v-bdaefe1c"]]);Z(He).use(ee).mount("#app"); +import{d as z,o as W,a as n,c as o,b as q,B as J,e as s,F as C,r as F,t as i,f as b,n as I,w as P,v as B,g as u,h as L,i as x,E as r,j as O,k as G,l as Q,m as X,_ as Y,p as Z,q as ee}from"./pywebview-CeWJDVeG.js";import{e as se}from"./brand-UU-ckLq6.js";const te={class:"page-shell module-page"},le={class:"main-content"},ae={class:"left-panel"},ne={class:"upload-zone"},oe={class:"selected-files clean-placeholder"},re={key:0,class:"more-line"},ie={key:1},ue={class:"option-group column-option-group"},ce={class:"column-toolbar"},de={class:"column-count"},ve={key:0,class:"column-grid"},pe=["value"],fe={key:1,class:"empty-column-state"},_e={class:"option-group"},me={class:"run-row"},he=["disabled"],ge={class:"loading-msg"},ye={class:"right-panel"},be={class:"task-list-wrap"},we={class:"clean-result-summary"},ke={class:"summary-card"},Ce={class:"summary-card"},Ie={class:"summary-card"},xe={class:"result-list-wrap"},Ee={key:0,class:"empty-tasks"},De={key:1,class:"task-list clean-result-list"},Fe={class:"left"},Pe=["title"],Be={key:0,class:"files"},Se={key:1,class:"files"},Ue={class:"task-right"},Ne=["onClick"],$e=["onClick"],Ae=z({__name:"BrandDedupeTab",setup(Ke){const p=u([]),c=u([]),f=u([]),w=u(""),d=u([]),S=u(!1),_=u(!0),m=u(!0),h=u(!1),k=u([]),g=u({total:0,successCount:0,failedCount:0,items:[]}),E=L(()=>f.value.slice(0,8));function $(){c.value=[...p.value]}function A(){c.value=[]}async function U(l){const e=x();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const a of l){const v=typeof a=="string"?a:a.absolutePath,j=typeof a=="string"?void 0:a.relativePath,y=await e.upload_file_to_java(v,j);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${v}`);t.push(y.data)}return t}async function N(l){const e=await X(l);if(!e.headers?.length){r.error("读取 Excel 表头失败"),p.value=[],c.value=[];return}const t=["id","ASIN","国家","价格","卖家名称"],a=[...t.filter(v=>e.headers?.includes(v)),...(e.headers||[]).filter(v=>!t.includes(v))];p.value=a,c.value=t.filter(v=>a.includes(v))}async function H(l,e){f.value=l,w.value="",d.value=await U(l),d.value.length>0&&await N(d.value[0].fileKey),r.success(e)}async function K(){const l=x();if(!l?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await l.select_brand_xlsx_files();if(!e?.length)return;await H(e,`已选择 ${e.length} 个待清洗文件`)}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function R(){const l=x();if(!l?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await l.select_brand_folder();if(!e)return;w.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await se(e);if(t.success&&t.items?.length){f.value=t.items.map(a=>a.relativePath),d.value=await U(t.items),d.value.length>0&&await N(d.value[0].fileKey),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function V(){if(!d.value.length){r.warning("请先选择待清洗 Excel 文件或文件夹");return}if(!c.value.length){r.warning("请至少选择一列保留列");return}if(!S.value&&!_.value&&!m.value){r.warning("请至少选择一种 ID 保留规则");return}try{h.value=!0;const l=await O({files:d.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),selectedColumns:c.value,keepIntegerIds:S.value,keepUnderscoreIds:_.value,keepIntegerMainIdsWhenNoSubIds:m.value,archiveName:d.value.some(e=>!!e.relativePath)&&w.value?w.value:void 0});g.value=l,k.value=l.items||[],await D(),r.success("数据去重完成")}catch(l){r.error(l instanceof Error?l.message:"去重失败")}finally{h.value=!1}}async function D(){try{const l=await G();k.value=l.items||[],g.value={total:l.items?.length||0,successCount:l.items?.filter(e=>e.success).length||0,failedCount:l.items?.filter(e=>!e.success).length||0,items:l.items||[]}}catch{}}async function M(l){try{await Q(l),await D(),r.success("已删除")}catch(e){r.error(e instanceof Error?e.message:"删除失败")}}async function T(l){const e=x();if(!l.downloadUrl){r.warning("当前结果没有下载地址");return}const t=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}_cleaned.xlsx`;if(e?.save_file_from_url_new){const a=await e.save_file_from_url_new(l.downloadUrl,t);a.success?r.success(`已保存:${a.path||t}`):a.error&&a.error!=="用户取消"&&r.error(a.error);return}}return W(()=>{D().catch(()=>{})}),(l,e)=>(n(),o("div",te,[q(J,{active:"dedupe"}),s("div",le,[s("aside",ae,[e[7]||(e[7]=s("div",{class:"section-title"},"选择文件",-1)),s("div",ne,[e[3]||(e[3]=s("div",{class:"hint"},"选择需要清洗的 Excel 文件或文件夹,后续将按所选规则输出处理结果。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:K},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:R},"选择文件夹")]),s("div",oe,[f.value.length?(n(),o(C,{key:0},[(n(!0),o(C,null,F(E.value,t=>(n(),o("span",{key:t},i(t),1))),128)),f.value.length>E.value.length?(n(),o("span",re," 还有 "+i(f.value.length-E.value.length)+" 个文件未展开显示 ",1)):b("",!0)],64)):(n(),o("span",ie,"暂未选择待清洗文件"))])]),e[8]||(e[8]=s("div",{class:"section-title"},"保留列设置",-1)),s("div",ue,[s("div",ce,[s("span",de,"已选择 "+i(c.value.length)+" / "+i(p.value.length)+" 列",1),s("div",{class:"column-actions"},[s("button",{type:"button",class:"opt-btn small",onClick:$},"全选"),s("button",{type:"button",class:"opt-btn small",onClick:A},"清空")])]),p.value.length?(n(),o("div",ve,[(n(!0),o(C,null,F(p.value,t=>(n(),o("label",{key:t,class:I(["column-item",{active:c.value.includes(t)}])},[P(s("input",{"onUpdate:modelValue":e[0]||(e[0]=a=>c.value=a),type:"checkbox",value:t},null,8,pe),[[B,c.value]]),s("span",null,i(t),1)],2))),128))])):(n(),o("div",fe,"请选择 Excel 文件后读取表头并填充可保留列")),e[4]||(e[4]=s("div",{class:"desc"},"读取首个 Excel 文件的第一行作为表头,用于动态选择需要保留的列。",-1))]),e[9]||(e[9]=s("div",{class:"section-title"},"ID 保留规则",-1)),s("div",_e,[s("label",{class:I(["radio-item",{active:_.value}])},[P(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>_.value=t),type:"checkbox"},null,512),[[B,_.value]]),e[5]||(e[5]=s("div",null,[s("span",{class:"label"},"保留子链接"),s("div",{class:"desc"},"例如 1_1、2_3 这种带下划线的子项 ID")],-1))],2),s("label",{class:I(["radio-item",{active:m.value}])},[P(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>m.value=t),type:"checkbox"},null,512),[[B,m.value]]),e[6]||(e[6]=s("div",null,[s("span",{class:"label"},"仅剩主链接无子链接"),s("div",{class:"desc"},"当某个主链接只有 13 这类主 ID、没有 13_1 这类对应子 ID 时,自动保留该主 ID")],-1))],2)]),s("div",me,[s("button",{type:"button",class:"btn-run",disabled:h.value,onClick:V},i(h.value?"清洗中...":"开始清洗"),9,he),s("span",ge,i(h.value?"正在处理文件并上传结果,请稍候…":"选择文件、列和 ID 规则后即可执行清洗,结果会显示在右侧供下载"),1)])]),s("section",ye,[e[14]||(e[14]=s("div",{class:"panel-header"},"去重结果",-1)),s("div",be,[s("div",we,[s("div",ke,[e[10]||(e[10]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,i(g.value.total),1)]),s("div",Ce,[e[11]||(e[11]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,i(g.value.successCount),1)]),s("div",Ie,[e[12]||(e[12]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,i(g.value.failedCount),1)])]),s("div",xe,[e[13]||(e[13]=s("div",{class:"result-list-header"},[s("span",null,"处理后的 Excel 列表")],-1)),k.value.length===0?(n(),o("div",Ee," 暂无去重结果,完成数据去重后会在这里展示输出文件 ")):(n(),o("ul",De,[(n(!0),o(C,null,F(k.value,t=>(n(),o("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",Fe,[s("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Pe),t.outputFilename?(n(),o("div",Be,"输出文件:"+i(t.outputFilename),1)):b("",!0),t.error?(n(),o("div",Se,"错误信息:"+i(t.error),1)):b("",!0)]),s("div",Ue,[s("span",{class:I(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(n(),o("button",{key:0,type:"button",class:"download",onClick:a=>T(t)}," 下载文件 ",8,Ne)):b("",!0),t.resultId?(n(),o("button",{key:1,type:"button",class:"btn-delete",onClick:a=>M(t.resultId)}," 删除 ",8,$e)):b("",!0)])]))),128))]))])])])])]))}}),He=Y(Ae,[["__scopeId","data-v-bdaefe1c"]]);Z(He).use(ee).mount("#app"); diff --git a/app/assets/delete-brand.js b/app/assets/delete-brand.js index 95d635d..cac4617 100644 --- a/app/assets/delete-brand.js +++ b/app/assets/delete-brand.js @@ -1 +1 @@ -import{d as Ye,o as Ze,I as es,a as d,c as f,b as ss,B as ts,e as l,F as H,r as fe,t as v,f as h,J as ns,K as De,n as Me,g as y,h as J,L as as,i as G,E as p,M as ls,N as rs,O as os,P as us,Q as is,_ as cs,p as ds,q as fs}from"./pywebview-9YBa--7x.js";import{e as vs}from"./brand-CRmRvyGD.js";const hs={class:"page-shell module-page"},ps={class:"main-content"},_s={class:"left-panel"},ys={class:"upload-zone"},gs={class:"selected-files clean-placeholder split-selected-files"},ms={key:0,class:"more-line"},ks={key:1},ws={class:"run-row"},Is=["disabled"],bs=["disabled"],Ss={class:"loading-msg"},Ts={key:0,class:"queue-debug-card"},Cs={key:0,class:"queue-debug-line"},Es={key:1,class:"queue-debug-payload"},Fs={class:"right-panel"},Ps={class:"task-list-wrap"},Rs={class:"clean-result-summary"},xs={class:"summary-card"},Ns={class:"summary-card"},$s={class:"summary-card"},As={class:"result-list-wrap"},Ds={key:0,class:"empty-tasks"},Ms={key:0,class:"result-subsection"},Bs={class:"task-list clean-result-list"},qs={class:"left split-result-main"},Ls=["title"],Us={class:"files"},Os={class:"files"},Ks={key:0,class:"files"},Hs={key:1,class:"files"},Js={key:2,class:"files"},Gs={key:3,class:"time"},js={key:4,class:"delete-brand-progress-block"},zs={class:"delete-brand-progress-header"},Vs={class:"delete-brand-progress-bar"},Qs={class:"files delete-brand-progress"},Xs={key:5,class:"files split-entry-list delete-brand-preview"},Ws={key:6,class:"files"},Ys={class:"task-right split-result-actions"},Zs=["onClick"],et=["onClick"],st={key:1,class:"result-subsection"},tt={class:"task-list clean-result-list"},nt={class:"left split-result-main"},at=["title"],lt={class:"files"},rt={class:"files"},ot={key:0,class:"files"},ut={key:1,class:"files"},it={key:2,class:"time"},ct={key:3,class:"delete-brand-progress-block"},dt={class:"delete-brand-progress-header"},ft={class:"delete-brand-progress-bar"},vt={class:"files delete-brand-progress"},ht={key:4,class:"files split-entry-list delete-brand-preview"},pt={key:5,class:"files"},_t={class:"task-right split-result-actions"},yt=["onClick"],gt=["onClick"],mt=Ye({__name:"BrandDeleteBrandTab",setup(wt){function $(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const A=y([]),j=y([]),B=y(!1),ve=y([]),i=y([]),q=y([]),z=y({total:0,successCount:0,failedCount:0,items:[]}),b=y(""),S=y(""),g=y({}),T=y(null),ee=y(!1),V=y(!1),E=y(!1),D=y(""),Q=y(!1),L=y(null),se=y(!1),te=J(()=>A.value.slice(0,10)),F=J(()=>{const e=[];return i.value.forEach(s=>{e.push(...s.items)}),e});function Be(){try{const e=typeof window<"u"?window.localStorage.getItem($()):null;if(e){if(i.value=JSON.parse(e),i.value.length>0){const s=i.value[i.value.length-1];b.value=s.queuePushResult||"",S.value=s.queuePayloadText||""}}else i.value=[]}catch{i.value=[]}}function ne(e,s,t,n){if(!s?.length)return;const a=i.value.findIndex(c=>c.taskId===e),o=a>=0?i.value[a]:null,r=s.map(c=>{const _=o?.items.find(We=>M(We,c)),k=Array.isArray(c.countries)?c.countries:void 0,m=Array.isArray(_?.countries)?_?.countries:void 0,w=k&&k.length>0?k:m&&m.length>0?m:k??m,I=Array.isArray(c.previewRows)?c.previewRows:void 0,C=Array.isArray(_?.previewRows)?_?.previewRows:void 0,de=I&&I.length>0?I:C&&C.length>0?C:I??C;return{...c,countries:w,previewRows:de,_pushed:_?._pushed??c._pushed??!1,_completed:_?._completed??c._completed??!1}}),u={taskId:e,items:r,createdAt:o?.createdAt||Date.now(),queuePushResult:t??o?.queuePushResult,queuePayloadText:n??o?.queuePayloadText};a>=0?i.value[a]=u:i.value.push(u),typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function he(e){const s=i.value.length;i.value=i.value.filter(t=>t.taskId!==e),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function pe(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function qe(e){if(!e?.length)return!1;const s=new Set;if(e.forEach(n=>{n.taskId&&pe(n.taskStatus)&&s.add(n.taskId)}),!s.size)return!1;const t=i.value.length;return i.value=i.value.filter(n=>!s.has(n.taskId)),i.value.length!==t?(ae(),!0):!1}const X=J(()=>q.value.filter(e=>!F.value.some(s=>M(s,e)))),Le=J(()=>F.value.length>0||X.value.length>0),Ue=J(()=>F.value.filter(e=>xe(e)&&P(e)==="未入队"));function ae(){typeof window<"u"&&(i.value.length===0?window.localStorage.removeItem($()):window.localStorage.setItem($(),JSON.stringify(i.value)))}function R(e){return e?(i.value.find(t=>t.taskId===e)?.items.length||0)>1:!1}function le(e){return e&&i.value.find(s=>s.taskId===e)||null}function M(e,s){return!e||!s?!1:e.resultId!=null&&s.resultId!=null?e.resultId===s.resultId:e.fileKey&&s.fileKey?e.fileKey===s.fileKey:e.sourceFilename===s.sourceFilename}function x(e,s){const t=le(e);return t&&t.items.find(n=>M(n,s))||null}function _e(e){if(!e)return!1;const s=le(e);if(!s)return!1;let t=!1;const n=g.value[e]?.line_progress?.info,a=R(e);if(n?.file_name&&n.current_line!=null&&n.total_lines!=null&&n.total_lines>0&&n.current_line>=n.total_lines){const o=s.items.find(r=>r.sourceFilename===n.file_name);o&&!o._completed&&(o._completed=!0,t=!0)}if(!a){const o=g.value[e]?.task?.status;if((o==="SUCCESS"||o==="FAILED")&&s.items.length===1){const r=s.items[0];r&&!r._completed&&(r._completed=!0,t=!0)}}return t&&ae(),t}function ye(e){return e&&g.value[e]?.task?.status||""}function W(e){if(e.error)return e.error;if(e.matchStatus&&e.matchStatus!=="MATCHED")return e.matchMessage||"";const s=e.taskId;return s&&g.value[s]?.task?.errorMessage||""}function ge(e){const s=e.taskId;if(!s)return!1;const t=g.value[s]?.line_progress,n=ye(s),a=R(s),o=P(e);if(a){const r=x(s,e),u=K(e)===D.value,c=!!(t?.has_progress&&t?.info?.file_name===e.sourceFilename);return u||c||r?._pushed||(n==="RUNNING"||n==="PENDING"||!n)&&r?._completed?!0:{success:!1,retryable:!0}}return o==="本文件解析完毕"||o==="已被全局判定为终态"?!1:t?.has_progress||t?.info?!0:o==="已入队"||o==="处理中"}function me(e){return e.map(s=>s.matchStatus==="MATCHED"?{...s,_pushed:!1,_completed:!1}:{...s,matched:!1,openStoreUrl:void 0,error:s.error||void 0,_pushed:!1,_completed:!1})}function ke(e){return e.matchStatus==="MATCHED"?`已匹配 ${e.shopId||""}`.trim():e.matchMessage?e.matchMessage:e.matchStatus==="CONFLICT"?"存在多个同名店铺,请人工确认":e.matchStatus==="PENDING"||e.matchStatus==="INDEX_STALE"?"店铺索引暂未就绪":e.matchStatus?e.matchStatus:e.matched?`已匹配 ${e.shopId||""}`.trim():"待匹配"}function Oe(){ve.value=[...F.value,...X.value]}function N(){Oe(),Ke(ve.value)}function Ke(e){z.value={total:e.length,successCount:e.filter(s=>s.success).length,failedCount:e.filter(s=>!s.success).length,items:e}}function re(e){const s=e.taskId;return s&&(g.value[s]?.fileProgress||[]).find(a=>a.fileKey&&e.fileKey?a.fileKey===e.fileKey:a.sourceFilename&&e.sourceFilename?a.sourceFilename===e.sourceFilename:!1)||null}function we(e){const s=e.taskId;if(!s)return"";const t=g.value[s],n=t?.line_progress?.info,a=re(e);if(R(s)){const u=x(s,e),c=t?.task?.status,_=!!(n?.file_name&&n.file_name===e.sourceFilename);let k=u?._completed?"COMPLETED":(u?._pushed,"PENDING"),m=0,w=Math.max(0,e.totalRows??a?.totalRows??0);c==="SUCCESS"||c==="FAILED"&&u?._completed?(k="COMPLETED",m=w):_?(k="RUNNING",m=Math.max(0,Math.min(w||Number.MAX_SAFE_INTEGER,n?.current_line??0)),!w&&n?.total_lines&&n.total_lines>0&&(w=n.total_lines)):u?._completed?(k="COMPLETED",m=w):u?._pushed&&(k="PENDING",m=0);const I=[];if(I.push(`文件状态:${k}`),I.push(`文件进度:${m}/${w}`),n?.finished_files!=null){const C=n.file_total&&n.file_total>0?`/${n.file_total}`:"";I.push(`已完成文件:${n.finished_files}${C}`)}return n?.phase&&I.push(`阶段:${n.phase}`),I.join("|")}if(a){const u=[],c=a.processedRows??0,_=a.totalRows??0;if(a.status&&u.push(`文件状态:${a.status}`),u.push(`文件进度:${c}/${_}`),n?.finished_files!=null){const k=n.file_total&&n.file_total>0?`/${n.file_total}`:"";u.push(`已完成文件:${n.finished_files}${k}`)}return n?.phase&&u.push(`阶段:${n.phase}`),u.join("|")}if(!t?.line_progress?.has_progress||!n){const u=t?.task?.status;return u?`任务状态:${u}`:""}const r=[];if(n.phase&&r.push(`阶段:${n.phase}`),n.file_index&&n.file_total&&r.push(`文件:${n.file_index}/${n.file_total}`),n.file_name&&r.push(`当前文件:${n.file_name}`),n.current_line!=null&&n.total_lines!=null&&r.push(`${R(s)?"当前文件进度":"进度"}:${n.current_line}/${n.total_lines}`),n.current_country&&r.push(`国家:${n.current_country}`),n.current_asin&&r.push(`ASIN:${n.current_asin}`),n.finished_files!=null){const u=n.file_total&&n.file_total>0?`/${n.file_total}`:"";r.push(`已完成文件:${n.finished_files}${u}`)}return r.join("|")}function Y(e){const s=e.taskId;if(!s)return 0;const t=g.value[s]?.line_progress?.info;if(R(s)){const r=x(s,e);if(g.value[s]?.task?.status==="SUCCESS"||r?._completed)return 100;const c=Math.max(0,e.totalRows??re(e)?.totalRows??0);if(!!(t?.file_name&&t.file_name===e.sourceFilename)){if(t?.current_line!=null&&t?.total_lines&&t.total_lines>0)return Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100)));if(t?.current_line!=null&&c>0)return Math.max(0,Math.min(100,Math.round(t.current_line/c*100)))}return 0}const a=re(e);return a?Math.max(0,Math.min(100,a.percent??0)):t?t.current_line!=null&&t.total_lines&&t.total_lines>0?Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100))):t.finished_files!=null&&t.file_total&&t.file_total>0?Math.max(0,Math.min(100,Math.round(t.finished_files/t.file_total*100))):g.value[s]?.task?.status==="SUCCESS"?100:0:0}function Ie(e){const s=g.value[e]?.task?.status;return pe(s)}function U(){const e=new Set;return i.value.forEach(s=>{s.items.some(t=>t._pushed)&&e.add(s.taskId)}),Array.from(e)}function P(e){const s=e.taskId;if(!s||!le(s))return"";const n=x(s,e),a=ye(s),o=g.value[s]?.line_progress,r=R(s);if(!r&&(a==="SUCCESS"||a==="FAILED"||e.taskStatus==="SUCCESS"||e.taskStatus==="FAILED"))return"已被全局判定为终态";if(n?._completed)return"本文件解析完毕";if(a==="RUNNING"&&o?.has_progress&&o?.info?.file_name===e.sourceFilename)return"处理中";if(r&&!n?._pushed&&!n?._completed)return"未入队";if(r&&a==="SUCCESS")return"本文件解析完毕";if(!r){const u=g.value[s];if(u?.items&&u.items.find(_=>M(_,e))&&a==="SUCCESS")return"本文件解析完毕"}return n?._pushed?"已入队":"未入队"}function be(e){if(e.downloadUrl)return!0;const s=e.taskId;return s?g.value[s]?.task?.status==="SUCCESS":{success:!1,retryable:!1}}function He(e){const s=e?.task?.id;if(!s)return!1;const t=i.value.find(r=>r.taskId===s);if(!t)return{success:!1,retryable:!1};const n=e?.items||[];let a=!1;const o=t.items.map(r=>{const u=n.find(de=>M(de,r));if(!u)return r;const c=Array.isArray(u.countries)?u.countries:void 0,_=Array.isArray(r.countries)?r.countries:void 0,k=c&&c.length>0?c:_&&_.length>0?_:c??_,m=Array.isArray(u.previewRows)?u.previewRows:void 0,w=Array.isArray(r.previewRows)?r.previewRows:void 0,I=m&&m.length>0?m:w&&w.length>0?w:m??w,C={...r,...u,countries:k,previewRows:I,_pushed:r._pushed,_completed:r._completed};return JSON.stringify(C)!==JSON.stringify(r)&&(a=!0),C});for(const r of n)o.some(u=>M(u,r))||(o.push({...r,_pushed:!1,_completed:!1}),a=!0);return JSON.stringify(o)!==JSON.stringify(t.items)&&(t.items=o,a=!0),a&&ae(),a}async function oe(e){const s=e||U();if(s.length)try{const t=await as(s);se.value&&E.value&&(b.value="后端已恢复,继续执行当前任务并自动衔接后续任务..."),se.value=!1;let n=!1;for(const a of t.items||[]){const o=a?.task?.id;typeof o=="number"&&o>0&&(g.value[o]=a,He(a)&&(n=!0),_e(o)&&(n=!0))}n&&N()}catch(t){const n=(t instanceof Error?t.message:String(t||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(o=>n.includes(o.toLowerCase()))&&E.value&&(se.value=!0,b.value="当前任务运行中,正在等待后端服务恢复...")}}function Je(){return is()}function ue(e=!1){if(T.value){if(!e)return;clearTimeout(T.value),T.value=null}const s=async()=>{if(T.value=null,ee.value){ue();return}const t=U();if(!t.length)return;ee.value=!0;let n=!1,a=!1;try{await oe(t),await Ae();for(const o of t)Ie(o)&&(he(o),n=!0,a=!0)}finally{ee.value=!1}a?await O():n&&N(),U().length>0&&ue()};e?s():T.value=window.setTimeout(s,Je())}function ie(e=!1){T.value&&!e||ue(e)}function Z(e){const s=e.taskId?g.value[e.taskId]?.task?.status:null;return s==="SUCCESS"?{className:"success",text:"已完成"}:s==="FAILED"?{className:"failed",text:"失败"}:s==="RUNNING"?{className:"running",text:"执行中"}:e.taskStatus==="SUCCESS"?{className:"success",text:"已完成"}:e.taskStatus==="FAILED"?{className:"failed",text:"失败"}:e.taskStatus==="RUNNING"?{className:"running",text:"执行中"}:e.success?{className:"success",text:"已完成"}:{className:"failed",text:"失败"}}function Se(){T.value&&(window.clearTimeout(T.value),T.value=null),ce()}async function Te(e){const s=G();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const n of e){const a=typeof n=="string"?n:n.absolutePath,o=typeof n=="string"?void 0:n.relativePath,r=await s.upload_file_to_java(a,o);if(!r?.success||!r.data)throw new Error(r?.error||r?.message||`上传失败:${a}`);t.push(r.data)}return t}async function Ge(){const e=G();if(!e?.select_brand_xlsx_files){p.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await e.select_brand_xlsx_files();if(!s?.length)return;A.value=s,j.value=await Te(s),p.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function je(){const e=G();if(!e?.select_brand_folder){p.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await vs(s);if(!t.success||!t.items?.length){p.warning(t.error||"该文件夹下没有 xlsx 文件");return}A.value=t.items.map(n=>n.relativePath||n.absolutePath),j.value=await Te(t.items),p.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function ze(){if(!j.value.length){p.warning("请先选择待处理文件");return}try{B.value=!0;const e=await ls({files:j.value.map(a=>({fileKey:a.fileKey,originalFilename:a.originalFilename,relativePath:a.relativePath}))}),s=me(e.items||[]),t=s.some(a=>a.matchStatus==="MATCHED"),n=s.some(a=>a.matchStatus&&a.matchStatus!=="MATCHED");b.value=t?"解析完成,可在左侧点击“推送到 Python 队列”开始串行处理":"解析完成,当前没有可推送的已匹配文件",S.value="",s.length&&s[0].taskId&&ne(s[0].taskId,s,b.value,S.value),N(),n?p.warning("部分文件尚未命中可用店铺索引,已保留状态信息,请等待后台刷新后重试。"):t?p.success("删除品牌解析完成,请在左侧推送到 Python 队列"):p.warning("当前没有可推送的已匹配文件,请先等待店铺索引刷新。"),await O()}catch(e){p.error(e instanceof Error?e.message:"执行失败")}finally{B.value=!1}}async function Ce(e){const s=e.taskId;if(!s){p.warning("未找到任务ID");return}const t=G(),n=rs(s),a=e.outputFilename||e.sourceFilename||`delete-brand_${s}.xlsx`;if(t?.save_file_from_url_new){const o=await t.save_file_from_url_new(n,a);o.success?p.success(`已保存:${o.path||a}`):o.error&&o.error!=="用户取消"&&p.error(o.error);return}}async function O(){try{const e=await os();q.value=me(e.items||[]),qe(q.value),N(),await oe(),ie(!0)}catch(e){const s=(e instanceof Error?e.message:String(e||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(n=>s.includes(n.toLowerCase()))||console.error("loadHistory error:",e)}}function Ee(e){i.value.forEach(t=>{t.items=t.items.filter(n=>n.resultId!==e)});const s=i.value.length;i.value=i.value.filter(t=>t.items.length>0),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value)),q.value=q.value.filter(t=>t.resultId!==e),N(),U().length===0&&Se()}async function Fe(e){try{await us(e),Ee(e),await O(),p.success("已删除")}catch(s){const t=s instanceof Error?s.message:"删除失败";if(typeof t=="string"&&t.includes("记录不存在")){Ee(e),p.success("已删除");return}p.error(t)}}function Pe(e){const s=e.slice(0,5).map(n=>`${n.country}:${n.asin}${n.status?`(${n.status})`:""}`);return e.length-s.length>0?`${s.join("、")} 等 ${e.length} 条`:s.join("、")}function It(e,s){}function ce(){L.value&&(window.clearTimeout(L.value),L.value=null)}function Ve(e=3e3){ce(),L.value=window.setTimeout(()=>{L.value=null,Ae().catch(()=>{})},e)}function Qe(e){return e.includes("当前店铺正在执行中")}function Re(){for(const e of i.value)for(const s of e.items){const t=P(s);if(t==="已入队"||t==="处理中")return!0}return!1}function K(e){return e.resultId!=null?`result:${e.resultId}`:`task:${e.taskId||0}:${e.sourceFilename||""}`}function xe(e){return!!(e.taskId&&(e.matchStatus==="MATCHED"||e.matched))}function Ne(){return F.value.find(e=>!xe(e)||K(e)===D.value||x(e.taskId,e)?._completed?!1:P(e)==="未入队")}async function $e(e,s){if(s?.auto&&Re())return e.taskId,e.sourceFilename,{success:!1,retryable:!0};const t=G(),n=e.taskId;if(!n)return{success:!1,retryable:!1};const a=i.value.find(c=>c.taskId===n);if(!a)return{success:!1,retryable:!1};if(!t?.enqueue_json)return p.error("当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)"),{success:!1,retryable:!1};const o={type:"delete-brand-run",ts:Date.now(),data:{taskId:n,items:[e]}};S.value=JSON.stringify(o,null,2);const r=await t.enqueue_json(o);let u="";if(r?.success){u=`已推送文件 ${e.sourceFilename},当前队列长度:${r.queue_size??"-"}`;const c=x(n,e);return c&&(c._pushed=!0,c._completed=!1),D.value=K(e),ne(n,a.items,u,S.value),ie(!0),b.value=u,{success:!0,retryable:!1}}else{const c=r?.error||"未知错误";if(u=`推送到 Python 队列失败:${c}`,b.value=u,ne(n,a.items,u,S.value),s?.auto&&Qe(c))return{success:!1,retryable:!0}}return b.value=u,{success:!1,retryable:!1}}async function Xe(){const e=Ne();if(!e){p.warning("当前没有可推送的已匹配文件");return}V.value=!0,E.value=!0,ce();const s=await $e(e);if(V.value=!1,!s.success){E.value=!1,D.value="";return}p.success("已开始按顺序推送到 Python 队列")}async function Ae(){if(!E.value||Q.value){E.value,Q.value;return}if(Re())return;const e=D.value;if(e){const t=F.value.find(n=>K(n)===e);if(t){const n=t.taskId,a=R(n);a&&(_e(n),P(t),void 0);const o=P(t);if(o==="已入队"||o==="处理中"){t.sourceFilename;return}if(a){const r=x(n,t);if(r&&!r._completed){t.sourceFilename,r._pushed,r._completed;return}}}}const s=Ne();if(!s){D.value="",E.value=!1;return}Q.value=!0;try{s.taskId,s.sourceFilename,K(s);const t=await $e(s,{auto:!0});if(!t.success){if(t.retryable){s.taskId,s.sourceFilename,Ve();return}s.taskId,s.sourceFilename,E.value=!1}}finally{Q.value=!1}}return Ze(()=>{Be();const e=U();e.length>0?oe(e).then(async()=>{let s=!1,t=!1;for(const n of e)Ie(n)&&(he(n),s=!0,t=!0);t?await O():s&&N(),ie(!0)}):N(),O().catch(()=>{})}),es(()=>{Se()}),(e,s)=>(d(),f("div",hs,[ss(ts,{active:"delete-brand"}),l("div",ps,[l("aside",_s,[s[2]||(s[2]=l("div",{class:"section-title"},"选择文件",-1)),l("div",ys,[s[0]||(s[0]=l("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),l("div",{class:"btns"},[l("button",{type:"button",class:"opt-btn",onClick:Ge},"选择 Excel 文件"),l("button",{type:"button",class:"opt-btn",onClick:je},"选择文件夹")]),l("div",gs,[A.value.length?(d(),f(H,{key:0},[(d(!0),f(H,null,fe(te.value,t=>(d(),f("span",{key:t},v(t),1))),128)),A.value.length>te.value.length?(d(),f("span",ms," 还有 "+v(A.value.length-te.value.length)+" 个文件未展开显示 ",1)):h("",!0)],64)):(d(),f("span",ks,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=ns('
执行说明
',2)),l("div",ws,[l("button",{type:"button",class:"btn-run",disabled:B.value,onClick:ze},v(B.value?"解析中...":"开始解析"),9,Is),l("button",{type:"button",class:"btn-run btn-queue",disabled:V.value||!Ue.value.length,onClick:Xe},v(V.value?"推送中...":"推送到 Python 队列"),9,bs),l("span",Ss,v(B.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),b.value||S.value?(d(),f("div",Ts,[s[1]||(s[1]=l("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),b.value?(d(),f("div",Cs,v(b.value),1)):h("",!0),S.value?(d(),f("pre",Es,v(S.value),1)):h("",!0)])):h("",!0)]),l("section",Fs,[s[12]||(s[12]=l("div",{class:"panel-header"},"删除品牌结果",-1)),l("div",Ps,[l("div",Rs,[l("div",xs,[s[4]||(s[4]=l("span",{class:"summary-label"},"已处理文件",-1)),l("strong",null,v(z.value.total),1)]),l("div",Ns,[s[5]||(s[5]=l("span",{class:"summary-label"},"成功结果",-1)),l("strong",null,v(z.value.successCount),1)]),l("div",$s,[s[6]||(s[6]=l("span",{class:"summary-label"},"失败文件",-1)),l("strong",null,v(z.value.failedCount),1)])]),l("div",As,[s[11]||(s[11]=l("div",{class:"result-list-header"},[l("span",null,"删除品牌结果列表")],-1)),Le.value?(d(),f(H,{key:1},[F.value.length?(d(),f("div",Ms,[s[8]||(s[8]=l("div",{class:"result-subsection-title"},"当前任务",-1)),l("ul",Bs,[(d(!0),f(H,null,fe(F.value,t=>(d(),f("li",{key:`current-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[l("div",qs,[l("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,Ls),l("div",Us,"店铺名:"+v(t.shopName||"-"),1),l("div",Os,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",Ks,"平台:"+v(t.platform),1)):h("",!0),P(t)?(d(),f("div",Hs,"队列状态:"+v(P(t)),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",Js,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",Gs,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",js,[l("div",zs,[s[7]||(s[7]=l("span",null,"任务进度",-1)),l("span",null,v(Y(t))+"%",1)]),l("div",Vs,[l("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),l("div",Qs,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",Xs,v(Pe(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",Ws,"错误信息:"+v(W(t)),1)):h("",!0)]),l("div",Ys,[l("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:n=>Ce(t)}," 下载 ",8,Zs)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:n=>Fe(t.resultId)}," 删除 ",8,et)):h("",!0)])]))),128))])])):h("",!0),X.value.length?(d(),f("div",st,[s[10]||(s[10]=l("div",{class:"result-subsection-title"},"历史记录",-1)),l("ul",tt,[(d(!0),f(H,null,fe(X.value,t=>(d(),f("li",{key:`history-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[l("div",nt,[l("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,at),l("div",lt,"店铺名:"+v(t.shopName||"-"),1),l("div",rt,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",ot,"平台:"+v(t.platform),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",ut,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",it,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",ct,[l("div",dt,[s[9]||(s[9]=l("span",null,"任务进度",-1)),l("span",null,v(Y(t))+"%",1)]),l("div",ft,[l("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),l("div",vt,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",ht,v(Pe(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",pt,"错误信息:"+v(W(t)),1)):h("",!0)]),l("div",_t,[l("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:n=>Ce(t)}," 下载 ",8,yt)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:n=>Fe(t.resultId)}," 删除 ",8,gt)):h("",!0)])]))),128))])])):h("",!0)],64)):(d(),f("div",Ds," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),kt=cs(mt,[["__scopeId","data-v-64ee024e"]]);ds(kt).use(fs).mount("#app"); +import{d as Ye,o as Ze,I as es,a as d,c as f,b as ss,B as ts,e as l,F as H,r as fe,t as v,f as h,J as ns,K as De,n as Me,g as y,h as J,L as as,i as G,E as p,M as ls,N as rs,O as os,P as us,Q as is,_ as cs,p as ds,q as fs}from"./pywebview-CeWJDVeG.js";import{e as vs}from"./brand-UU-ckLq6.js";const hs={class:"page-shell module-page"},ps={class:"main-content"},_s={class:"left-panel"},ys={class:"upload-zone"},gs={class:"selected-files clean-placeholder split-selected-files"},ms={key:0,class:"more-line"},ks={key:1},ws={class:"run-row"},Is=["disabled"],bs=["disabled"],Ss={class:"loading-msg"},Ts={key:0,class:"queue-debug-card"},Cs={key:0,class:"queue-debug-line"},Es={key:1,class:"queue-debug-payload"},Fs={class:"right-panel"},Ps={class:"task-list-wrap"},Rs={class:"clean-result-summary"},xs={class:"summary-card"},Ns={class:"summary-card"},$s={class:"summary-card"},As={class:"result-list-wrap"},Ds={key:0,class:"empty-tasks"},Ms={key:0,class:"result-subsection"},Bs={class:"task-list clean-result-list"},qs={class:"left split-result-main"},Ls=["title"],Us={class:"files"},Os={class:"files"},Ks={key:0,class:"files"},Hs={key:1,class:"files"},Js={key:2,class:"files"},Gs={key:3,class:"time"},js={key:4,class:"delete-brand-progress-block"},zs={class:"delete-brand-progress-header"},Vs={class:"delete-brand-progress-bar"},Qs={class:"files delete-brand-progress"},Xs={key:5,class:"files split-entry-list delete-brand-preview"},Ws={key:6,class:"files"},Ys={class:"task-right split-result-actions"},Zs=["onClick"],et=["onClick"],st={key:1,class:"result-subsection"},tt={class:"task-list clean-result-list"},nt={class:"left split-result-main"},at=["title"],lt={class:"files"},rt={class:"files"},ot={key:0,class:"files"},ut={key:1,class:"files"},it={key:2,class:"time"},ct={key:3,class:"delete-brand-progress-block"},dt={class:"delete-brand-progress-header"},ft={class:"delete-brand-progress-bar"},vt={class:"files delete-brand-progress"},ht={key:4,class:"files split-entry-list delete-brand-preview"},pt={key:5,class:"files"},_t={class:"task-right split-result-actions"},yt=["onClick"],gt=["onClick"],mt=Ye({__name:"BrandDeleteBrandTab",setup(wt){function $(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const A=y([]),j=y([]),B=y(!1),ve=y([]),i=y([]),q=y([]),z=y({total:0,successCount:0,failedCount:0,items:[]}),b=y(""),S=y(""),g=y({}),T=y(null),ee=y(!1),V=y(!1),E=y(!1),D=y(""),Q=y(!1),L=y(null),se=y(!1),te=J(()=>A.value.slice(0,10)),F=J(()=>{const e=[];return i.value.forEach(s=>{e.push(...s.items)}),e});function Be(){try{const e=typeof window<"u"?window.localStorage.getItem($()):null;if(e){if(i.value=JSON.parse(e),i.value.length>0){const s=i.value[i.value.length-1];b.value=s.queuePushResult||"",S.value=s.queuePayloadText||""}}else i.value=[]}catch{i.value=[]}}function ne(e,s,t,n){if(!s?.length)return;const a=i.value.findIndex(c=>c.taskId===e),o=a>=0?i.value[a]:null,r=s.map(c=>{const _=o?.items.find(We=>M(We,c)),k=Array.isArray(c.countries)?c.countries:void 0,m=Array.isArray(_?.countries)?_?.countries:void 0,w=k&&k.length>0?k:m&&m.length>0?m:k??m,I=Array.isArray(c.previewRows)?c.previewRows:void 0,C=Array.isArray(_?.previewRows)?_?.previewRows:void 0,de=I&&I.length>0?I:C&&C.length>0?C:I??C;return{...c,countries:w,previewRows:de,_pushed:_?._pushed??c._pushed??!1,_completed:_?._completed??c._completed??!1}}),u={taskId:e,items:r,createdAt:o?.createdAt||Date.now(),queuePushResult:t??o?.queuePushResult,queuePayloadText:n??o?.queuePayloadText};a>=0?i.value[a]=u:i.value.push(u),typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function he(e){const s=i.value.length;i.value=i.value.filter(t=>t.taskId!==e),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function pe(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function qe(e){if(!e?.length)return!1;const s=new Set;if(e.forEach(n=>{n.taskId&&pe(n.taskStatus)&&s.add(n.taskId)}),!s.size)return!1;const t=i.value.length;return i.value=i.value.filter(n=>!s.has(n.taskId)),i.value.length!==t?(ae(),!0):!1}const X=J(()=>q.value.filter(e=>!F.value.some(s=>M(s,e)))),Le=J(()=>F.value.length>0||X.value.length>0),Ue=J(()=>F.value.filter(e=>xe(e)&&P(e)==="未入队"));function ae(){typeof window<"u"&&(i.value.length===0?window.localStorage.removeItem($()):window.localStorage.setItem($(),JSON.stringify(i.value)))}function R(e){return e?(i.value.find(t=>t.taskId===e)?.items.length||0)>1:!1}function le(e){return e&&i.value.find(s=>s.taskId===e)||null}function M(e,s){return!e||!s?!1:e.resultId!=null&&s.resultId!=null?e.resultId===s.resultId:e.fileKey&&s.fileKey?e.fileKey===s.fileKey:e.sourceFilename===s.sourceFilename}function x(e,s){const t=le(e);return t&&t.items.find(n=>M(n,s))||null}function _e(e){if(!e)return!1;const s=le(e);if(!s)return!1;let t=!1;const n=g.value[e]?.line_progress?.info,a=R(e);if(n?.file_name&&n.current_line!=null&&n.total_lines!=null&&n.total_lines>0&&n.current_line>=n.total_lines){const o=s.items.find(r=>r.sourceFilename===n.file_name);o&&!o._completed&&(o._completed=!0,t=!0)}if(!a){const o=g.value[e]?.task?.status;if((o==="SUCCESS"||o==="FAILED")&&s.items.length===1){const r=s.items[0];r&&!r._completed&&(r._completed=!0,t=!0)}}return t&&ae(),t}function ye(e){return e&&g.value[e]?.task?.status||""}function W(e){if(e.error)return e.error;if(e.matchStatus&&e.matchStatus!=="MATCHED")return e.matchMessage||"";const s=e.taskId;return s&&g.value[s]?.task?.errorMessage||""}function ge(e){const s=e.taskId;if(!s)return!1;const t=g.value[s]?.line_progress,n=ye(s),a=R(s),o=P(e);if(a){const r=x(s,e),u=K(e)===D.value,c=!!(t?.has_progress&&t?.info?.file_name===e.sourceFilename);return u||c||r?._pushed||(n==="RUNNING"||n==="PENDING"||!n)&&r?._completed?!0:{success:!1,retryable:!0}}return o==="本文件解析完毕"||o==="已被全局判定为终态"?!1:t?.has_progress||t?.info?!0:o==="已入队"||o==="处理中"}function me(e){return e.map(s=>s.matchStatus==="MATCHED"?{...s,_pushed:!1,_completed:!1}:{...s,matched:!1,openStoreUrl:void 0,error:s.error||void 0,_pushed:!1,_completed:!1})}function ke(e){return e.matchStatus==="MATCHED"?`已匹配 ${e.shopId||""}`.trim():e.matchMessage?e.matchMessage:e.matchStatus==="CONFLICT"?"存在多个同名店铺,请人工确认":e.matchStatus==="PENDING"||e.matchStatus==="INDEX_STALE"?"店铺索引暂未就绪":e.matchStatus?e.matchStatus:e.matched?`已匹配 ${e.shopId||""}`.trim():"待匹配"}function Oe(){ve.value=[...F.value,...X.value]}function N(){Oe(),Ke(ve.value)}function Ke(e){z.value={total:e.length,successCount:e.filter(s=>s.success).length,failedCount:e.filter(s=>!s.success).length,items:e}}function re(e){const s=e.taskId;return s&&(g.value[s]?.fileProgress||[]).find(a=>a.fileKey&&e.fileKey?a.fileKey===e.fileKey:a.sourceFilename&&e.sourceFilename?a.sourceFilename===e.sourceFilename:!1)||null}function we(e){const s=e.taskId;if(!s)return"";const t=g.value[s],n=t?.line_progress?.info,a=re(e);if(R(s)){const u=x(s,e),c=t?.task?.status,_=!!(n?.file_name&&n.file_name===e.sourceFilename);let k=u?._completed?"COMPLETED":(u?._pushed,"PENDING"),m=0,w=Math.max(0,e.totalRows??a?.totalRows??0);c==="SUCCESS"||c==="FAILED"&&u?._completed?(k="COMPLETED",m=w):_?(k="RUNNING",m=Math.max(0,Math.min(w||Number.MAX_SAFE_INTEGER,n?.current_line??0)),!w&&n?.total_lines&&n.total_lines>0&&(w=n.total_lines)):u?._completed?(k="COMPLETED",m=w):u?._pushed&&(k="PENDING",m=0);const I=[];if(I.push(`文件状态:${k}`),I.push(`文件进度:${m}/${w}`),n?.finished_files!=null){const C=n.file_total&&n.file_total>0?`/${n.file_total}`:"";I.push(`已完成文件:${n.finished_files}${C}`)}return n?.phase&&I.push(`阶段:${n.phase}`),I.join("|")}if(a){const u=[],c=a.processedRows??0,_=a.totalRows??0;if(a.status&&u.push(`文件状态:${a.status}`),u.push(`文件进度:${c}/${_}`),n?.finished_files!=null){const k=n.file_total&&n.file_total>0?`/${n.file_total}`:"";u.push(`已完成文件:${n.finished_files}${k}`)}return n?.phase&&u.push(`阶段:${n.phase}`),u.join("|")}if(!t?.line_progress?.has_progress||!n){const u=t?.task?.status;return u?`任务状态:${u}`:""}const r=[];if(n.phase&&r.push(`阶段:${n.phase}`),n.file_index&&n.file_total&&r.push(`文件:${n.file_index}/${n.file_total}`),n.file_name&&r.push(`当前文件:${n.file_name}`),n.current_line!=null&&n.total_lines!=null&&r.push(`${R(s)?"当前文件进度":"进度"}:${n.current_line}/${n.total_lines}`),n.current_country&&r.push(`国家:${n.current_country}`),n.current_asin&&r.push(`ASIN:${n.current_asin}`),n.finished_files!=null){const u=n.file_total&&n.file_total>0?`/${n.file_total}`:"";r.push(`已完成文件:${n.finished_files}${u}`)}return r.join("|")}function Y(e){const s=e.taskId;if(!s)return 0;const t=g.value[s]?.line_progress?.info;if(R(s)){const r=x(s,e);if(g.value[s]?.task?.status==="SUCCESS"||r?._completed)return 100;const c=Math.max(0,e.totalRows??re(e)?.totalRows??0);if(!!(t?.file_name&&t.file_name===e.sourceFilename)){if(t?.current_line!=null&&t?.total_lines&&t.total_lines>0)return Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100)));if(t?.current_line!=null&&c>0)return Math.max(0,Math.min(100,Math.round(t.current_line/c*100)))}return 0}const a=re(e);return a?Math.max(0,Math.min(100,a.percent??0)):t?t.current_line!=null&&t.total_lines&&t.total_lines>0?Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100))):t.finished_files!=null&&t.file_total&&t.file_total>0?Math.max(0,Math.min(100,Math.round(t.finished_files/t.file_total*100))):g.value[s]?.task?.status==="SUCCESS"?100:0:0}function Ie(e){const s=g.value[e]?.task?.status;return pe(s)}function U(){const e=new Set;return i.value.forEach(s=>{s.items.some(t=>t._pushed)&&e.add(s.taskId)}),Array.from(e)}function P(e){const s=e.taskId;if(!s||!le(s))return"";const n=x(s,e),a=ye(s),o=g.value[s]?.line_progress,r=R(s);if(!r&&(a==="SUCCESS"||a==="FAILED"||e.taskStatus==="SUCCESS"||e.taskStatus==="FAILED"))return"已被全局判定为终态";if(n?._completed)return"本文件解析完毕";if(a==="RUNNING"&&o?.has_progress&&o?.info?.file_name===e.sourceFilename)return"处理中";if(r&&!n?._pushed&&!n?._completed)return"未入队";if(r&&a==="SUCCESS")return"本文件解析完毕";if(!r){const u=g.value[s];if(u?.items&&u.items.find(_=>M(_,e))&&a==="SUCCESS")return"本文件解析完毕"}return n?._pushed?"已入队":"未入队"}function be(e){if(e.downloadUrl)return!0;const s=e.taskId;return s?g.value[s]?.task?.status==="SUCCESS":{success:!1,retryable:!1}}function He(e){const s=e?.task?.id;if(!s)return!1;const t=i.value.find(r=>r.taskId===s);if(!t)return{success:!1,retryable:!1};const n=e?.items||[];let a=!1;const o=t.items.map(r=>{const u=n.find(de=>M(de,r));if(!u)return r;const c=Array.isArray(u.countries)?u.countries:void 0,_=Array.isArray(r.countries)?r.countries:void 0,k=c&&c.length>0?c:_&&_.length>0?_:c??_,m=Array.isArray(u.previewRows)?u.previewRows:void 0,w=Array.isArray(r.previewRows)?r.previewRows:void 0,I=m&&m.length>0?m:w&&w.length>0?w:m??w,C={...r,...u,countries:k,previewRows:I,_pushed:r._pushed,_completed:r._completed};return JSON.stringify(C)!==JSON.stringify(r)&&(a=!0),C});for(const r of n)o.some(u=>M(u,r))||(o.push({...r,_pushed:!1,_completed:!1}),a=!0);return JSON.stringify(o)!==JSON.stringify(t.items)&&(t.items=o,a=!0),a&&ae(),a}async function oe(e){const s=e||U();if(s.length)try{const t=await as(s);se.value&&E.value&&(b.value="后端已恢复,继续执行当前任务并自动衔接后续任务..."),se.value=!1;let n=!1;for(const a of t.items||[]){const o=a?.task?.id;typeof o=="number"&&o>0&&(g.value[o]=a,He(a)&&(n=!0),_e(o)&&(n=!0))}n&&N()}catch(t){const n=(t instanceof Error?t.message:String(t||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(o=>n.includes(o.toLowerCase()))&&E.value&&(se.value=!0,b.value="当前任务运行中,正在等待后端服务恢复...")}}function Je(){return is()}function ue(e=!1){if(T.value){if(!e)return;clearTimeout(T.value),T.value=null}const s=async()=>{if(T.value=null,ee.value){ue();return}const t=U();if(!t.length)return;ee.value=!0;let n=!1,a=!1;try{await oe(t),await Ae();for(const o of t)Ie(o)&&(he(o),n=!0,a=!0)}finally{ee.value=!1}a?await O():n&&N(),U().length>0&&ue()};e?s():T.value=window.setTimeout(s,Je())}function ie(e=!1){T.value&&!e||ue(e)}function Z(e){const s=e.taskId?g.value[e.taskId]?.task?.status:null;return s==="SUCCESS"?{className:"success",text:"已完成"}:s==="FAILED"?{className:"failed",text:"失败"}:s==="RUNNING"?{className:"running",text:"执行中"}:e.taskStatus==="SUCCESS"?{className:"success",text:"已完成"}:e.taskStatus==="FAILED"?{className:"failed",text:"失败"}:e.taskStatus==="RUNNING"?{className:"running",text:"执行中"}:e.success?{className:"success",text:"已完成"}:{className:"failed",text:"失败"}}function Se(){T.value&&(window.clearTimeout(T.value),T.value=null),ce()}async function Te(e){const s=G();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const n of e){const a=typeof n=="string"?n:n.absolutePath,o=typeof n=="string"?void 0:n.relativePath,r=await s.upload_file_to_java(a,o);if(!r?.success||!r.data)throw new Error(r?.error||r?.message||`上传失败:${a}`);t.push(r.data)}return t}async function Ge(){const e=G();if(!e?.select_brand_xlsx_files){p.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await e.select_brand_xlsx_files();if(!s?.length)return;A.value=s,j.value=await Te(s),p.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function je(){const e=G();if(!e?.select_brand_folder){p.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await vs(s);if(!t.success||!t.items?.length){p.warning(t.error||"该文件夹下没有 xlsx 文件");return}A.value=t.items.map(n=>n.relativePath||n.absolutePath),j.value=await Te(t.items),p.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function ze(){if(!j.value.length){p.warning("请先选择待处理文件");return}try{B.value=!0;const e=await ls({files:j.value.map(a=>({fileKey:a.fileKey,originalFilename:a.originalFilename,relativePath:a.relativePath}))}),s=me(e.items||[]),t=s.some(a=>a.matchStatus==="MATCHED"),n=s.some(a=>a.matchStatus&&a.matchStatus!=="MATCHED");b.value=t?"解析完成,可在左侧点击“推送到 Python 队列”开始串行处理":"解析完成,当前没有可推送的已匹配文件",S.value="",s.length&&s[0].taskId&&ne(s[0].taskId,s,b.value,S.value),N(),n?p.warning("部分文件尚未命中可用店铺索引,已保留状态信息,请等待后台刷新后重试。"):t?p.success("删除品牌解析完成,请在左侧推送到 Python 队列"):p.warning("当前没有可推送的已匹配文件,请先等待店铺索引刷新。"),await O()}catch(e){p.error(e instanceof Error?e.message:"执行失败")}finally{B.value=!1}}async function Ce(e){const s=e.taskId;if(!s){p.warning("未找到任务ID");return}const t=G(),n=rs(s),a=e.outputFilename||e.sourceFilename||`delete-brand_${s}.xlsx`;if(t?.save_file_from_url_new){const o=await t.save_file_from_url_new(n,a);o.success?p.success(`已保存:${o.path||a}`):o.error&&o.error!=="用户取消"&&p.error(o.error);return}}async function O(){try{const e=await os();q.value=me(e.items||[]),qe(q.value),N(),await oe(),ie(!0)}catch(e){const s=(e instanceof Error?e.message:String(e||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(n=>s.includes(n.toLowerCase()))||console.error("loadHistory error:",e)}}function Ee(e){i.value.forEach(t=>{t.items=t.items.filter(n=>n.resultId!==e)});const s=i.value.length;i.value=i.value.filter(t=>t.items.length>0),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value)),q.value=q.value.filter(t=>t.resultId!==e),N(),U().length===0&&Se()}async function Fe(e){try{await us(e),Ee(e),await O(),p.success("已删除")}catch(s){const t=s instanceof Error?s.message:"删除失败";if(typeof t=="string"&&t.includes("记录不存在")){Ee(e),p.success("已删除");return}p.error(t)}}function Pe(e){const s=e.slice(0,5).map(n=>`${n.country}:${n.asin}${n.status?`(${n.status})`:""}`);return e.length-s.length>0?`${s.join("、")} 等 ${e.length} 条`:s.join("、")}function It(e,s){}function ce(){L.value&&(window.clearTimeout(L.value),L.value=null)}function Ve(e=3e3){ce(),L.value=window.setTimeout(()=>{L.value=null,Ae().catch(()=>{})},e)}function Qe(e){return e.includes("当前店铺正在执行中")}function Re(){for(const e of i.value)for(const s of e.items){const t=P(s);if(t==="已入队"||t==="处理中")return!0}return!1}function K(e){return e.resultId!=null?`result:${e.resultId}`:`task:${e.taskId||0}:${e.sourceFilename||""}`}function xe(e){return!!(e.taskId&&(e.matchStatus==="MATCHED"||e.matched))}function Ne(){return F.value.find(e=>!xe(e)||K(e)===D.value||x(e.taskId,e)?._completed?!1:P(e)==="未入队")}async function $e(e,s){if(s?.auto&&Re())return e.taskId,e.sourceFilename,{success:!1,retryable:!0};const t=G(),n=e.taskId;if(!n)return{success:!1,retryable:!1};const a=i.value.find(c=>c.taskId===n);if(!a)return{success:!1,retryable:!1};if(!t?.enqueue_json)return p.error("当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)"),{success:!1,retryable:!1};const o={type:"delete-brand-run",ts:Date.now(),data:{taskId:n,items:[e]}};S.value=JSON.stringify(o,null,2);const r=await t.enqueue_json(o);let u="";if(r?.success){u=`已推送文件 ${e.sourceFilename},当前队列长度:${r.queue_size??"-"}`;const c=x(n,e);return c&&(c._pushed=!0,c._completed=!1),D.value=K(e),ne(n,a.items,u,S.value),ie(!0),b.value=u,{success:!0,retryable:!1}}else{const c=r?.error||"未知错误";if(u=`推送到 Python 队列失败:${c}`,b.value=u,ne(n,a.items,u,S.value),s?.auto&&Qe(c))return{success:!1,retryable:!0}}return b.value=u,{success:!1,retryable:!1}}async function Xe(){const e=Ne();if(!e){p.warning("当前没有可推送的已匹配文件");return}V.value=!0,E.value=!0,ce();const s=await $e(e);if(V.value=!1,!s.success){E.value=!1,D.value="";return}p.success("已开始按顺序推送到 Python 队列")}async function Ae(){if(!E.value||Q.value){E.value,Q.value;return}if(Re())return;const e=D.value;if(e){const t=F.value.find(n=>K(n)===e);if(t){const n=t.taskId,a=R(n);a&&(_e(n),P(t),void 0);const o=P(t);if(o==="已入队"||o==="处理中"){t.sourceFilename;return}if(a){const r=x(n,t);if(r&&!r._completed){t.sourceFilename,r._pushed,r._completed;return}}}}const s=Ne();if(!s){D.value="",E.value=!1;return}Q.value=!0;try{s.taskId,s.sourceFilename,K(s);const t=await $e(s,{auto:!0});if(!t.success){if(t.retryable){s.taskId,s.sourceFilename,Ve();return}s.taskId,s.sourceFilename,E.value=!1}}finally{Q.value=!1}}return Ze(()=>{Be();const e=U();e.length>0?oe(e).then(async()=>{let s=!1,t=!1;for(const n of e)Ie(n)&&(he(n),s=!0,t=!0);t?await O():s&&N(),ie(!0)}):N(),O().catch(()=>{})}),es(()=>{Se()}),(e,s)=>(d(),f("div",hs,[ss(ts,{active:"delete-brand"}),l("div",ps,[l("aside",_s,[s[2]||(s[2]=l("div",{class:"section-title"},"选择文件",-1)),l("div",ys,[s[0]||(s[0]=l("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),l("div",{class:"btns"},[l("button",{type:"button",class:"opt-btn",onClick:Ge},"选择 Excel 文件"),l("button",{type:"button",class:"opt-btn",onClick:je},"选择文件夹")]),l("div",gs,[A.value.length?(d(),f(H,{key:0},[(d(!0),f(H,null,fe(te.value,t=>(d(),f("span",{key:t},v(t),1))),128)),A.value.length>te.value.length?(d(),f("span",ms," 还有 "+v(A.value.length-te.value.length)+" 个文件未展开显示 ",1)):h("",!0)],64)):(d(),f("span",ks,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=ns('
执行说明
',2)),l("div",ws,[l("button",{type:"button",class:"btn-run",disabled:B.value,onClick:ze},v(B.value?"解析中...":"开始解析"),9,Is),l("button",{type:"button",class:"btn-run btn-queue",disabled:V.value||!Ue.value.length,onClick:Xe},v(V.value?"推送中...":"推送到 Python 队列"),9,bs),l("span",Ss,v(B.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),b.value||S.value?(d(),f("div",Ts,[s[1]||(s[1]=l("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),b.value?(d(),f("div",Cs,v(b.value),1)):h("",!0),S.value?(d(),f("pre",Es,v(S.value),1)):h("",!0)])):h("",!0)]),l("section",Fs,[s[12]||(s[12]=l("div",{class:"panel-header"},"删除品牌结果",-1)),l("div",Ps,[l("div",Rs,[l("div",xs,[s[4]||(s[4]=l("span",{class:"summary-label"},"已处理文件",-1)),l("strong",null,v(z.value.total),1)]),l("div",Ns,[s[5]||(s[5]=l("span",{class:"summary-label"},"成功结果",-1)),l("strong",null,v(z.value.successCount),1)]),l("div",$s,[s[6]||(s[6]=l("span",{class:"summary-label"},"失败文件",-1)),l("strong",null,v(z.value.failedCount),1)])]),l("div",As,[s[11]||(s[11]=l("div",{class:"result-list-header"},[l("span",null,"删除品牌结果列表")],-1)),Le.value?(d(),f(H,{key:1},[F.value.length?(d(),f("div",Ms,[s[8]||(s[8]=l("div",{class:"result-subsection-title"},"当前任务",-1)),l("ul",Bs,[(d(!0),f(H,null,fe(F.value,t=>(d(),f("li",{key:`current-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[l("div",qs,[l("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,Ls),l("div",Us,"店铺名:"+v(t.shopName||"-"),1),l("div",Os,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",Ks,"平台:"+v(t.platform),1)):h("",!0),P(t)?(d(),f("div",Hs,"队列状态:"+v(P(t)),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",Js,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",Gs,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",js,[l("div",zs,[s[7]||(s[7]=l("span",null,"任务进度",-1)),l("span",null,v(Y(t))+"%",1)]),l("div",Vs,[l("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),l("div",Qs,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",Xs,v(Pe(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",Ws,"错误信息:"+v(W(t)),1)):h("",!0)]),l("div",Ys,[l("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:n=>Ce(t)}," 下载 ",8,Zs)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:n=>Fe(t.resultId)}," 删除 ",8,et)):h("",!0)])]))),128))])])):h("",!0),X.value.length?(d(),f("div",st,[s[10]||(s[10]=l("div",{class:"result-subsection-title"},"历史记录",-1)),l("ul",tt,[(d(!0),f(H,null,fe(X.value,t=>(d(),f("li",{key:`history-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[l("div",nt,[l("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,at),l("div",lt,"店铺名:"+v(t.shopName||"-"),1),l("div",rt,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",ot,"平台:"+v(t.platform),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",ut,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",it,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",ct,[l("div",dt,[s[9]||(s[9]=l("span",null,"任务进度",-1)),l("span",null,v(Y(t))+"%",1)]),l("div",ft,[l("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),l("div",vt,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",ht,v(Pe(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",pt,"错误信息:"+v(W(t)),1)):h("",!0)]),l("div",_t,[l("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:n=>Ce(t)}," 下载 ",8,yt)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:n=>Fe(t.resultId)}," 删除 ",8,gt)):h("",!0)])]))),128))])])):h("",!0)],64)):(d(),f("div",Ds," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),kt=cs(mt,[["__scopeId","data-v-64ee024e"]]);ds(kt).use(fs).mount("#app"); diff --git a/app/assets/split.js b/app/assets/split.js index 6e5da81..ad4852d 100644 --- a/app/assets/split.js +++ b/app/assets/split.js @@ -1 +1 @@ -import{d as G,o as J,a,c as n,b as L,B as O,e,F as S,r as $,t as i,f as v,n as x,w as k,s as V,C as M,g as c,h as Q,i as F,E as r,D as W,G as X,m as Y,v as Z,H as ss,_ as es,p as ts,q as ls}from"./pywebview-9YBa--7x.js";import{e as as}from"./brand-CRmRvyGD.js";const ns={class:"page-shell module-page"},os={class:"main-content"},is={class:"left-panel"},rs={class:"upload-zone"},us={class:"selected-files clean-placeholder split-selected-files"},cs={key:0,class:"more-line"},ds={key:1},ps={class:"option-group column-option-group"},vs={class:"column-toolbar"},fs={class:"column-count"},_s={class:"column-actions"},ms={key:0,class:"column-grid"},ys=["value"],gs={key:1,class:"empty-column-state"},hs={class:"option-group"},bs={class:"radio-item active"},ws={class:"desc"},ks={class:"option-group"},Cs={class:"option-group"},Ss={key:0,class:"split-input-card"},xs={key:1,class:"split-input-card"},Fs={class:"run-row"},Es=["disabled"],Ps={class:"loading-msg"},$s={class:"right-panel"},Bs={class:"task-list-wrap"},Rs={class:"clean-result-summary"},Is={class:"summary-card"},Us={class:"summary-card"},Vs={class:"summary-card"},Ms={class:"result-list-wrap"},Ts={key:0,class:"empty-tasks"},Ds={key:1,class:"task-list clean-result-list"},Hs={class:"left split-result-main"},Ns=["title"],js={key:0,class:"files"},As={key:1,class:"time"},Ks={key:2,class:"files"},zs={key:3,class:"files split-entry-list"},qs={key:4,class:"files"},Gs={class:"task-right split-result-actions"},Js=["onClick"],Ls=["onClick"],Os=G({__name:"BrandSplitTab",setup(Ws){const f=c([]),C=c(""),d=c([]),_=c([]),p=c([]),B=c(0),u=c("rows_per_file"),m=c(2e3),y=c(5),g=c(!1),h=c([]),b=c({total:0,successCount:0,failedCount:0,items:[]}),E=Q(()=>f.value.slice(0,8));function T(l){b.value={total:l.length,successCount:l.filter(s=>s.success).length,failedCount:l.filter(s=>!s.success).length,items:l}}async function R(l){const s=F();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const o of l){const U=typeof o=="string"?o:o.absolutePath,q=typeof o=="string"?void 0:o.relativePath,w=await s.upload_file_to_java(U,q);if(!w?.success||!w.data)throw new Error(w?.error||w?.message||`上传失败:${U}`);t.push(w.data)}return t}async function I(l){const s=await Y(l);_.value=s.headers||[],p.value=[...s.headers||[]],B.value=s.totalRows||0}async function D(l,s){f.value=l,C.value="",d.value=await R(l),d.value.length>0&&await I(d.value[0].fileKey),r.success(s)}async function H(){const l=F();if(!l?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await l.select_brand_xlsx_files();if(!s?.length)return;await D(s,`已选择 ${s.length} 个待拆分文件`)}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function N(){const l=F();if(!l?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await l.select_brand_folder();if(!s)return;C.value=s.split(/[/\\]/).filter(Boolean).pop()||"";const t=await as(s);if(t.success&&t.items?.length){f.value=t.items.map(o=>o.relativePath),d.value=await R(t.items),d.value.length>0&&await I(d.value[0].fileKey),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function j(){if(!d.value.length){r.warning("请先选择待拆分 Excel 文件或文件夹");return}if(!p.value.length){r.warning("请至少选择一列保留列");return}if(u.value==="rows_per_file"&&(!m.value||m.value<=0)){r.warning("请输入有效的每份条数");return}if(u.value==="parts"&&(!y.value||y.value<=0)){r.warning("请输入有效的拆分份数");return}try{g.value=!0;const l=await W({files:d.value.map(s=>({fileKey:s.fileKey,originalFilename:s.originalFilename,relativePath:s.relativePath})),selectedColumns:p.value,splitMode:u.value,rowsPerFile:u.value==="rows_per_file"&&m.value||void 0,parts:u.value==="parts"&&y.value||void 0,archiveName:d.value.some(s=>!!s.relativePath)&&C.value?C.value:void 0});b.value=l,h.value=l.items||[],await P(),r.success("数据拆分完成")}catch(l){r.error(l instanceof Error?l.message:"数据拆分失败")}finally{g.value=!1}}async function P(){try{const l=await X();h.value=l.items||[],T(h.value)}catch{}}async function A(l){try{await ss(l),await P(),r.success("已删除")}catch(s){r.error(s instanceof Error?s.message:"删除失败")}}function K(l){const s=l.slice(0,4).map(o=>o.rowCount!==void 0?`${o.filename}(${o.rowCount}条)`:o.filename);return l.length-s.length>0?`${s.join("、")} 等 ${l.length} 个文件`:s.join("、")}async function z(l){const s=F();if(!l.downloadUrl){r.warning("当前结果没有下载地址");return}const t=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.zip`;if(s?.save_file_from_url_new){const o=await s.save_file_from_url_new(l.downloadUrl,t);o.success?r.success(`已保存:${o.path||t}`):o.error&&o.error!=="用户取消"&&r.error(o.error);return}}return J(()=>{P().catch(()=>{})}),(l,s)=>(a(),n("div",ns,[L(O,{active:"split"}),e("div",os,[e("aside",is,[s[14]||(s[14]=e("div",{class:"section-title"},"选择文件",-1)),e("div",rs,[s[7]||(s[7]=e("div",{class:"hint"},"选择需要拆分的 Excel 文件或文件夹,按规则拆成多个 Excel 文件。",-1)),e("div",{class:"btns"},[e("button",{type:"button",class:"opt-btn",onClick:H},"选择 Excel 文件"),e("button",{type:"button",class:"opt-btn",onClick:N},"选择文件夹")]),e("div",us,[f.value.length?(a(),n(S,{key:0},[(a(!0),n(S,null,$(E.value,t=>(a(),n("span",{key:t},i(t),1))),128)),f.value.length>E.value.length?(a(),n("span",cs," 还有 "+i(f.value.length-E.value.length)+" 个文件未展开显示 ",1)):v("",!0)],64)):(a(),n("span",ds,"暂未选择待拆分文件"))])]),s[15]||(s[15]=e("div",{class:"section-title"},"保留列设置",-1)),e("div",ps,[e("div",vs,[e("span",fs,"已选择 "+i(p.value.length)+" / "+i(_.value.length)+" 列",1),e("div",_s,[e("button",{type:"button",class:"opt-btn small",onClick:s[0]||(s[0]=t=>p.value=[..._.value])},"全选"),e("button",{type:"button",class:"opt-btn small",onClick:s[1]||(s[1]=t=>p.value=[])},"清空")])]),_.value.length?(a(),n("div",ms,[(a(!0),n(S,null,$(_.value,t=>(a(),n("label",{key:t,class:x(["column-item",{active:p.value.includes(t)}])},[k(e("input",{"onUpdate:modelValue":s[2]||(s[2]=o=>p.value=o),type:"checkbox",value:t},null,8,ys),[[Z,p.value]]),e("span",null,i(t),1)],2))),128))])):(a(),n("div",gs,"请选择 Excel 文件后读取表头并填充可保留列"))]),s[16]||(s[16]=e("div",{class:"section-title"},"总条数",-1)),e("div",hs,[e("label",bs,[s[9]||(s[9]=e("input",{type:"checkbox",checked:"",disabled:""},null,-1)),e("div",null,[s[8]||(s[8]=e("span",{class:"label"},"当前数据总条数",-1)),e("div",ws,i(B.value)+" 条(不含表头)",1)])])]),s[17]||(s[17]=e("div",{class:"section-title"},"拆分模式",-1)),e("div",ks,[e("label",{class:x(["radio-item",{active:u.value==="rows_per_file"}])},[k(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>u.value=t),type:"radio",value:"rows_per_file",name:"split-mode"},null,512),[[V,u.value]]),s[10]||(s[10]=e("div",null,[e("span",{class:"label"},"按每份条数"),e("div",{class:"desc"},"例如每份 2000 条,最后一份放剩余数据")],-1))],2),e("label",{class:x(["radio-item",{active:u.value==="parts"}])},[k(e("input",{"onUpdate:modelValue":s[4]||(s[4]=t=>u.value=t),type:"radio",value:"parts",name:"split-mode"},null,512),[[V,u.value]]),s[11]||(s[11]=e("div",null,[e("span",{class:"label"},"按份数平均拆分"),e("div",{class:"desc"},"例如拆 5 份,按总条数尽量平均分配")],-1))],2)]),s[18]||(s[18]=e("div",{class:"section-title"},"拆分参数",-1)),e("div",Cs,[u.value==="rows_per_file"?(a(),n("label",Ss,[s[12]||(s[12]=e("span",{class:"label"},"每份条数",-1)),k(e("input",{"onUpdate:modelValue":s[5]||(s[5]=t=>m.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 2000"},null,512),[[M,m.value,void 0,{number:!0}]])])):(a(),n("label",xs,[s[13]||(s[13]=e("span",{class:"label"},"拆分份数",-1)),k(e("input",{"onUpdate:modelValue":s[6]||(s[6]=t=>y.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 5"},null,512),[[M,y.value,void 0,{number:!0}]])]))]),e("div",Fs,[e("button",{type:"button",class:"btn-run",disabled:g.value,onClick:j},i(g.value?"拆分中...":"开始拆分"),9,Es),e("span",Ps,i(g.value?"正在拆分并上传结果,请稍候…":"选择文件、保留列和拆分规则后即可执行拆分,结果会显示在右侧供下载"),1)])]),e("section",$s,[s[23]||(s[23]=e("div",{class:"panel-header"},"拆分结果",-1)),e("div",Bs,[e("div",Rs,[e("div",Is,[s[19]||(s[19]=e("span",{class:"summary-label"},"已处理文件",-1)),e("strong",null,i(b.value.total),1)]),e("div",Us,[s[20]||(s[20]=e("span",{class:"summary-label"},"成功结果",-1)),e("strong",null,i(b.value.successCount),1)]),e("div",Vs,[s[21]||(s[21]=e("span",{class:"summary-label"},"失败文件",-1)),e("strong",null,i(b.value.failedCount),1)])]),e("div",Ms,[s[22]||(s[22]=e("div",{class:"result-list-header"},[e("span",null,"拆分结果压缩包列表")],-1)),h.value.length===0?(a(),n("div",Ts," 暂无拆分结果,完成数据拆分后会在这里展示压缩包文件 ")):(a(),n("ul",Ds,[(a(!0),n(S,null,$(h.value,t=>(a(),n("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}-${t.rowCount||0}`,class:"task-item split-result-item"},[e("div",Hs,[e("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Ns),t.outputFilename?(a(),n("div",js,"压缩包文件:"+i(t.outputFilename),1)):v("",!0),t.rowCount!==void 0?(a(),n("div",As,"压缩包共包含 "+i(t.rowCount)+" 条数据",1)):v("",!0),t.entryCount&&t.entryCount>0?(a(),n("div",Ks,"压缩包内共 "+i(t.entryCount)+" 个拆分文件 ",1)):v("",!0),t.entries&&t.entries.length?(a(),n("div",zs," 压缩包内容:"+i(K(t.entries)),1)):v("",!0),t.error?(a(),n("div",qs,"错误信息:"+i(t.error),1)):v("",!0)]),e("div",Gs,[e("span",{class:x(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(a(),n("button",{key:0,type:"button",class:"download",onClick:o=>z(t)}," 下载压缩包 ",8,Js)):v("",!0),t.resultId?(a(),n("button",{key:1,type:"button",class:"btn-delete",onClick:o=>A(t.resultId)}," 删除 ",8,Ls)):v("",!0)])]))),128))]))])])])])]))}}),Qs=es(Os,[["__scopeId","data-v-c5a98d6b"]]);ts(Qs).use(ls).mount("#app"); +import{d as G,o as J,a,c as n,b as L,B as O,e,F as S,r as $,t as i,f as v,n as x,w as k,s as V,C as M,g as c,h as Q,i as F,E as r,D as W,G as X,m as Y,v as Z,H as ss,_ as es,p as ts,q as ls}from"./pywebview-CeWJDVeG.js";import{e as as}from"./brand-UU-ckLq6.js";const ns={class:"page-shell module-page"},os={class:"main-content"},is={class:"left-panel"},rs={class:"upload-zone"},us={class:"selected-files clean-placeholder split-selected-files"},cs={key:0,class:"more-line"},ds={key:1},ps={class:"option-group column-option-group"},vs={class:"column-toolbar"},fs={class:"column-count"},_s={class:"column-actions"},ms={key:0,class:"column-grid"},ys=["value"],gs={key:1,class:"empty-column-state"},hs={class:"option-group"},bs={class:"radio-item active"},ws={class:"desc"},ks={class:"option-group"},Cs={class:"option-group"},Ss={key:0,class:"split-input-card"},xs={key:1,class:"split-input-card"},Fs={class:"run-row"},Es=["disabled"],Ps={class:"loading-msg"},$s={class:"right-panel"},Bs={class:"task-list-wrap"},Rs={class:"clean-result-summary"},Is={class:"summary-card"},Us={class:"summary-card"},Vs={class:"summary-card"},Ms={class:"result-list-wrap"},Ts={key:0,class:"empty-tasks"},Ds={key:1,class:"task-list clean-result-list"},Hs={class:"left split-result-main"},Ns=["title"],js={key:0,class:"files"},As={key:1,class:"time"},Ks={key:2,class:"files"},zs={key:3,class:"files split-entry-list"},qs={key:4,class:"files"},Gs={class:"task-right split-result-actions"},Js=["onClick"],Ls=["onClick"],Os=G({__name:"BrandSplitTab",setup(Ws){const f=c([]),C=c(""),d=c([]),_=c([]),p=c([]),B=c(0),u=c("rows_per_file"),m=c(2e3),y=c(5),g=c(!1),h=c([]),b=c({total:0,successCount:0,failedCount:0,items:[]}),E=Q(()=>f.value.slice(0,8));function T(l){b.value={total:l.length,successCount:l.filter(s=>s.success).length,failedCount:l.filter(s=>!s.success).length,items:l}}async function R(l){const s=F();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const o of l){const U=typeof o=="string"?o:o.absolutePath,q=typeof o=="string"?void 0:o.relativePath,w=await s.upload_file_to_java(U,q);if(!w?.success||!w.data)throw new Error(w?.error||w?.message||`上传失败:${U}`);t.push(w.data)}return t}async function I(l){const s=await Y(l);_.value=s.headers||[],p.value=[...s.headers||[]],B.value=s.totalRows||0}async function D(l,s){f.value=l,C.value="",d.value=await R(l),d.value.length>0&&await I(d.value[0].fileKey),r.success(s)}async function H(){const l=F();if(!l?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await l.select_brand_xlsx_files();if(!s?.length)return;await D(s,`已选择 ${s.length} 个待拆分文件`)}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function N(){const l=F();if(!l?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await l.select_brand_folder();if(!s)return;C.value=s.split(/[/\\]/).filter(Boolean).pop()||"";const t=await as(s);if(t.success&&t.items?.length){f.value=t.items.map(o=>o.relativePath),d.value=await R(t.items),d.value.length>0&&await I(d.value[0].fileKey),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function j(){if(!d.value.length){r.warning("请先选择待拆分 Excel 文件或文件夹");return}if(!p.value.length){r.warning("请至少选择一列保留列");return}if(u.value==="rows_per_file"&&(!m.value||m.value<=0)){r.warning("请输入有效的每份条数");return}if(u.value==="parts"&&(!y.value||y.value<=0)){r.warning("请输入有效的拆分份数");return}try{g.value=!0;const l=await W({files:d.value.map(s=>({fileKey:s.fileKey,originalFilename:s.originalFilename,relativePath:s.relativePath})),selectedColumns:p.value,splitMode:u.value,rowsPerFile:u.value==="rows_per_file"&&m.value||void 0,parts:u.value==="parts"&&y.value||void 0,archiveName:d.value.some(s=>!!s.relativePath)&&C.value?C.value:void 0});b.value=l,h.value=l.items||[],await P(),r.success("数据拆分完成")}catch(l){r.error(l instanceof Error?l.message:"数据拆分失败")}finally{g.value=!1}}async function P(){try{const l=await X();h.value=l.items||[],T(h.value)}catch{}}async function A(l){try{await ss(l),await P(),r.success("已删除")}catch(s){r.error(s instanceof Error?s.message:"删除失败")}}function K(l){const s=l.slice(0,4).map(o=>o.rowCount!==void 0?`${o.filename}(${o.rowCount}条)`:o.filename);return l.length-s.length>0?`${s.join("、")} 等 ${l.length} 个文件`:s.join("、")}async function z(l){const s=F();if(!l.downloadUrl){r.warning("当前结果没有下载地址");return}const t=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.zip`;if(s?.save_file_from_url_new){const o=await s.save_file_from_url_new(l.downloadUrl,t);o.success?r.success(`已保存:${o.path||t}`):o.error&&o.error!=="用户取消"&&r.error(o.error);return}}return J(()=>{P().catch(()=>{})}),(l,s)=>(a(),n("div",ns,[L(O,{active:"split"}),e("div",os,[e("aside",is,[s[14]||(s[14]=e("div",{class:"section-title"},"选择文件",-1)),e("div",rs,[s[7]||(s[7]=e("div",{class:"hint"},"选择需要拆分的 Excel 文件或文件夹,按规则拆成多个 Excel 文件。",-1)),e("div",{class:"btns"},[e("button",{type:"button",class:"opt-btn",onClick:H},"选择 Excel 文件"),e("button",{type:"button",class:"opt-btn",onClick:N},"选择文件夹")]),e("div",us,[f.value.length?(a(),n(S,{key:0},[(a(!0),n(S,null,$(E.value,t=>(a(),n("span",{key:t},i(t),1))),128)),f.value.length>E.value.length?(a(),n("span",cs," 还有 "+i(f.value.length-E.value.length)+" 个文件未展开显示 ",1)):v("",!0)],64)):(a(),n("span",ds,"暂未选择待拆分文件"))])]),s[15]||(s[15]=e("div",{class:"section-title"},"保留列设置",-1)),e("div",ps,[e("div",vs,[e("span",fs,"已选择 "+i(p.value.length)+" / "+i(_.value.length)+" 列",1),e("div",_s,[e("button",{type:"button",class:"opt-btn small",onClick:s[0]||(s[0]=t=>p.value=[..._.value])},"全选"),e("button",{type:"button",class:"opt-btn small",onClick:s[1]||(s[1]=t=>p.value=[])},"清空")])]),_.value.length?(a(),n("div",ms,[(a(!0),n(S,null,$(_.value,t=>(a(),n("label",{key:t,class:x(["column-item",{active:p.value.includes(t)}])},[k(e("input",{"onUpdate:modelValue":s[2]||(s[2]=o=>p.value=o),type:"checkbox",value:t},null,8,ys),[[Z,p.value]]),e("span",null,i(t),1)],2))),128))])):(a(),n("div",gs,"请选择 Excel 文件后读取表头并填充可保留列"))]),s[16]||(s[16]=e("div",{class:"section-title"},"总条数",-1)),e("div",hs,[e("label",bs,[s[9]||(s[9]=e("input",{type:"checkbox",checked:"",disabled:""},null,-1)),e("div",null,[s[8]||(s[8]=e("span",{class:"label"},"当前数据总条数",-1)),e("div",ws,i(B.value)+" 条(不含表头)",1)])])]),s[17]||(s[17]=e("div",{class:"section-title"},"拆分模式",-1)),e("div",ks,[e("label",{class:x(["radio-item",{active:u.value==="rows_per_file"}])},[k(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>u.value=t),type:"radio",value:"rows_per_file",name:"split-mode"},null,512),[[V,u.value]]),s[10]||(s[10]=e("div",null,[e("span",{class:"label"},"按每份条数"),e("div",{class:"desc"},"例如每份 2000 条,最后一份放剩余数据")],-1))],2),e("label",{class:x(["radio-item",{active:u.value==="parts"}])},[k(e("input",{"onUpdate:modelValue":s[4]||(s[4]=t=>u.value=t),type:"radio",value:"parts",name:"split-mode"},null,512),[[V,u.value]]),s[11]||(s[11]=e("div",null,[e("span",{class:"label"},"按份数平均拆分"),e("div",{class:"desc"},"例如拆 5 份,按总条数尽量平均分配")],-1))],2)]),s[18]||(s[18]=e("div",{class:"section-title"},"拆分参数",-1)),e("div",Cs,[u.value==="rows_per_file"?(a(),n("label",Ss,[s[12]||(s[12]=e("span",{class:"label"},"每份条数",-1)),k(e("input",{"onUpdate:modelValue":s[5]||(s[5]=t=>m.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 2000"},null,512),[[M,m.value,void 0,{number:!0}]])])):(a(),n("label",xs,[s[13]||(s[13]=e("span",{class:"label"},"拆分份数",-1)),k(e("input",{"onUpdate:modelValue":s[6]||(s[6]=t=>y.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 5"},null,512),[[M,y.value,void 0,{number:!0}]])]))]),e("div",Fs,[e("button",{type:"button",class:"btn-run",disabled:g.value,onClick:j},i(g.value?"拆分中...":"开始拆分"),9,Es),e("span",Ps,i(g.value?"正在拆分并上传结果,请稍候…":"选择文件、保留列和拆分规则后即可执行拆分,结果会显示在右侧供下载"),1)])]),e("section",$s,[s[23]||(s[23]=e("div",{class:"panel-header"},"拆分结果",-1)),e("div",Bs,[e("div",Rs,[e("div",Is,[s[19]||(s[19]=e("span",{class:"summary-label"},"已处理文件",-1)),e("strong",null,i(b.value.total),1)]),e("div",Us,[s[20]||(s[20]=e("span",{class:"summary-label"},"成功结果",-1)),e("strong",null,i(b.value.successCount),1)]),e("div",Vs,[s[21]||(s[21]=e("span",{class:"summary-label"},"失败文件",-1)),e("strong",null,i(b.value.failedCount),1)])]),e("div",Ms,[s[22]||(s[22]=e("div",{class:"result-list-header"},[e("span",null,"拆分结果压缩包列表")],-1)),h.value.length===0?(a(),n("div",Ts," 暂无拆分结果,完成数据拆分后会在这里展示压缩包文件 ")):(a(),n("ul",Ds,[(a(!0),n(S,null,$(h.value,t=>(a(),n("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}-${t.rowCount||0}`,class:"task-item split-result-item"},[e("div",Hs,[e("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Ns),t.outputFilename?(a(),n("div",js,"压缩包文件:"+i(t.outputFilename),1)):v("",!0),t.rowCount!==void 0?(a(),n("div",As,"压缩包共包含 "+i(t.rowCount)+" 条数据",1)):v("",!0),t.entryCount&&t.entryCount>0?(a(),n("div",Ks,"压缩包内共 "+i(t.entryCount)+" 个拆分文件 ",1)):v("",!0),t.entries&&t.entries.length?(a(),n("div",zs," 压缩包内容:"+i(K(t.entries)),1)):v("",!0),t.error?(a(),n("div",qs,"错误信息:"+i(t.error),1)):v("",!0)]),e("div",Gs,[e("span",{class:x(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&t.downloadUrl?(a(),n("button",{key:0,type:"button",class:"download",onClick:o=>z(t)}," 下载压缩包 ",8,Js)):v("",!0),t.resultId?(a(),n("button",{key:1,type:"button",class:"btn-delete",onClick:o=>A(t.resultId)}," 删除 ",8,Ls)):v("",!0)])]))),128))]))])])])])]))}}),Qs=es(Os,[["__scopeId","data-v-c5a98d6b"]]);ts(Qs).use(ls).mount("#app"); diff --git a/app/main.py b/app/main.py index f8bdcdd..be4fba7 100644 --- a/app/main.py +++ b/app/main.py @@ -433,7 +433,7 @@ def main(): webview.start( debug=True, storage_path=cache_path, - private_mode=True + private_mode=False ) diff --git a/app/new_web_source/convert.html b/app/new_web_source/convert.html index 0be538b..7e695d2 100644 --- a/app/new_web_source/convert.html +++ b/app/new_web_source/convert.html @@ -5,9 +5,9 @@ 格式转换 - 数富AI - - - + + + diff --git a/app/new_web_source/dedupe.html b/app/new_web_source/dedupe.html index 0afd015..9a875cb 100644 --- a/app/new_web_source/dedupe.html +++ b/app/new_web_source/dedupe.html @@ -5,9 +5,9 @@ 数据去重 - 数富AI - - - + + + diff --git a/app/new_web_source/delete-brand.html b/app/new_web_source/delete-brand.html index dd75db4..3ce8fa8 100644 --- a/app/new_web_source/delete-brand.html +++ b/app/new_web_source/delete-brand.html @@ -5,9 +5,9 @@ 删除品牌 - 数富AI - - - + + + diff --git a/app/new_web_source/split.html b/app/new_web_source/split.html index ce77955..516fa0a 100644 --- a/app/new_web_source/split.html +++ b/app/new_web_source/split.html @@ -5,9 +5,9 @@ 数据拆分 - 数富AI - - - + + + diff --git a/app/web_source/brand.html b/app/web_source/brand.html index dc30af9..68c93e4 100644 --- a/app/web_source/brand.html +++ b/app/web_source/brand.html @@ -413,7 +413,8 @@
商品风险解决 定时匹配 跟价 - 巡店删除 + 巡店删除 + 查询ASIN 取款 店铺状态查询 diff --git a/backend-java/src/main/java/com/nanri/aiimage/config/ModuleCleanupProperties.java b/backend-java/src/main/java/com/nanri/aiimage/config/ModuleCleanupProperties.java index f814efb..d98b8f5 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/config/ModuleCleanupProperties.java +++ b/backend-java/src/main/java/com/nanri/aiimage/config/ModuleCleanupProperties.java @@ -11,5 +11,5 @@ import java.util.List; public class ModuleCleanupProperties { private boolean enabled = true; private String cron = "0 0 0 * * *"; - private List moduleTypes = new ArrayList<>(List.of("DEDUPE", "SPLIT", "CONVERT", "DELETE_BRAND", "PRODUCT_RISK_RESOLVE", "PRICE_TRACK", "SHOP_MATCH", "PATROL_DELETE")); + private List moduleTypes = new ArrayList<>(List.of("DEDUPE", "SPLIT", "CONVERT", "DELETE_BRAND", "PRODUCT_RISK_RESOLVE", "PRICE_TRACK", "SHOP_MATCH", "PATROL_DELETE", "QUERY_ASIN")); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/permission/service/PermissionMenuSchemaInitializer.java b/backend-java/src/main/java/com/nanri/aiimage/modules/permission/service/PermissionMenuSchemaInitializer.java index fd309f9..346beac 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/permission/service/PermissionMenuSchemaInitializer.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/permission/service/PermissionMenuSchemaInitializer.java @@ -28,6 +28,7 @@ public class PermissionMenuSchemaInitializer { new DefaultAdminMenu("店铺密钥管理", "admin_shop_keys", "shop-keys", 40), new DefaultAdminMenu("店铺管理", "admin_shop_manage", "shop-manage", 50), new DefaultAdminMenu("跳过跟价ASIN", "admin_skip_price_asin", "skip-price-asin", 60), + new DefaultAdminMenu("查询ASIN", "admin_query_asin", "query-asin", 65), new DefaultAdminMenu("查看生成记录", "admin_history", "history", 70), new DefaultAdminMenu("版本管理", "admin_version", "version", 80) ); diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/pricetrack/service/PriceTrackTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/pricetrack/service/PriceTrackTaskService.java index 43fc570..6c43fb3 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/pricetrack/service/PriceTrackTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/pricetrack/service/PriceTrackTaskService.java @@ -1128,9 +1128,8 @@ public class PriceTrackTaskService { if (targetAsin == null || targetAsin.isBlank()) { continue; } - boolean removed = skipPriceAsinService.removeByShopCountryAndAsin(shopKey, countryCode, targetAsin); - log.info("[price-track] skip asin delete signal taskShop={} country={} asin={} removed={} reason={}", - shopKey, countryCode, targetAsin, removed, row.getDeleteReason()); + log.info("[price-track] skip asin delete signal ignored taskShop={} country={} asin={} reason={}", + shopKey, countryCode, targetAsin, row.getDeleteReason()); } } } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/productrisk/model/vo/ProductRiskShopQueueItemVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/productrisk/model/vo/ProductRiskShopQueueItemVo.java index 17fa8f0..16eecf0 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/productrisk/model/vo/ProductRiskShopQueueItemVo.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/productrisk/model/vo/ProductRiskShopQueueItemVo.java @@ -1,9 +1,13 @@ package com.nanri.aiimage.modules.productrisk.model.vo; import com.fasterxml.jackson.annotation.JsonProperty; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryAsinsDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.ArrayList; +import java.util.List; + /** * 与 Python 队列约定字段对齐,供前端原样推入 enqueue_json。 */ @@ -22,7 +26,7 @@ public class ProductRiskShopQueueItemVo { @Schema(description = "紫鸟侧店铺 ID(字符串),未命中时可能为空") private String shopId; - @Schema(description = "平台,如 亚马逊", example = "亚马逊") + @Schema(description = "平台,例如亚马逊", example = "亚马逊") private String platform; @JsonProperty("companyName") @@ -38,11 +42,14 @@ public class ProductRiskShopQueueItemVo { private Long matchedUserId; @JsonProperty("matchStatus") - @Schema( - description = "匹配状态码:如 MATCHED、PENDING、CONFLICT、INDEX_STALE 等,以后端为准。") + @Schema(description = "匹配状态码:如 MATCHED、PENDING、CONFLICT、INDEX_STALE 等,以后端为准") private String matchStatus; @JsonProperty("matchMessage") @Schema(description = "人类可读说明,供前端展示") private String matchMessage; + + @JsonProperty("queryAsins") + @Schema(description = "查询 ASIN 模块返回的后台维护 ASIN 数据;按全表聚合返回,不按当前店铺过滤") + private List queryAsins = new ArrayList<>(); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/controller/QueryAsinTaskController.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/controller/QueryAsinTaskController.java new file mode 100644 index 0000000..6e1a10f --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/controller/QueryAsinTaskController.java @@ -0,0 +1,374 @@ +package com.nanri.aiimage.modules.queryasin.controller; + +import com.nanri.aiimage.common.api.ApiResponse; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCreateTaskRequest; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinSubmitResultRequest; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinTaskBatchRequest; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinCreateTaskVo; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinHistoryVo; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinTaskBatchVo; +import com.nanri.aiimage.modules.queryasin.service.QueryAsinResolveService; +import com.nanri.aiimage.modules.queryasin.service.QueryAsinTaskService; +import com.nanri.aiimage.modules.productrisk.model.dto.ProductRiskCandidateAddRequest; +import com.nanri.aiimage.modules.productrisk.model.dto.ProductRiskMatchShopsRequest; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskCandidateVo; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskDashboardVo; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskMatchShopsVo; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ResponseStatusException; + +import java.io.InputStream; +import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/query-asin") +@Tag( + name = "查询ASIN", + description = "查询ASIN模块:管理备选店铺、批量匹配紫鸟店铺、创建任务、接收 Python 分片结果、自动收尾生成 Excel 并提供下载。涉及查询和删除的接口需要携带 user_id。") +public class QueryAsinTaskController { + + private final QueryAsinResolveService queryAsinResolveService; + private final QueryAsinTaskService queryAsinTaskService; + + @GetMapping("/candidates") + @Operation(summary = "查询备选店铺列表", description = "返回当前用户在查询ASIN模块中已保存的备选店铺。") + public ApiResponse> listCandidates( + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + return ApiResponse.success(queryAsinResolveService.listCandidates(userId)); + } + + @PostMapping("/candidates") + @Operation(summary = "新增备选店铺", description = "向查询ASIN备选区新增一条店铺记录,供后续匹配和创建任务使用。") + public ApiResponse addCandidate( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "新增备选店铺请求,需传入用户 ID 和店铺名。", + required = true, + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ProductRiskCandidateAddRequest.class), + examples = @ExampleObject( + name = "新增店铺示例", + value = """ + { + "user_id": 1, + "shop_name": "郭亚芳" + } + """))) + @Valid @RequestBody ProductRiskCandidateAddRequest request) { + return ApiResponse.success(queryAsinResolveService.addCandidate(request)); + } + + @DeleteMapping("/candidates/{id}") + @Operation(summary = "删除备选店铺", description = "删除当前用户名下的一条备选店铺记录。") + public ApiResponse deleteCandidate( + @Parameter(description = "备选店铺记录主键", example = "10") + @PathVariable Long id, + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + queryAsinResolveService.deleteCandidate(userId, id); + return ApiResponse.success(null); + } + + @PostMapping("/match-shops") + @Operation(summary = "批量匹配店铺", description = "根据店铺名批量匹配紫鸟店铺索引,返回是否命中、店铺 ID、平台、公司和匹配状态。") + public ApiResponse matchShops( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "批量匹配请求,传入 user_id 和待匹配的店铺名称列表。", + required = true, + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ProductRiskMatchShopsRequest.class), + examples = @ExampleObject( + name = "匹配店铺示例", + value = """ + { + "user_id": 1, + "shop_names": [ + "郭亚芳", + "示例店铺A" + ] + } + """))) + @Valid @RequestBody ProductRiskMatchShopsRequest request) { + return ApiResponse.success(queryAsinResolveService.matchShops(request)); + } + + @GetMapping("/dashboard") + @Operation(summary = "查询统计看板", description = "返回备选店铺数、已处理任务数、成功任务数和失败任务数。") + public ApiResponse dashboard( + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + return ApiResponse.success(queryAsinTaskService.dashboard(userId)); + } + + @GetMapping("/history") + @Operation(summary = "查询任务记录", description = "返回当前用户在查询ASIN模块中的当前任务和历史任务记录。") + public ApiResponse history( + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + return ApiResponse.success(queryAsinTaskService.listHistory(userId)); + } + + @PostMapping("/tasks/progress/batch") + @Operation(summary = "批量查询查询ASIN任务进度", description = "仅返回任务状态和店铺结果摘要,用于前端轮询降载。") + public ApiResponse taskProgressBatch(@Valid @RequestBody QueryAsinTaskBatchRequest request) { + return ApiResponse.success(queryAsinTaskService.getTaskProgressBatch(request.getTaskIds())); + } + + @PostMapping("/tasks") + @Operation(summary = "创建查询ASIN任务", description = "根据已匹配的店铺创建任务和占位结果记录,后续由 Python 端处理并回传结果。") + public ApiResponse createTask( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "创建任务请求。items 中每一项代表一个待处理店铺,需携带默认模板结构。", + required = true, + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = QueryAsinCreateTaskRequest.class), + examples = @ExampleObject( + name = "创建任务示例", + value = """ + { + "user_id": 1, + "items": [ + { + "shopName": "郭亚芳", + "matched": true, + "shopId": "27730548558377", + "platform": "亚马逊", + "companyName": "示例公司", + "matchStatus": "MATCHED", + "matchMessage": "索引已命中", + "countrySections": [ + { + "country": "德国", + "rows": [ + { + "status": "全部", + "quantity": "", + "deleteQuantity": "", + "processStatus": "" + } + ] + } + ], + "cartRatios": [ + { + "country": "德国", + "ratio": "" + } + ] + } + ] + } + """))) + @Valid @RequestBody QueryAsinCreateTaskRequest request) { + return ApiResponse.success(queryAsinTaskService.createTask(request)); + } + + @PostMapping("/tasks/{taskId}/result") + @Operation( + summary = "提交查询ASIN结果", + description = "供 Python 端回传处理结果。支持按店铺分片多次提交,服务端会合并分片、按店铺完成状态自动收尾,并在任务结束后生成 Excel。") + public ApiResponse submitResult( + @Parameter(description = "任务主键,必须是运行中的任务", example = "3089") + @PathVariable Long taskId, + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "查询ASIN结果回传请求。shops 表示本次提交的店铺结果分片列表。shopDone=true 表示该店铺已全部提交完成。", + required = true, + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = QueryAsinSubmitResultRequest.class), + examples = { + @ExampleObject( + name = "成功分片示例", + summary = "一个店铺分片回传,包含状态数据和购物车比例数据", + value = """ + { + "shops": [ + { + "shopName": "郭亚芳", + "submissionId": "query-asin:3089:郭亚芳:1711111111111", + "chunkIndex": 1, + "chunkTotal": 2, + "shopDone": false, + "countrySections": [ + { + "country": "德国", + "rows": [ + { + "status": "正常", + "quantity": "12", + "deleteQuantity": "3", + "processStatus": "处理中" + }, + { + "status": "下架", + "quantity": "2", + "deleteQuantity": "2", + "processStatus": "已完成" + } + ] + }, + { + "country": "英国", + "rows": [ + { + "status": "正常", + "quantity": "5", + "deleteQuantity": "1", + "processStatus": "处理中" + } + ] + } + ], + "cartRatios": [ + { + "country": "德国", + "ratio": "25%" + }, + { + "country": "英国", + "ratio": "18%" + } + ] + } + ] + } + """), + @ExampleObject( + name = "店铺完成示例", + summary = "最后一片提交完成后,将 shopDone 置为 true", + value = """ + { + "shops": [ + { + "shopName": "郭亚芳", + "submissionId": "query-asin:3089:郭亚芳:1711111111111", + "chunkIndex": 2, + "chunkTotal": 2, + "shopDone": true, + "countrySections": [ + { + "country": "法国", + "rows": [ + { + "status": "正常", + "quantity": "4", + "deleteQuantity": "0", + "processStatus": "已完成" + } + ] + } + ], + "cartRatios": [ + { + "country": "法国", + "ratio": "12%" + } + ] + } + ] + } + """), + @ExampleObject( + name = "失败示例", + summary = "店铺处理失败时直接回传错误信息", + value = """ + { + "shops": [ + { + "shopName": "郭亚芳", + "shopDone": true, + "error": "紫鸟页面加载超时,未能完成删除数据采集" + } + ] + } + """) + })) + @Valid @RequestBody QueryAsinSubmitResultRequest request, + jakarta.servlet.http.HttpServletResponse response) { + response.setCharacterEncoding(StandardCharsets.UTF_8.name()); + response.setContentType("application/json;charset=UTF-8"); + queryAsinTaskService.submitResult(taskId, request); + return ApiResponse.success(null); + } + + @GetMapping("/results/{resultId}/download") + @Operation(summary = "下载结果文件", description = "按结果记录下载服务端已生成并上传到 OSS 的查询ASIN Excel 文件。") + public void downloadResult( + @Parameter(description = "结果记录主键", example = "4599") + @PathVariable Long resultId, + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId, + jakarta.servlet.http.HttpServletResponse response) { + String url = queryAsinTaskService.resolveResultDownloadUrl(resultId, userId); + String filename = queryAsinTaskService.resolveResultDownloadFilename(resultId, userId); + if (url == null || url.isBlank()) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "暂无可下载结果"); + } + try { + String encodedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8).replace("+", "%20"); + response.setContentType("application/octet-stream"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, + "attachment; filename=\"" + filename + "\"; filename*=UTF-8''" + encodedFilename); + try (InputStream in = URI.create(url).toURL().openStream()) { + byte[] buffer = new byte[65536]; + int read; + while ((read = in.read(buffer)) != -1) { + response.getOutputStream().write(buffer, 0, read); + } + response.getOutputStream().flush(); + } + } catch (Exception ex) { + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "下载失败"); + } + } + + @DeleteMapping("/tasks/{taskId}") + @Operation(summary = "删除任务", description = "删除整条查询ASIN任务以及该任务下关联的所有结果记录。") + public ApiResponse deleteTask( + @Parameter(description = "任务主键", example = "3089") + @PathVariable Long taskId, + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + queryAsinTaskService.deleteTask(taskId, userId); + return ApiResponse.success(null); + } + + @DeleteMapping("/history/{resultId}") + @Operation(summary = "删除单条历史记录", description = "删除一条查询ASIN结果记录,并同步重算其所属任务状态。") + public ApiResponse deleteHistory( + @Parameter(description = "结果记录主键", example = "4599") + @PathVariable Long resultId, + @Parameter(name = "user_id", description = "当前用户 ID", required = true, in = ParameterIn.QUERY, example = "1") + @RequestParam("user_id") Long userId) { + queryAsinTaskService.deleteHistory(resultId, userId); + return ApiResponse.success(null); + } +} + + + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/mapper/QueryAsinShopCandidateMapper.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/mapper/QueryAsinShopCandidateMapper.java new file mode 100644 index 0000000..4b0a598 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/mapper/QueryAsinShopCandidateMapper.java @@ -0,0 +1,10 @@ +package com.nanri.aiimage.modules.queryasin.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nanri.aiimage.modules.queryasin.model.entity.QueryAsinShopCandidateEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface QueryAsinShopCandidateMapper extends BaseMapper { +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCartRatioDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCartRatioDto.java new file mode 100644 index 0000000..7b5e5a3 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCartRatioDto.java @@ -0,0 +1,16 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "购物车比例数据") +public class QueryAsinCartRatioDto { + + @Schema(description = "国家名称", example = "德国") + private String country; + + @Schema(description = "购物车比例", example = "25%") + private String ratio; +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryAsinsDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryAsinsDto.java new file mode 100644 index 0000000..99deac9 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryAsinsDto.java @@ -0,0 +1,18 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "查询 ASIN 国家维度 ASIN 列表") +public class QueryAsinCountryAsinsDto { + + @Schema(description = "国家编码,支持 DE、UK、FR、IT、ES", example = "DE") + private String country; + + @Schema(description = "该国家需要查询的 ASIN 列表") + private List asins = new ArrayList<>(); +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryMetricRowDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryMetricRowDto.java new file mode 100644 index 0000000..8be4dfa --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountryMetricRowDto.java @@ -0,0 +1,25 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "国家状态数据中的单行记录") +public class QueryAsinCountryMetricRowDto { + + @Schema(description = "商品状态", example = "正常") + private String status; + + @Schema(description = "该状态下的商品数量", example = "12") + private String quantity; + + @JsonProperty("deleteQuantity") + @Schema(description = "已删除数量", example = "3") + private String deleteQuantity; + + @JsonProperty("processStatus") + @Schema(description = "处理结果或处理状态", example = "处理中") + private String processStatus; +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountrySectionDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountrySectionDto.java new file mode 100644 index 0000000..903d538 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCountrySectionDto.java @@ -0,0 +1,19 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "单个国家的状态数据分组") +public class QueryAsinCountrySectionDto { + + @Schema(description = "国家名称", example = "德国") + private String country; + + @Schema(description = "该国家下的多行状态数据") + private List rows = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCreateTaskRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCreateTaskRequest.java new file mode 100644 index 0000000..cc72b82 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinCreateTaskRequest.java @@ -0,0 +1,27 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "创建查询ASIN任务请求") +public class QueryAsinCreateTaskRequest { + + @NotNull + @JsonProperty("user_id") + @Schema(description = "当前用户 ID", example = "1", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId; + + @Valid + @NotEmpty + @Schema(description = "待创建的店铺任务列表,通常由已匹配成功的店铺组成", requiredMode = Schema.RequiredMode.REQUIRED) + private List items = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinShopPayloadDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinShopPayloadDto.java new file mode 100644 index 0000000..de9ad04 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinShopPayloadDto.java @@ -0,0 +1,49 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "单个店铺的查询ASIN结果分片") +public class QueryAsinShopPayloadDto { + + @JsonProperty("shopName") + @Schema(description = "店铺名称,服务端按店铺名称聚合分片", example = "郭亚芳") + private String shopName; + + @Schema(description = "店铺处理失败时的错误信息;有值时该店铺会直接标记失败", example = "紫鸟页面加载超时,未能完成删除数据采集") + private String error; + + @JsonProperty("countrySections") + @Schema(description = "各国家的状态数据列表。同一国家可分多片提交,服务端会按顺序合并") + private List countrySections = new ArrayList<>(); + + @JsonProperty("cartRatios") + @Schema(description = "购物车比例数据列表,通常只在店铺首行展示") + private List cartRatios = new ArrayList<>(); + + @JsonProperty("queryAsins") + @Schema(description = "Python 回传的查询 ASIN 结果分片;如果 Python 仅透传后台 ASIN,也按该字段提交") + private List queryAsins = new ArrayList<>(); + + @JsonProperty("shopDone") + @Schema(description = "该店铺是否已全部提交完成。最后一片应传 true", example = "true") + private Boolean shopDone; + + @JsonProperty("submissionId") + @Schema(description = "本次店铺提交批次标识,便于问题排查与日志跟踪", example = "query-asin:3089:郭亚芳:1711111111111") + private String submissionId; + + @JsonProperty("chunkIndex") + @Schema(description = "当前分片序号,建议从 1 开始", example = "1") + private Integer chunkIndex; + + @JsonProperty("chunkTotal") + @Schema(description = "当前店铺总分片数", example = "2") + private Integer chunkTotal; +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinSubmitResultRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinSubmitResultRequest.java new file mode 100644 index 0000000..96d0cf1 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinSubmitResultRequest.java @@ -0,0 +1,20 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "查询ASIN结果回传请求") +public class QueryAsinSubmitResultRequest { + + @Valid + @NotEmpty + @Schema(description = "本次提交的店铺结果分片列表,支持一次提交多个店铺", requiredMode = Schema.RequiredMode.REQUIRED) + private List shops = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskBatchRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskBatchRequest.java new file mode 100644 index 0000000..81177db --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskBatchRequest.java @@ -0,0 +1,15 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinTaskBatchRequest { + + @NotEmpty(message = "taskIds 不能为空") + private List taskIds = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskItemDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskItemDto.java new file mode 100644 index 0000000..54a4c81 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/dto/QueryAsinTaskItemDto.java @@ -0,0 +1,45 @@ +package com.nanri.aiimage.modules.queryasin.model.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "查询ASIN任务中的单个店铺项") +public class QueryAsinTaskItemDto { + + @JsonProperty("shopName") + @Schema(description = "店铺名称", example = "郭亚芳") + private String shopName; + + @Schema(description = "该店铺是否已完成紫鸟匹配,创建任务时必须为 true", example = "true") + private boolean matched; + + @JsonProperty("shopId") + @Schema(description = "匹配到的紫鸟店铺 ID", example = "27730548558377") + private String shopId; + + @Schema(description = "店铺所属平台", example = "亚马逊") + private String platform; + + @JsonProperty("companyName") + @Schema(description = "店铺所属公司名称", example = "示例公司") + private String companyName; + + @JsonProperty("matchStatus") + @Schema(description = "匹配状态,例如 MATCHED、PENDING、CONFLICT、INDEX_STALE", example = "MATCHED") + private String matchStatus; + + @JsonProperty("matchMessage") + @Schema(description = "匹配状态说明", example = "索引已命中") + private String matchMessage; + + @Valid + @JsonProperty("queryAsins") + @Schema(description = "后台查询 ASIN 维护表中的国家 ASIN 列表;查询ASIN任务按全表返回,不按店铺过滤") + private List queryAsins = new ArrayList<>(); +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/entity/QueryAsinShopCandidateEntity.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/entity/QueryAsinShopCandidateEntity.java new file mode 100644 index 0000000..2233113 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/entity/QueryAsinShopCandidateEntity.java @@ -0,0 +1,20 @@ +package com.nanri.aiimage.modules.queryasin.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_query_asin_shop_candidate") +public class QueryAsinShopCandidateEntity { + + @TableId(type = IdType.AUTO) + private Long id; + private Long userId; + private String shopName; + private LocalDateTime createdAt; +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinCreateTaskVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinCreateTaskVo.java new file mode 100644 index 0000000..c251f6a --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinCreateTaskVo.java @@ -0,0 +1,14 @@ +package com.nanri.aiimage.modules.queryasin.model.vo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinCreateTaskVo { + + private Long taskId; + private List items = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinHistoryVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinHistoryVo.java new file mode 100644 index 0000000..ebebce8 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinHistoryVo.java @@ -0,0 +1,13 @@ +package com.nanri.aiimage.modules.queryasin.model.vo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinHistoryVo { + + private List items = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinResultItemVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinResultItemVo.java new file mode 100644 index 0000000..a9bb3b3 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinResultItemVo.java @@ -0,0 +1,57 @@ +package com.nanri.aiimage.modules.queryasin.model.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCartRatioDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryAsinsDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountrySectionDto; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinResultItemVo { + + private Long resultId; + private Long taskId; + + @JsonProperty("shopName") + private String shopName; + + @JsonProperty("shopId") + private String shopId; + + private String platform; + + @JsonProperty("companyName") + private String companyName; + + private boolean matched; + + @JsonProperty("matchStatus") + private String matchStatus; + + @JsonProperty("matchMessage") + private String matchMessage; + + @JsonProperty("taskStatus") + private String taskStatus; + + private Boolean success; + private String error; + private LocalDateTime createdAt; + private LocalDateTime finishedAt; + private String outputFilename; + private String downloadUrl; + + @JsonProperty("countrySections") + private List countrySections = new ArrayList<>(); + + @JsonProperty("cartRatios") + private List cartRatios = new ArrayList<>(); + + @JsonProperty("queryAsins") + private List queryAsins = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinTaskBatchVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinTaskBatchVo.java new file mode 100644 index 0000000..0bc2ed6 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/model/vo/QueryAsinTaskBatchVo.java @@ -0,0 +1,15 @@ +package com.nanri.aiimage.modules.queryasin.model.vo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinTaskBatchVo { + + private List items = new ArrayList<>(); + + private List missingTaskIds = new ArrayList<>(); +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinExcelAssemblyService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinExcelAssemblyService.java new file mode 100644 index 0000000..3cb680a --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinExcelAssemblyService.java @@ -0,0 +1,112 @@ +package com.nanri.aiimage.modules.queryasin.service; + +import com.nanri.aiimage.common.exception.BusinessException; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryAsinsDto; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinResultItemVo; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class QueryAsinExcelAssemblyService { + + private static final List COUNTRIES = List.of("DE", "UK", "FR", "IT", "ES"); + private static final String[] HEADER = {"店铺名", "德国", "英国", "法国", "意大利", "西班牙"}; + + public void writeWorkbook(File outputXlsx, List items) { + SXSSFWorkbook workbook = new SXSSFWorkbook(200); + workbook.setCompressTempFiles(true); + try (FileOutputStream outputStream = new FileOutputStream(outputXlsx)) { + Sheet sheet = workbook.createSheet("查询ASIN结果"); + Row headerRow = sheet.createRow(0); + for (int columnIndex = 0; columnIndex < HEADER.length; columnIndex++) { + headerRow.createCell(columnIndex).setCellValue(HEADER[columnIndex]); + sheet.setColumnWidth(columnIndex, (columnIndex == 0 ? 22 : 18) * 256); + } + + int rowIndex = 1; + for (QueryAsinResultItemVo item : items) { + if (item == null || Boolean.FALSE.equals(item.getSuccess())) { + continue; + } + Map> asinsByCountry = asinsByCountry(item.getQueryAsins()); + int maxRows = maxRows(asinsByCountry); + for (int i = 0; i < maxRows; i++) { + Row row = sheet.createRow(rowIndex++); + row.createCell(0).setCellValue(i == 0 ? safe(item.getShopName()) : ""); + for (int c = 0; c < COUNTRIES.size(); c++) { + List asins = asinsByCountry.get(COUNTRIES.get(c)); + row.createCell(c + 1).setCellValue(asins != null && i < asins.size() ? safe(asins.get(i)) : ""); + } + } + rowIndex++; + } + workbook.write(outputStream); + } catch (Exception ex) { + log.warn("[query-asin] write workbook failed: {}", ex.getMessage()); + throw new BusinessException("generate query-asin excel failed: " + ex.getMessage()); + } finally { + try { + workbook.close(); + } catch (Exception ignored) { + } + workbook.dispose(); + } + } + + public int countRows(List items) { + int count = 0; + if (items == null) { + return 0; + } + for (QueryAsinResultItemVo item : items) { + if (item != null && !Boolean.FALSE.equals(item.getSuccess())) { + count += maxRows(asinsByCountry(item.getQueryAsins())); + } + } + return count; + } + + private Map> asinsByCountry(List queryAsins) { + Map> map = new LinkedHashMap<>(); + for (String country : COUNTRIES) { + map.put(country, List.of()); + } + if (queryAsins == null) { + return map; + } + for (QueryAsinCountryAsinsDto item : queryAsins) { + if (item == null || item.getCountry() == null) { + continue; + } + String country = item.getCountry().trim().toUpperCase(); + if (map.containsKey(country)) { + map.put(country, item.getAsins() == null ? List.of() : item.getAsins()); + } + } + return map; + } + + private int maxRows(Map> asinsByCountry) { + int max = 1; + for (List asins : asinsByCountry.values()) { + if (asins != null && asins.size() > max) { + max = asins.size(); + } + } + return max; + } + + private String safe(String value) { + return value == null ? "" : value; + } +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinResolveService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinResolveService.java new file mode 100644 index 0000000..d57234c --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinResolveService.java @@ -0,0 +1,221 @@ +package com.nanri.aiimage.modules.queryasin.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.nanri.aiimage.common.exception.BusinessException; +import com.nanri.aiimage.modules.productrisk.model.dto.ProductRiskCandidateAddRequest; +import com.nanri.aiimage.modules.productrisk.model.dto.ProductRiskMatchShopsRequest; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskCandidateVo; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskMatchShopsVo; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskShopQueueItemVo; +import com.nanri.aiimage.modules.queryasin.mapper.QueryAsinShopCandidateMapper; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryAsinsDto; +import com.nanri.aiimage.modules.queryasin.model.entity.QueryAsinShopCandidateEntity; +import com.nanri.aiimage.modules.shopkey.mapper.QueryAsinMapper; +import com.nanri.aiimage.modules.shopkey.model.entity.QueryAsinEntity; +import com.nanri.aiimage.modules.ziniao.model.vo.ZiniaoShopMatchResultVo; +import com.nanri.aiimage.modules.ziniao.service.ZiniaoShopIndexService; +import com.nanri.aiimage.modules.ziniao.service.ZiniaoShopSwitchService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Service +@RequiredArgsConstructor +public class QueryAsinResolveService { + + private final QueryAsinShopCandidateMapper candidateMapper; + private final ZiniaoShopSwitchService ziniaoShopSwitchService; + private final QueryAsinMapper queryAsinMapper; + + public List listCandidates(Long userId) { + validateUserId(userId); + List rows = candidateMapper.selectList( + new LambdaQueryWrapper() + .eq(QueryAsinShopCandidateEntity::getUserId, userId) + .orderByDesc(QueryAsinShopCandidateEntity::getId)); + List list = new ArrayList<>(); + for (QueryAsinShopCandidateEntity row : rows) { + ProductRiskCandidateVo vo = new ProductRiskCandidateVo(); + vo.setId(row.getId()); + vo.setShopName(row.getShopName()); + vo.setCreatedAt(row.getCreatedAt()); + list.add(vo); + } + return list; + } + + @Transactional + public ProductRiskCandidateVo addCandidate(ProductRiskCandidateAddRequest request) { + validateUserId(request.getUserId()); + String normalized = ziniaoShopSwitchService.normalizeShopName(request.getShopName()); + if (normalized.isBlank()) { + throw new BusinessException("店铺名不能为空"); + } + ZiniaoShopMatchResultVo indexHit = ziniaoShopSwitchService.findIndexedStoreByName(normalized, false); + if (indexHit == null || !indexHit.isMatched()) { + String hint = indexHit != null && indexHit.getMatchMessage() != null && !indexHit.getMatchMessage().isBlank() + ? indexHit.getMatchMessage() + : "店铺索引未命中,无法加入备选区"; + throw new BusinessException(hint); + } + if (ZiniaoShopIndexService.MATCH_STATUS_CONFLICT.equals(indexHit.getMatchStatus())) { + throw new BusinessException(indexHit.getMatchMessage() != null ? indexHit.getMatchMessage() : "存在多个同名店铺,请人工确认"); + } + QueryAsinShopCandidateEntity existing = candidateMapper.selectOne( + new LambdaQueryWrapper() + .eq(QueryAsinShopCandidateEntity::getUserId, request.getUserId()) + .eq(QueryAsinShopCandidateEntity::getShopName, normalized) + .last("limit 1")); + if (existing != null) { + ProductRiskCandidateVo vo = new ProductRiskCandidateVo(); + vo.setId(existing.getId()); + vo.setShopName(existing.getShopName()); + vo.setCreatedAt(existing.getCreatedAt()); + return vo; + } + QueryAsinShopCandidateEntity entity = new QueryAsinShopCandidateEntity(); + entity.setUserId(request.getUserId()); + entity.setShopName(normalized); + entity.setCreatedAt(LocalDateTime.now()); + candidateMapper.insert(entity); + + ProductRiskCandidateVo vo = new ProductRiskCandidateVo(); + vo.setId(entity.getId()); + vo.setShopName(entity.getShopName()); + vo.setCreatedAt(entity.getCreatedAt()); + return vo; + } + + @Transactional + public void deleteCandidate(Long userId, Long id) { + validateUserId(userId); + if (id == null || id <= 0) { + throw new BusinessException("id 不合法"); + } + QueryAsinShopCandidateEntity row = candidateMapper.selectById(id); + if (row == null || !userId.equals(row.getUserId())) { + throw new BusinessException("记录不存在"); + } + candidateMapper.deleteById(id); + } + + public ProductRiskMatchShopsVo matchShops(ProductRiskMatchShopsRequest request) { + validateUserId(request.getUserId()); + LinkedHashSet ordered = new LinkedHashSet<>(); + for (String raw : request.getShopNames()) { + String normalized = ziniaoShopSwitchService.normalizeShopName(raw); + if (!normalized.isBlank()) { + ordered.add(normalized); + } + } + if (ordered.isEmpty()) { + throw new BusinessException("shop_names 无有效店铺名"); + } + ProductRiskMatchShopsVo vo = new ProductRiskMatchShopsVo(); + for (String shopName : ordered) { + vo.getItems().add(matchOneShop(request.getUserId(), shopName)); + } + return vo; + } + + public List loadQueryAsinsForShop(Long userId, String shopName) { + validateUserId(userId); + String normalizedShopName = ziniaoShopSwitchService.normalizeShopName(shopName); + if (normalizedShopName.isBlank()) { + return List.of(); + } + List rows = queryAsinMapper.selectList( + new LambdaQueryWrapper().orderByAsc(QueryAsinEntity::getId)); + return toCountryAsins(rows); + } + + public long countCandidates(Long userId) { + validateUserId(userId); + Long count = candidateMapper.selectCount(new LambdaQueryWrapper() + .eq(QueryAsinShopCandidateEntity::getUserId, userId)); + return count == null ? 0L : count; + } + + private ProductRiskShopQueueItemVo matchOneShop(Long userId, String shopName) { + ProductRiskShopQueueItemVo item = new ProductRiskShopQueueItemVo(); + item.setShopName(shopName); + try { + ZiniaoShopMatchResultVo matched = ziniaoShopSwitchService.findIndexedStoreByName(shopName, false); + if (matched == null) { + item.setMatched(false); + item.setMatchStatus("PENDING"); + item.setMatchMessage("匹配结果为空"); + return item; + } + item.setMatched(matched.isMatched()); + item.setShopId(matched.getShopId()); + item.setPlatform(matched.getPlatform()); + item.setCompanyName(matched.getCompanyName()); + item.setMatchedUserId(matched.getMatchedUserId()); + item.setMatchStatus(matched.getMatchStatus()); + item.setMatchMessage(matched.getMatchMessage()); + item.setOpenStoreUrl(matched.getOpenStoreUrl()); + item.setQueryAsins(loadQueryAsinsForShop(userId, shopName)); + if (item.isMatched() && item.getQueryAsins().isEmpty()) { + item.setMatchMessage("紫鸟已匹配,但后台查询 ASIN 表暂无数据"); + } + } catch (BusinessException ex) { + item.setMatched(false); + item.setMatchStatus("PENDING"); + item.setMatchMessage(ex.getMessage()); + } catch (Exception ex) { + item.setMatched(false); + item.setMatchStatus("PENDING"); + item.setMatchMessage(Objects.toString(ex.getMessage(), "匹配异常")); + } + return item; + } + + private List toCountryAsins(List rows) { + Map> asinsByCountry = new LinkedHashMap<>(); + for (String country : List.of("DE", "UK", "FR", "IT", "ES")) { + asinsByCountry.put(country, new LinkedHashSet<>()); + } + if (rows != null) { + for (QueryAsinEntity row : rows) { + addAsin(asinsByCountry, "DE", row.getAsinDe()); + addAsin(asinsByCountry, "UK", row.getAsinUk()); + addAsin(asinsByCountry, "FR", row.getAsinFr()); + addAsin(asinsByCountry, "IT", row.getAsinIt()); + addAsin(asinsByCountry, "ES", row.getAsinEs()); + } + } + List out = new ArrayList<>(); + for (Map.Entry> entry : asinsByCountry.entrySet()) { + if (entry.getValue().isEmpty()) { + continue; + } + QueryAsinCountryAsinsDto dto = new QueryAsinCountryAsinsDto(); + dto.setCountry(entry.getKey()); + dto.setAsins(new ArrayList<>(entry.getValue())); + out.add(dto); + } + return out; + } + + private void addAsin(Map> map, String country, String asin) { + String normalized = asin == null ? "" : asin.trim().toUpperCase(); + if (!normalized.isEmpty()) { + map.get(country).add(normalized); + } + } + + private void validateUserId(Long userId) { + if (userId == null || userId <= 0) { + throw new BusinessException("user_id 不合法"); + } + } +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskCacheService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskCacheService.java new file mode 100644 index 0000000..4c8c4db --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskCacheService.java @@ -0,0 +1,168 @@ +package com.nanri.aiimage.modules.queryasin.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nanri.aiimage.config.TaskPressureProperties; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinShopPayloadDto; +import com.nanri.aiimage.modules.task.model.entity.FileTaskEntity; +import com.nanri.aiimage.modules.task.service.TaskScopePayloadStorageService; +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Service +@RequiredArgsConstructor +public class QueryAsinTaskCacheService { + + private static final String MODULE_TYPE = "QUERY_ASIN"; + private static final long PAYLOAD_TTL_HOURS = 24; + private final StringRedisTemplate stringRedisTemplate; + private final ObjectMapper objectMapper; + private final TaskPressureProperties taskPressureProperties; + private final TaskScopePayloadStorageService taskScopePayloadStorageService; + private final ConcurrentHashMap taskEntityLocalCache = new ConcurrentHashMap<>(); + + public QueryAsinShopPayloadDto getShopMergedPayload(Long taskId, String shopKey) { + return taskScopePayloadStorageService.getScopePayload(taskId, MODULE_TYPE, shopKey, QueryAsinShopPayloadDto.class); + } + + public void saveShopMergedPayload(Long taskId, String shopKey, QueryAsinShopPayloadDto payload) { + if (taskId == null || taskId <= 0 || shopKey == null || shopKey.isBlank() || payload == null) { + return; + } + taskScopePayloadStorageService.saveScopePayload(taskId, MODULE_TYPE, shopKey, payload); + touchTaskHeartbeat(taskId); + } + + public void removeShopMergedPayload(Long taskId, String shopKey) { + taskScopePayloadStorageService.removeScopePayload(taskId, MODULE_TYPE, shopKey); + } + + public Map getAllShopMergedPayload(Long taskId) { + return taskScopePayloadStorageService.getAllScopePayload(taskId, MODULE_TYPE, QueryAsinShopPayloadDto.class); + } + + public boolean hasAnyShopMergedPayload(Long taskId) { + return taskScopePayloadStorageService.hasAnyScopePayload(taskId, MODULE_TYPE); + } + + public long countShopMergedPayload(Long taskId) { + return taskScopePayloadStorageService.countScopePayload(taskId, MODULE_TYPE); + } + + public long getTaskHeartbeatMillis(Long taskId) { + if (taskId == null || taskId <= 0) { + return 0L; + } + String raw = stringRedisTemplate.opsForValue().get(buildTaskHeartbeatKey(taskId)); + if (raw == null || raw.isBlank()) { + return 0L; + } + try { + return Long.parseLong(raw); + } catch (NumberFormatException ignored) { + return 0L; + } + } + + public void touchTaskHeartbeat(Long taskId) { + stringRedisTemplate.opsForValue().set( + buildTaskHeartbeatKey(taskId), + String.valueOf(Instant.now().toEpochMilli()), + Duration.ofHours(PAYLOAD_TTL_HOURS)); + } + + public void deleteTaskCache(Long taskId) { + if (taskId == null || taskId <= 0) { + return; + } + taskEntityLocalCache.remove(taskId); + stringRedisTemplate.delete(buildTaskHeartbeatKey(taskId)); + stringRedisTemplate.delete(buildTaskEntityKey(taskId)); + taskScopePayloadStorageService.deleteTaskScopePayloads(taskId, MODULE_TYPE); + } + + public void saveTaskCache(FileTaskEntity task) { + if (task == null || task.getId() == null) { + return; + } + long now = System.currentTimeMillis(); + taskEntityLocalCache.put(task.getId(), new LocalTaskEntityCacheEntry( + now, + objectMapper.convertValue(task, FileTaskEntity.class) + )); + try { + stringRedisTemplate.opsForValue().set( + buildTaskEntityKey(task.getId()), + objectMapper.writeValueAsString(task), + Duration.ofHours(PAYLOAD_TTL_HOURS) + ); + } catch (Exception ignored) { + } + } + + public Map getTaskCacheBatch(java.util.List taskIds) { + Map result = new LinkedHashMap<>(); + if (taskIds == null || taskIds.isEmpty()) { + return result; + } + java.util.List normalized = taskIds.stream() + .filter(id -> id != null && id > 0) + .distinct() + .toList(); + if (normalized.isEmpty()) { + return result; + } + long now = System.currentTimeMillis(); + java.util.List missingIds = new ArrayList<>(); + for (Long taskId : normalized) { + LocalTaskEntityCacheEntry cached = taskEntityLocalCache.get(taskId); + if (isLocalCacheFresh(cached, now)) { + result.put(taskId, objectMapper.convertValue(cached.task(), FileTaskEntity.class)); + } else { + missingIds.add(taskId); + } + } + if (missingIds.isEmpty()) { + return result; + } + java.util.List keys = missingIds.stream().map(this::buildTaskEntityKey).toList(); + java.util.List values = stringRedisTemplate.opsForValue().multiGet(keys); + for (int i = 0; i < missingIds.size(); i++) { + Long taskId = missingIds.get(i); + String val = values != null && i < values.size() ? values.get(i) : null; + if (val == null || val.isBlank()) { + continue; + } + try { + FileTaskEntity task = objectMapper.readValue(val, FileTaskEntity.class); + result.put(taskId, task); + taskEntityLocalCache.put(taskId, new LocalTaskEntityCacheEntry(now, task)); + } catch (Exception ignored) { + } + } + return result; + } + + private String buildTaskHeartbeatKey(Long taskId) { + return "query-asin:task:heartbeat:" + taskId; + } + + private String buildTaskEntityKey(Long taskId) { + return "query-asin:task:entity:" + taskId; + } + + private boolean isLocalCacheFresh(LocalTaskEntityCacheEntry cached, long now) { + return cached != null + && now - cached.cachedAtMillis() <= Math.max(0L, taskPressureProperties.getLocalTaskEntityCacheMillis()); + } + + private record LocalTaskEntityCacheEntry(long cachedAtMillis, FileTaskEntity task) {} +} + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskService.java new file mode 100644 index 0000000..27eee63 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/queryasin/service/QueryAsinTaskService.java @@ -0,0 +1,960 @@ +package com.nanri.aiimage.modules.queryasin.service; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nanri.aiimage.common.exception.BusinessException; +import com.nanri.aiimage.config.TaskPressureProperties; +import com.nanri.aiimage.modules.file.service.oss.OssStorageService; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCartRatioDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryAsinsDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountryMetricRowDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCountrySectionDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinCreateTaskRequest; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinShopPayloadDto; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinSubmitResultRequest; +import com.nanri.aiimage.modules.queryasin.model.dto.QueryAsinTaskItemDto; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinTaskBatchVo; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinCreateTaskVo; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinHistoryVo; +import com.nanri.aiimage.modules.queryasin.model.vo.QueryAsinResultItemVo; +import com.nanri.aiimage.modules.productrisk.model.vo.ProductRiskDashboardVo; +import com.nanri.aiimage.modules.task.mapper.FileResultMapper; +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.ziniao.service.ZiniaoShopSwitchService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Service +@RequiredArgsConstructor +@Slf4j +public class QueryAsinTaskService { + + private static final String MODULE_TYPE = "QUERY_ASIN"; + private static final String CONTENT_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + private static final String INTERRUPTED_MESSAGE = "Python 在该店铺结果提交完成前中断"; + + private final FileTaskMapper fileTaskMapper; + private final FileResultMapper fileResultMapper; + private final QueryAsinResolveService queryAsinResolveService; + private final QueryAsinExcelAssemblyService excelAssemblyService; + private final QueryAsinTaskCacheService taskCacheService; + private final OssStorageService ossStorageService; + private final ZiniaoShopSwitchService ziniaoShopSwitchService; + private final ObjectMapper objectMapper; + private final TaskPressureProperties taskPressureProperties; + + private FileTaskEntity loadTaskForExecution(Long taskId) { + Map cachedTasks = taskCacheService.getTaskCacheBatch(List.of(taskId)); + FileTaskEntity cached = cachedTasks.get(taskId); + if (cached != null) { + return cached; + } + FileTaskEntity dbTask = fileTaskMapper.selectById(taskId); + if (dbTask != null && MODULE_TYPE.equals(dbTask.getModuleType())) { + taskCacheService.saveTaskCache(dbTask); + } + return dbTask; + } + + private Map loadTaskMapByIds(List taskIds) { + Map result = new LinkedHashMap<>(); + if (taskIds == null || taskIds.isEmpty()) { + return result; + } + List normalizedTaskIds = taskIds.stream() + .filter(taskId -> taskId != null && taskId > 0) + .distinct() + .toList(); + if (normalizedTaskIds.isEmpty()) { + return result; + } + Map cachedTasks = taskCacheService.getTaskCacheBatch(normalizedTaskIds); + result.putAll(cachedTasks); + List missingTaskIds = normalizedTaskIds.stream() + .filter(taskId -> !cachedTasks.containsKey(taskId)) + .toList(); + if (!missingTaskIds.isEmpty()) { + for (FileTaskEntity dbTask : selectTasksByIdsInBatches(missingTaskIds)) { + if (dbTask == null || !MODULE_TYPE.equals(dbTask.getModuleType())) { + continue; + } + result.put(dbTask.getId(), dbTask); + if ("RUNNING".equals(dbTask.getStatus())) { + taskCacheService.saveTaskCache(dbTask); + } + } + } + return result; + } + + private List selectTasksByIdsInBatches(List taskIds) { + List tasks = new ArrayList<>(); + if (taskIds == null || taskIds.isEmpty()) { + return tasks; + } + int batchSize = Math.max(1, taskPressureProperties.getDbSelectBatchSize()); + for (int start = 0; start < taskIds.size(); start += batchSize) { + int end = Math.min(start + batchSize, taskIds.size()); + tasks.addAll(fileTaskMapper.selectBatchIds(taskIds.subList(start, end))); + } + return tasks; + } + + public ProductRiskDashboardVo dashboard(Long userId) { + validateUserId(userId); + ProductRiskDashboardVo vo = new ProductRiskDashboardVo(); + vo.setCandidateCount(queryAsinResolveService.countCandidates(userId)); + vo.setProcessedTaskCount(countTasks(userId, List.of("SUCCESS", "FAILED"))); + vo.setSuccessTaskCount(countTasks(userId, List.of("SUCCESS"))); + vo.setFailedTaskCount(countTasks(userId, List.of("FAILED"))); + return vo; + } + + public QueryAsinHistoryVo listHistory(Long userId) { + validateUserId(userId); + QueryAsinHistoryVo vo = new QueryAsinHistoryVo(); + List entities = fileResultMapper.selectList(new LambdaQueryWrapper() + .eq(FileResultEntity::getModuleType, MODULE_TYPE) + .eq(FileResultEntity::getUserId, userId) + .orderByDesc(FileResultEntity::getCreatedAt) + .last("limit 100")); + if (entities.isEmpty()) { + vo.setItems(List.of()); + return vo; + } + + Map taskMap = loadTaskMap(entities); + Map> snapshotMap = buildSnapshotMap(taskMap); + List items = new ArrayList<>(); + for (FileResultEntity entity : entities) { + FileTaskEntity task = taskMap.get(entity.getTaskId()); + QueryAsinResultItemVo snapshot = snapshotMap.getOrDefault(entity.getTaskId(), Map.of()).get(entity.getId()); + items.add(toHistoryItem(entity, task, snapshot)); + } + vo.setItems(items); + return vo; + } + + public QueryAsinTaskBatchVo getTaskProgressBatch(List taskIds) { + QueryAsinTaskBatchVo batch = new QueryAsinTaskBatchVo(); + if (taskIds == null || taskIds.isEmpty()) { + return batch; + } + + List normalizedTaskIds = taskIds.stream() + .filter(taskId -> taskId != null && taskId > 0) + .distinct() + .limit(50) + .toList(); + if (normalizedTaskIds.isEmpty()) { + return batch; + } + + Map taskMap = loadTaskMapByIds(normalizedTaskIds); + List rows = fileResultMapper.selectList(new LambdaQueryWrapper() + .eq(FileResultEntity::getModuleType, MODULE_TYPE) + .in(FileResultEntity::getTaskId, normalizedTaskIds) + .orderByAsc(FileResultEntity::getId)); + Map> rowsByTaskId = new LinkedHashMap<>(); + for (FileResultEntity row : rows) { + rowsByTaskId.computeIfAbsent(row.getTaskId(), ignored -> new ArrayList<>()).add(row); + } + + for (Long taskId : normalizedTaskIds) { + FileTaskEntity task = taskMap.get(taskId); + if (task == null) { + batch.getMissingTaskIds().add(taskId); + continue; + } + List taskRows = rowsByTaskId.get(taskId); + if (taskRows == null || taskRows.isEmpty()) { + batch.getMissingTaskIds().add(taskId); + continue; + } + List snapshots = buildSnapshotFromDb(task, taskRows); + batch.getItems().addAll(snapshots); + } + return batch; + } + + public String resolveResultDownloadUrl(Long resultId, Long userId) { + FileResultEntity entity = fileResultMapper.selectById(resultId); + if (entity == null || !MODULE_TYPE.equals(entity.getModuleType()) || !userId.equals(entity.getUserId())) { + throw new BusinessException("记录不存在"); + } + if (blank(entity.getResultFileUrl())) { + throw new BusinessException("暂无可下载文件"); + } + return ossStorageService.generateFreshDownloadUrl(entity.getResultFileUrl()); + } + + public String resolveResultDownloadFilename(Long resultId, Long userId) { + FileResultEntity entity = fileResultMapper.selectById(resultId); + if (entity == null || !MODULE_TYPE.equals(entity.getModuleType()) || !userId.equals(entity.getUserId())) { + throw new BusinessException("记录不存在"); + } + return !blank(entity.getResultFilename()) + ? entity.getResultFilename() + : safeFileStem(entity.getSourceFilename()) + ".xlsx"; + } + + @Transactional + public QueryAsinCreateTaskVo createTask(QueryAsinCreateTaskRequest request) { + validateUserId(request.getUserId()); + if (request.getItems() == null || request.getItems().isEmpty()) { + throw new BusinessException("items 不能为空"); + } + + List uniqueItems = dedupeItems(request.getItems()); + if (uniqueItems.isEmpty()) { + throw new BusinessException("items 不能为空"); + } + for (QueryAsinTaskItemDto item : uniqueItems) { + if (item == null || !item.isMatched()) { + throw new BusinessException("存在未匹配店铺,无法创建任务"); + } + if (item.getQueryAsins() == null || item.getQueryAsins().isEmpty()) { + item.setQueryAsins(queryAsinResolveService.loadQueryAsinsForShop(request.getUserId(), item.getShopName())); + } + if (item.getQueryAsins() == null || item.getQueryAsins().isEmpty()) { + throw new BusinessException("后台查询 ASIN 表暂无数据,无法创建任务"); + } + } + + LocalDateTime now = LocalDateTime.now(); + FileTaskEntity task = new FileTaskEntity(); + task.setTaskNo(MODULE_TYPE + "-" + IdUtil.getSnowflakeNextIdStr()); + task.setModuleType(MODULE_TYPE); + task.setTaskMode("PYTHON_QUEUE"); + task.setStatus("RUNNING"); + task.setSourceFileCount(uniqueItems.size()); + task.setSuccessFileCount(0); + task.setFailedFileCount(0); + task.setCreatedBy("user:" + request.getUserId()); + task.setUserId(request.getUserId()); + task.setCreatedAt(now); + task.setUpdatedAt(now); + fileTaskMapper.insert(task); + taskCacheService.saveTaskCache(task); + taskCacheService.touchTaskHeartbeat(task.getId()); + + List snapshots = new ArrayList<>(); + for (QueryAsinTaskItemDto item : uniqueItems) { + String normalizedShopName = ziniaoShopSwitchService.normalizeShopName(item.getShopName()); + if (blank(normalizedShopName)) { + throw new BusinessException("任务数据已失效,请刷新后重试"); + } + FileResultEntity result = new FileResultEntity(); + result.setTaskId(task.getId()); + result.setModuleType(MODULE_TYPE); + result.setSourceFilename(normalizedShopName); + result.setSourceFileUrl(item.getShopId()); + result.setUserId(request.getUserId()); + result.setSuccess(null); + result.setCreatedAt(now); + fileResultMapper.insert(result); + snapshots.add(toSnapshotVo(result, item, task.getStatus(), null)); + } + persistTaskJson(task, uniqueItems, snapshots); + + QueryAsinCreateTaskVo vo = new QueryAsinCreateTaskVo(); + vo.setTaskId(task.getId()); + vo.setItems(snapshots); + return vo; + } + + @Transactional + public void submitResult(Long taskId, QueryAsinSubmitResultRequest request) { + if (taskId == null || taskId <= 0) { + throw new BusinessException("taskId 不合法"); + } + if (request == null || request.getShops() == null || request.getShops().isEmpty()) { + throw new BusinessException("shops 不能为空"); + } + + FileTaskEntity task = loadTaskForExecution(taskId); + if (task == null || !MODULE_TYPE.equals(task.getModuleType())) { + throw new BusinessException("任务不存在"); + } + if ("SUCCESS".equals(task.getStatus()) || "FAILED".equals(task.getStatus())) { + throw new BusinessException("任务已结束,拒绝重复提交"); + } + + taskCacheService.touchTaskHeartbeat(taskId); + List resultRows = listTaskRows(taskId); + List snapshots = buildSnapshotFromDb(task, resultRows); + Map snapshotByResultId = indexSnapshotByResultId(snapshots); + Map payloadByShop = normalizePayloadByShop(request.getShops()); + + for (FileResultEntity row : resultRows) { + String shopKey = row.getSourceFilename(); + QueryAsinShopPayloadDto incoming = payloadByShop.get(shopKey); + if (incoming == null) { + continue; + } + QueryAsinShopPayloadDto mergedPayload = mergeShopPayload(taskId, shopKey, incoming); + QueryAsinResultItemVo snapshot = snapshotByResultId.get(row.getId()); + mergePayloadIntoSnapshot(snapshot, mergedPayload); + + if (!blank(mergedPayload.getError())) { + markResultFailed(row, mergedPayload.getError()); + applyFailureToSnapshot(snapshot, mergedPayload.getError()); + taskCacheService.removeShopMergedPayload(taskId, shopKey); + continue; + } + + if (Boolean.TRUE.equals(mergedPayload.getShopDone())) { + markResultSuccess(row); + applySuccessToSnapshot(snapshot); + taskCacheService.removeShopMergedPayload(taskId, shopKey); + } + } + + persistSnapshotJson(task, snapshots); + fileTaskMapper.updateById(task); + tryFinalizeTask(taskId, false); + } + + @Transactional + public boolean tryFinalizeTask(Long taskId, boolean fromCompensation) { + if (taskId == null || taskId <= 0) { + return false; + } + FileTaskEntity task = loadTaskForExecution(taskId); + if (task == null || !MODULE_TYPE.equals(task.getModuleType())) { + return false; + } + if ("SUCCESS".equals(task.getStatus()) || "FAILED".equals(task.getStatus())) { + return true; + } + + List rows = listTaskRows(taskId); + if (rows.isEmpty()) { + return false; + } + + Map cachedPayloads = taskCacheService.getAllShopMergedPayload(taskId); + List snapshots = buildSnapshotFromDb(task, rows); + Map snapshotByResultId = indexSnapshotByResultId(snapshots); + boolean changed = false; + + for (FileResultEntity row : rows) { + if (isResultFinished(row)) { + continue; + } + QueryAsinResultItemVo snapshot = snapshotByResultId.get(row.getId()); + QueryAsinShopPayloadDto cached = cachedPayloads.get(row.getSourceFilename()); + if (cached == null) { + if (fromCompensation) { + markResultFailed(row, INTERRUPTED_MESSAGE); + applyFailureToSnapshot(snapshot, INTERRUPTED_MESSAGE); + changed = true; + } + continue; + } + + mergePayloadIntoSnapshot(snapshot, cached); + + if (!blank(cached.getError())) { + markResultFailed(row, cached.getError()); + applyFailureToSnapshot(snapshot, cached.getError()); + taskCacheService.removeShopMergedPayload(taskId, row.getSourceFilename()); + changed = true; + continue; + } + + if (Boolean.TRUE.equals(cached.getShopDone()) || (fromCompensation && hasAnyPayloadData(cached))) { + markResultSuccess(row); + applySuccessToSnapshot(snapshot); + taskCacheService.removeShopMergedPayload(taskId, row.getSourceFilename()); + changed = true; + continue; + } + + if (fromCompensation) { + markResultFailed(row, INTERRUPTED_MESSAGE); + applyFailureToSnapshot(snapshot, INTERRUPTED_MESSAGE); + taskCacheService.removeShopMergedPayload(taskId, row.getSourceFilename()); + changed = true; + } + } + + List latestRows = listTaskRows(taskId); + updateTaskStatusFromRows(task, latestRows); + if (latestRows.stream().allMatch(this::isResultFinished)) { + finalizeTaskWorkbook(task, latestRows, snapshots); + return true; + } + + persistSnapshotJson(task, snapshots); + fileTaskMapper.updateById(task); + return changed; + } + + @Transactional + public void deleteTask(Long taskId, Long userId) { + validateUserId(userId); + FileTaskEntity task = loadTaskForExecution(taskId); + if (task == null || !MODULE_TYPE.equals(task.getModuleType()) || !userId.equals(task.getUserId())) { + throw new BusinessException("任务不存在"); + } + fileResultMapper.delete(new LambdaQueryWrapper() + .eq(FileResultEntity::getTaskId, taskId) + .eq(FileResultEntity::getModuleType, MODULE_TYPE)); + fileTaskMapper.deleteById(taskId); + taskCacheService.deleteTaskCache(taskId); + } + + @Transactional + public void deleteHistory(Long resultId, Long userId) { + validateUserId(userId); + FileResultEntity entity = fileResultMapper.selectById(resultId); + if (entity == null || !MODULE_TYPE.equals(entity.getModuleType()) || !userId.equals(entity.getUserId())) { + throw new BusinessException("记录不存在"); + } + Long taskId = entity.getTaskId(); + fileResultMapper.deleteById(resultId); + reconcileTaskAfterResultRemoval(taskId); + } + + private void reconcileTaskAfterResultRemoval(Long taskId) { + if (taskId == null || taskId <= 0) { + return; + } + FileTaskEntity task = loadTaskForExecution(taskId); + if (task == null || !MODULE_TYPE.equals(task.getModuleType())) { + return; + } + List rows = listTaskRows(taskId); + if (rows.isEmpty()) { + fileTaskMapper.deleteById(taskId); + taskCacheService.deleteTaskCache(taskId); + return; + } + updateTaskStatusFromRows(task, rows); + persistSnapshotJson(task, buildSnapshotFromDb(task, rows)); + fileTaskMapper.updateById(task); + } + + private long countTasks(Long userId, List statuses) { + Long count = fileTaskMapper.selectCount(new LambdaQueryWrapper() + .eq(FileTaskEntity::getModuleType, MODULE_TYPE) + .eq(FileTaskEntity::getUserId, userId) + .in(FileTaskEntity::getStatus, statuses)); + return count == null ? 0L : count; + } + + private List listTaskRows(Long taskId) { + return fileResultMapper.selectList(new LambdaQueryWrapper() + .eq(FileResultEntity::getTaskId, taskId) + .eq(FileResultEntity::getModuleType, MODULE_TYPE) + .orderByAsc(FileResultEntity::getId)); + } + + private Map normalizePayloadByShop(List shops) { + Map payloadByShop = new LinkedHashMap<>(); + for (QueryAsinShopPayloadDto item : shops) { + if (item == null) { + continue; + } + String shopKey = ziniaoShopSwitchService.normalizeShopName(item.getShopName()); + if (blank(shopKey)) { + continue; + } + item.setShopName(shopKey); + payloadByShop.put(shopKey, item); + } + return payloadByShop; + } + + private Map loadTaskMap(List entities) { + List taskIds = entities.stream() + .map(FileResultEntity::getTaskId) + .filter(id -> id != null && id > 0) + .distinct() + .toList(); + Map taskMap = new LinkedHashMap<>(); + if (taskIds.isEmpty()) { + return taskMap; + } + for (FileTaskEntity task : selectTasksByIdsInBatches(taskIds)) { + if (task != null && MODULE_TYPE.equals(task.getModuleType())) { + taskMap.put(task.getId(), task); + } + } + return taskMap; + } + + private Map> buildSnapshotMap(Map taskMap) { + Map> out = new LinkedHashMap<>(); + for (Map.Entry entry : taskMap.entrySet()) { + out.put(entry.getKey(), indexSnapshotByResultId(parseTaskSnapshots(entry.getValue().getResultJson()))); + } + return out; + } + + private QueryAsinResultItemVo toHistoryItem(FileResultEntity entity, FileTaskEntity task, QueryAsinResultItemVo snapshot) { + QueryAsinResultItemVo item = snapshot != null ? snapshot : new QueryAsinResultItemVo(); + item.setResultId(entity.getId()); + item.setTaskId(entity.getTaskId()); + item.setShopName(firstNonBlank(item.getShopName(), entity.getSourceFilename())); + item.setShopId(firstNonBlank(item.getShopId(), entity.getSourceFileUrl())); + item.setTaskStatus(task != null ? task.getStatus() : item.getTaskStatus()); + item.setSuccess(entity.getSuccess() == null ? item.getSuccess() : entity.getSuccess() == 1); + item.setError(!blank(entity.getErrorMessage()) ? entity.getErrorMessage() : item.getError()); + item.setCreatedAt(entity.getCreatedAt()); + item.setFinishedAt(task != null ? task.getFinishedAt() : item.getFinishedAt()); + item.setOutputFilename(firstNonBlank(item.getOutputFilename(), entity.getResultFilename())); + item.setDownloadUrl(blank(entity.getResultFileUrl()) + ? item.getDownloadUrl() + : ossStorageService.generateFreshDownloadUrl(entity.getResultFileUrl())); + if (item.getCountrySections() == null) { + item.setCountrySections(new ArrayList<>()); + } + if (item.getCartRatios() == null) { + item.setCartRatios(new ArrayList<>()); + } + if (item.getQueryAsins() == null) { + item.setQueryAsins(new ArrayList<>()); + } + return item; + } + + private List dedupeItems(List items) { + LinkedHashMap map = new LinkedHashMap<>(); + for (QueryAsinTaskItemDto item : items) { + if (item == null) { + continue; + } + String normalizedShopName = ziniaoShopSwitchService.normalizeShopName(item.getShopName()); + if (blank(normalizedShopName)) { + continue; + } + item.setShopName(normalizedShopName); + String key = normalizedShopName + "::" + Objects.toString(item.getShopId(), ""); + map.put(key, item); + } + return new ArrayList<>(map.values()); + } + + private QueryAsinResultItemVo toSnapshotVo(FileResultEntity result, QueryAsinTaskItemDto item, String taskStatus, LocalDateTime finishedAt) { + QueryAsinResultItemVo vo = new QueryAsinResultItemVo(); + vo.setResultId(result.getId()); + vo.setTaskId(result.getTaskId()); + vo.setShopName(item.getShopName()); + vo.setShopId(item.getShopId()); + vo.setPlatform(item.getPlatform()); + vo.setCompanyName(item.getCompanyName()); + vo.setMatched(item.isMatched()); + vo.setMatchStatus(item.getMatchStatus()); + vo.setMatchMessage(item.getMatchMessage()); + vo.setTaskStatus(taskStatus); + vo.setSuccess(result.getSuccess() == null ? null : result.getSuccess() == 1); + vo.setError(result.getErrorMessage()); + vo.setCreatedAt(result.getCreatedAt()); + vo.setFinishedAt(finishedAt); + vo.setCountrySections(new ArrayList<>()); + vo.setCartRatios(new ArrayList<>()); + vo.setQueryAsins(copyCountryAsins(item.getQueryAsins())); + vo.setOutputFilename(result.getResultFilename()); + vo.setDownloadUrl(null); + return vo; + } + + private void persistTaskJson(FileTaskEntity task, List requestItems, List snapshots) { + try { + task.setRequestJson(objectMapper.writeValueAsString(requestItems)); + task.setResultJson(objectMapper.writeValueAsString(snapshots)); + fileTaskMapper.updateById(task); + } catch (Exception ex) { + throw new BusinessException("查询ASIN任务快照保存失败"); + } + } + + private List buildSnapshotFromDb(FileTaskEntity task, List rows) { + List existing = parseTaskSnapshots(task.getResultJson()); + Map snapshotByResultId = indexSnapshotByResultId(existing); + List list = new ArrayList<>(); + for (FileResultEntity row : rows) { + list.add(toHistoryItem(row, task, snapshotByResultId.get(row.getId()))); + } + return list; + } + + private Map indexSnapshotByResultId(List snapshots) { + Map map = new LinkedHashMap<>(); + if (snapshots == null) { + return map; + } + for (QueryAsinResultItemVo snapshot : snapshots) { + if (snapshot != null && snapshot.getResultId() != null) { + map.put(snapshot.getResultId(), snapshot); + } + } + return map; + } + + private void updateTaskStatusFromRows(FileTaskEntity task, List rows) { + long successCount = rows.stream().filter(row -> Integer.valueOf(1).equals(row.getSuccess())).count(); + long failedCount = rows.stream().filter(row -> Integer.valueOf(0).equals(row.getSuccess())).count(); + long pendingCount = rows.stream().filter(row -> !isResultFinished(row)).count(); + task.setSuccessFileCount((int) successCount); + task.setFailedFileCount((int) failedCount); + task.setUpdatedAt(LocalDateTime.now()); + if (pendingCount > 0) { + task.setStatus("RUNNING"); + task.setFinishedAt(null); + task.setErrorMessage(null); + return; + } + task.setStatus(failedCount > 0 ? "FAILED" : "SUCCESS"); + task.setFinishedAt(LocalDateTime.now()); + if (failedCount > 0) { + List errors = new ArrayList<>(); + for (FileResultEntity row : rows) { + if (!blank(row.getErrorMessage())) { + errors.add(row.getSourceFilename() + ": " + row.getErrorMessage()); + } + } + task.setErrorMessage(String.join("; ", errors)); + } else { + task.setErrorMessage(null); + } + } + + private QueryAsinShopPayloadDto mergeShopPayload(Long taskId, String shopKey, QueryAsinShopPayloadDto incoming) { + QueryAsinShopPayloadDto merged = taskCacheService.getShopMergedPayload(taskId, shopKey); + if (merged == null) { + merged = new QueryAsinShopPayloadDto(); + merged.setShopName(shopKey); + merged.setCountrySections(new ArrayList<>()); + merged.setCartRatios(new ArrayList<>()); + merged.setQueryAsins(new ArrayList<>()); + } + + merged.setShopName(firstNonBlank(incoming.getShopName(), merged.getShopName())); + merged.setSubmissionId(firstNonBlank(incoming.getSubmissionId(), merged.getSubmissionId())); + merged.setChunkIndex(incoming.getChunkIndex()); + merged.setChunkTotal(incoming.getChunkTotal()); + + if (!blank(incoming.getError())) { + merged.setError(incoming.getError().trim()); + merged.setShopDone(Boolean.TRUE); + taskCacheService.saveShopMergedPayload(taskId, shopKey, merged); + return merged; + } + + merged.setCountrySections(mergeCountrySections(merged.getCountrySections(), incoming.getCountrySections())); + merged.setCartRatios(mergeCartRatios(merged.getCartRatios(), incoming.getCartRatios())); + merged.setQueryAsins(mergeCountryAsins(merged.getQueryAsins(), incoming.getQueryAsins())); + if (Boolean.TRUE.equals(incoming.getShopDone())) { + merged.setShopDone(Boolean.TRUE); + } + taskCacheService.saveShopMergedPayload(taskId, shopKey, merged); + return merged; + } + + private void mergePayloadIntoSnapshot(QueryAsinResultItemVo snapshot, QueryAsinShopPayloadDto payload) { + if (snapshot == null || payload == null) { + return; + } + snapshot.setShopName(firstNonBlank(payload.getShopName(), snapshot.getShopName())); + snapshot.setCountrySections(copyCountrySections(payload.getCountrySections())); + snapshot.setCartRatios(copyCartRatios(payload.getCartRatios())); + if (payload.getQueryAsins() != null && !payload.getQueryAsins().isEmpty()) { + snapshot.setQueryAsins(copyCountryAsins(payload.getQueryAsins())); + } + if (!blank(payload.getError())) { + snapshot.setError(payload.getError().trim()); + } + } + + private void applySuccessToSnapshot(QueryAsinResultItemVo snapshot) { + if (snapshot == null) { + return; + } + snapshot.setSuccess(Boolean.TRUE); + snapshot.setError(null); + } + + private void applyFailureToSnapshot(QueryAsinResultItemVo snapshot, String error) { + if (snapshot == null) { + return; + } + snapshot.setSuccess(Boolean.FALSE); + snapshot.setError(blankToNull(error)); + } + + private List mergeCountrySections(List base, List incoming) { + Map map = new LinkedHashMap<>(); + for (QueryAsinCountrySectionDto section : copyCountrySections(base)) { + map.put(section.getCountry(), section); + } + for (QueryAsinCountrySectionDto section : copyCountrySections(incoming)) { + QueryAsinCountrySectionDto existing = map.get(section.getCountry()); + if (existing == null) { + map.put(section.getCountry(), section); + continue; + } + List mergedRows = existing.getRows() == null + ? new ArrayList<>() + : new ArrayList<>(existing.getRows()); + if (section.getRows() != null) { + mergedRows.addAll(section.getRows()); + } + existing.setRows(mergedRows); + } + return new ArrayList<>(map.values()); + } + + private List mergeCartRatios(List base, List incoming) { + Map map = new LinkedHashMap<>(); + for (QueryAsinCartRatioDto ratio : copyCartRatios(base)) { + map.put(ratio.getCountry(), ratio); + } + for (QueryAsinCartRatioDto ratio : copyCartRatios(incoming)) { + if (!blank(ratio.getCountry())) { + map.put(ratio.getCountry(), ratio); + } + } + return new ArrayList<>(map.values()); + } + + private List mergeCountryAsins(List base, List incoming) { + Map map = new LinkedHashMap<>(); + for (QueryAsinCountryAsinsDto item : copyCountryAsins(base)) { + map.put(item.getCountry(), item); + } + for (QueryAsinCountryAsinsDto item : copyCountryAsins(incoming)) { + if (blank(item.getCountry())) { + continue; + } + QueryAsinCountryAsinsDto existing = map.get(item.getCountry()); + if (existing == null) { + map.put(item.getCountry(), item); + continue; + } + List merged = new ArrayList<>(existing.getAsins() == null ? List.of() : existing.getAsins()); + for (String asin : item.getAsins() == null ? List.of() : item.getAsins()) { + String normalized = asin == null ? "" : asin.trim().toUpperCase(); + if (!normalized.isEmpty() && !merged.contains(normalized)) { + merged.add(normalized); + } + } + existing.setAsins(merged); + } + return new ArrayList<>(map.values()); + } + + private boolean hasAnyPayloadData(QueryAsinShopPayloadDto payload) { + if (payload == null) { + return false; + } + if (payload.getQueryAsins() != null) { + for (QueryAsinCountryAsinsDto item : payload.getQueryAsins()) { + if (item != null && item.getAsins() != null && !item.getAsins().isEmpty()) { + return true; + } + } + } + if (payload.getCountrySections() != null) { + for (QueryAsinCountrySectionDto section : payload.getCountrySections()) { + if (section == null || section.getRows() == null) { + continue; + } + for (QueryAsinCountryMetricRowDto row : section.getRows()) { + if (row != null && (!blank(row.getStatus()) + || !blank(row.getQuantity()) + || !blank(row.getDeleteQuantity()) + || !blank(row.getProcessStatus()))) { + return true; + } + } + } + } + if (payload.getCartRatios() != null) { + for (QueryAsinCartRatioDto ratio : payload.getCartRatios()) { + if (ratio != null && (!blank(ratio.getCountry()) || !blank(ratio.getRatio()))) { + return true; + } + } + } + return false; + } + + private void finalizeTaskWorkbook(FileTaskEntity task, List rows, List snapshots) { + List successItems = snapshots.stream() + .filter(item -> Boolean.TRUE.equals(item.getSuccess())) + .toList(); + if (!successItems.isEmpty()) { + File workRoot = FileUtil.mkdir(FileUtil.file(System.getProperty("java.io.tmpdir"), "query-asin-result", String.valueOf(task.getId()))); + String filename = safeFileStem("查询ASIN-" + task.getId()) + ".xlsx"; + File xlsx = FileUtil.file(workRoot, filename); + try { + excelAssemblyService.writeWorkbook(xlsx, successItems); + String objectKey = ossStorageService.uploadResultFile(xlsx, MODULE_TYPE); + long fileSize = xlsx.length(); + int rowCount = excelAssemblyService.countRows(successItems); + for (FileResultEntity row : rows) { + if (Integer.valueOf(1).equals(row.getSuccess())) { + row.setResultFilename(filename); + row.setResultFileUrl(objectKey); + row.setResultFileSize(fileSize); + row.setResultContentType(CONTENT_TYPE_XLSX); + row.setRowCount(rowCount); + fileResultMapper.updateById(row); + } + } + snapshots = buildSnapshotFromDb(task, rows); + } finally { + FileUtil.del(xlsx); + } + } + + persistSnapshotJson(task, snapshots); + fileTaskMapper.updateById(task); + taskCacheService.deleteTaskCache(task.getId()); + } + + private void markResultSuccess(FileResultEntity row) { + row.setSuccess(1); + row.setErrorMessage(null); + fileResultMapper.updateById(row); + } + + private void markResultFailed(FileResultEntity row, String message) { + row.setSuccess(0); + row.setErrorMessage(blankToNull(message)); + row.setResultFilename(null); + row.setResultFileUrl(null); + row.setResultFileSize(0L); + row.setResultContentType(null); + row.setRowCount(0); + fileResultMapper.updateById(row); + } + + private boolean isResultFinished(FileResultEntity row) { + return Integer.valueOf(1).equals(row.getSuccess()) || Integer.valueOf(0).equals(row.getSuccess()); + } + + private List parseTaskSnapshots(String json) { + if (blank(json)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(json, new TypeReference>() {}); + } catch (Exception ex) { + log.warn("[query-asin] parse task snapshot failed: {}", ex.getMessage()); + return new ArrayList<>(); + } + } + + private void persistSnapshotJson(FileTaskEntity task, List snapshots) { + try { + task.setResultJson(objectMapper.writeValueAsString(snapshots == null ? List.of() : snapshots)); + } catch (Exception ex) { + throw new BusinessException("查询ASIN任务快照保存失败"); + } + } + + private List copyCountrySections(List sections) { + List copy = new ArrayList<>(); + if (sections == null) { + return copy; + } + for (QueryAsinCountrySectionDto section : sections) { + if (section == null) { + continue; + } + QueryAsinCountrySectionDto item = new QueryAsinCountrySectionDto(); + item.setCountry(section.getCountry()); + item.setRows(section.getRows() == null ? new ArrayList<>() : new ArrayList<>(section.getRows())); + copy.add(item); + } + return copy; + } + + private List copyCartRatios(List ratios) { + List copy = new ArrayList<>(); + if (ratios == null) { + return copy; + } + for (QueryAsinCartRatioDto ratio : ratios) { + if (ratio == null) { + continue; + } + QueryAsinCartRatioDto item = new QueryAsinCartRatioDto(); + item.setCountry(ratio.getCountry()); + item.setRatio(ratio.getRatio()); + copy.add(item); + } + return copy; + } + + private List copyCountryAsins(List items) { + List copy = new ArrayList<>(); + if (items == null) { + return copy; + } + for (QueryAsinCountryAsinsDto source : items) { + if (source == null || blank(source.getCountry())) { + continue; + } + QueryAsinCountryAsinsDto item = new QueryAsinCountryAsinsDto(); + item.setCountry(source.getCountry().trim().toUpperCase()); + List asins = new ArrayList<>(); + if (source.getAsins() != null) { + for (String asin : source.getAsins()) { + String normalized = asin == null ? "" : asin.trim().toUpperCase(); + if (!normalized.isEmpty() && !asins.contains(normalized)) { + asins.add(normalized); + } + } + } + item.setAsins(asins); + copy.add(item); + } + return copy; + } + + private String firstNonBlank(String first, String second) { + return !blank(first) ? first : second; + } + + private String safeFileStem(String value) { + String raw = value == null ? "result" : value.trim(); + String safe = raw.replaceAll("[\\\\/:*?\"<>|]+", "_"); + return safe.isBlank() ? "result" : safe; + } + + private boolean blank(String value) { + return value == null || value.isBlank(); + } + + private String blankToNull(String value) { + return blank(value) ? null : value.trim(); + } + + private void validateUserId(Long userId) { + if (userId == null || userId <= 0) { + throw new BusinessException("user_id 不合法"); + } + } +} + + diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/QueryAsinController.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/QueryAsinController.java new file mode 100644 index 0000000..860bc7a --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/controller/QueryAsinController.java @@ -0,0 +1,125 @@ +package com.nanri.aiimage.modules.shopkey.controller; + +import com.nanri.aiimage.common.api.ApiResponse; +import com.nanri.aiimage.modules.shopkey.model.dto.QueryAsinCountryUpdateRequest; +import com.nanri.aiimage.modules.shopkey.model.dto.QueryAsinCreateRequest; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinImportProgressVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinImportStartVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinItemVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinPageVo; +import com.nanri.aiimage.modules.shopkey.service.QueryAsinService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/admin/query-asins") +@Tag(name = "查询 ASIN", description = "维护店铺按国家查询的 ASIN") +public class QueryAsinController { + + private final QueryAsinService queryAsinService; + + @GetMapping + @Operation(summary = "分页查询 ASIN") + public ApiResponse page( + @Parameter(description = "页码") @RequestParam(defaultValue = "1") Long page, + @Parameter(description = "每页数量") @RequestParam(defaultValue = "15") Long pageSize, + @Parameter(description = "分组ID") @RequestParam(required = false) Long groupId, + @Parameter(description = "店铺名") @RequestParam(required = false) String shopName, + @Parameter(description = "ASIN") @RequestParam(required = false) String asin, + @Parameter(description = "当前操作人用户ID") @RequestParam(required = false) Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin) { + return ApiResponse.success(queryAsinService.page( + page, + pageSize, + groupId, + shopName, + asin, + operatorId, + Boolean.TRUE.equals(superAdmin))); + } + + @PostMapping + @Operation(summary = "新增或覆盖查询 ASIN") + public ApiResponse create( + @Parameter(description = "当前操作人用户ID") @RequestParam Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin, + @Valid @RequestBody QueryAsinCreateRequest request) { + return ApiResponse.success("保存成功", + queryAsinService.createOrUpdate(request, operatorId, Boolean.TRUE.equals(superAdmin))); + } + + @PostMapping("/import") + @Operation(summary = "导入添加查询 ASIN") + public ApiResponse importExcel( + @Parameter(description = "xlsx/xls 文件", required = true) @RequestParam("file") MultipartFile file, + @Parameter(description = "Excel 未提供分组时使用的分组ID") @RequestParam(required = false) Long groupId, + @Parameter(description = "当前操作人用户ID") @RequestParam Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin) { + return ApiResponse.success("开始导入", + queryAsinService.startImport(file, groupId, operatorId, Boolean.TRUE.equals(superAdmin))); + } + + @GetMapping("/import/{importId}") + @Operation(summary = "查询导入添加进度") + public ApiResponse importProgress(@PathVariable String importId) { + return ApiResponse.success(queryAsinService.getImportProgress(importId)); + } + + @PostMapping("/delete-import") + @Operation(summary = "导入删除查询 ASIN") + public ApiResponse deleteImportExcel( + @Parameter(description = "xlsx/xls 文件", required = true) @RequestParam("file") MultipartFile file, + @Parameter(description = "Excel 未提供分组时使用的分组ID") @RequestParam(required = false) Long groupId, + @Parameter(description = "当前操作人用户ID") @RequestParam Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin) { + return ApiResponse.success("开始删除", + queryAsinService.startDeleteImport(file, groupId, operatorId, Boolean.TRUE.equals(superAdmin))); + } + + @GetMapping("/delete-import/{importId}") + @Operation(summary = "查询导入删除进度") + public ApiResponse deleteImportProgress(@PathVariable String importId) { + return ApiResponse.success(queryAsinService.getDeleteImportProgress(importId)); + } + + @PutMapping("/{id}/countries/{country}") + @Operation(summary = "编辑指定国家的查询 ASIN") + public ApiResponse updateCountry( + @Parameter(description = "主键ID", required = true) @PathVariable Long id, + @Parameter(description = "国家编码", required = true) @PathVariable String country, + @Parameter(description = "当前操作人用户ID") @RequestParam Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin, + @Valid @RequestBody QueryAsinCountryUpdateRequest request) { + return ApiResponse.success("保存成功", queryAsinService.updateCountry( + id, + country, + request.getAsin(), + operatorId, + Boolean.TRUE.equals(superAdmin))); + } + + @DeleteMapping("/{id}/countries/{country}") + @Operation(summary = "删除指定国家的查询 ASIN") + public ApiResponse deleteCountry( + @Parameter(description = "主键ID", required = true) @PathVariable Long id, + @Parameter(description = "国家编码", required = true) @PathVariable String country, + @Parameter(description = "当前操作人用户ID") @RequestParam Long operatorId, + @Parameter(description = "是否超级管理员") @RequestParam(defaultValue = "false") Boolean superAdmin) { + queryAsinService.deleteCountry(id, country, operatorId, Boolean.TRUE.equals(superAdmin)); + return ApiResponse.success("删除成功", null); + } +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/mapper/QueryAsinMapper.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/mapper/QueryAsinMapper.java new file mode 100644 index 0000000..4011b93 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/mapper/QueryAsinMapper.java @@ -0,0 +1,55 @@ +package com.nanri.aiimage.modules.shopkey.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nanri.aiimage.modules.shopkey.model.entity.QueryAsinEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Insert; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface QueryAsinMapper extends BaseMapper { + + @Select(""" + + """) + List selectByGroupIdsAndShopNames(@Param("groupIds") Collection groupIds, + @Param("shopNames") Collection shopNames); + + @Select(""" + + """) + List selectByShopNames(@Param("shopNames") Collection shopNames); + + @Insert(""" + + """) + int insertBatch(@Param("rows") List rows); +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCountryUpdateRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCountryUpdateRequest.java new file mode 100644 index 0000000..59e9704 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCountryUpdateRequest.java @@ -0,0 +1,13 @@ +package com.nanri.aiimage.modules.shopkey.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class QueryAsinCountryUpdateRequest { + + @Schema(description = "ASIN", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "ASIN 不能为空") + private String asin; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCreateRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCreateRequest.java new file mode 100644 index 0000000..995dc68 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/dto/QueryAsinCreateRequest.java @@ -0,0 +1,32 @@ +package com.nanri.aiimage.modules.shopkey.model.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class QueryAsinCreateRequest { + + @NotNull(message = "分组不能为空") + private Long groupId; + + @NotBlank(message = "店铺名不能为空") + private String shopName; + + @NotEmpty(message = "请至少选择一个国家") + private List countries; + + /** + * 兼容旧请求:选中的国家共用同一个 ASIN。 + */ + private String asin; + + /** + * 新请求:每个国家对应独立 ASIN,例如 {"DE":"B0...", "UK":"B0..."}。 + */ + private Map asinMappings; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/entity/QueryAsinEntity.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/entity/QueryAsinEntity.java new file mode 100644 index 0000000..795ec64 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/entity/QueryAsinEntity.java @@ -0,0 +1,44 @@ +package com.nanri.aiimage.modules.shopkey.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@TableName("biz_query_asin") +public class QueryAsinEntity { + + @TableId(type = IdType.AUTO) + private Long id; + + @TableField("group_id") + private Long groupId; + + @TableField("shop_name") + private String shopName; + + @TableField("asin_de") + private String asinDe; + + @TableField("asin_uk") + private String asinUk; + + @TableField("asin_fr") + private String asinFr; + + @TableField("asin_it") + private String asinIt; + + @TableField("asin_es") + private String asinEs; + + @TableField("created_at") + private LocalDateTime createdAt; + + @TableField("updated_at") + private LocalDateTime updatedAt; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportProgressVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportProgressVo.java new file mode 100644 index 0000000..4989861 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportProgressVo.java @@ -0,0 +1,16 @@ +package com.nanri.aiimage.modules.shopkey.model.vo; + +import lombok.Data; + +@Data +public class QueryAsinImportProgressVo { + + private String status; + private Integer totalRows; + private Integer processedRows; + private Integer asinCount; + private Integer insertedCount; + private Integer deletedCount; + private Integer skippedCount; + private String errorMessage; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportStartVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportStartVo.java new file mode 100644 index 0000000..f6644f2 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinImportStartVo.java @@ -0,0 +1,9 @@ +package com.nanri.aiimage.modules.shopkey.model.vo; + +import lombok.Data; + +@Data +public class QueryAsinImportStartVo { + + private String importId; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinItemVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinItemVo.java new file mode 100644 index 0000000..1b94a59 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinItemVo.java @@ -0,0 +1,21 @@ +package com.nanri.aiimage.modules.shopkey.model.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class QueryAsinItemVo { + + private Long id; + private Long groupId; + private String groupName; + private String shopName; + private String asinDe; + private String asinUk; + private String asinFr; + private String asinIt; + private String asinEs; + private LocalDateTime createdAt; + private LocalDateTime updatedAt; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinPageVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinPageVo.java new file mode 100644 index 0000000..b81f9c3 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/model/vo/QueryAsinPageVo.java @@ -0,0 +1,15 @@ +package com.nanri.aiimage.modules.shopkey.model.vo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QueryAsinPageVo { + + private List items = new ArrayList<>(); + private Long total = 0L; + private Long page = 1L; + private Long pageSize = 15L; +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/QueryAsinService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/QueryAsinService.java new file mode 100644 index 0000000..e8a39d7 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/QueryAsinService.java @@ -0,0 +1,828 @@ +package com.nanri.aiimage.modules.shopkey.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import cn.hutool.core.util.IdUtil; +import com.nanri.aiimage.common.exception.BusinessException; +import com.nanri.aiimage.common.util.ExcelStreamReader; +import com.nanri.aiimage.config.TaskPressureProperties; +import com.nanri.aiimage.modules.shopkey.mapper.QueryAsinMapper; +import com.nanri.aiimage.modules.shopkey.model.dto.QueryAsinCreateRequest; +import com.nanri.aiimage.modules.shopkey.model.entity.QueryAsinEntity; +import com.nanri.aiimage.modules.shopkey.model.entity.ShopManageGroupEntity; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinImportProgressVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinImportStartVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinItemVo; +import com.nanri.aiimage.modules.shopkey.model.vo.QueryAsinPageVo; +import com.nanri.aiimage.modules.shopkey.model.vo.ShopManageGroupItemVo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +@Service +@RequiredArgsConstructor +public class QueryAsinService { + + private static final List SUPPORTED_COUNTRIES = List.of("DE", "UK", "FR", "IT", "ES"); + private static final String KEY_SEPARATOR = Character.toString((char) 1); + private static final String UTF8_BOM = Character.toString(0xFEFF); + + private final QueryAsinMapper queryAsinMapper; + private final ShopManageGroupService shopManageGroupService; + private final TaskPressureProperties taskPressureProperties; + private final Map importProgressMap = new ConcurrentHashMap<>(); + private final Map deleteImportProgressMap = new ConcurrentHashMap<>(); + + public QueryAsinPageVo page(long page, long pageSize, Long groupId, String shopName, String asin, + Long operatorId, boolean superAdmin) { + long safePage = Math.max(page, 1); + long safePageSize = Math.min(Math.max(pageSize, 1), 100); + String safeShopName = normalizeBlank(shopName); + String safeAsin = normalizeBlank(asin); + Set accessibleGroupIds = superAdmin ? Set.of() : shopManageGroupService.listAccessibleGroupIds(operatorId, false); + + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(groupId != null && groupId > 0, QueryAsinEntity::getGroupId, groupId) + .like(!safeShopName.isEmpty(), QueryAsinEntity::getShopName, safeShopName) + .and(!safeAsin.isEmpty(), wrapper -> wrapper + .like(QueryAsinEntity::getAsinDe, safeAsin) + .or().like(QueryAsinEntity::getAsinUk, safeAsin) + .or().like(QueryAsinEntity::getAsinFr, safeAsin) + .or().like(QueryAsinEntity::getAsinIt, safeAsin) + .or().like(QueryAsinEntity::getAsinEs, safeAsin)) + .orderByDesc(QueryAsinEntity::getId); + + if (!superAdmin) { + if (accessibleGroupIds.isEmpty()) { + query.eq(QueryAsinEntity::getId, -1L); + } else { + query.in(QueryAsinEntity::getGroupId, accessibleGroupIds); + } + } + + Long total = queryAsinMapper.selectCount(query); + List rows = queryAsinMapper + .selectList(query.last("LIMIT " + ((safePage - 1) * safePageSize) + ", " + safePageSize)); + + Map groupNameById = buildGroupNameMap(rows.stream() + .map(QueryAsinEntity::getGroupId) + .filter(id -> id != null && id > 0) + .distinct() + .toList()); + + QueryAsinPageVo vo = new QueryAsinPageVo(); + vo.setItems(rows.stream().map(row -> toItemVo(row, groupNameById.get(row.getGroupId()))).toList()); + vo.setTotal(total); + vo.setPage(safePage); + vo.setPageSize(safePageSize); + return vo; + } + + @Transactional + public QueryAsinItemVo createOrUpdate(QueryAsinCreateRequest request, Long operatorId, boolean superAdmin) { + ShopManageGroupEntity group = shopManageGroupService.getAccessibleById(request.getGroupId(), operatorId, superAdmin); + String shopName = normalizeRequired(request.getShopName(), "店铺名不能为空"); + Set countries = normalizeCountries(request.getCountries()); + Map countryAsinMap = normalizeCountryAsinMap(countries, request); + + QueryAsinEntity entity = newImportEntity(group.getId(), shopName); + + for (Map.Entry entry : countryAsinMap.entrySet()) { + setCountryAsin(entity, entry.getKey(), entry.getValue()); + } + + List existingRows = queryAsinMapper.selectByGroupIdsAndShopNames( + List.of(group.getId()), List.of(shopName)); + for (QueryAsinEntity existing : existingRows) { + if (rowSignature(existing).equals(rowSignature(entity))) { + return toItemVo(existing, group.getGroupName()); + } + } + queryAsinMapper.insert(entity); + return toItemVo(getById(entity.getId()), group.getGroupName()); + } + + @Transactional + public void deleteCountry(Long id, String country, Long operatorId, boolean superAdmin) { + QueryAsinEntity entity = getById(id); + validateGroupAccess(entity, operatorId, superAdmin); + setCountryAsin(entity, normalizeCountry(country), ""); + if (isEmptyRow(entity)) { + queryAsinMapper.deleteById(entity.getId()); + return; + } + queryAsinMapper.updateById(entity); + } + + @Transactional + public QueryAsinItemVo updateCountry(Long id, String country, String asin, Long operatorId, boolean superAdmin) { + QueryAsinEntity entity = getById(id); + validateGroupAccess(entity, operatorId, superAdmin); + setCountryAsin(entity, normalizeCountry(country), normalizeAsin(asin)); + queryAsinMapper.updateById(entity); + QueryAsinEntity saved = getById(entity.getId()); + String groupName = ""; + try { + ShopManageGroupEntity group = shopManageGroupService.getById(saved.getGroupId()); + groupName = group.getGroupName(); + } catch (Exception ignored) { + groupName = ""; + } + return toItemVo(saved, groupName); + } + + public QueryAsinImportStartVo startImport(MultipartFile file, Long fallbackGroupId, + Long operatorId, boolean superAdmin) { + return startImportTask(file, fallbackGroupId, operatorId, superAdmin, false); + } + + public QueryAsinImportProgressVo getImportProgress(String importId) { + QueryAsinImportProgressVo progress = importProgressMap.get(importId); + if (progress == null) { + throw new BusinessException("导入任务不存在"); + } + return progress; + } + + public QueryAsinImportStartVo startDeleteImport(MultipartFile file, Long fallbackGroupId, + Long operatorId, boolean superAdmin) { + return startImportTask(file, fallbackGroupId, operatorId, superAdmin, true); + } + + public QueryAsinImportProgressVo getDeleteImportProgress(String importId) { + QueryAsinImportProgressVo progress = deleteImportProgressMap.get(importId); + if (progress == null) { + throw new BusinessException("删除任务不存在"); + } + return progress; + } + + private QueryAsinImportStartVo startImportTask(MultipartFile file, Long fallbackGroupId, Long operatorId, + boolean superAdmin, boolean deleteMode) { + if (file == null || file.isEmpty()) { + throw new BusinessException("请上传 xlsx 或 xls 文件"); + } + String filename = file.getOriginalFilename(); + validateExcelFilename(filename); + if (fallbackGroupId != null && fallbackGroupId > 0) { + shopManageGroupService.getAccessibleById(fallbackGroupId, operatorId, superAdmin); + } + + String importId = IdUtil.fastSimpleUUID(); + QueryAsinImportProgressVo progress = newImportProgress(); + Map progressMap = deleteMode ? deleteImportProgressMap : importProgressMap; + progressMap.put(importId, progress); + try { + File tempFile = saveMultipartToTempFile(file, deleteMode ? "query-asin-delete-" : "query-asin-import-"); + Thread.ofVirtual().start(() -> runImportTask(importId, tempFile, filename, fallbackGroupId, + operatorId, superAdmin, deleteMode)); + } catch (Exception ex) { + progressMap.remove(importId); + throw new BusinessException("读取上传文件失败"); + } + + QueryAsinImportStartVo vo = new QueryAsinImportStartVo(); + vo.setImportId(importId); + return vo; + } + + private QueryAsinImportProgressVo newImportProgress() { + QueryAsinImportProgressVo progress = new QueryAsinImportProgressVo(); + progress.setStatus("pending"); + progress.setTotalRows(0); + progress.setProcessedRows(0); + progress.setAsinCount(0); + progress.setInsertedCount(0); + progress.setDeletedCount(0); + progress.setSkippedCount(0); + return progress; + } + + private void runImportTask(String importId, File tempFile, String filename, Long fallbackGroupId, + Long operatorId, boolean superAdmin, boolean deleteMode) { + Map progressMap = deleteMode ? deleteImportProgressMap : importProgressMap; + QueryAsinImportProgressVo progress = progressMap.get(importId); + if (progress == null) { + deleteQuietly(tempFile); + return; + } + progress.setStatus("running"); + progress.setErrorMessage(null); + try { + processImportFile(tempFile, filename, fallbackGroupId, operatorId, superAdmin, deleteMode, progress); + progress.setStatus("success"); + } catch (Exception ex) { + progress.setStatus("failed"); + progress.setErrorMessage(ex instanceof BusinessException ? ex.getMessage() + : (deleteMode ? "导入删除 Excel 失败" : "导入添加 Excel 失败")); + } finally { + deleteQuietly(tempFile); + } + } + + private void processImportFile(File tempFile, String filename, Long fallbackGroupId, Long operatorId, + boolean superAdmin, boolean deleteMode, QueryAsinImportProgressVo progress) throws Exception { + validateExcelFilename(filename); + ImportContext context = new ImportContext(fallbackGroupId, operatorId, superAdmin, deleteMode, progress); + ExcelStreamReader.readFirstSheet(tempFile, new ExcelStreamReader.SheetRowHandler() { + @Override + public void onHeader(String sheetName, Integer sheetNo, Map headerMap) { + context.setHeaderMap(headerMap); + } + + @Override + public void onRow(String sheetName, Integer sheetNo, int rowIndex, + Map headerMap, Map rowMap) { + context.consumeRow(rowIndex, headerMap, rowMap); + } + }); + context.flush(); + if (!context.hasHeader()) { + throw new BusinessException("Excel 表头为空"); + } + } + + private File saveMultipartToTempFile(MultipartFile file, String prefix) throws Exception { + String suffix = ".xlsx"; + String name = file.getOriginalFilename(); + if (name != null) { + int idx = name.lastIndexOf('.'); + if (idx >= 0) { + suffix = name.substring(idx); + } + } + File tempFile = File.createTempFile(prefix, suffix); + file.transferTo(tempFile); + return tempFile; + } + + private void deleteQuietly(File file) { + if (file == null) { + return; + } + try { + Files.deleteIfExists(file.toPath()); + } catch (Exception ignored) { + } + } + + private void validateExcelFilename(String filename) { + String lowerFilename = filename == null ? "" : filename.toLowerCase(Locale.ROOT); + if (!(lowerFilename.endsWith(".xlsx") || lowerFilename.endsWith(".xls"))) { + throw new BusinessException("仅支持 .xlsx 或 .xls 文件"); + } + } + + private QueryAsinEntity getById(Long id) { + QueryAsinEntity entity = queryAsinMapper.selectById(id); + if (entity == null) { + throw new BusinessException("记录不存在"); + } + return entity; + } + + private void validateGroupAccess(QueryAsinEntity entity, Long operatorId, boolean superAdmin) { + shopManageGroupService.getAccessibleById(entity.getGroupId(), operatorId, superAdmin); + } + + private QueryAsinItemVo toItemVo(QueryAsinEntity entity, String groupName) { + QueryAsinItemVo vo = new QueryAsinItemVo(); + vo.setId(entity.getId()); + vo.setGroupId(entity.getGroupId()); + vo.setGroupName(groupName == null ? "" : groupName); + vo.setShopName(entity.getShopName()); + vo.setAsinDe(blankToEmpty(entity.getAsinDe())); + vo.setAsinUk(blankToEmpty(entity.getAsinUk())); + vo.setAsinFr(blankToEmpty(entity.getAsinFr())); + vo.setAsinIt(blankToEmpty(entity.getAsinIt())); + vo.setAsinEs(blankToEmpty(entity.getAsinEs())); + vo.setCreatedAt(entity.getCreatedAt()); + vo.setUpdatedAt(entity.getUpdatedAt()); + return vo; + } + + private Map buildGroupNameMap(List groupIds) { + if (groupIds == null || groupIds.isEmpty()) { + return Map.of(); + } + LinkedHashMap map = new LinkedHashMap<>(); + for (Long groupId : groupIds) { + try { + ShopManageGroupEntity group = shopManageGroupService.getById(groupId); + map.put(groupId, group.getGroupName()); + } catch (Exception ignored) { + map.put(groupId, ""); + } + } + return map; + } + + private Set normalizeCountries(List countries) { + LinkedHashSet normalized = new LinkedHashSet<>(); + if (countries != null) { + for (String country : countries) { + normalized.add(normalizeCountry(country)); + } + } + if (normalized.isEmpty()) { + throw new BusinessException("请至少选择一个国家"); + } + return normalized; + } + + private Map normalizeCountryAsinMap(Set countries, QueryAsinCreateRequest request) { + LinkedHashMap normalized = new LinkedHashMap<>(); + Map requestMappings = request.getAsinMappings(); + if (requestMappings != null && !requestMappings.isEmpty()) { + for (String country : countries) { + String asin = requestMappings.get(country); + if (asin == null) { + asin = requestMappings.get(country.toLowerCase(Locale.ROOT)); + } + normalized.put(country, normalizeAsin(asin)); + } + return normalized; + } + + String asin = normalizeAsin(request.getAsin()); + for (String country : countries) { + normalized.put(country, asin); + } + return normalized; + } + + private String normalizeCountry(String country) { + String normalized = normalizeBlank(country).toUpperCase(Locale.ROOT); + if (!SUPPORTED_COUNTRIES.contains(normalized)) { + throw new BusinessException("国家参数不支持: " + country); + } + return normalized; + } + + private String normalizeAsin(String asin) { + String normalized = normalizeRequired(asin, "ASIN 不能为空").toUpperCase(Locale.ROOT); + if (normalized.length() > 64) { + throw new BusinessException("ASIN 长度不能超过 64"); + } + return normalized; + } + + private String normalizeRequired(String value, String message) { + String normalized = normalizeBlank(value); + if (normalized.isEmpty()) { + throw new BusinessException(message); + } + return normalized; + } + + private String normalizeBlank(String value) { + return value == null ? "" : value.trim(); + } + + private String blankToEmpty(String value) { + return value == null ? "" : value; + } + + private void setCountryAsin(QueryAsinEntity entity, String country, String asin) { + String value = normalizeBlank(asin); + switch (country) { + case "DE" -> entity.setAsinDe(value); + case "UK" -> entity.setAsinUk(value); + case "FR" -> entity.setAsinFr(value); + case "IT" -> entity.setAsinIt(value); + case "ES" -> entity.setAsinEs(value); + default -> throw new BusinessException("国家参数不支持: " + country); + } + } + + private boolean isEmptyRow(QueryAsinEntity entity) { + return normalizeBlank(entity.getAsinDe()).isEmpty() + && normalizeBlank(entity.getAsinUk()).isEmpty() + && normalizeBlank(entity.getAsinFr()).isEmpty() + && normalizeBlank(entity.getAsinIt()).isEmpty() + && normalizeBlank(entity.getAsinEs()).isEmpty(); + } + + private String getCountryAsin(QueryAsinEntity entity, String country) { + return switch (country) { + case "DE" -> normalizeBlank(entity.getAsinDe()); + case "UK" -> normalizeBlank(entity.getAsinUk()); + case "FR" -> normalizeBlank(entity.getAsinFr()); + case "IT" -> normalizeBlank(entity.getAsinIt()); + case "ES" -> normalizeBlank(entity.getAsinEs()); + default -> ""; + }; + } + + private QueryAsinEntity newImportEntity(Long groupId, String shopName) { + QueryAsinEntity entity = new QueryAsinEntity(); + entity.setGroupId(groupId); + entity.setShopName(shopName); + entity.setAsinDe(""); + entity.setAsinUk(""); + entity.setAsinFr(""); + entity.setAsinIt(""); + entity.setAsinEs(""); + return entity; + } + + private String importKey(Long groupId, String shopName) { + return groupId + KEY_SEPARATOR + shopName; + } + + private String rowSignature(QueryAsinEntity entity) { + return importKey(entity.getGroupId(), normalizeBlank(entity.getShopName())) + + KEY_SEPARATOR + normalizeBlank(entity.getAsinDe()).toUpperCase(Locale.ROOT) + + KEY_SEPARATOR + normalizeBlank(entity.getAsinUk()).toUpperCase(Locale.ROOT) + + KEY_SEPARATOR + normalizeBlank(entity.getAsinFr()).toUpperCase(Locale.ROOT) + + KEY_SEPARATOR + normalizeBlank(entity.getAsinIt()).toUpperCase(Locale.ROOT) + + KEY_SEPARATOR + normalizeBlank(entity.getAsinEs()).toUpperCase(Locale.ROOT); + } + + private String normalizeExcelText(String value) { + return value == null ? "" : value.replace(UTF8_BOM, "").trim(); + } + + private String normalizeHeaderKey(String value) { + return normalizeExcelText(value).toLowerCase(Locale.ROOT) + .replace(" ", "") + .replace("_", "") + .replace("-", ""); + } + + private final class ImportContext { + private final Long fallbackGroupId; + private final Long operatorId; + private final boolean superAdmin; + private final boolean deleteMode; + private final QueryAsinImportProgressVo progress; + private final int batchSize = Math.max(1, taskPressureProperties.getDbSelectBatchSize()); + private final List pendingRows = new ArrayList<>(); + private final LinkedHashSet acceptedRowSignatures = new LinkedHashSet<>(); + private final Map groupIdByNameOrId = new HashMap<>(); + private final Map headerIndexByKey = new HashMap<>(); + private boolean groupsLoaded; + private boolean headerLoaded; + private int pendingCellCount; + private int asinCount; + private int insertedCount; + private int deletedCount; + private int skippedCount; + + private ImportContext(Long fallbackGroupId, Long operatorId, boolean superAdmin, + boolean deleteMode, QueryAsinImportProgressVo progress) { + this.fallbackGroupId = fallbackGroupId; + this.operatorId = operatorId; + this.superAdmin = superAdmin; + this.deleteMode = deleteMode; + this.progress = progress; + } + + private boolean hasHeader() { + return headerLoaded; + } + + private void setHeaderMap(Map headerMap) { + headerIndexByKey.clear(); + if (headerMap != null) { + for (Map.Entry entry : headerMap.entrySet()) { + String key = normalizeHeaderKey(entry.getValue()); + if (!key.isEmpty()) { + headerIndexByKey.putIfAbsent(key, entry.getKey()); + } + } + } + headerLoaded = true; + if (findGroupIndex() == null && (fallbackGroupId == null || fallbackGroupId <= 0)) { + throw new BusinessException("Excel 缺少分组列,请在页面选择分组或提供分组列"); + } + if (findShopIndex() == null) { + throw new BusinessException("Excel 缺少店铺名列"); + } + if (SUPPORTED_COUNTRIES.stream().noneMatch(country -> findCountryIndex(country) != null)) { + throw new BusinessException("Excel 至少需要包含一个国家 ASIN 列"); + } + } + + private void consumeRow(int rowIndex, Map headerMap, Map rowMap) { + if (!headerLoaded) { + setHeaderMap(headerMap); + } + progress.setTotalRows(Math.max(progress.getTotalRows() == null ? 0 : progress.getTotalRows(), rowIndex)); + progress.setProcessedRows(rowIndex); + + Long groupId = resolveGroupId(rowMap); + String shopName = cell(rowMap, findShopIndex()); + if (groupId == null || shopName.isEmpty()) { + skippedCount++; + updateProgress(); + return; + } + + QueryAsinEntity row = newImportEntity(groupId, shopName); + int rowAsinCount = 0; + int rowAcceptedCount = 0; + for (String country : SUPPORTED_COUNTRIES) { + Integer index = findCountryIndex(country); + if (index == null) { + continue; + } + String asin = normalizeBlank(cell(rowMap, index)).toUpperCase(Locale.ROOT); + if (asin.isEmpty()) { + continue; + } + if (asin.length() > 64) { + skippedCount++; + continue; + } + asinCount++; + rowAsinCount++; + setCountryAsin(row, country, asin); + rowAcceptedCount++; + } + if (rowAsinCount == 0) { + skippedCount++; + } + if (rowAcceptedCount > 0) { + String signature = rowSignature(row); + if (acceptedRowSignatures.add(signature)) { + pendingRows.add(row); + pendingCellCount += rowAcceptedCount; + } else { + skippedCount += rowAcceptedCount; + } + } + if (pendingRows.size() >= batchSize) { + flush(); + } + updateProgress(); + } + + private void flush() { + if (pendingRows.isEmpty()) { + return; + } + if (deleteMode) { + flushDelete(); + } else { + flushInsert(); + } + pendingRows.clear(); + pendingCellCount = 0; + updateProgress(); + } + + private void flushInsert() { + List targets = new ArrayList<>(pendingRows); + LinkedHashSet groupIds = new LinkedHashSet<>(); + LinkedHashSet shopNames = new LinkedHashSet<>(); + for (QueryAsinEntity target : targets) { + groupIds.add(target.getGroupId()); + shopNames.add(target.getShopName()); + } + Map> existingByKey = new LinkedHashMap<>(); + LinkedHashSet existingSignatures = new LinkedHashSet<>(); + if (!groupIds.isEmpty() && !shopNames.isEmpty()) { + for (QueryAsinEntity existing : queryAsinMapper.selectByGroupIdsAndShopNames(groupIds, shopNames)) { + existingByKey.computeIfAbsent(importKey(existing.getGroupId(), existing.getShopName()), + ignored -> new ArrayList<>()).add(existing); + existingSignatures.add(rowSignature(existing)); + } + } + List insertRows = new ArrayList<>(); + for (QueryAsinEntity target : targets) { + int cellCount = countCountryCells(target); + String signature = rowSignature(target); + if (existingSignatures.contains(signature)) { + skippedCount += cellCount; + continue; + } + QueryAsinEntity compatible = findCompatibleInsertCandidate( + target, + existingByKey.get(importKey(target.getGroupId(), target.getShopName()))); + if (compatible != null) { + int addedCells = mergeMissingCountryAsins(compatible, target); + if (addedCells > 0) { + queryAsinMapper.updateById(compatible); + insertedCount += addedCells; + } + skippedCount += cellCount - addedCells; + existingSignatures.add(rowSignature(compatible)); + continue; + } + insertRows.add(target); + insertedCount += cellCount; + existingSignatures.add(signature); + existingByKey.computeIfAbsent(importKey(target.getGroupId(), target.getShopName()), + ignored -> new ArrayList<>()).add(target); + } + if (!insertRows.isEmpty()) { + queryAsinMapper.insertBatch(insertRows); + } + } + + private QueryAsinEntity findCompatibleInsertCandidate(QueryAsinEntity target, List candidates) { + if (candidates == null || candidates.isEmpty()) { + return null; + } + QueryAsinEntity best = null; + int bestOverlap = -1; + for (QueryAsinEntity candidate : candidates) { + int overlap = 0; + boolean conflict = false; + for (String country : SUPPORTED_COUNTRIES) { + String targetAsin = getCountryAsin(target, country); + String candidateAsin = getCountryAsin(candidate, country); + if (targetAsin.isEmpty() || candidateAsin.isEmpty()) { + continue; + } + if (!targetAsin.equals(candidateAsin)) { + conflict = true; + break; + } + overlap++; + } + if (!conflict && overlap > bestOverlap) { + best = candidate; + bestOverlap = overlap; + } + } + return bestOverlap > 0 ? best : null; + } + + private int mergeMissingCountryAsins(QueryAsinEntity existing, QueryAsinEntity target) { + int addedCells = 0; + for (String country : SUPPORTED_COUNTRIES) { + String targetAsin = getCountryAsin(target, country); + if (targetAsin.isEmpty() || !getCountryAsin(existing, country).isEmpty()) { + continue; + } + setCountryAsin(existing, country, targetAsin); + addedCells++; + } + return addedCells; + } + + private void flushDelete() { + List targets = new ArrayList<>(pendingRows); + LinkedHashSet groupIds = new LinkedHashSet<>(); + LinkedHashSet shopNames = new LinkedHashSet<>(); + for (QueryAsinEntity target : targets) { + groupIds.add(target.getGroupId()); + shopNames.add(target.getShopName()); + } + Map> existingByKey = new LinkedHashMap<>(); + if (!groupIds.isEmpty() && !shopNames.isEmpty()) { + for (QueryAsinEntity existing : queryAsinMapper.selectByGroupIdsAndShopNames(groupIds, shopNames)) { + existingByKey.computeIfAbsent(importKey(existing.getGroupId(), existing.getShopName()), + ignored -> new ArrayList<>()).add(existing); + } + } + for (QueryAsinEntity target : targets) { + List candidates = existingByKey.get(importKey(target.getGroupId(), target.getShopName())); + if (candidates == null || candidates.isEmpty()) { + skippedCount += countCountryCells(target); + continue; + } + QueryAsinEntity existing = findBestDeleteCandidate(target, candidates); + if (existing == null) { + skippedCount += countCountryCells(target); + continue; + } + boolean changed = false; + for (String country : SUPPORTED_COUNTRIES) { + String asin = getCountryAsin(target, country); + if (asin.isEmpty()) { + continue; + } + if (asin.equals(getCountryAsin(existing, country))) { + setCountryAsin(existing, country, ""); + deletedCount++; + changed = true; + } else { + skippedCount++; + } + } + if (!changed) { + continue; + } + if (isEmptyRow(existing)) { + queryAsinMapper.deleteById(existing.getId()); + } else { + queryAsinMapper.updateById(existing); + } + } + } + + private QueryAsinEntity findBestDeleteCandidate(QueryAsinEntity target, List candidates) { + for (QueryAsinEntity candidate : candidates) { + boolean allMatch = true; + for (String country : SUPPORTED_COUNTRIES) { + String asin = getCountryAsin(target, country); + if (!asin.isEmpty() && !asin.equals(getCountryAsin(candidate, country))) { + allMatch = false; + break; + } + } + if (allMatch) { + return candidate; + } + } + return null; + } + + private int countCountryCells(QueryAsinEntity entity) { + int count = 0; + for (String country : SUPPORTED_COUNTRIES) { + if (!getCountryAsin(entity, country).isEmpty()) { + count++; + } + } + return count; + } + + private Long resolveGroupId(Map rowMap) { + Integer groupIndex = findGroupIndex(); + String groupText = cell(rowMap, groupIndex); + if (groupText.isEmpty()) { + return fallbackGroupId != null && fallbackGroupId > 0 ? fallbackGroupId : null; + } + loadGroups(); + Long id = groupIdByNameOrId.get(groupText); + if (id == null) { + id = groupIdByNameOrId.get(normalizeHeaderKey(groupText)); + } + return id; + } + + private void loadGroups() { + if (groupsLoaded) { + return; + } + List groups = shopManageGroupService.listAccessible(operatorId, superAdmin); + for (ShopManageGroupItemVo group : groups) { + if (group.getId() == null || group.getId() <= 0) { + continue; + } + groupIdByNameOrId.put(String.valueOf(group.getId()), group.getId()); + groupIdByNameOrId.put(normalizeHeaderKey(group.getGroupName()), group.getId()); + } + groupsLoaded = true; + } + + private Integer findGroupIndex() { + return firstHeader("分组id", "分组", "groupid", "group"); + } + + private Integer findShopIndex() { + return firstHeader("店铺名", "店铺名称", "shopname", "shop"); + } + + private Integer findCountryIndex(String country) { + return switch (country) { + case "DE" -> firstHeader("德国", "德", "de", "asinde"); + case "UK" -> firstHeader("英国", "英", "uk", "asinuk"); + case "FR" -> firstHeader("法国", "法", "fr", "asinfr"); + case "IT" -> firstHeader("意大利", "意", "it", "asinit"); + case "ES" -> firstHeader("西班牙", "西", "es", "asines"); + default -> null; + }; + } + + private Integer firstHeader(String... names) { + for (String name : names) { + Integer index = headerIndexByKey.get(normalizeHeaderKey(name)); + if (index != null) { + return index; + } + } + return null; + } + + private String cell(Map rowMap, Integer index) { + if (rowMap == null || index == null) { + return ""; + } + return normalizeExcelText(rowMap.get(index)); + } + + private void updateProgress() { + progress.setAsinCount(asinCount); + progress.setInsertedCount(insertedCount); + progress.setDeletedCount(deletedCount); + progress.setSkippedCount(skippedCount); + } + } +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageGroupService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageGroupService.java index 7aae45f..6ced207 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageGroupService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/shopkey/service/ShopManageGroupService.java @@ -4,12 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.nanri.aiimage.common.exception.BusinessException; import com.nanri.aiimage.modules.permission.mapper.AdminUserMapper; import com.nanri.aiimage.modules.permission.model.entity.AdminUserEntity; +import com.nanri.aiimage.modules.shopkey.mapper.QueryAsinMapper; import com.nanri.aiimage.modules.shopkey.mapper.ShopManageGroupMapper; import com.nanri.aiimage.modules.shopkey.mapper.ShopManageGroupMemberMapper; import com.nanri.aiimage.modules.shopkey.mapper.ShopManageMapper; import com.nanri.aiimage.modules.shopkey.mapper.SkipPriceAsinMapper; import com.nanri.aiimage.modules.shopkey.model.dto.ShopManageGroupCreateRequest; import com.nanri.aiimage.modules.shopkey.model.dto.ShopManageGroupUpdateRequest; +import com.nanri.aiimage.modules.shopkey.model.entity.QueryAsinEntity; import com.nanri.aiimage.modules.shopkey.model.entity.ShopManageEntity; import com.nanri.aiimage.modules.shopkey.model.entity.ShopManageGroupEntity; import com.nanri.aiimage.modules.shopkey.model.entity.ShopManageGroupMemberEntity; @@ -35,6 +37,7 @@ public class ShopManageGroupService { private final ShopManageGroupMapper groupMapper; private final ShopManageGroupMemberMapper groupMemberMapper; private final ShopManageMapper shopManageMapper; + private final QueryAsinMapper queryAsinMapper; private final SkipPriceAsinMapper skipPriceAsinMapper; private final AdminUserMapper adminUserMapper; @@ -128,6 +131,11 @@ public class ShopManageGroupService { if (skipPriceAsinCount != null && skipPriceAsinCount > 0) { throw new BusinessException("该分组下存在跳过跟价 ASIN,无法删除"); } + Long queryAsinCount = queryAsinMapper.selectCount(new LambdaQueryWrapper() + .eq(QueryAsinEntity::getGroupId, entity.getId())); + if (queryAsinCount != null && queryAsinCount > 0) { + throw new BusinessException("该分组下存在查询 ASIN,无法删除"); + } groupMemberMapper.delete(new LambdaQueryWrapper() .eq(ShopManageGroupMemberEntity::getGroupId, entity.getId())); groupMapper.deleteById(entity.getId()); diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskScopePayloadStorageService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskScopePayloadStorageService.java index f9d4971..362f1c4 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskScopePayloadStorageService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskScopePayloadStorageService.java @@ -34,7 +34,8 @@ public class TaskScopePayloadStorageService { "SHOP_MATCH", "PRODUCT_RISK_RESOLVE", "PRICE_TRACK", - "PATROL_DELETE" + "PATROL_DELETE", + "QUERY_ASIN" )); private static final String OSS_POINTER_PREFIX = "oss:"; private static final String LOCAL_BUFFER_DIR = "task-scope-buffer"; diff --git a/backend-java/src/main/resources/db/V31__query_asin.sql b/backend-java/src/main/resources/db/V31__query_asin.sql new file mode 100644 index 0000000..590218d --- /dev/null +++ b/backend-java/src/main/resources/db/V31__query_asin.sql @@ -0,0 +1,28 @@ +CREATE TABLE IF NOT EXISTS biz_query_asin ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + group_id BIGINT NOT NULL COMMENT '分组ID', + shop_name VARCHAR(128) NOT NULL COMMENT '店铺名', + asin_de VARCHAR(64) NOT NULL DEFAULT '' COMMENT '德国 ASIN', + asin_uk VARCHAR(64) NOT NULL DEFAULT '' COMMENT '英国 ASIN', + asin_fr VARCHAR(64) NOT NULL DEFAULT '' COMMENT '法国 ASIN', + asin_it VARCHAR(64) NOT NULL DEFAULT '' COMMENT '意大利 ASIN', + asin_es VARCHAR(64) NOT NULL DEFAULT '' COMMENT '西班牙 ASIN', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + KEY idx_group_shop_name (group_id, shop_name), + KEY idx_shop_name (shop_name), + KEY idx_created_at (created_at) +) COMMENT='查询 ASIN'; + +INSERT INTO `columns` (`name`, `column_key`, `menu_type`, `route_path`, `sort_order`) +SELECT '查询ASIN', 'admin_query_asin', 'admin', 'query-asin', 65 +WHERE NOT EXISTS ( + SELECT 1 FROM `columns` WHERE `column_key` = 'admin_query_asin' +); + +UPDATE `columns` +SET `name` = '查询ASIN', + `menu_type` = 'admin', + `route_path` = 'query-asin', + `sort_order` = 65 +WHERE `column_key` = 'admin_query_asin'; diff --git a/backend-java/src/main/resources/db/V32__query_asin_allow_multiple_rows_per_shop.sql b/backend-java/src/main/resources/db/V32__query_asin_allow_multiple_rows_per_shop.sql new file mode 100644 index 0000000..9deca9e --- /dev/null +++ b/backend-java/src/main/resources/db/V32__query_asin_allow_multiple_rows_per_shop.sql @@ -0,0 +1,32 @@ +SET @schema_name = DATABASE(); + +SET @sql = IF( + EXISTS ( + SELECT 1 + FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = @schema_name + AND TABLE_NAME = 'biz_query_asin' + AND INDEX_NAME = 'uk_group_shop_name' + AND NON_UNIQUE = 0 + ), + 'ALTER TABLE biz_query_asin DROP INDEX uk_group_shop_name', + 'SELECT 1' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +SET @sql = IF( + EXISTS ( + SELECT 1 + FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = @schema_name + AND TABLE_NAME = 'biz_query_asin' + AND INDEX_NAME = 'idx_group_shop_name' + ), + 'SELECT 1', + 'ALTER TABLE biz_query_asin ADD KEY idx_group_shop_name (group_id, shop_name)' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; diff --git a/backend-java/src/main/resources/db/V33__query_asin_task_candidate.sql b/backend-java/src/main/resources/db/V33__query_asin_task_candidate.sql new file mode 100644 index 0000000..ada105f --- /dev/null +++ b/backend-java/src/main/resources/db/V33__query_asin_task_candidate.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS biz_query_asin_shop_candidate ( + id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', + user_id BIGINT NOT NULL COMMENT '用户ID', + shop_name VARCHAR(128) NOT NULL COMMENT '店铺名', + created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + UNIQUE KEY uk_user_shop_name (user_id, shop_name), + KEY idx_user_id (user_id) +) COMMENT='查询 ASIN 前台备选店铺'; diff --git a/backend/__pycache__/config.cpython-312.pyc b/backend/__pycache__/config.cpython-312.pyc index 7a86814bf5f8b7dec144efe63071f85c9cfb9d87..0ea50cdc4893afdba2e69d0b8649c4c8fe691f61 100644 GIT binary patch delta 20 acmaFH{fwLYG%qg~0}uo}eYuhQHY)%^>jswq delta 20 acmaFH{fwLYG%qg~0}xDfd9jiEHY)%?=LR+a diff --git a/backend/blueprints/admin_api.py b/backend/blueprints/admin_api.py index 8826a2a..a62ddd2 100644 --- a/backend/blueprints/admin_api.py +++ b/backend/blueprints/admin_api.py @@ -60,6 +60,11 @@ ADMIN_MENU_ACCESS_CONFIG = { 'route_path': 'skip-price-asin', 'error': '无权访问跳过跟价 ASIN 模块', }, + 'query-asin': { + 'column_key': 'admin_query_asin', + 'route_path': 'query-asin', + 'error': '无权访问查询 ASIN 模块', + }, } ADMIN_MENU_ACCESS_CONFIG.update({ @@ -98,10 +103,10 @@ def _safe_version_key(version): return s or 'unknown' -def _proxy_backend_java(method, path, *, params=None, json_data=None, files=None, data=None): +def _proxy_backend_java(method, path, *, params=None, json_data=None, files=None, data=None, timeout=10): url = f"{backend_java_base_url}{path}" try: - resp = requests.request(method=method, url=url, params=params, json=json_data, files=files, data=data, timeout=10) + resp = requests.request(method=method, url=url, params=params, json=json_data, files=files, data=data, timeout=timeout) except requests.RequestException: return None, jsonify({'success': False, 'error': 'backend-java 服务不可用'}), 502 try: @@ -469,7 +474,7 @@ def list_users(): if not role: return jsonify({'success': False, 'error': '需要登录'}), 403 page = max(1, int(request.args.get('page', 1))) - _, _, denied = _ensure_backend_menu_access('users', 'history', 'shop-manage', 'skip-price-asin') + _, _, denied = _ensure_backend_menu_access('users', 'history', 'shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied page_size = min(999, max(5, int(request.args.get('page_size', 15)))) @@ -1436,7 +1441,7 @@ def delete_dedupe_total_data(item_id): @admin_api.route('/shop-manages') @login_required def list_shop_manages(): - role, current_row, denied = _ensure_backend_menu_access('shop-manage') + role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied page = max(1, int(request.args.get('page', 1))) @@ -1600,7 +1605,7 @@ def delete_shop_manage(item_id): @admin_api.route('/shop-manage-groups') @login_required def list_shop_manage_groups(): - role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin') + role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied params = {} @@ -1638,7 +1643,7 @@ def list_shop_manage_groups(): @admin_api.route('/shop-manage-group', methods=['POST']) @login_required def create_shop_manage_group(): - role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin') + role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied data = request.get_json() or {} @@ -1683,7 +1688,7 @@ def create_shop_manage_group(): @admin_api.route('/shop-manage-group/', methods=['PUT']) @login_required def update_shop_manage_group(item_id): - role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin') + role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied data = request.get_json() or {} @@ -1876,7 +1881,7 @@ def delete_skip_price_asin_country(item_id, country): @admin_api.route('/shop-manage-group/', methods=['DELETE']) @login_required def delete_shop_manage_group(item_id): - role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin') + role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied result, error_response, status = _proxy_backend_java( @@ -1937,3 +1942,269 @@ def update_skip_price_asin_country(item_id, country): 'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16], }, }) + + +def _format_query_asin_item(item): + return { + 'id': item.get('id'), + 'group_id': item.get('groupId'), + 'group_name': item.get('groupName') or '', + 'shop_name': item.get('shopName') or '', + 'asin_de': item.get('asinDe') or '', + 'asin_uk': item.get('asinUk') or '', + 'asin_fr': item.get('asinFr') or '', + 'asin_it': item.get('asinIt') or '', + 'asin_es': item.get('asinEs') or '', + 'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16], + 'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16], + } + + +@admin_api.route('/query-asins') +@login_required +def list_query_asins(): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + page = max(1, int(request.args.get('page', 1))) + page_size = min(100, max(1, int(request.args.get('page_size', 15)))) + group_id_raw = (request.args.get('group_id') or '').strip() + shop_name = (request.args.get('shop_name') or '').strip() + asin = (request.args.get('asin') or '').strip() + params = {'page': page, 'pageSize': page_size} + if current_row and current_row.get('id'): + params['operatorId'] = current_row.get('id') + params['superAdmin'] = 'true' if role == 'super_admin' else 'false' + if group_id_raw: + try: + group_id = int(group_id_raw) + if group_id > 0: + params['groupId'] = group_id + except (TypeError, ValueError): + pass + if shop_name: + params['shopName'] = shop_name + if asin: + params['asin'] = asin + result, error_response, status = _proxy_backend_java( + 'GET', + '/api/admin/query-asins', + params=params, + ) + if error_response is not None: + return error_response, status + payload = result.get('data') or {} + return jsonify({ + 'success': True, + 'items': [_format_query_asin_item(item) for item in (payload.get('items') or [])], + 'total': payload.get('total') or 0, + 'page': payload.get('page') or page, + 'page_size': payload.get('pageSize') or page_size, + }) + + +def _format_query_asin_import_progress(progress): + return { + 'status': progress.get('status') or 'pending', + 'total_rows': progress.get('totalRows') or 0, + 'processed_rows': progress.get('processedRows') or 0, + 'asin_count': progress.get('asinCount') or 0, + 'inserted_count': progress.get('insertedCount') or 0, + 'deleted_count': progress.get('deletedCount') or 0, + 'skipped_count': progress.get('skippedCount') or 0, + 'error_message': progress.get('errorMessage') or '', + } + + +@admin_api.route('/query-asins/import/') +@login_required +def query_asin_import_progress(import_id): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + result, error_response, status = _proxy_backend_java( + 'GET', + f'/api/admin/query-asins/import/{import_id}', + ) + if error_response is not None: + return error_response, status + return jsonify({ + 'success': True, + 'progress': _format_query_asin_import_progress(result.get('data') or {}), + }) + + +@admin_api.route('/query-asins/import', methods=['POST']) +@login_required +def import_query_asins(): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + file_storage = request.files.get('file') + if not file_storage or file_storage.filename == '': + return jsonify({'success': False, 'error': '请选择 Excel 文件'}) + group_id_raw = (request.form.get('group_id') or '').strip() + params = { + 'operatorId': current_row.get('id') if current_row else None, + 'superAdmin': 'true' if role == 'super_admin' else 'false', + } + if group_id_raw: + params['groupId'] = group_id_raw + files = { + 'file': (file_storage.filename, file_storage.stream, file_storage.mimetype or 'application/octet-stream') + } + result, error_response, status = _proxy_backend_java( + 'POST', + '/api/admin/query-asins/import', + params=params, + files=files, + timeout=60, + ) + if error_response is not None: + return error_response, status + summary = result.get('data') or {} + return jsonify({ + 'success': True, + 'msg': result.get('message') or '开始导入', + 'import_id': summary.get('importId') or '', + }) + + +@admin_api.route('/query-asins/delete-import/') +@login_required +def query_asin_delete_import_progress(import_id): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + result, error_response, status = _proxy_backend_java( + 'GET', + f'/api/admin/query-asins/delete-import/{import_id}', + ) + if error_response is not None: + return error_response, status + return jsonify({ + 'success': True, + 'progress': _format_query_asin_import_progress(result.get('data') or {}), + }) + + +@admin_api.route('/query-asins/delete-import', methods=['POST']) +@login_required +def delete_import_query_asins(): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + file_storage = request.files.get('file') + if not file_storage or file_storage.filename == '': + return jsonify({'success': False, 'error': '请选择 Excel 文件'}) + group_id_raw = (request.form.get('group_id') or '').strip() + params = { + 'operatorId': current_row.get('id') if current_row else None, + 'superAdmin': 'true' if role == 'super_admin' else 'false', + } + if group_id_raw: + params['groupId'] = group_id_raw + files = { + 'file': (file_storage.filename, file_storage.stream, file_storage.mimetype or 'application/octet-stream') + } + result, error_response, status = _proxy_backend_java( + 'POST', + '/api/admin/query-asins/delete-import', + params=params, + files=files, + timeout=60, + ) + if error_response is not None: + return error_response, status + summary = result.get('data') or {} + return jsonify({ + 'success': True, + 'msg': result.get('message') or '开始删除', + 'import_id': summary.get('importId') or '', + }) + + +@admin_api.route('/query-asin', methods=['POST']) +@login_required +def create_query_asin(): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + data = request.get_json() or {} + asin_mappings = data.get('asin_mappings') or {} + fallback_asin = (data.get('asin') or '').strip() + if not fallback_asin and isinstance(asin_mappings, dict): + for value in asin_mappings.values(): + fallback_asin = (value or '').strip() + if fallback_asin: + break + payload = { + 'groupId': data.get('group_id'), + 'shopName': (data.get('shop_name') or '').strip(), + 'countries': data.get('countries') or [], + 'asin': fallback_asin, + 'asinMappings': asin_mappings, + } + result, error_response, status = _proxy_backend_java( + 'POST', + '/api/admin/query-asins', + params={ + 'operatorId': current_row.get('id') if current_row else None, + 'superAdmin': 'true' if role == 'super_admin' else 'false', + }, + json_data=payload, + ) + if error_response is not None: + return error_response, status + return jsonify({ + 'success': True, + 'msg': result.get('message') or '保存成功', + 'item': _format_query_asin_item(result.get('data') or {}), + }) + + +@admin_api.route('/query-asin//country/', methods=['DELETE']) +@login_required +def delete_query_asin_country(item_id, country): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + result, error_response, status = _proxy_backend_java( + 'DELETE', + f'/api/admin/query-asins/{item_id}/countries/{country}', + params={ + 'operatorId': current_row.get('id') if current_row else None, + 'superAdmin': 'true' if role == 'super_admin' else 'false', + }, + ) + if error_response is not None: + return error_response, status + return jsonify({'success': True, 'msg': result.get('message') or '删除成功'}) + + +@admin_api.route('/query-asin//country/', methods=['PUT']) +@login_required +def update_query_asin_country(item_id, country): + role, current_row, denied = _ensure_backend_menu_access('query-asin') + if denied: + return denied + data = request.get_json() or {} + payload = { + 'asin': (data.get('asin') or '').strip(), + } + result, error_response, status = _proxy_backend_java( + 'PUT', + f'/api/admin/query-asins/{item_id}/countries/{country}', + params={ + 'operatorId': current_row.get('id') if current_row else None, + 'superAdmin': 'true' if role == 'super_admin' else 'false', + }, + json_data=payload, + ) + if error_response is not None: + return error_response, status + return jsonify({ + 'success': True, + 'msg': result.get('message') or '保存成功', + 'item': _format_query_asin_item(result.get('data') or {}), + }) diff --git a/backend/web_source/admin.html b/backend/web_source/admin.html index 875370d..051083d 100644 --- a/backend/web_source/admin.html +++ b/backend/web_source/admin.html @@ -413,6 +413,7 @@
店铺密钥管理
店铺管理
跳过跟价 ASIN
+
查询 ASIN
查看生成记录
版本管理
@@ -817,6 +818,120 @@ +
+
+

新增查询 ASIN

+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ + +
+
+ +
+
请选择国家后输入对应 ASIN
+
+
+ +
+

+
+
+

导入添加

+
+
+ + +
+ +
+

+ +
+
+

导入删除

+
+
+ + +
+ +
+

+ +
+
+
+
+

店铺列表

+
+
+ + +
+
+ + +
+
+ + +
+ +
+ + + + + + + + + + + + + + +
序号分组店铺名德国英国法国意大利西班牙
+ +
+
+

筛选条件

@@ -1063,6 +1178,69 @@
+ + + +