From f21934e55b0e37cc74da0f90bc929e99f008f91f Mon Sep 17 00:00:00 2001 From: super <2903208875@qq.com> Date: Tue, 28 Apr 2026 15:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E9=94=99=E8=AF=AF=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/detail_spider.cpython-312.pyc | Bin 76500 -> 76742 bytes app/amazon/detail_spider.py | 12 +- backend-java/jstack-33832.txt | 1106 ----------------- backend-java/jstack-6488.txt | 1056 ---------------- .../config/AppearancePatentProperties.java | 3 + .../client/AppearancePatentCozeClient.java | 433 ++++++- .../dto/AppearancePatentParseRequest.java | 2 +- .../dto/AppearancePatentParsedPayloadDto.java | 20 +- .../dto/AppearancePatentResultGroupDto.java | 29 + .../dto/AppearancePatentResultRowDto.java | 30 +- .../AppearancePatentSubmitResultRequest.java | 20 +- .../model/vo/AppearancePatentParseVo.java | 29 +- .../vo/AppearancePatentParsedGroupVo.java | 32 + .../model/vo/AppearancePatentParsedRowVo.java | 22 +- .../service/AppearancePatentTaskService.java | 492 ++++++-- .../service/ShopManageGroupService.java | 27 +- .../task/service/TaskFileJobService.java | 11 + .../src/main/resources/application.yml | 2 +- backend/__pycache__/config.cpython-312.pyc | Bin 1510 -> 1517 bytes .../__pycache__/admin_api.cpython-312.pyc | Bin 105095 -> 108369 bytes backend/blueprints/admin_api.py | 170 ++- backend/codex-flask-local.err.log | 65 - backend/codex-flask-local.out.log | 2 - backend/config.py | 3 +- .../components/BrandAppearancePatentTab.vue | 154 ++- frontend-vue/src/shared/api/java-modules.ts | 17 + 26 files changed, 1272 insertions(+), 2465 deletions(-) delete mode 100644 backend-java/jstack-33832.txt delete mode 100644 backend-java/jstack-6488.txt create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultGroupDto.java create mode 100644 backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedGroupVo.java delete mode 100644 backend/codex-flask-local.err.log delete mode 100644 backend/codex-flask-local.out.log diff --git a/app/amazon/__pycache__/detail_spider.cpython-312.pyc b/app/amazon/__pycache__/detail_spider.cpython-312.pyc index a646c09014ca1775fc1ab07910b59e4bcf27e355..a861801b01aaa56abaf97a84082618490b027c36 100644 GIT binary patch delta 995 zcmaiyT})GF7{}kI=bW~uqo+lo;7lzYw9N6*$t1>kPL=}F?tGMh zfG#mkmYI+|UXVBzN!;YauXwyOqDC=F#Vlcqq}kO>=8cIpCf>UDEhD)u`TY<6!Bbw!y4@~9zi)TFOdf5SkkYnchviLgweh3S`2p_Ho}owgIRi7mrU<(A za%aW+Mew}>KEkkG36;2854fxTZ4f2&lZYApP+54!UI-yTM&U<^Cn6bib_MafPCq&f zFH~c>kt(Ylu&*mA5x{EH*x1j!dE*4VKSh_&vme+H^2OP}I{K{Xbw zxmr3^I(d9C(z---Xe#tu!}i5!e5opQamU1t$>?I$=Ktt*0o*XO-nrTp^o{Pye~1T% znxr=bN)wR(gj6)-+W;qq#zDr`;ShX`>hRyk+gFjh>)O`P<6cua<^AF~FE^4oUwC(z zpKETbr^UlsuUtYNHkVNS$lFM#<{f^FkK%Hzc$8?D($GEJ& zNUr0u5rH{%0&`-8Zll=l;j$gAaeKRqTMz`Ax8M?}x8UKJUM22r<`&k*-FvriPqqlO z&`i3wo!S)J-ZaAugUs+L!}40KwI`~1@4J4Xb;H_satYu%)}As0{}X_BPMLm-1`hc4 zrIU)PB@XM|b?KCD9MV+X>@m(*Uwj|6g&wgtH!&P!7-hIgk>irRMvnhFmFm$foEZ6B z>H=ZgdF3@>Xa0cocI31R?pdeL26?z`O^@ZPgu?HF)3-J{Z_tDYuieLIw-PXiO|x;h hh6A%PxQSP0{gB4Tv!6-24few;QaJKmR^;|f_df_DAtL|) delta 811 zcmaiwOH5Ni6ozN+qx2#zg-{+6EEP&0Jd~HgBF1Whq4JCnO%xGmO)7;px4msd1X&Os zxnIv`QEu-s zV8Nuae$ts{wIATtH7BFX1aq%ZxksT-9<7Qd!r9(3)enTVjW}A0G7mcvQ)xX2{zVVf>yOTRoUEXxvhX4)+`!(B3iR1k^LL>A=0(Z zXHaGf_V}3f{1kg^Oqf#;Hyq0oB^*y9!ij>tkPWBD+4I=2k*7)?PnE(Qw?wE`vEhaa zo1$9DMp&NYMU*_zA}W^dHA0P*jilLBHKpvkQl1<{iAfIh)$p6_7BT- zLl(xcO5ZG^I8QN3u}HARy1M*ZT${(^7UyAdq+Wdq^W{^H?}*lDz5IJ*C>Dq0fjfE* zKa*$fMzb|rYM)0E+ntpzx3jCY(+T5Cg~|mIX6D3Y*jQ@BD_{xP@FQ@Cit!>$g)(p_ WEQRXS9tJnzZ)m4P+vN1+xsE>`x9|}F diff --git a/app/amazon/detail_spider.py b/app/amazon/detail_spider.py index 276c1fe..8eb94e7 100644 --- a/app/amazon/detail_spider.py +++ b/app/amazon/detail_spider.py @@ -347,10 +347,14 @@ class SpiderTask: # 'image_url': "", # 'title': "" - item_data = { - "id": i.get("id"), - "asin": asin, - "country": country, + item_data = { + "sourceFileKey": i.get("sourceFileKey"), + "sourceFilename": i.get("sourceFilename"), + "rowToken": i.get("rowToken"), + "groupKey": i.get("groupKey"), + "id": i.get("id"), + "asin": asin, + "country": country, "url": return_data.get("image_url"), "title": return_data.get("title"), } diff --git a/backend-java/jstack-33832.txt b/backend-java/jstack-33832.txt deleted file mode 100644 index 82de4e2..0000000 --- a/backend-java/jstack-33832.txt +++ /dev/null @@ -1,1106 +0,0 @@ -2026-04-27 08:55:51 -Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.0.9+7-LTS-338 mixed mode, sharing): - -Threads class SMR info: -_java_thread_list=0x0000023371912e70, length=49, elements={ -0x0000023366303450, 0x0000023366309fe0, 0x000002336630d5c0, 0x000002336630e280, -0x000002336630fc60, 0x0000023366311870, 0x000002336631e0a0, 0x0000023366312c20, -0x000002336b23eb60, 0x000002336b2497c0, 0x000002336c9ea570, 0x000002336dcf88a0, -0x000002336dcf95c0, 0x000002336dcf8f30, 0x000002336dcf9c50, 0x000002336dcf74f0, -0x0000023372aec650, 0x0000023372aee090, 0x0000023372aed370, 0x0000023372aee720, -0x0000023372aeb2a0, 0x0000023372aeda00, 0x0000023372aeedb0, 0x0000023372aeb930, -0x0000023372aef440, 0x0000023372aefad0, 0x0000023372af0160, 0x0000023372af0e80, -0x0000023372af1510, 0x0000023371823030, 0x00000233718236c0, 0x0000023371822310, -0x00000233718229a0, 0x00000233718243e0, 0x0000023371826b40, 0x0000023371825100, -0x0000023371823d50, 0x0000023371824a70, 0x0000023371828c10, 0x00000233718271d0, -0x00000233718264b0, 0x0000023371828580, 0x0000023371827860, 0x0000023371827ef0, -0x0000023371825e20, 0x000002336e8db070, 0x000002336e8dc420, 0x000002336e8dd7d0, -0x000002336e8dbd90 -} - -"Reference Handler" #9 [36596] daemon prio=10 os_prio=2 cpu=15.62ms elapsed=372.99s tid=0x0000023366303450 nid=36596 waiting on condition [0x0000003920aff000] - java.lang.Thread.State: RUNNABLE - at java.lang.ref.Reference.waitForReferencePendingList(java.base@21.0.9/Native Method) - at java.lang.ref.Reference.processPendingReferences(java.base@21.0.9/Reference.java:246) - at java.lang.ref.Reference$ReferenceHandler.run(java.base@21.0.9/Reference.java:208) - -"Finalizer" #10 [37640] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=372.99s tid=0x0000023366309fe0 nid=37640 in Object.wait() [0x0000003920bff000] - java.lang.Thread.State: WAITING (on object monitor) - at java.lang.Object.wait0(java.base@21.0.9/Native Method) - - waiting on <0x000000068c2c9638> (a java.lang.ref.NativeReferenceQueue$Lock) - at java.lang.Object.wait(java.base@21.0.9/Object.java:366) - at java.lang.Object.wait(java.base@21.0.9/Object.java:339) - at java.lang.ref.NativeReferenceQueue.await(java.base@21.0.9/NativeReferenceQueue.java:48) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:158) - at java.lang.ref.NativeReferenceQueue.remove(java.base@21.0.9/NativeReferenceQueue.java:89) - - locked <0x000000068c2c9638> (a java.lang.ref.NativeReferenceQueue$Lock) - at java.lang.ref.Finalizer$FinalizerThread.run(java.base@21.0.9/Finalizer.java:173) - -"Signal Dispatcher" #11 [29528] daemon prio=9 os_prio=2 cpu=0.00ms elapsed=372.99s tid=0x000002336630d5c0 nid=29528 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Attach Listener" #12 [32964] daemon prio=5 os_prio=2 cpu=15.62ms elapsed=372.99s tid=0x000002336630e280 nid=32964 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Service Thread" #13 [34584] daemon prio=9 os_prio=0 cpu=15.62ms elapsed=372.99s tid=0x000002336630fc60 nid=34584 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Monitor Deflation Thread" #14 [13176] daemon prio=9 os_prio=0 cpu=15.62ms elapsed=372.99s tid=0x0000023366311870 nid=13176 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"C2 CompilerThread0" #15 [31784] daemon prio=9 os_prio=2 cpu=4265.62ms elapsed=372.99s tid=0x000002336631e0a0 nid=31784 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - No compile task - -"C1 CompilerThread0" #23 [24972] daemon prio=9 os_prio=2 cpu=1250.00ms elapsed=372.99s tid=0x0000023366312c20 nid=24972 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - No compile task - -"Notification Thread" #27 [36192] daemon prio=9 os_prio=0 cpu=15.62ms elapsed=372.94s tid=0x000002336b23eb60 nid=36192 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Common-Cleaner" #28 [37400] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=372.93s tid=0x000002336b2497c0 nid=37400 waiting on condition [0x00000039215ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068c2cebe0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1852) - at java.lang.ref.ReferenceQueue.await(java.base@21.0.9/ReferenceQueue.java:71) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:143) - at java.lang.ref.ReferenceQueue.remove(java.base@21.0.9/ReferenceQueue.java:218) - at jdk.internal.ref.CleanerImpl.run(java.base@21.0.9/CleanerImpl.java:140) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - at jdk.internal.misc.InnocuousThread.run(java.base@21.0.9/InnocuousThread.java:186) - -"AsyncAppender-Worker-DefaultAppender" #48 [35540] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=366.81s tid=0x000002336c9ea570 nid=35540 waiting on condition [0x00000039223ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068db92e28> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ArrayBlockingQueue.take(java.base@21.0.9/ArrayBlockingQueue.java:420) - at org.apache.rocketmq.logging.ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:298) - -"Catalina-utility-1" #49 [32292] prio=1 os_prio=-2 cpu=93.75ms elapsed=365.95s tid=0x000002336dcf88a0 nid=32292 waiting on condition [0x0000003922bff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dbc1428> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Catalina-utility-2" #50 [27800] prio=1 os_prio=-2 cpu=78.12ms elapsed=365.95s tid=0x000002336dcf95c0 nid=27800 waiting on condition [0x0000003922cff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dbc1428> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"container-0" #51 [36976] prio=5 os_prio=0 cpu=0.00ms elapsed=365.95s tid=0x000002336dcf8f30 nid=36976 waiting on condition [0x0000003922dff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.catalina.core.StandardServer.await(StandardServer.java:520) - at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:219) - -"Jndi-Dns-address-change-listener" #52 [33984] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=365.81s tid=0x000002336dcf9c50 nid=33984 runnable [0x0000003922efe000] - java.lang.Thread.State: RUNNABLE - at sun.net.dns.ResolverConfigurationImpl.notifyAddrChange0(java.base@21.0.9/Native Method) - at sun.net.dns.ResolverConfigurationImpl$AddressChangeListener.run(java.base@21.0.9/ResolverConfigurationImpl.java:179) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - at jdk.internal.misc.InnocuousThread.run(java.base@21.0.9/InnocuousThread.java:186) - -"lettuce-timer-3-1" #53 [29332] daemon prio=5 os_prio=0 cpu=46.88ms elapsed=365.63s tid=0x000002336dcf74f0 nid=29332 waiting on condition [0x0000003922fff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:598) - at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:494) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"mysql-cj-abandoned-connection-cleanup" #54 [1808] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=365.19s tid=0x0000023372aec650 nid=1808 waiting on condition [0x00000039232fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068d7c7970> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1852) - at java.lang.ref.ReferenceQueue.await(java.base@21.0.9/ReferenceQueue.java:71) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:143) - at java.lang.ref.ReferenceQueue.remove(java.base@21.0.9/ReferenceQueue.java:218) - at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:93) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1144) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"MQClientFactoryScheduledThread" #56 [32888] prio=5 os_prio=0 cpu=0.00ms elapsed=362.22s tid=0x0000023372aee090 nid=32888 waiting on condition [0x00000039233fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e32bee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"NettyEventExecutor" #57 [9732] prio=5 os_prio=0 cpu=0.00ms elapsed=362.21s tid=0x0000023372aed370 nid=9732 waiting on condition [0x00000039234ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e32e5d8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.LinkedBlockingQueue.poll(java.base@21.0.9/LinkedBlockingQueue.java:460) - at org.apache.rocketmq.remoting.netty.NettyRemotingAbstract$NettyEventExecutor.run(NettyRemotingAbstract.java:701) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"ClientHouseKeepingService" #55 [32364] prio=5 os_prio=0 cpu=453.12ms elapsed=362.21s tid=0x0000023372aee720 nid=32364 waiting on condition [0x00000039235fe000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:598) - at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:494) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"PullMessageService" #58 [37548] prio=5 os_prio=0 cpu=0.00ms elapsed=362.21s tid=0x0000023372aeb2a0 nid=37548 waiting on condition [0x00000039236ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e3333e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.rocketmq.client.impl.consumer.PullMessageService.run(PullMessageService.java:131) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"RebalanceService" #59 [24716] prio=5 os_prio=0 cpu=0.00ms elapsed=362.21s tid=0x0000023372aeda00 nid=24716 waiting on condition [0x00000039237fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e335ac0> (a org.apache.rocketmq.common.CountDownLatch2$Sync) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.9/AbstractQueuedSynchronizer.java:756) - at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1126) - at org.apache.rocketmq.common.CountDownLatch2.await(CountDownLatch2.java:114) - at org.apache.rocketmq.common.ServiceThread.waitForRunning(ServiceThread.java:117) - at org.apache.rocketmq.client.impl.consumer.RebalanceService.run(RebalanceService.java:45) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"LatencyFaultToleranceScheduledThread" #60 [14148] prio=5 os_prio=0 cpu=0.00ms elapsed=362.21s tid=0x0000023372aeedb0 nid=14148 waiting on condition [0x00000039238ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e3381b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"RequestHouseKeepingService1" #61 [12344] prio=5 os_prio=0 cpu=93.75ms elapsed=362.21s tid=0x0000023372aeb930 nid=12344 waiting on condition [0x00000039239fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e33a8b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"LatencyFaultToleranceScheduledThread" #62 [28968] prio=5 os_prio=0 cpu=31.25ms elapsed=362.21s tid=0x0000023372aef440 nid=28968 waiting on condition [0x0000003923afe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e33cfa8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Client_192.168.9.14@33832#166861769321600_GuardForSyncSend" #63 [6832] prio=5 os_prio=0 cpu=1015.62ms elapsed=362.20s tid=0x0000023372aefad0 nid=6832 waiting on condition [0x0000003923bff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForSyncSendService.doWork(ProduceAccumulator.java:109) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForSyncSendService.run(ProduceAccumulator.java:84) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Client_192.168.9.14@33832#166861769321600_GuardForAsyncSend" #64 [17916] prio=5 os_prio=0 cpu=906.25ms elapsed=362.20s tid=0x0000023372af0160 nid=17916 waiting on condition [0x0000003923cff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForAsyncSendService.doWork(ProduceAccumulator.java:154) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForAsyncSendService.run(ProduceAccumulator.java:131) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-1" #65 [26964] daemon prio=5 os_prio=0 cpu=140.62ms elapsed=361.73s tid=0x0000023372af0e80 nid=26964 waiting on condition [0x00000039230fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-2" #66 [9372] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.73s tid=0x0000023372af1510 nid=9372 waiting on condition [0x00000039231fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-3" #67 [35544] daemon prio=5 os_prio=0 cpu=78.12ms elapsed=361.73s tid=0x0000023371823030 nid=35544 waiting on condition [0x0000003923dfe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-4" #68 [10336] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=361.73s tid=0x00000233718236c0 nid=10336 waiting on condition [0x0000003923efe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-5" #69 [35160] daemon prio=5 os_prio=0 cpu=265.62ms elapsed=361.73s tid=0x0000023371822310 nid=35160 waiting on condition [0x0000003923ffe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-6" #70 [35128] daemon prio=5 os_prio=0 cpu=234.38ms elapsed=361.73s tid=0x00000233718229a0 nid=35128 waiting on condition [0x00000039240fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-7" #71 [35860] daemon prio=5 os_prio=0 cpu=125.00ms elapsed=361.73s tid=0x00000233718243e0 nid=35860 runnable [0x00000039241f8000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.poll(java.base@21.0.9/Native Method) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:191) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:201) - at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.9/NioSocketImpl.java:309) - at sun.nio.ch.NioSocketImpl.read(java.base@21.0.9/NioSocketImpl.java:346) - at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.9/NioSocketImpl.java:796) - at java.net.Socket$SocketInputStream.read(java.base@21.0.9/Socket.java:1099) - at com.mysql.cj.protocol.ReadAheadInputStream.fill(ReadAheadInputStream.java:107) - at com.mysql.cj.protocol.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:150) - at com.mysql.cj.protocol.ReadAheadInputStream.read(ReadAheadInputStream.java:180) - - locked <0x000000068e866a98> (a com.mysql.cj.protocol.ReadAheadInputStream) - at java.io.FilterInputStream.read(java.base@21.0.9/FilterInputStream.java:119) - at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) - at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) - at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) - at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) - at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1050) - at com.mysql.cj.NativeSession.execSQL(NativeSession.java:660) - at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:889) - - locked <0x000000068e8652c8> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) - - locked <0x000000068e8652c8> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) - at java.lang.invoke.LambdaForm$DMH/0x00000233010d2c00.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x00000233011f4400.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:153) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) - at jdk.proxy3.$Proxy198.execute(jdk.proxy3/Unknown Source) - at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) - at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) - at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) - at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) - at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) - at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) - at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) - at java.lang.invoke.LambdaForm$DMH/0x0000023301589800.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301c5d800.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.LambdaForm$MH/0x00000233010c8000.invokeExact_MT(java.base@21.0.9/LambdaForm$MH) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:155) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) - at jdk.proxy2.$Proxy119.insert(jdk.proxy2/Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2.$Proxy122.insert(jdk.proxy2/Unknown Source) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService.run(DeleteBrandRunService.java:103) - at java.lang.invoke.LambdaForm$DMH/0x0000023301120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301085000.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService$$SpringCGLIB$$0.run() - at com.nanri.aiimage.modules.deletebrand.controller.DeleteBrandRunController.run(DeleteBrandRunController.java:54) - at java.lang.invoke.LambdaForm$DMH/0x0000023301120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301085000.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at com.nanri.aiimage.config.RequestTraceFilter.doFilterInternal(RequestTraceFilter.java:48) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.FilterChainProxy$$Lambda/0x0000023301a9ade8.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation$$Lambda/0x0000023301aa32d0.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000023301aa34e8.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$$Lambda/0x0000023301a9b218.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:181) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter$$Lambda/0x0000023301a9cfd0.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000023301a9d208.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector$$Lambda/0x0000023301915230.doFilter(Unknown Source) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-8" #72 [28396] daemon prio=5 os_prio=0 cpu=62.50ms elapsed=361.73s tid=0x0000023371826b40 nid=28396 runnable [0x00000039242f8000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.poll(java.base@21.0.9/Native Method) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:191) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:201) - at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.9/NioSocketImpl.java:309) - at sun.nio.ch.NioSocketImpl.read(java.base@21.0.9/NioSocketImpl.java:346) - at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.9/NioSocketImpl.java:796) - at java.net.Socket$SocketInputStream.read(java.base@21.0.9/Socket.java:1099) - at com.mysql.cj.protocol.ReadAheadInputStream.fill(ReadAheadInputStream.java:107) - at com.mysql.cj.protocol.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:150) - at com.mysql.cj.protocol.ReadAheadInputStream.read(ReadAheadInputStream.java:180) - - locked <0x000000068e8aa5d0> (a com.mysql.cj.protocol.ReadAheadInputStream) - at java.io.FilterInputStream.read(java.base@21.0.9/FilterInputStream.java:119) - at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) - at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) - at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) - at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) - at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1050) - at com.mysql.cj.NativeSession.execSQL(NativeSession.java:660) - at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:889) - - locked <0x000000068e8aa868> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) - - locked <0x000000068e8aa868> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) - at java.lang.invoke.LambdaForm$DMH/0x00000233010d2c00.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x00000233011f4400.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:153) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) - at jdk.proxy3.$Proxy198.execute(jdk.proxy3/Unknown Source) - at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) - at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) - at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) - at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) - at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) - at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) - at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) - at java.lang.invoke.LambdaForm$DMH/0x0000023301589800.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301c5dc00.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.LambdaForm$MH/0x00000233010c8000.invokeExact_MT(java.base@21.0.9/LambdaForm$MH) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:155) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) - at jdk.proxy2.$Proxy119.insert(jdk.proxy2/Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2.$Proxy122.insert(jdk.proxy2/Unknown Source) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService.run(DeleteBrandRunService.java:103) - at java.lang.invoke.LambdaForm$DMH/0x0000023301120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301085000.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService$$SpringCGLIB$$0.run() - at com.nanri.aiimage.modules.deletebrand.controller.DeleteBrandRunController.run(DeleteBrandRunController.java:54) - at java.lang.invoke.LambdaForm$DMH/0x0000023301120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000023301085000.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at com.nanri.aiimage.config.RequestTraceFilter.doFilterInternal(RequestTraceFilter.java:48) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.FilterChainProxy$$Lambda/0x0000023301a9ade8.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation$$Lambda/0x0000023301aa32d0.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000023301aa34e8.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$$Lambda/0x0000023301a9b218.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:181) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter$$Lambda/0x0000023301a9cfd0.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000023301a9d208.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector$$Lambda/0x0000023301915230.doFilter(Unknown Source) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-9" #73 [31968] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.73s tid=0x0000023371825100 nid=31968 waiting on condition [0x00000039243fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-10" #74 [14256] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.73s tid=0x0000023371823d50 nid=14256 waiting on condition [0x00000039244ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e86b6b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-Poller" #75 [25928] daemon prio=5 os_prio=0 cpu=31.25ms elapsed=361.72s tid=0x0000023371824a70 nid=25928 runnable [0x00000039245fe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068e8ad8d0> (a sun.nio.ch.Util$2) - - locked <0x000000068e8ad870> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:142) - at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:757) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-Acceptor" #76 [14276] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.72s tid=0x0000023371828c10 nid=14276 runnable [0x00000039246ff000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.accept(java.base@21.0.9/Native Method) - at sun.nio.ch.ServerSocketChannelImpl.implAccept(java.base@21.0.9/ServerSocketChannelImpl.java:433) - at sun.nio.ch.ServerSocketChannelImpl.accept(java.base@21.0.9/ServerSocketChannelImpl.java:399) - at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:518) - at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71) - at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:128) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-1" #77 [12476] prio=5 os_prio=0 cpu=0.00ms elapsed=361.70s tid=0x00000233718271d0 nid=12476 waiting on condition [0x00000039247ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e344418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-2" #78 [34996] prio=5 os_prio=0 cpu=109.38ms elapsed=361.70s tid=0x00000233718264b0 nid=34996 waiting on condition [0x00000039248fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e344418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-3" #79 [31044] prio=5 os_prio=0 cpu=234.38ms elapsed=361.70s tid=0x0000023371828580 nid=31044 waiting on condition [0x00000039249fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e344418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-4" #80 [26972] prio=5 os_prio=0 cpu=46.88ms elapsed=361.70s tid=0x0000023371827860 nid=26972 waiting on condition [0x0000003924aff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e344418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"ForkJoinPool.commonPool-worker-1" #81 [28900] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.60s tid=0x0000023371827ef0 nid=28900 runnable [0x0000003924bfe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.poll(java.base@21.0.9/Native Method) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:191) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:201) - at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.9/NioSocketImpl.java:309) - at sun.nio.ch.NioSocketImpl.read(java.base@21.0.9/NioSocketImpl.java:346) - at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.9/NioSocketImpl.java:796) - at java.net.Socket$SocketInputStream.read(java.base@21.0.9/Socket.java:1099) - at com.mysql.cj.protocol.ReadAheadInputStream.fill(ReadAheadInputStream.java:107) - at com.mysql.cj.protocol.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:150) - at com.mysql.cj.protocol.ReadAheadInputStream.read(ReadAheadInputStream.java:180) - - locked <0x000000068e876e48> (a com.mysql.cj.protocol.ReadAheadInputStream) - at java.io.FilterInputStream.read(java.base@21.0.9/FilterInputStream.java:119) - at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) - at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) - at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) - at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) - at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1050) - at com.mysql.cj.protocol.a.NativeProtocol.sendQueryString(NativeProtocol.java:997) - at com.mysql.cj.NativeSession.execSQL(NativeSession.java:658) - at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:730) - - locked <0x000000068e877800> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:653) - at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) - at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) - at org.springframework.jdbc.core.JdbcTemplate$1ExecuteStatementCallback.doInStatement(JdbcTemplate.java:435) - at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:393) - at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:444) - at com.nanri.aiimage.modules.permission.service.PermissionMenuSchemaInitializer.executeQuietly(PermissionMenuSchemaInitializer.java:108) - at com.nanri.aiimage.modules.permission.service.PermissionMenuSchemaInitializer.initializeInternal(PermissionMenuSchemaInitializer.java:44) - at com.nanri.aiimage.modules.permission.service.PermissionMenuSchemaInitializer$$Lambda/0x000002330196b410.run(Unknown Source) - at java.util.concurrent.CompletableFuture$AsyncRun.run(java.base@21.0.9/CompletableFuture.java:1804) - at java.util.concurrent.CompletableFuture$AsyncRun.exec(java.base@21.0.9/CompletableFuture.java:1796) - at java.util.concurrent.ForkJoinTask.doExec(java.base@21.0.9/ForkJoinTask.java:387) - at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@21.0.9/ForkJoinPool.java:1310) - at java.util.concurrent.ForkJoinPool.scan(java.base@21.0.9/ForkJoinPool.java:1841) - at java.util.concurrent.ForkJoinPool.runWorker(java.base@21.0.9/ForkJoinPool.java:1806) - at java.util.concurrent.ForkJoinWorkerThread.run(java.base@21.0.9/ForkJoinWorkerThread.java:188) - -"lettuce-nioEventLoop-4-1" #82 [35608] daemon prio=5 os_prio=0 cpu=109.38ms elapsed=361.32s tid=0x0000023371825e20 nid=35608 runnable [0x0000003924dff000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068e890398> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068e890338> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"HikariPool-1 housekeeper" #83 [34564] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=361.06s tid=0x000002336e8db070 nid=34564 waiting on condition [0x00000039227ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e881800> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"DestroyJavaVM" #85 [35408] prio=5 os_prio=0 cpu=7171.88ms elapsed=361.05s tid=0x000002336e8dc420 nid=35408 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"boundedElastic-evictor-1" #86 [20552] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=359.77s tid=0x000002336e8dd7d0 nid=20552 waiting on condition [0x00000039216fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e8978b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-nioEventLoop-4-2" #88 [26732] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=359.76s tid=0x000002336e8dbd90 nid=26732 runnable [0x00000039221fe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068e89eed0> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068e89ee70> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"G1 Conc#2" os_prio=2 cpu=62.50ms elapsed=371.46s tid=0x000002336d0b9c50 nid=13476 runnable - -"G1 Conc#1" os_prio=2 cpu=78.12ms elapsed=371.46s tid=0x000002336d0ba000 nid=28596 runnable - -"GC Thread#12" os_prio=2 cpu=31.25ms elapsed=371.73s tid=0x000002336c9d3da0 nid=32248 runnable - -"GC Thread#11" os_prio=2 cpu=31.25ms elapsed=371.73s tid=0x000002336ccfd490 nid=29844 runnable - -"GC Thread#10" os_prio=2 cpu=46.88ms elapsed=371.73s tid=0x000002336ccfd0e0 nid=30276 runnable - -"GC Thread#9" os_prio=2 cpu=31.25ms elapsed=371.73s tid=0x000002336d9ca340 nid=27712 runnable - -"GC Thread#8" os_prio=2 cpu=31.25ms elapsed=372.68s tid=0x000002336c0e1ed0 nid=34016 runnable - -"GC Thread#7" os_prio=2 cpu=31.25ms elapsed=372.68s tid=0x000002336c0e1b20 nid=31484 runnable - -"GC Thread#6" os_prio=2 cpu=46.88ms elapsed=372.68s tid=0x000002336c2db7d0 nid=28232 runnable - -"GC Thread#5" os_prio=2 cpu=31.25ms elapsed=372.68s tid=0x000002336c2dac10 nid=5780 runnable - -"GC Thread#4" os_prio=2 cpu=46.88ms elapsed=372.68s tid=0x000002336c219050 nid=10792 runnable - -"GC Thread#3" os_prio=2 cpu=46.88ms elapsed=372.68s tid=0x000002336c218ca0 nid=33432 runnable - -"GC Thread#2" os_prio=2 cpu=62.50ms elapsed=372.68s tid=0x000002336c2188f0 nid=29088 runnable - -"GC Thread#1" os_prio=2 cpu=31.25ms elapsed=372.68s tid=0x000002336bd51490 nid=33064 runnable - -"VM Thread" os_prio=2 cpu=15.62ms elapsed=373.00s tid=0x00000233662e8820 nid=22704 runnable - -"VM Periodic Task Thread" os_prio=2 cpu=140.62ms elapsed=373.00s tid=0x00000233662d1660 nid=28572 waiting on condition - -"G1 Service" os_prio=2 cpu=0.00ms elapsed=373.01s tid=0x00000233661a71d0 nid=30960 runnable - -"G1 Refine#0" os_prio=2 cpu=109.38ms elapsed=373.01s tid=0x000002334306e790 nid=35932 runnable - -"G1 Conc#0" os_prio=2 cpu=78.12ms elapsed=373.01s tid=0x0000023343042d40 nid=13768 runnable - -"G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=373.01s tid=0x0000023343042320 nid=31632 runnable - -"GC Thread#0" os_prio=2 cpu=46.88ms elapsed=373.01s tid=0x0000023343034b90 nid=36916 runnable - -JNI global refs: 43, weak refs: 0 - diff --git a/backend-java/jstack-6488.txt b/backend-java/jstack-6488.txt deleted file mode 100644 index f64239b..0000000 --- a/backend-java/jstack-6488.txt +++ /dev/null @@ -1,1056 +0,0 @@ -2026-04-27 09:31:53 -Full thread dump Java HotSpot(TM) 64-Bit Server VM (21.0.9+7-LTS-338 mixed mode, sharing): - -Threads class SMR info: -_java_thread_list=0x00000206f5796f90, length=60, elements={ -0x00000206ef866420, 0x00000206ef868e90, 0x00000206ef86cf00, 0x00000206ef86ddf0, -0x00000206ef870990, 0x00000206ef87b540, 0x00000206ef881950, 0x00000206ef883800, -0x00000206f424c120, 0x00000206f4256ee0, 0x00000206f8610410, 0x00000206f54b87d0, -0x00000206f5302900, 0x00000206fae021d0, 0x00000206fa48d240, 0x00000206fa48a450, -0x00000206fa48cbb0, 0x00000206fa48c520, 0x00000206fb996340, 0x00000206fb997d80, -0x00000206fb998410, 0x00000206fb9976f0, 0x00000206fb994f90, 0x00000206fb9969d0, -0x00000206fb998aa0, 0x00000206fb995620, 0x00000206fb997060, 0x00000206fb999130, -0x00000206fb995cb0, 0x00000206fb99b890, 0x00000206fb9997c0, 0x00000206fb99c5b0, -0x00000206fb99bf20, 0x00000206fb99b200, 0x00000206fb999e50, 0x00000206fb99a4e0, -0x00000206fb99ab70, 0x00000206f613bc10, 0x00000206f613aef0, 0x00000206f613dce0, -0x00000206f613b580, 0x00000206f613f090, 0x00000206f613ea00, 0x00000206f613c2a0, -0x00000206f613c930, 0x00000206f6140440, 0x00000206f613fdb0, 0x00000206f6140ad0, -0x00000206f6141e80, 0x00000206f6141160, 0x00000206fbd56be0, 0x00000206fbd56550, -0x00000206fbd54b10, 0x00000206fbd58620, 0x00000206fbd59340, 0x00000206ff0af860, -0x00000206ff0b2650, 0x00000206ff0b1fc0, 0x00000206ff0b2ce0, 0x00000206ff0b3370 -} - -"Reference Handler" #9 [27888] daemon prio=10 os_prio=2 cpu=0.00ms elapsed=2043.37s tid=0x00000206ef866420 nid=27888 waiting on condition [0x000000a9555ff000] - java.lang.Thread.State: RUNNABLE - at java.lang.ref.Reference.waitForReferencePendingList(java.base@21.0.9/Native Method) - at java.lang.ref.Reference.processPendingReferences(java.base@21.0.9/Reference.java:246) - at java.lang.ref.Reference$ReferenceHandler.run(java.base@21.0.9/Reference.java:208) - -"Finalizer" #10 [3824] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=2043.37s tid=0x00000206ef868e90 nid=3824 in Object.wait() [0x000000a9556ff000] - java.lang.Thread.State: WAITING (on object monitor) - at java.lang.Object.wait0(java.base@21.0.9/Native Method) - - waiting on <0x000000068c286d88> (a java.lang.ref.NativeReferenceQueue$Lock) - at java.lang.Object.wait(java.base@21.0.9/Object.java:366) - at java.lang.Object.wait(java.base@21.0.9/Object.java:339) - at java.lang.ref.NativeReferenceQueue.await(java.base@21.0.9/NativeReferenceQueue.java:48) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:158) - at java.lang.ref.NativeReferenceQueue.remove(java.base@21.0.9/NativeReferenceQueue.java:89) - - locked <0x000000068c286d88> (a java.lang.ref.NativeReferenceQueue$Lock) - at java.lang.ref.Finalizer$FinalizerThread.run(java.base@21.0.9/Finalizer.java:173) - -"Signal Dispatcher" #11 [36016] daemon prio=9 os_prio=2 cpu=0.00ms elapsed=2043.37s tid=0x00000206ef86cf00 nid=36016 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Attach Listener" #12 [32968] daemon prio=5 os_prio=2 cpu=0.00ms elapsed=2043.37s tid=0x00000206ef86ddf0 nid=32968 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Service Thread" #13 [31112] daemon prio=9 os_prio=0 cpu=31.25ms elapsed=2043.37s tid=0x00000206ef870990 nid=31112 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Monitor Deflation Thread" #14 [34356] daemon prio=9 os_prio=0 cpu=109.38ms elapsed=2043.37s tid=0x00000206ef87b540 nid=34356 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"C2 CompilerThread0" #15 [33528] daemon prio=9 os_prio=2 cpu=9781.25ms elapsed=2043.37s tid=0x00000206ef881950 nid=33528 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - No compile task - -"C1 CompilerThread0" #23 [34520] daemon prio=9 os_prio=2 cpu=2015.62ms elapsed=2043.37s tid=0x00000206ef883800 nid=34520 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - No compile task - -"Notification Thread" #27 [30388] daemon prio=9 os_prio=0 cpu=15.62ms elapsed=2043.32s tid=0x00000206f424c120 nid=30388 runnable [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"Common-Cleaner" #28 [13868] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=2043.31s tid=0x00000206f4256ee0 nid=13868 waiting on condition [0x000000a955fff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068c2871c8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1852) - at java.lang.ref.ReferenceQueue.await(java.base@21.0.9/ReferenceQueue.java:71) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:143) - at java.lang.ref.ReferenceQueue.remove(java.base@21.0.9/ReferenceQueue.java:218) - at jdk.internal.ref.CleanerImpl.run(java.base@21.0.9/CleanerImpl.java:140) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - at jdk.internal.misc.InnocuousThread.run(java.base@21.0.9/InnocuousThread.java:186) - -"AsyncAppender-Worker-DefaultAppender" #48 [29512] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=2038.73s tid=0x00000206f8610410 nid=29512 waiting on condition [0x000000a956eff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068db9c8a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ArrayBlockingQueue.take(java.base@21.0.9/ArrayBlockingQueue.java:420) - at org.apache.rocketmq.logging.ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:298) - -"Catalina-utility-1" #49 [34028] prio=1 os_prio=-2 cpu=640.62ms elapsed=2037.71s tid=0x00000206f54b87d0 nid=34028 waiting on condition [0x000000a9578fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dbb6988> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Catalina-utility-2" #50 [32756] prio=1 os_prio=-2 cpu=625.00ms elapsed=2037.71s tid=0x00000206f5302900 nid=32756 waiting on condition [0x000000a9579ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dbb6988> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"container-0" #51 [20256] prio=5 os_prio=0 cpu=0.00ms elapsed=2037.70s tid=0x00000206fae021d0 nid=20256 waiting on condition [0x000000a957aff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.catalina.core.StandardServer.await(StandardServer.java:520) - at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:219) - -"Jndi-Dns-address-change-listener" #52 [7160] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=2037.51s tid=0x00000206fa48d240 nid=7160 runnable [0x000000a957bff000] - java.lang.Thread.State: RUNNABLE - at sun.net.dns.ResolverConfigurationImpl.notifyAddrChange0(java.base@21.0.9/Native Method) - at sun.net.dns.ResolverConfigurationImpl$AddressChangeListener.run(java.base@21.0.9/ResolverConfigurationImpl.java:179) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - at jdk.internal.misc.InnocuousThread.run(java.base@21.0.9/InnocuousThread.java:186) - -"lettuce-timer-3-1" #53 [31324] daemon prio=5 os_prio=0 cpu=578.12ms elapsed=2037.40s tid=0x00000206fa48a450 nid=31324 waiting on condition [0x000000a957cfe000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:598) - at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:494) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"mysql-cj-abandoned-connection-cleanup" #54 [6776] daemon prio=5 os_prio=0 cpu=46.88ms elapsed=2036.99s tid=0x00000206fa48cbb0 nid=6776 waiting on condition [0x000000a957dff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068d7eebc8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1852) - at java.lang.ref.ReferenceQueue.await(java.base@21.0.9/ReferenceQueue.java:71) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:143) - at java.lang.ref.ReferenceQueue.remove(java.base@21.0.9/ReferenceQueue.java:218) - at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:93) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1144) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"MQClientFactoryScheduledThread" #56 [27804] prio=5 os_prio=0 cpu=62.50ms elapsed=2034.19s tid=0x00000206fa48c520 nid=27804 waiting on condition [0x000000a957eff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb00c98> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"NettyEventExecutor" #57 [28596] prio=5 os_prio=0 cpu=31.25ms elapsed=2034.19s tid=0x00000206fb996340 nid=28596 waiting on condition [0x000000a957fff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eafa238> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.LinkedBlockingQueue.poll(java.base@21.0.9/LinkedBlockingQueue.java:460) - at org.apache.rocketmq.remoting.netty.NettyRemotingAbstract$NettyEventExecutor.run(NettyRemotingAbstract.java:701) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"ClientHouseKeepingService" #55 [13476] prio=5 os_prio=0 cpu=796.88ms elapsed=2034.19s tid=0x00000206fb997d80 nid=13476 waiting on condition [0x000000a9580ff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:598) - at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:494) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"PullMessageService" #58 [37592] prio=5 os_prio=0 cpu=0.00ms elapsed=2034.18s tid=0x00000206fb998410 nid=37592 waiting on condition [0x000000a9581fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb14bd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.rocketmq.client.impl.consumer.PullMessageService.run(PullMessageService.java:131) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"RebalanceService" #59 [5336] prio=5 os_prio=0 cpu=0.00ms elapsed=2034.18s tid=0x00000206fb9976f0 nid=5336 waiting on condition [0x000000a9582ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb1b618> (a org.apache.rocketmq.common.CountDownLatch2$Sync) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.9/AbstractQueuedSynchronizer.java:756) - at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1126) - at org.apache.rocketmq.common.CountDownLatch2.await(CountDownLatch2.java:114) - at org.apache.rocketmq.common.ServiceThread.waitForRunning(ServiceThread.java:117) - at org.apache.rocketmq.client.impl.consumer.RebalanceService.run(RebalanceService.java:45) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"LatencyFaultToleranceScheduledThread" #60 [34044] prio=5 os_prio=0 cpu=343.75ms elapsed=2034.18s tid=0x00000206fb994f90 nid=34044 waiting on condition [0x000000a9583ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb22078> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"RequestHouseKeepingService1" #61 [36360] prio=5 os_prio=0 cpu=15.62ms elapsed=2034.18s tid=0x00000206fb9969d0 nid=36360 waiting on condition [0x000000a9584fe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb28ad8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"LatencyFaultToleranceScheduledThread" #62 [36976] prio=5 os_prio=0 cpu=15.62ms elapsed=2034.18s tid=0x00000206fb998aa0 nid=36976 waiting on condition [0x000000a9585ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e266628> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Client_192.168.9.14@6488#167351209475700_GuardForSyncSend" #63 [33984] prio=5 os_prio=0 cpu=4125.00ms elapsed=2034.18s tid=0x00000206fb995620 nid=33984 waiting on condition [0x000000a9586ff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForSyncSendService.doWork(ProduceAccumulator.java:109) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForSyncSendService.run(ProduceAccumulator.java:84) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Client_192.168.9.14@6488#167351209475700_GuardForAsyncSend" #64 [29332] prio=5 os_prio=0 cpu=4062.50ms elapsed=2034.18s tid=0x00000206fb997060 nid=29332 waiting on condition [0x000000a9587ff000] - java.lang.Thread.State: TIMED_WAITING (sleeping) - at java.lang.Thread.sleep0(java.base@21.0.9/Native Method) - at java.lang.Thread.sleep(java.base@21.0.9/Thread.java:509) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForAsyncSendService.doWork(ProduceAccumulator.java:154) - at org.apache.rocketmq.client.producer.ProduceAccumulator$GuardForAsyncSendService.run(ProduceAccumulator.java:131) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-1" #65 [20552] daemon prio=5 os_prio=0 cpu=203.12ms elapsed=2033.58s tid=0x00000206fb999130 nid=20552 waiting on condition [0x000000a9588fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-2" #66 [32148] daemon prio=5 os_prio=0 cpu=390.62ms elapsed=2033.58s tid=0x00000206fb995cb0 nid=32148 waiting on condition [0x000000a9589fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-3" #67 [26732] daemon prio=5 os_prio=0 cpu=125.00ms elapsed=2033.58s tid=0x00000206fb99b890 nid=26732 waiting on condition [0x000000a958aff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-4" #68 [25444] daemon prio=5 os_prio=0 cpu=500.00ms elapsed=2033.58s tid=0x00000206fb9997c0 nid=25444 waiting on condition [0x000000a958bff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-5" #69 [9372] daemon prio=5 os_prio=0 cpu=125.00ms elapsed=2033.58s tid=0x00000206fb99c5b0 nid=9372 runnable [0x000000a958cf8000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.poll(java.base@21.0.9/Native Method) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:191) - at sun.nio.ch.NioSocketImpl.park(java.base@21.0.9/NioSocketImpl.java:201) - at sun.nio.ch.NioSocketImpl.implRead(java.base@21.0.9/NioSocketImpl.java:309) - at sun.nio.ch.NioSocketImpl.read(java.base@21.0.9/NioSocketImpl.java:346) - at sun.nio.ch.NioSocketImpl$1.read(java.base@21.0.9/NioSocketImpl.java:796) - at java.net.Socket$SocketInputStream.read(java.base@21.0.9/Socket.java:1099) - at com.mysql.cj.protocol.ReadAheadInputStream.fill(ReadAheadInputStream.java:107) - at com.mysql.cj.protocol.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:150) - at com.mysql.cj.protocol.ReadAheadInputStream.read(ReadAheadInputStream.java:180) - - locked <0x000000068ee69208> (a com.mysql.cj.protocol.ReadAheadInputStream) - at java.io.FilterInputStream.read(java.base@21.0.9/FilterInputStream.java:119) - at com.mysql.cj.protocol.FullReadInputStream.readFully(FullReadInputStream.java:64) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeaderLocal(SimplePacketReader.java:81) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:63) - at com.mysql.cj.protocol.a.SimplePacketReader.readHeader(SimplePacketReader.java:45) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:52) - at com.mysql.cj.protocol.a.TimeTrackingPacketReader.readHeader(TimeTrackingPacketReader.java:41) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:54) - at com.mysql.cj.protocol.a.MultiPacketReader.readHeader(MultiPacketReader.java:44) - at com.mysql.cj.protocol.a.NativeProtocol.readMessage(NativeProtocol.java:576) - at com.mysql.cj.protocol.a.NativeProtocol.checkErrorMessage(NativeProtocol.java:762) - at com.mysql.cj.protocol.a.NativeProtocol.sendCommand(NativeProtocol.java:701) - at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1050) - at com.mysql.cj.NativeSession.execSQL(NativeSession.java:660) - at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:889) - - locked <0x000000068ee66c78> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) - - locked <0x000000068ee66c78> (a com.mysql.cj.jdbc.ConnectionImpl) - at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) - at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) - at java.lang.invoke.LambdaForm$DMH/0x00000206810d2c00.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x00000206811f8400.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:153) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) - at jdk.proxy3.$Proxy198.execute(jdk.proxy3/Unknown Source) - at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) - at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) - at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) - at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) - at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) - at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) - at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) - at java.lang.invoke.LambdaForm$DMH/0x0000020681588800.invokeInterface(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x0000020681c38c00.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.LambdaForm$MH/0x00000206810c8000.invokeExact_MT(java.base@21.0.9/LambdaForm$MH) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:155) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) - at jdk.proxy2.$Proxy119.insert(jdk.proxy2/Unknown Source) - at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) - at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) - at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) - at jdk.proxy2.$Proxy122.insert(jdk.proxy2/Unknown Source) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService.run(DeleteBrandRunService.java:103) - at java.lang.invoke.LambdaForm$DMH/0x0000020681120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x00000206810b0400.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716) - at com.nanri.aiimage.modules.deletebrand.service.DeleteBrandRunService$$SpringCGLIB$$0.run() - at com.nanri.aiimage.modules.deletebrand.controller.DeleteBrandRunController.run(DeleteBrandRunController.java:54) - at java.lang.invoke.LambdaForm$DMH/0x0000020681120c00.invokeVirtual(java.base@21.0.9/LambdaForm$DMH) - at java.lang.invoke.LambdaForm$MH/0x00000206810b0400.invoke(java.base@21.0.9/LambdaForm$MH) - at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.9/Invokers$Holder) - at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.9/DirectMethodHandleAccessor.java:154) - at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.9/DirectMethodHandleAccessor.java:103) - at java.lang.reflect.Method.invoke(java.base@21.0.9/Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at com.nanri.aiimage.config.RequestTraceFilter.doFilterInternal(RequestTraceFilter.java:48) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) - at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231) - at org.springframework.security.web.FilterChainProxy$$Lambda/0x0000020681ac1a68.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479) - at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation$$Lambda/0x0000020681aca0a8.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000020681aca2c0.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82) - at org.springframework.security.web.ObservationFilterChainDecorator$$Lambda/0x0000020681ac1e98.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128) - at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126) - at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:181) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107) - at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) - at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82) - at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter$$Lambda/0x0000020681ac3c50.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323) - at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation$$Lambda/0x0000020681ac3e88.doFilter(Unknown Source) - at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224) - at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137) - at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233) - at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195) - at org.springframework.web.servlet.handler.HandlerMappingIntrospector$$Lambda/0x0000020681914658.doFilter(Unknown Source) - at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113) - at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) - at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230) - at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362) - at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-6" #70 [35160] daemon prio=5 os_prio=0 cpu=31.25ms elapsed=2033.58s tid=0x00000206fb99bf20 nid=35160 waiting on condition [0x000000a958dfe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-7" #71 [6692] daemon prio=5 os_prio=0 cpu=62.50ms elapsed=2033.58s tid=0x00000206fb99b200 nid=6692 waiting on condition [0x000000a958efe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-8" #72 [12476] daemon prio=5 os_prio=0 cpu=31.25ms elapsed=2033.58s tid=0x00000206fb999e50 nid=12476 waiting on condition [0x000000a958ffe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-9" #73 [26972] daemon prio=5 os_prio=0 cpu=109.38ms elapsed=2033.58s tid=0x00000206fb99a4e0 nid=26972 waiting on condition [0x000000a9590ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-exec-10" #74 [35860] daemon prio=5 os_prio=0 cpu=62.50ms elapsed=2033.58s tid=0x00000206fb99ab70 nid=35860 waiting on condition [0x000000a9591ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb49ee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:117) - at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1114) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-Poller" #75 [28396] daemon prio=5 os_prio=0 cpu=109.38ms elapsed=2033.58s tid=0x00000206f613bc10 nid=28396 runnable [0x000000a9592ff000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068eb0e360> (a sun.nio.ch.Util$2) - - locked <0x000000068eb0e300> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:142) - at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:757) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"http-nio-18080-Acceptor" #76 [1948] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=2033.58s tid=0x00000206f613aef0 nid=1948 runnable [0x000000a9593ff000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.Net.accept(java.base@21.0.9/Native Method) - at sun.nio.ch.ServerSocketChannelImpl.implAccept(java.base@21.0.9/ServerSocketChannelImpl.java:433) - at sun.nio.ch.ServerSocketChannelImpl.accept(java.base@21.0.9/ServerSocketChannelImpl.java:399) - at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:518) - at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71) - at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:128) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-1" #77 [14256] prio=5 os_prio=0 cpu=546.88ms elapsed=2033.55s tid=0x00000206f613dce0 nid=14256 waiting on condition [0x000000a9594fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e2666c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-2" #78 [31968] prio=5 os_prio=0 cpu=328.12ms elapsed=2033.55s tid=0x00000206f613b580 nid=31968 waiting on condition [0x000000a9595ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e2666c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-3" #79 [13816] prio=5 os_prio=0 cpu=1671.88ms elapsed=2033.55s tid=0x00000206f613f090 nid=13816 waiting on condition [0x000000a9596ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e2666c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"aiimage-scheduling-4" #80 [28896] prio=5 os_prio=0 cpu=343.75ms elapsed=2033.55s tid=0x00000206f613ea00 nid=28896 waiting on condition [0x000000a9597fe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e2666c0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1177) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-nioEventLoop-4-1" #81 [32980] daemon prio=5 os_prio=0 cpu=109.38ms elapsed=2033.11s tid=0x00000206f613c2a0 nid=32980 runnable [0x000000a9599fe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068eb00fa0> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068eb00f40> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"HikariPool-1 housekeeper" #82 [29912] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=2032.86s tid=0x00000206f613c930 nid=29912 waiting on condition [0x000000a959aff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068eb28cf8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"DestroyJavaVM" #84 [15708] prio=5 os_prio=0 cpu=6906.25ms elapsed=2032.85s tid=0x00000206f6140440 nid=15708 waiting on condition [0x0000000000000000] - java.lang.Thread.State: RUNNABLE - -"boundedElastic-evictor-1" #85 [18992] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=2010.51s tid=0x00000206f613fdb0 nid=18992 waiting on condition [0x000000a955dfe000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068f347428> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@21.0.9/AbstractQueuedSynchronizer.java:1763) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1182) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-nioEventLoop-4-2" #87 [29928] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=2010.51s tid=0x00000206f6140ad0 nid=29928 runnable [0x000000a9561fe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068eb22280> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068eb22220> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-eventExecutorLoop-1-1" #112 [34372] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=1024.00s tid=0x00000206f6141e80 nid=34372 waiting on condition [0x000000a954bfe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dc62420> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:243) - at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-nioEventLoop-4-3" #113 [14056] daemon prio=5 os_prio=0 cpu=78.12ms elapsed=1023.99s tid=0x00000206f6141160 nid=14056 runnable [0x000000a954cfe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068ec204a0> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068ec214c8> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"OkHttp TaskRunner" #121 [37016] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=337.15s tid=0x00000206fbd56be0 nid=37016 waiting on condition [0x000000a9598ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068fff7390> (a java.util.concurrent.SynchronousQueue$Transferer) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:410) - at java.util.concurrent.LinkedTransferQueue$DualNode.await(java.base@21.0.9/LinkedTransferQueue.java:452) - at java.util.concurrent.SynchronousQueue$Transferer.xferLifo(java.base@21.0.9/SynchronousQueue.java:194) - at java.util.concurrent.SynchronousQueue.xfer(java.base@21.0.9/SynchronousQueue.java:235) - at java.util.concurrent.SynchronousQueue.poll(java.base@21.0.9/SynchronousQueue.java:338) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1069) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Okio Watchdog" #122 [18768] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=337.15s tid=0x00000206fbd56550 nid=18768 waiting on condition [0x000000a9572ff000] - java.lang.Thread.State: TIMED_WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068ffece98> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21.0.9/LockSupport.java:269) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1852) - at okio.AsyncTimeout$Companion.awaitTimeout$okio(AsyncTimeout.kt:320) - at okio.AsyncTimeout$Watchdog.run(AsyncTimeout.kt:186) - -"task-file-job-dispatch-1" #125 [37848] prio=5 os_prio=0 cpu=1515.62ms elapsed=335.26s tid=0x00000206fbd54b10 nid=37848 waiting on condition [0x000000a956cff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e362240> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"Java2D Disposer" #129 [13036] daemon prio=10 os_prio=2 cpu=0.00ms elapsed=334.37s tid=0x00000206fbd58620 nid=13036 waiting on condition [0x000000a959efe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068fdafd50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.lang.ref.ReferenceQueue.await(java.base@21.0.9/ReferenceQueue.java:67) - at java.lang.ref.ReferenceQueue.remove0(java.base@21.0.9/ReferenceQueue.java:158) - at java.lang.ref.ReferenceQueue.remove(java.base@21.0.9/ReferenceQueue.java:234) - at sun.java2d.Disposer.run(java.desktop@21.0.9/Disposer.java:145) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"task-file-job-dispatch-2" #131 [33976] prio=5 os_prio=0 cpu=546.88ms elapsed=333.03s tid=0x00000206fbd59340 nid=33976 waiting on condition [0x000000a959fff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068e362240> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"boundedElastic-2" #208 [22740] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=44.42s tid=0x00000206ff0af860 nid=22740 waiting on condition [0x000000a954afe000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x00000007ffd58b90> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:1170) - at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@21.0.9/ScheduledThreadPoolExecutor.java:899) - at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@21.0.9/ThreadPoolExecutor.java:1070) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1130) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-eventExecutorLoop-1-2" #209 [2160] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=39.39s tid=0x00000206ff0b2650 nid=2160 waiting on condition [0x000000a9562ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dc62200> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:243) - at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"OkHttp TaskRunner" #210 [37308] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=36.98s tid=0x00000206ff0b1fc0 nid=37308 in Object.wait() [0x000000a956bff000] - java.lang.Thread.State: TIMED_WAITING (on object monitor) - at java.lang.Object.wait0(java.base@21.0.9/Native Method) - - waiting on - at java.lang.Object.wait(java.base@21.0.9/Object.java:366) - at java.lang.Object.wait(java.base@21.0.9/Object.java:488) - at okhttp3.internal.concurrent.TaskRunner$RealBackend.coordinatorWait(TaskRunner.kt:294) - at okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.kt:218) - at okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:59) - - locked <0x000000068ffeefb0> (a okhttp3.internal.concurrent.TaskRunner) - at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.9/ThreadPoolExecutor.java:1144) - at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.9/ThreadPoolExecutor.java:642) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-eventExecutorLoop-1-3" #211 [35152] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=25.18s tid=0x00000206ff0b2ce0 nid=35152 waiting on condition [0x000000a9573ff000] - java.lang.Thread.State: WAITING (parking) - at jdk.internal.misc.Unsafe.park(java.base@21.0.9/Native Method) - - parking to wait for <0x000000068dc61fe0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) - at java.util.concurrent.locks.LockSupport.park(java.base@21.0.9/LockSupport.java:371) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.9/AbstractQueuedSynchronizer.java:519) - at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.9/ForkJoinPool.java:3778) - at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.9/ForkJoinPool.java:3723) - at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.9/AbstractQueuedSynchronizer.java:1712) - at java.util.concurrent.LinkedBlockingQueue.take(java.base@21.0.9/LinkedBlockingQueue.java:435) - at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:243) - at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"lettuce-nioEventLoop-4-4" #212 [32884] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=25.18s tid=0x00000206ff0b3370 nid=32884 runnable [0x000000a9574fe000] - java.lang.Thread.State: RUNNABLE - at sun.nio.ch.WEPoll.wait(java.base@21.0.9/Native Method) - at sun.nio.ch.WEPollSelectorImpl.doSelect(java.base@21.0.9/WEPollSelectorImpl.java:114) - at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@21.0.9/SelectorImpl.java:130) - - locked <0x000000068ec066d0> (a io.netty.channel.nio.SelectedSelectionKeySet) - - locked <0x000000068ec066e8> (a sun.nio.ch.WEPollSelectorImpl) - at sun.nio.ch.SelectorImpl.select(java.base@21.0.9/SelectorImpl.java:147) - at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68) - at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:887) - at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:526) - at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) - at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) - at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) - at java.lang.Thread.runWith(java.base@21.0.9/Thread.java:1596) - at java.lang.Thread.run(java.base@21.0.9/Thread.java:1583) - -"G1 Conc#2" os_prio=2 cpu=218.75ms elapsed=2041.95s tid=0x00000206f735ee50 nid=18900 runnable - -"G1 Conc#1" os_prio=2 cpu=203.12ms elapsed=2041.96s tid=0x00000206f735eaa0 nid=33484 runnable - -"GC Thread#12" os_prio=2 cpu=62.50ms elapsed=2042.22s tid=0x00000206f785f210 nid=31868 runnable - -"GC Thread#11" os_prio=2 cpu=62.50ms elapsed=2042.22s tid=0x00000206f6581a70 nid=4496 runnable - -"GC Thread#10" os_prio=2 cpu=109.38ms elapsed=2042.22s tid=0x00000206f6253e90 nid=33260 runnable - -"GC Thread#9" os_prio=2 cpu=62.50ms elapsed=2042.22s tid=0x00000206f64433f0 nid=37096 runnable - -"GC Thread#8" os_prio=2 cpu=93.75ms elapsed=2043.16s tid=0x00000206f4bfe950 nid=33308 runnable - -"GC Thread#7" os_prio=2 cpu=93.75ms elapsed=2043.16s tid=0x00000206f4bfe5a0 nid=29340 runnable - -"GC Thread#6" os_prio=2 cpu=109.38ms elapsed=2043.16s tid=0x00000206f4bfd5e0 nid=30004 runnable - -"GC Thread#5" os_prio=2 cpu=109.38ms elapsed=2043.16s tid=0x00000206f4bfd230 nid=37836 runnable - -"GC Thread#4" os_prio=2 cpu=78.12ms elapsed=2043.16s tid=0x00000206f535ee00 nid=28080 runnable - -"GC Thread#1" os_prio=2 cpu=93.75ms elapsed=2043.16s tid=0x00000206f4dddd20 nid=7744 runnable - -"GC Thread#3" os_prio=2 cpu=62.50ms elapsed=2043.16s tid=0x00000206f535ea50 nid=32244 runnable - -"GC Thread#2" os_prio=2 cpu=78.12ms elapsed=2043.16s tid=0x00000206f4ef5900 nid=36548 runnable - -"VM Thread" os_prio=2 cpu=109.38ms elapsed=2043.38s tid=0x00000206ef850220 nid=36908 runnable - -"VM Periodic Task Thread" os_prio=2 cpu=828.12ms elapsed=2043.38s tid=0x00000206ef839e80 nid=26176 waiting on condition - -"G1 Service" os_prio=2 cpu=78.12ms elapsed=2043.39s tid=0x00000206ef708f10 nid=29916 runnable - -"G1 Refine#0" os_prio=2 cpu=875.00ms elapsed=2043.39s tid=0x00000206ef7076d0 nid=32744 runnable - -"G1 Conc#0" os_prio=2 cpu=203.12ms elapsed=2043.39s tid=0x00000206cdf35680 nid=10956 runnable - -"G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=2043.39s tid=0x00000206cdf33740 nid=17824 runnable - -"GC Thread#0" os_prio=2 cpu=93.75ms elapsed=2043.39s tid=0x00000206cdf26720 nid=36252 runnable - -JNI global refs: 52, weak refs: 1 - diff --git a/backend-java/src/main/java/com/nanri/aiimage/config/AppearancePatentProperties.java b/backend-java/src/main/java/com/nanri/aiimage/config/AppearancePatentProperties.java index 29e672e..6ab2db0 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/config/AppearancePatentProperties.java +++ b/backend-java/src/main/java/com/nanri/aiimage/config/AppearancePatentProperties.java @@ -8,11 +8,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class AppearancePatentProperties { private String cozeBaseUrl = "https://api.coze.cn"; private String cozeWorkflowPath = "/v1/workflow/run"; + private String cozeWorkflowHistoryPath = "/v1/workflows/{workflow_id}/run_histories/{execute_id}"; private String cozeWorkflowId = "7632683471312355338"; private String cozeToken = ""; private int cozeBatchSize = 10; private int cozeConnectTimeoutMillis = 10000; private int cozeReadTimeoutMillis = 60000; + private int cozePollIntervalMillis = 2000; + private int cozePollTimeoutMillis = 120000; private int staleTimeoutMinutes = 20; private String staleFinalizeCron = "0 */2 * * * *"; } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/client/AppearancePatentCozeClient.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/client/AppearancePatentCozeClient.java index 6518717..12cd99d 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/client/AppearancePatentCozeClient.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/client/AppearancePatentCozeClient.java @@ -72,43 +72,88 @@ public class AppearancePatentCozeClient { AppearancePatentResultRowDto row = rows.getFirst(); PartialCozeResultException lastFailure = null; for (int attemptIndex = 1; attemptIndex <= 3; attemptIndex++) { - InspectAttempt attempt = inspectOnce(rows, prompt); - if (attempt.resolvedCount() == rows.size()) { - return attempt.mergedRows(); + try { + InspectAttempt attempt = inspectOnce(rows, prompt); + if (attempt.resolvedCount() == rows.size()) { + return attempt.mergedRows(); + } + log.warn("[appearance-patent] coze single unresolved attempt={} rowId={} asin={} country={} title={} url={} raw={}", + attemptIndex, + row.getId(), + row.getAsin(), + row.getCountry(), + abbreviate(row.getTitle(), 120), + abbreviate(row.getUrl(), 120), + abbreviate(attempt.raw(), 500)); + lastFailure = new PartialCozeResultException(attempt.resolvedCount(), rows.size(), attempt.rawResultCount()); + } catch (Exception ex) { + if (attemptIndex >= 3 || !isRetryableBatchFailure(ex)) { + throw ex; + } + log.warn("[appearance-patent] coze single retryable failure attempt={} rowId={} asin={} country={} err={}", + attemptIndex, + row.getId(), + row.getAsin(), + row.getCountry(), + failureMessage(ex)); + } + if (attemptIndex < 3) { + sleepBeforeRetry(attemptIndex); } - log.warn("[appearance-patent] coze single unresolved attempt={} rowId={} asin={} country={} title={} url={} raw={}", - attemptIndex, - row.getId(), - row.getAsin(), - row.getCountry(), - abbreviate(row.getTitle(), 120), - abbreviate(row.getUrl(), 120), - abbreviate(attempt.raw(), 500)); - lastFailure = new PartialCozeResultException(attempt.resolvedCount(), rows.size(), attempt.rawResultCount()); } throw lastFailure == null ? new PartialCozeResultException(0, rows.size(), 0) : lastFailure; } private InspectAttempt inspectOnce(List rows, String prompt) throws Exception { - String raw = postWorkflow(rows, prompt); + String raw = runWorkflowAsyncAndWait(rows, prompt); List results = parseResults(raw); + if (rows.size() > 1 && !results.isEmpty() && results.stream().noneMatch(this::hasIdentity)) { + throw new PartialCozeResultException(0, rows.size(), results.size()); + } List merged = mergeRows(rows, results); return new InspectAttempt(raw, merged, resolvedCount(merged), results.size()); } - private String postWorkflow(List rows, String prompt) { - Map parameters = new LinkedHashMap<>(); - parameters.put("row_id_list", rows.stream().map(row -> nonBlank(row.getId(), "")).toList()); - parameters.put("asin_list", rows.stream().map(row -> nonBlank(row.getAsin(), "")).toList()); - parameters.put("country_list", rows.stream().map(row -> nonBlank(row.getCountry(), "")).toList()); - parameters.put("row_key_list", rows.stream().map(this::rowKey).toList()); - parameters.put("title_list", rows.stream().map(row -> nonBlank(row.getTitle(), row.getAsin())).toList()); - parameters.put("url_list", rows.stream().map(row -> nonBlank(row.getUrl(), "")).toList()); - parameters.put("prompt", prompt == null ? "" : prompt); + private String runWorkflowAsyncAndWait(List rows, String prompt) throws Exception { + JsonNode submitRoot = objectMapper.readTree(postWorkflow(rows, prompt)); + ensureSuccess(submitRoot); + String immediateData = extractResultDataText(submitRoot); + if (!immediateData.isBlank()) { + return wrapDataPayload(immediateData); + } + + String executeId = extractExecuteId(submitRoot); + if (executeId == null || executeId.isBlank()) { + throw new IllegalStateException("Coze async execute_id missing"); + } + + long deadline = System.currentTimeMillis() + Math.max(10000, properties.getCozePollTimeoutMillis()); + while (System.currentTimeMillis() < deadline) { + JsonNode pollRoot = objectMapper.readTree(getWorkflowHistory(executeId)); + ensureSuccess(pollRoot); + + String dataText = extractResultDataText(pollRoot); + if (!dataText.isBlank()) { + return wrapDataPayload(dataText); + } + + String status = normalize(resolveWorkflowStatus(pollRoot)).toUpperCase(Locale.ROOT); + if (status.contains("FAIL") || status.contains("ERROR") || status.contains("CANCEL")) { + throw new IllegalStateException(firstNonBlank(resolveFailureMessage(pollRoot), "Coze async workflow failed")); + } + sleepQuietly(Math.max(200, properties.getCozePollIntervalMillis())); + } + + throw new IllegalStateException("Coze async workflow poll timeout"); + } + + private String postWorkflow(List rows, String prompt) { + Map parameters = buildParameters(rows, prompt); Map body = new LinkedHashMap<>(); body.put("workflow_id", properties.getCozeWorkflowId()); body.put("parameters", parameters); + body.put("is_async", Boolean.TRUE); RestClient.RequestBodySpec request = restClient().post() .uri(joinUrl(properties.getCozeBaseUrl(), properties.getCozeWorkflowPath())) @@ -123,12 +168,63 @@ public class AppearancePatentCozeClient { }); } + private String getWorkflowHistory(String executeId) { + String path = properties.getCozeWorkflowHistoryPath() + .replace("{workflow_id}", properties.getCozeWorkflowId()) + .replace("{execute_id}", executeId); + return restClient().get() + .uri(joinUrl(properties.getCozeBaseUrl(), path)) + .headers(headers -> { + headers.setBearerAuth(stripBearer(properties.getCozeToken())); + headers.setContentType(MediaType.APPLICATION_JSON); + }) + .exchange((clientRequest, clientResponse) -> { + byte[] responseBytes = StreamUtils.copyToByteArray(clientResponse.getBody()); + return responseBytes.length == 0 ? "" : new String(responseBytes, StandardCharsets.UTF_8); + }); + } + + private Map buildParameters(List rows, String prompt) { + List groupKeys = rows.stream().map(row -> nonBlank(row.getGroupKey(), rowKey(row))).toList(); + List rowIds = rows.stream().map(row -> nonBlank(row.getId(), "")).toList(); + List asins = rows.stream().map(row -> nonBlank(row.getAsin(), "")).toList(); + List countries = rows.stream().map(row -> nonBlank(row.getCountry(), "")).toList(); + List titles = rows.stream().map(row -> nonBlank(row.getTitle(), row.getAsin())).toList(); + List urls = rows.stream().map(row -> nonBlank(row.getUrl(), "")).toList(); + + Map parameters = new LinkedHashMap<>(); + parameters.put("title_list", titles); + parameters.put("url_list", urls); + parameters.put("items", buildItemObjects(rows, groupKeys, rowIds, asins, countries, titles, urls)); + parameters.put("prompt", prompt == null ? "" : prompt); + return parameters; + } + + private List> buildItemObjects(List rows, + List groupKeys, + List rowIds, + List asins, + List countries, + List titles, + List urls) { + List> items = new ArrayList<>(rows.size()); + for (int i = 0; i < rows.size(); i++) { + Map item = new LinkedHashMap<>(); + item.put("group_key", groupKeys.get(i)); + item.put("row_id", rowIds.get(i)); + item.put("asin", asins.get(i)); + item.put("country", countries.get(i)); + item.put("title", titles.get(i)); + item.put("url", urls.get(i)); + items.add(item); + } + return items; + } + private List parseResults(String raw) throws Exception { JsonNode root = objectMapper.readTree(raw); - if (root.path("code").asInt(-1) != 0) { - throw new IllegalStateException(root.path("msg").asText("Coze response code is not 0")); - } - String dataText = root.path("data").asText(""); + ensureSuccess(root); + String dataText = extractResultDataText(root); if (dataText.isBlank()) { return List.of(); } @@ -137,10 +233,18 @@ public class AppearancePatentCozeClient { List results = new ArrayList<>(); if (array.isArray()) { for (JsonNode node : array) { + JsonNode itemNode = resultItemNode(node); results.add(new CozeResult( - text(firstNonNull(node.get("row_id"), firstNonNull(node.get("rowId"), node.get("id")))), - text(node.get("asin")), - text(firstNonNull(node.get("country"), node.get("site"))), + text(firstNonNull( + firstNonNull(node.get("group_key"), node.get("groupKey")), + firstNonNull(itemNode.get("group_key"), itemNode.get("groupKey")))), + text(firstNonNull( + firstNonNull(node.get("row_id"), firstNonNull(node.get("rowId"), node.get("id"))), + firstNonNull(itemNode.get("row_id"), firstNonNull(itemNode.get("rowId"), itemNode.get("id"))))), + text(firstNonNull(node.get("asin"), itemNode.get("asin"))), + text(firstNonNull( + firstNonNull(node.get("country"), node.get("site")), + firstNonNull(itemNode.get("country"), itemNode.get("site")))), text(node.get("title")), text(node.get("appearance")), text(firstNonNull(node.get("patent"), node.get("patent "))), @@ -151,14 +255,43 @@ public class AppearancePatentCozeClient { return results; } + private JsonNode resultItemNode(JsonNode node) { + if (node == null || node.isMissingNode() || node.isNull()) { + return objectMapper.missingNode(); + } + JsonNode item = firstNonNull(node.get("item"), node.get("items")); + if (item == null || item.isMissingNode() || item.isNull()) { + return objectMapper.missingNode(); + } + if (item.isArray()) { + return item.isEmpty() ? objectMapper.missingNode() : item.get(0); + } + return item; + } + private List mergeRows(List rows, List results) { + Map resultByGroupKey = new LinkedHashMap<>(); Map resultByCompositeKey = new LinkedHashMap<>(); + Map resultByAsinCountry = new LinkedHashMap<>(); + Map resultByAsin = new LinkedHashMap<>(); Map resultByRowId = new LinkedHashMap<>(); for (CozeResult result : results) { + String groupKey = normalize(result.groupKey()); + if (!groupKey.isBlank()) { + resultByGroupKey.putIfAbsent(groupKey, result); + } String compositeKey = rowKey(result.rowId(), result.asin(), result.country()); if (!compositeKey.isBlank()) { resultByCompositeKey.putIfAbsent(compositeKey, result); } + String asinCountryKey = asinCountryKey(result.asin(), result.country()); + if (!asinCountryKey.isBlank()) { + resultByAsinCountry.putIfAbsent(asinCountryKey, result); + } + String asinKey = normalize(result.asin()).toUpperCase(Locale.ROOT); + if (!asinKey.isBlank()) { + resultByAsin.putIfAbsent(asinKey, result); + } String rowIdKey = normalize(result.rowId()); if (!rowIdKey.isBlank()) { resultByRowId.putIfAbsent(rowIdKey, result); @@ -166,10 +299,19 @@ public class AppearancePatentCozeClient { } List merged = new ArrayList<>(rows.size()); - boolean allowIndexFallback = results.size() == rows.size(); + boolean allowIndexFallback = results.size() == rows.size() && results.stream().noneMatch(this::hasIdentity); for (int i = 0; i < rows.size(); i++) { AppearancePatentResultRowDto row = copy(rows.get(i)); - CozeResult result = resultByCompositeKey.get(rowKey(row.getId(), row.getAsin(), row.getCountry())); + CozeResult result = resultByGroupKey.get(normalize(row.getGroupKey())); + if (result == null) { + result = resultByCompositeKey.get(rowKey(row.getId(), row.getAsin(), row.getCountry())); + } + if (result == null) { + result = resultByAsinCountry.get(asinCountryKey(row.getAsin(), row.getCountry())); + } + if (result == null) { + result = resultByAsin.get(normalize(row.getAsin()).toUpperCase(Locale.ROOT)); + } if (result == null) { result = resultByRowId.get(normalize(row.getId())); } @@ -182,6 +324,23 @@ public class AppearancePatentCozeClient { return merged; } + private String asinCountryKey(String asin, String country) { + String normalizedAsin = normalize(asin).toUpperCase(Locale.ROOT); + if (normalizedAsin.isBlank()) { + return ""; + } + return normalizedAsin + "::" + normalize(country); + } + + private boolean hasIdentity(CozeResult result) { + if (result == null) { + return false; + } + return !normalize(result.groupKey()).isBlank() + || !normalize(result.rowId()).isBlank() + || !normalize(result.asin()).isBlank(); + } + private void applyResult(AppearancePatentResultRowDto row, CozeResult result) { if (row == null || result == null) { return; @@ -201,6 +360,10 @@ public class AppearancePatentCozeClient { private AppearancePatentResultRowDto copy(AppearancePatentResultRowDto source) { AppearancePatentResultRowDto row = new AppearancePatentResultRowDto(); + row.setSourceFileKey(source.getSourceFileKey()); + row.setSourceFilename(source.getSourceFilename()); + row.setRowToken(source.getRowToken()); + row.setGroupKey(source.getGroupKey()); row.setId(source.getId()); row.setAsin(source.getAsin()); row.setCountry(source.getCountry()); @@ -261,6 +424,186 @@ public class AppearancePatentCozeClient { || !normalize(row.getConclusion()).isBlank(); } + private void ensureSuccess(JsonNode root) { + if (root.path("code").asInt(-1) != 0) { + throw new IllegalStateException(root.path("msg").asText("Coze response code is not 0")); + } + } + + private String extractResultDataText(JsonNode root) { + if (root == null || root.isMissingNode() || root.isNull()) { + return ""; + } + + JsonNode dataNode = root.path("data"); + if (dataNode.isTextual()) { + String value = dataNode.asText(""); + if (looksLikeResultDataPayload(value)) { + return value; + } + return discoverEmbeddedData(parseJsonOrMissing(value)); + } + if (dataNode.isObject()) { + String nested = text(firstNonNull(dataNode.get("data"), firstNonNull(dataNode.get("output"), dataNode.get("result")))); + if (nested != null && !nested.isBlank() && looksLikeResultDataPayload(nested)) { + return nested; + } + JsonNode outputs = firstNonNull(dataNode.get("outputs"), dataNode.get("details")); + String discovered = discoverEmbeddedData(outputs); + if (!discovered.isBlank()) { + return discovered; + } + } + + return discoverEmbeddedData(root); + } + + private String discoverEmbeddedData(JsonNode node) { + if (node == null || node.isNull() || node.isMissingNode()) { + return ""; + } + if (node.isTextual()) { + String value = node.asText(""); + if (looksLikeResultDataPayload(value)) { + return value; + } + return discoverEmbeddedData(parseJsonOrMissing(value)); + } + if (node.isArray()) { + for (JsonNode child : node) { + String discovered = discoverEmbeddedData(child); + if (!discovered.isBlank()) { + return discovered; + } + } + return ""; + } + if (node.isObject()) { + if (isResultDataPayload(node)) { + return node.toString(); + } + for (java.util.Iterator> it = node.fields(); it.hasNext(); ) { + Map.Entry entry = it.next(); + String discovered = discoverEmbeddedData(entry.getValue()); + if (!discovered.isBlank()) { + return discovered; + } + } + } + return ""; + } + + private boolean looksLikeResultDataPayload(String value) { + JsonNode parsed = parseJsonOrMissing(value); + return isResultDataPayload(parsed); + } + + private boolean isResultDataPayload(JsonNode node) { + if (node == null || node.isMissingNode() || node.isNull()) { + return false; + } + JsonNode array = node.path("data"); + if (!array.isArray()) { + return false; + } + for (JsonNode item : array) { + if (item.has("appearance") || item.has("patent") || item.has("patent ") || item.has("result")) { + return true; + } + } + return false; + } + + private JsonNode parseJsonOrMissing(String value) { + String normalized = normalize(value); + if (!(normalized.startsWith("{") || normalized.startsWith("["))) { + return objectMapper.missingNode(); + } + try { + return objectMapper.readTree(normalized); + } catch (Exception ignored) { + return objectMapper.missingNode(); + } + } + + private String resolveWorkflowStatus(JsonNode root) { + JsonNode dataNode = root.path("data"); + JsonNode statusNode = firstNonNull( + firstNonNull(dataNode.get("status"), dataNode.get("execute_status")), + firstNonNull(root.get("status"), root.get("execute_status"))); + String status = text(statusNode); + if (status != null && !status.isBlank()) { + return status; + } + return findTextByFieldName(root, "execute_status", "status"); + } + + private String resolveFailureMessage(JsonNode root) { + JsonNode dataNode = root.path("data"); + String message = text(firstNonNull(dataNode.get("error_message"), firstNonNull(dataNode.get("msg"), root.get("msg")))); + return message == null ? "" : message; + } + + private String extractExecuteId(JsonNode root) { + return findTextByFieldName(root, "execute_id", "executeId"); + } + + private String findTextByFieldName(JsonNode node, String... names) { + if (node == null || node.isMissingNode() || node.isNull()) { + return ""; + } + if (node.isTextual()) { + return findTextByFieldName(parseJsonOrMissing(node.asText("")), names); + } + if (node.isArray()) { + for (JsonNode child : node) { + String found = findTextByFieldName(child, names); + if (!found.isBlank()) { + return found; + } + } + return ""; + } + if (node.isObject()) { + for (String name : names) { + String value = text(node.get(name)); + if (value != null && !value.isBlank()) { + return value; + } + } + JsonNode dataNode = node.get("data"); + if (dataNode != null && dataNode.isTextual()) { + String found = findTextByFieldName(parseJsonOrMissing(dataNode.asText("")), names); + if (!found.isBlank()) { + return found; + } + } + for (java.util.Iterator> it = node.fields(); it.hasNext(); ) { + Map.Entry entry = it.next(); + String found = findTextByFieldName(entry.getValue(), names); + if (!found.isBlank()) { + return found; + } + } + } + return ""; + } + + private String wrapDataPayload(String dataText) { + Map payload = new LinkedHashMap<>(); + payload.put("code", 0); + payload.put("data", dataText); + return writeJson(payload); + } + + private String writeJson(Object value) { + try { + return objectMapper.writeValueAsString(value); + } catch (Exception ex) { + throw new IllegalStateException("Failed to serialize Coze payload", ex); + } + } + private String abbreviate(String value, int maxLength) { String normalized = value == null ? "" : value.trim(); if (normalized.length() <= maxLength) { @@ -269,6 +612,19 @@ public class AppearancePatentCozeClient { return normalized.substring(0, Math.max(0, maxLength - 3)) + "..."; } + private void sleepBeforeRetry(int attemptIndex) { + long delayMillis = Math.max(1, attemptIndex) * 1500L; + sleepQuietly(delayMillis); + } + + private void sleepQuietly(long delayMillis) { + try { + Thread.sleep(delayMillis); + } catch (InterruptedException interruptedException) { + Thread.currentThread().interrupt(); + } + } + private RuntimeException propagate(Exception ex) { if (ex instanceof RuntimeException runtimeException) { return runtimeException; @@ -288,6 +644,10 @@ public class AppearancePatentCozeClient { return value == null || value.isBlank() ? fallback : value; } + private String firstNonBlank(String preferred, String fallback) { + return preferred == null || preferred.isBlank() ? fallback : preferred.trim(); + } + private String normalize(String value) { return value == null ? "" : value.replace("\ufeff", "").replace("\u3000", " ").trim(); } @@ -305,19 +665,19 @@ public class AppearancePatentCozeClient { private String failureMessage(Exception ex) { if (ex instanceof PartialCozeResultException partial) { - return "Coze返回结果不完整(" + partial.resolvedCount() + "/" + partial.expectedCount() + ")"; + return "Coze result incomplete(" + partial.resolvedCount() + "/" + partial.expectedCount() + ")"; } String message = ex == null ? null : ex.getMessage(); if (message == null || message.isBlank()) { - return "Coze调用失败"; + return "Coze call failed"; } if (message.contains("Workflow node execution limit exceeded")) { - return "Coze工作流节点执行超限,请检查工作流配置"; + return "Coze workflow node execution limit exceeded"; } if (message.contains("Read timed out")) { - return "Coze调用超时,请稍后重试"; + return "Coze call timed out"; } - return "Coze调用失败: " + message; + return "Coze call failed: " + message; } private String stripBearer(String token) { @@ -338,6 +698,7 @@ public class AppearancePatentCozeClient { } private record CozeResult( + String groupKey, String rowId, String asin, String country, diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParseRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParseRequest.java index 30d2a25..71fd5a1 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParseRequest.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParseRequest.java @@ -18,7 +18,7 @@ public class AppearancePatentParseRequest { private Long userId; @NotEmpty - @Schema(description = "已上传的 Excel 文件列表。当前外观专利检测只读取第一个文件;文件对象来自统一上传接口返回值。", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "已上传的 Excel 文件列表。支持多文件聚合解析;文件对象来自统一上传接口返回值。", requiredMode = Schema.RequiredMode.REQUIRED) private List files; @JsonProperty("ai_prompt") diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParsedPayloadDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParsedPayloadDto.java index b231d94..95abf6f 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParsedPayloadDto.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentParsedPayloadDto.java @@ -1,5 +1,6 @@ package com.nanri.aiimage.modules.appearancepatent.model.dto; +import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentParsedGroupVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentParsedRowVo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -8,14 +9,23 @@ import java.util.ArrayList; import java.util.List; @Data -@Schema(description = "外观专利检测解析载荷。通常保存到 OSS,数据库只保存 oss 指针。") +@Schema(description = "外观专利解析载荷") public class AppearancePatentParsedPayloadDto { - @Schema(description = "AI 提示词。") + @Schema(description = "AI 提示词") private String aiPrompt; - @Schema(description = "Excel 原始表头列表。") + + @Schema(description = "本次解析的源文件列表") + private List sourceFiles = new ArrayList<>(); + + @Schema(description = "Excel 原始表头列表") private List headers = new ArrayList<>(); - @Schema(description = "返回前端和推给 Python 的代表行,只包含整数 id 和 n_1 行。") + + @Schema(description = "兼容旧链路的平铺有效行,现为全部有效行") private List items = new ArrayList<>(); - @Schema(description = "完整有效行,包含 n_2、n_3 等解析后被前端过滤但最终需要补回的子行。") + + @Schema(description = "按相邻主 ID 块分组后的完整数据") + private List groups = new ArrayList<>(); + + @Schema(description = "完整有效行") private List allItems = new ArrayList<>(); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultGroupDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultGroupDto.java new file mode 100644 index 0000000..7423e8d --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultGroupDto.java @@ -0,0 +1,29 @@ +package com.nanri.aiimage.modules.appearancepatent.model.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "Python 回传的外观专利分组结果") +public class AppearancePatentResultGroupDto { + @Schema(description = "来源文件 key") + private String sourceFileKey; + + @Schema(description = "来源文件名") + private String sourceFilename; + + @Schema(description = "相邻主 ID 块的分组 key") + private String groupKey; + + @Schema(description = "主 ID,例如 1、2、10") + private String baseId; + + @Schema(description = "分组首条展示 ID") + private String displayId; + + @Schema(description = "分组内全部抓取结果") + private List items = new ArrayList<>(); +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultRowDto.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultRowDto.java index 9be1d36..10d40a0 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultRowDto.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentResultRowDto.java @@ -7,27 +7,49 @@ import lombok.Data; @Data @Schema(description = "外观专利检测单行商品数据") public class AppearancePatentResultRowDto { + @Schema(description = "来源文件 key。多文件回传时用于避免行结果串到别的文件。", example = "uploads/20260426/appearance_patent_17.xlsx") + private String sourceFileKey; + + @Schema(description = "来源文件名。仅用于调试与追踪。", example = "17.xlsx") + private String sourceFilename; + + @Schema(description = "行级唯一 token。Python 应从解析结果原样透传。", example = "uploads/20260426/appearance_patent_17.xlsx::row::2") + private String rowToken; + + @Schema(description = "主数据分组 key。Python 应从解析结果原样透传,用于把同组子行补回。", example = "uploads/20260426/appearance_patent_17.xlsx::2@2") + private String groupKey; + @Schema(description = "Excel 中的 id。代表行通常是整数 id 或 n_1,例如 2_1;最终生成 xlsx 时,2_2、2_3 会复用同组 2_1 的 Coze 检测结果。", example = "2_1") private String id; + @Schema(description = "亚马逊 ASIN。后端会统一按大写处理和匹配。", example = "B0CJ8SNXXV") private String asin; + @Schema(description = "站点或国家。来自 Excel 的国家列,例如英国、德国、法国。", example = "英国") private String country; + @Schema(description = "商品主图或待检测图片 URL。Java 调用 Coze 时会放入 url_list。", example = "https://webstatic.aiproxy.vip/output/20260425/103322/demo.jpg") private String url; + @Schema(description = "商品标题。Java 调用 Coze 时会放入 title_list;为空时会回退使用 ASIN。", example = "Women Floral Dress Summer Casual") private String title; + @Schema(description = "单行错误信息。通常用于记录 Python 单行处理异常;Coze 失败时后端会尽量保留原始行,不强行写入风险结果。", example = "图片地址为空") private String error; + @Schema(description = "单行完成标记。当前主要使用请求体顶层 done 控制任务收尾,该字段仅作兼容。", example = "true") private Boolean done; - @Schema(description = "Java 调用 Coze 后生成的标题维度检测结果,对应最终 xlsx 的“标题维度(商标)”列。Python 回传请求不要传该字段;即使传入,后端也会以 Java/Coze 处理结果为准。", example = "标题未发现明显商标侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) + + @Schema(description = "Java 调用 Coze 后生成的标题维度检测结果,对应最终 xlsx 的“标题维度(商标)”列。Python 回传请求中不要传该字段;即使传入,后端也会以 Java/Coze 处理结果为准。", example = "标题未发现明显商标侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) private String titleRisk; - @Schema(description = "Java 调用 Coze 后生成的外观维度检测结果,对应最终 xlsx 的“外观维度(外观设计专利)”列。Python 回传请求不要传该字段。", example = "未发现明显外观设计专利侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) + + @Schema(description = "Java 调用 Coze 后生成的外观维度检测结果,对应最终 xlsx 的“外观维度(外观设计专利)”列。Python 回传请求中不要传该字段。", example = "未发现明显外观设计专利侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) private String appearanceRisk; + @JsonAlias({"patent ", "patent"}) - @Schema(description = "Java 调用 Coze 后生成的专利维度检测结果,对应最终 xlsx 的“专利维度(发明/实用新型专利)”列。兼容 Coze 返回字段 patent 和 patent 后带空格的情况;Python 回传请求不要传该字段。", example = "未发现明显发明或实用新型专利侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) + @Schema(description = "Java 调用 Coze 后生成的专利维度检测结果,对应最终 xlsx 的“专利维度(发明/实用新型专利)”列。兼容 Coze 返回字段 patent 和 patent 后带空格的情况;Python 回传请求中不要传该字段。", example = "未发现明显发明或实用新型专利侵权风险。", accessMode = Schema.AccessMode.READ_ONLY) private String patentRisk; - @Schema(description = "Java 调用 Coze 后生成的最终结论,对应最终 xlsx 的“结论”列。Python 回传请求不要传该字段。", example = "未发现明显侵权风险", accessMode = Schema.AccessMode.READ_ONLY) + + @Schema(description = "Java 调用 Coze 后生成的最终结论,对应最终 xlsx 的“结论”列。Python 回传请求中不要传该字段。", example = "未发现明显侵权风险", accessMode = Schema.AccessMode.READ_ONLY) private String conclusion; } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentSubmitResultRequest.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentSubmitResultRequest.java index 57685cc..5417196 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentSubmitResultRequest.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/dto/AppearancePatentSubmitResultRequest.java @@ -9,16 +9,24 @@ import java.util.List; @Data @Schema(description = "Python 回传外观专利检测结果请求") public class AppearancePatentSubmitResultRequest { - @Schema(description = "本次 Python 回传的提交批次标识。建议同一个任务固定使用同一个值,例如 appearance-patent-{taskId};后端会结合该值和 chunkIndex 做分片幂等。", example = "appearance-patent-3938") + @Schema(description = "本次 Python 回传的提交批次标识", example = "appearance-patent-3938") private String submissionId; - @Schema(description = "当前回传分片序号。建议从 1 开始递增;同一个 submissionId 下相同 chunkIndex 重复提交会被后端识别为重复分片并跳过重复处理。", example = "1") + + @Schema(description = "当前回传分片序号", example = "1") private Integer chunkIndex; - @Schema(description = "本任务预计总分片数。如果 Python 是一条一条回传,可设置为总商品数;如果无法预估,可传 0 或 1,最终以 done=true 触发收尾。", example = "458") + + @Schema(description = "本任务预计总分片数", example = "36") private Integer chunkTotal; - @Schema(description = "是否为最后一次回传。true 表示 Python 已完成该任务全部数据回传;Java 会处理剩余不足 10 条的数据、组装最终 xlsx、上传 OSS 并收尾任务。", example = "false") + + @Schema(description = "是否为最后一次回传", example = "false") private Boolean done; - @Schema(description = "Python 侧任务级错误信息。非空时 Java 会记录错误并按失败任务收尾;普通单行 Coze 失败不建议写这里。", example = "浏览器执行异常,任务提前结束") + + @Schema(description = "Python 侧任务级错误信息", example = "浏览器执行异常,任务提前结束") private String error; - @Schema(description = "本次回传的商品原始数据列表。可以一条一条传,也可以一次多条传;Python 只需要传 id、asin、country、url、title、error、done 等原始/执行字段。titleRisk、appearanceRisk、patentRisk、conclusion 由 Java 攒够 10 条调用 Coze 后生成,Python 不要传。") + + @Schema(description = "本次回传的分组结果列表,推荐优先使用") + private List groups = new ArrayList<>(); + + @Schema(description = "兼容旧链路的平铺结果列表") private List items = new ArrayList<>(); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParseVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParseVo.java index 2532d12..4ff3222 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParseVo.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParseVo.java @@ -9,18 +9,33 @@ import java.util.List; @Data @Schema(description = "外观专利检测解析结果") public class AppearancePatentParseVo { - @Schema(description = "新创建的任务 ID。后续手动推 Python、激活任务、回传结果、查询进度都使用该 ID。", example = "3938") + @Schema(description = "新创建的任务 ID", example = "3938") private Long taskId; - @Schema(description = "源 Excel 文件名。", example = "17.xlsx") + + @Schema(description = "来源 Excel 文件名,多个文件时为聚合展示文案", example = "17.xlsx 等 2 个文件") private String sourceFilename; - @Schema(description = "Excel 中检测到的有效数据总行数,不含空行。", example = "716") + + @Schema(description = "参与本次解析的源文件数量", example = "2") + private Integer sourceFileCount; + + @Schema(description = "Excel 中检测到的非空数据总行数", example = "716") private Integer totalRows; - @Schema(description = "返回前端并准备推给 Python 的代表行数量。只包含整数 id 和 n_1 行。", example = "458") + + @Schema(description = "解析出的有效行数", example = "458") private Integer acceptedRows; - @Schema(description = "解析时被过滤或缺少必要字段的行数。n_2、n_3 等子行会计入过滤数,但仍会保存在 OSS 解析载荷中用于最终补齐。", example = "258") + + @Schema(description = "因缺少必要字段而被丢弃的行数", example = "12") private Integer droppedRows; - @Schema(description = "本任务最终使用的 AI 提示词。", example = "请排查这些亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。") + + @Schema(description = "按相邻主 ID 块生成的分组数", example = "36") + private Integer groupCount; + + @Schema(description = "本任务最终使用的 AI 提示词") private String aiPrompt; - @Schema(description = "返回前端的代表行列表。前端只展示样例,不展示完整明细;完整 allItems 已保存在 OSS 解析载荷中。") + + @Schema(description = "兼容旧前端的平铺有效行列表,现为全部有效行") private List items = new ArrayList<>(); + + @Schema(description = "返回前端和推送 Python 的分组列表") + private List groups = new ArrayList<>(); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedGroupVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedGroupVo.java new file mode 100644 index 0000000..032b020 --- /dev/null +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedGroupVo.java @@ -0,0 +1,32 @@ +package com.nanri.aiimage.modules.appearancepatent.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Schema(description = "外观专利解析后的分组数据") +public class AppearancePatentParsedGroupVo { + @Schema(description = "来源文件 key") + private String sourceFileKey; + + @Schema(description = "来源文件名") + private String sourceFilename; + + @Schema(description = "相邻主 ID 块的分组 key") + private String groupKey; + + @Schema(description = "主 ID,例如 1、2、10") + private String baseId; + + @Schema(description = "分组首条展示 ID,例如 1 或 2_1") + private String displayId; + + @Schema(description = "分组内行数") + private Integer itemCount; + + @Schema(description = "分组内全部行,顺序与原 Excel 保持一致") + private List items = new ArrayList<>(); +} diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedRowVo.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedRowVo.java index 420e9b4..52418d3 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedRowVo.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/model/vo/AppearancePatentParsedRowVo.java @@ -9,21 +9,39 @@ import java.util.Map; @Data @Schema(description = "外观专利检测解析出的单行数据") public class AppearancePatentParsedRowVo { + @Schema(description = "来源文件 key。用于多文件场景下区分同名/同 ID 行。", example = "uploads/20260426/appearance_patent_17.xlsx") + private String sourceFileKey; + + @Schema(description = "来源文件名。用于调试和结果追踪。", example = "17.xlsx") + private String sourceFilename; + @Schema(description = "Excel 原始行号,从 1 开始。", example = "2") private Integer rowIndex; + @Schema(description = "Excel 中原始 id 值。", example = "2_1") private String sourceId; + @Schema(description = "前端展示和 Python 回传使用的 id。整数 id 原样保留,子数据第一条如 2_1 原样保留。", example = "2_1") private String displayId; - @Schema(description = "亚马逊 ASIN。", example = "B0CJ8SNXXV") + + @Schema(description = "行级唯一 token。多文件、重复主数据时用于精确匹配回传结果。", example = "uploads/20260426/appearance_patent_17.xlsx::row::2") + private String rowToken; + + @Schema(description = "同一主数据块的分组 key。用于把 2_1、2_2、2_3 等子行重新补回同一组结果。", example = "uploads/20260426/appearance_patent_17.xlsx::2@2") private String groupKey; + + @Schema(description = "亚马逊 ASIN。", example = "B0CJ8SNXXV") private String asin; + @Schema(description = "国家或站点。", example = "英国") private String country; + @Schema(description = "商品图片 URL 或商品 URL,供 Coze 检测使用。", example = "https://webstatic.aiproxy.vip/output/demo.jpg") private String url; + @Schema(description = "商品标题。", example = "Women Floral Dress Summer Casual") private String title; - @Schema(description = "该 Excel 行的原始列值映射。最终生成 xlsx 时可从这里读取价格等字段。", example = "{\"id\":\"2_1\",\"asin\":\"B0CJ8SNXXV\",\"国家\":\"英国\",\"价格\":\"12.99\"}") + + @Schema(description = "该 Excel 行的原始列值映射。最终生成 xlsx 时可以从这里读取价格等字段。", example = "{\"id\":\"2_1\",\"asin\":\"B0CJ8SNXXV\",\"国家\":\"英国\",\"价格\":\"12.99\"}") private Map values = new LinkedHashMap<>(); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java index 4e129b5..9d751c2 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java @@ -11,12 +11,14 @@ import com.nanri.aiimage.config.StorageProperties; import com.nanri.aiimage.modules.appearancepatent.client.AppearancePatentCozeClient; import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentParseRequest; import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentParsedPayloadDto; +import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentResultGroupDto; import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentResultRowDto; import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentSourceFileDto; import com.nanri.aiimage.modules.appearancepatent.model.dto.AppearancePatentSubmitResultRequest; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentDashboardVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentHistoryItemVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentHistoryVo; +import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentParsedGroupVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentParsedRowVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentParseVo; import com.nanri.aiimage.modules.appearancepatent.model.vo.AppearancePatentTaskBatchVo; @@ -115,8 +117,18 @@ public class AppearancePatentTaskService { if (request.getFiles() == null || request.getFiles().isEmpty()) { throw new BusinessException("请先上传 Excel 文件"); } - AppearancePatentSourceFileDto source = request.getFiles().getFirst(); - if (source.getFileKey() == null || source.getFileKey().isBlank()) { + List sourceFiles = request.getFiles().stream() + .filter(Objects::nonNull) + .toList(); + if (sourceFiles.isEmpty()) { + throw new BusinessException("璇峰厛涓婁紶 Excel 鏂囦欢"); + } + List allRows = new ArrayList<>(); + List mergedHeaders = new ArrayList<>(); + int totalRows = 0; + int droppedRows = 0; + for (AppearancePatentSourceFileDto source : sourceFiles) { + if (source.getFileKey() == null || source.getFileKey().isBlank()) { throw new BusinessException("fileKey 不能为空"); } File input = localFileStorageService.findLocalSourceFile(source.getFileKey()); @@ -124,17 +136,23 @@ public class AppearancePatentTaskService { throw new BusinessException("源文件不存在"); } - ParsedWorkbook parsed = parseWorkbook(input); - if (parsed.acceptedRows.isEmpty()) { + ParsedWorkbook parsed = parseWorkbook(input, source); + totalRows += parsed.totalRows(); + droppedRows += parsed.droppedRows(); + allRows.addAll(parsed.allRows()); + mergeHeaders(mergedHeaders, parsed.headers()); + } + if (allRows.isEmpty()) { throw new BusinessException("未解析到有效 ASIN 数据"); } + List groups = buildParsedGroups(allRows); FileTaskEntity task = new FileTaskEntity(); task.setTaskNo(MODULE_TYPE + "-" + IdUtil.getSnowflakeNextIdStr()); task.setModuleType(MODULE_TYPE); task.setTaskMode("PYTHON_QUEUE"); task.setStatus(STATUS_PENDING); - task.setSourceFileCount(parsed.acceptedRows.size()); + task.setSourceFileCount(sourceFiles.size()); task.setSuccessFileCount(0); task.setFailedFileCount(0); task.setCreatedBy("user:" + request.getUserId()); @@ -149,20 +167,21 @@ public class AppearancePatentTaskService { } fileTaskMapper.insert(task); - String sourceScopeHash = DigestUtil.sha256Hex(source.getFileKey()); - String parsedPayload = buildParsedPayloadJson(request.getAiPrompt(), parsed.headers, parsed.acceptedRows, parsed.allRows); + String aggregateScopeKey = buildAggregateScopeKey(sourceFiles); + String sourceScopeHash = DigestUtil.sha256Hex(aggregateScopeKey); + String parsedPayload = buildParsedPayloadJson(request.getAiPrompt(), sourceFiles, mergedHeaders, groups, allRows); String parsedPayloadPointer = storeParsedPayload(task.getId(), sourceScopeHash, parsedPayload); - task.setResultJson(buildTaskResultJson(request.getAiPrompt(), source.getFileKey(), parsedPayloadPointer)); + task.setResultJson(buildTaskResultJson(request.getAiPrompt(), sourceFiles, parsedPayloadPointer)); task.setUpdatedAt(LocalDateTime.now()); fileTaskMapper.updateById(task); - String sourceFilename = firstNonBlank(source.getOriginalFilename(), input.getName()); + String sourceFilename = buildAggregateSourceFilenameLabel(sourceFiles); FileResultEntity result = new FileResultEntity(); result.setTaskId(task.getId()); result.setModuleType(MODULE_TYPE); result.setSourceFilename(sourceFilename); - result.setSourceFileUrl(source.getFileKey()); - result.setRowCount(parsed.acceptedRows.size()); + result.setSourceFileUrl(aggregateScopeKey); + result.setRowCount(allRows.size()); result.setUserId(request.getUserId()); result.setCreatedAt(LocalDateTime.now()); fileResultMapper.insert(result); @@ -170,7 +189,7 @@ public class AppearancePatentTaskService { TaskScopeStateEntity scope = new TaskScopeStateEntity(); scope.setTaskId(task.getId()); scope.setModuleType(MODULE_TYPE); - scope.setScopeKey(source.getFileKey()); + scope.setScopeKey(aggregateScopeKey); scope.setScopeHash(sourceScopeHash); scope.setParsedPayloadJson(writeJson(parsedPayloadPointer, "保存解析载荷指针失败")); scope.setStateJson("{\"phase\":\"PARSED\"}"); @@ -184,11 +203,14 @@ public class AppearancePatentTaskService { AppearancePatentParseVo vo = new AppearancePatentParseVo(); vo.setTaskId(task.getId()); vo.setSourceFilename(sourceFilename); - vo.setTotalRows(parsed.totalRows); - vo.setAcceptedRows(parsed.acceptedRows.size()); - vo.setDroppedRows(parsed.droppedRows); + vo.setSourceFileCount(sourceFiles.size()); + vo.setTotalRows(totalRows); + vo.setAcceptedRows(allRows.size()); + vo.setDroppedRows(droppedRows); + vo.setGroupCount(groups.size()); vo.setAiPrompt(normalize(request.getAiPrompt())); - vo.setItems(parsed.acceptedRows); + vo.setItems(allRows); + vo.setGroups(groups); return vo; } @@ -267,7 +289,6 @@ public class AppearancePatentTaskService { public void submitResult(Long taskId, AppearancePatentSubmitResultRequest request) { if (transactionManager != null) { SubmitContext context = inNewTransaction(() -> persistSubmittedChunk(taskId, request)); - flushPendingRowsIfNeeded(context.task(), context.forceFlush()); inNewTransaction(() -> { completeSubmittedChunk(context); return null; @@ -295,7 +316,7 @@ public class AppearancePatentTaskService { .eq(TaskChunkEntity::getChunkIndex, chunkIndex) .last("limit 1")); if (existing == null) { - List rawRows = request.getItems() == null ? List.of() : request.getItems(); + List rawRows = flattenSubmittedRows(request); String payloadJson = writeJson(rawRows, "结果序列化失败"); TaskChunkEntity chunk = new TaskChunkEntity(); @@ -310,27 +331,18 @@ public class AppearancePatentTaskService { chunk.setPayloadHash(DigestUtil.sha256Hex(payloadJson)); chunk.setCreatedAt(LocalDateTime.now()); chunk.setUpdatedAt(LocalDateTime.now()); - boolean inserted = true; try { taskChunkMapper.insert(chunk); } catch (DuplicateKeyException ex) { - inserted = false; // storeChunkPayload uses a deterministic key like chunk-{index}. When two // concurrent callbacks submit the same chunk, deleting the loser payload here // can also remove the winner's shared object and break later assembly. log.info("[appearance-patent] duplicate chunk inserted concurrently taskId={} scope={} chunk={}", taskId, scopeKey, chunkIndex); } - if (inserted) { - for (AppearancePatentResultRowDto rawRow : rawRows) { - taskCacheService.appendPendingRow(taskId, scopeHash, chunkIndex, rawRow); - } - } } else { log.info("[appearance-patent] duplicate chunk ignored taskId={} scope={} chunk={}", taskId, scopeKey, chunkIndex); } - flushPendingRowsIfNeeded(task, Boolean.TRUE.equals(request.getDone())); - TaskScopeStateEntity scope = taskScopeStateMapper.selectOne(new LambdaQueryWrapper() .eq(TaskScopeStateEntity::getTaskId, taskId) .eq(TaskScopeStateEntity::getModuleType, MODULE_TYPE) @@ -350,7 +362,7 @@ public class AppearancePatentTaskService { scope.setLastError(request.getError()); scope.setCompleted(Boolean.TRUE.equals(request.getDone()) ? 1 : 0); scope.setUpdatedAt(LocalDateTime.now()); - scope.setStateJson("{\"phase\":\"RECEIVED\",\"coze\":\"DONE\"}"); + scope.setStateJson("{\"phase\":\"RECEIVED\",\"coze\":\"PENDING\"}"); if (scope.getId() == null) { taskScopeStateMapper.insert(scope); } else { @@ -423,7 +435,6 @@ public class AppearancePatentTaskService { if (heartbeatMillis > thresholdMillis) { continue; } - flushPendingRowsIfNeeded(task, true); inNewTransaction(() -> { finalizeStaleTask(task.getId(), "Python interrupted before uploading final appearance patent result"); return null; @@ -443,7 +454,6 @@ public class AppearancePatentTaskService { if (heartbeatMillis > thresholdMillis) { continue; } - flushPendingRowsIfNeeded(task, true); finalizeTask(task, "Python interrupted before uploading final appearance patent result", allRowCount(task), true); } } @@ -471,7 +481,7 @@ public class AppearancePatentTaskService { .eq(TaskChunkEntity::getChunkIndex, chunkIndex) .last("limit 1")); if (existing == null) { - List rawRows = request.getItems() == null ? List.of() : request.getItems(); + List rawRows = flattenSubmittedRows(request); String payloadJson = writeJson(rawRows, "缁撴灉搴忓垪鍖栧け璐?"); TaskChunkEntity chunk = new TaskChunkEntity(); @@ -486,18 +496,11 @@ public class AppearancePatentTaskService { chunk.setPayloadHash(DigestUtil.sha256Hex(payloadJson)); chunk.setCreatedAt(LocalDateTime.now()); chunk.setUpdatedAt(LocalDateTime.now()); - boolean inserted = true; try { taskChunkMapper.insert(chunk); } catch (DuplicateKeyException ex) { - inserted = false; log.info("[appearance-patent] duplicate chunk inserted concurrently taskId={} scope={} chunk={}", taskId, scopeKey, chunkIndex); } - if (inserted) { - for (AppearancePatentResultRowDto rawRow : rawRows) { - taskCacheService.appendPendingRow(taskId, scopeHash, chunkIndex, rawRow); - } - } } else { log.info("[appearance-patent] duplicate chunk ignored taskId={} scope={} chunk={}", taskId, scopeKey, chunkIndex); } @@ -518,7 +521,7 @@ public class AppearancePatentTaskService { task.getId(), task.getStatus()); return; } - upsertScopeState(task.getId(), context.scopeKey(), context.scopeHash(), null, context.error(), context.forceFlush(), true); + upsertScopeState(task.getId(), context.scopeKey(), context.scopeHash(), null, context.error(), context.forceFlush(), false); if (context.forceFlush() || context.error() != null && !context.error().isBlank()) { finalizeTask(task, context.error(), allRowCount(task), true); return; @@ -606,6 +609,12 @@ public class AppearancePatentTaskService { } private List applyCozeInBatches(List items, FileTaskEntity task) { + return applyCozeInBatches(items, task, null); + } + + private List applyCozeInBatches(List items, + FileTaskEntity task, + Runnable progressHook) { if (items == null || items.isEmpty()) { return List.of(); } @@ -613,46 +622,46 @@ public class AppearancePatentTaskService { int batchSize = Math.max(1, properties.getCozeBatchSize()); List result = new ArrayList<>(); for (int i = 0; i < items.size(); i += batchSize) { + if (progressHook != null) { + progressHook.run(); + } result.addAll(cozeClient.inspect(items.subList(i, Math.min(i + batchSize, items.size())), prompt)); } return result; } - private void flushPendingRowsIfNeeded(FileTaskEntity task, boolean force) { - int batchSize = Math.max(1, properties.getCozeBatchSize()); + private void applyCozeToPersistedChunks(FileTaskEntity task, Runnable progressHook) { + if (task == null || task.getId() == null) { + return; + } Map> allRowsByBaseId = loadAllRowsByBaseId(task); - String prompt = readAiPrompt(task); - while (force ? taskCacheService.pendingRowCount(task.getId()) > 0 : taskCacheService.pendingRowCount(task.getId()) >= batchSize) { - int drainSize = force ? batchSize : Math.max(1, batchSize); - List pendingRows = taskCacheService.drainPendingRows(task.getId(), drainSize); - if (pendingRows.isEmpty()) { - return; + List chunks = taskChunkMapper.selectList(new LambdaQueryWrapper() + .eq(TaskChunkEntity::getTaskId, task.getId()) + .eq(TaskChunkEntity::getModuleType, MODULE_TYPE) + .orderByAsc(TaskChunkEntity::getChunkIndex)); + log.info("[appearance-patent] async coze start taskId={} chunks={}", task.getId(), chunks.size()); + for (TaskChunkEntity chunk : chunks) { + if (progressHook != null) { + progressHook.run(); } - List rawRows = pendingRows.stream() - .map(AppearancePatentTaskCacheService.PendingRow::row) - .toList(); - List cozeRows = cozeClient.inspect(rawRows, prompt); - Map> chunkRows = new LinkedHashMap<>(); - for (int i = 0; i < pendingRows.size(); i++) { - AppearancePatentTaskCacheService.PendingRow pending = pendingRows.get(i); - AppearancePatentResultRowDto resultRow = i < cozeRows.size() ? cozeRows.get(i) : pending.row(); - List expandedRows = expandRows(List.of(resultRow), allRowsByBaseId); - String chunkKey = pending.scopeHash() + "::" + pending.chunkIndex(); - Map mergedRows = - chunkRows.computeIfAbsent(chunkKey, key -> new LinkedHashMap<>()); - for (AppearancePatentResultRowDto expandedRow : expandedRows) { - mergedRows.put(rowKey(expandedRow.getId(), expandedRow.getAsin(), expandedRow.getCountry()), expandedRow); + Map persistedRows = readChunkRows(chunk); + if (persistedRows.isEmpty()) { + continue; + } + List unresolvedRows = pickGroupRepresentativesForCoze(persistedRows.values()); + if (unresolvedRows.isEmpty()) { + continue; + } + List cozeRows = applyCozeInBatches(unresolvedRows, task, progressHook); + Map mergedRows = new LinkedHashMap<>(); + for (AppearancePatentResultRowDto resultRow : cozeRows) { + for (AppearancePatentResultRowDto expandedRow : expandRows(List.of(resultRow), allRowsByBaseId)) { + mergedRows.put(rowKey(expandedRow), expandedRow); } } - for (Map.Entry> entry : chunkRows.entrySet()) { - int delimiter = entry.getKey().lastIndexOf("::"); - if (delimiter <= 0) { - continue; - } - String scopeHash = entry.getKey().substring(0, delimiter); - Integer chunkIndex = Integer.parseInt(entry.getKey().substring(delimiter + 2)); - mergeChunkPayload(task.getId(), scopeHash, chunkIndex, new ArrayList<>(entry.getValue().values())); - } + mergeChunkPayload(task.getId(), chunk.getScopeHash(), chunk.getChunkIndex(), new ArrayList<>(mergedRows.values())); + log.info("[appearance-patent] async coze chunk merged taskId={} chunk={} unresolved={} merged={}", + task.getId(), chunk.getChunkIndex(), unresolvedRows.size(), mergedRows.size()); } } @@ -668,7 +677,7 @@ public class AppearancePatentTaskService { } Map persistedRows = readChunkRows(chunk); for (AppearancePatentResultRowDto row : rows) { - persistedRows.put(rowKey(row.getId(), row.getAsin(), row.getCountry()), row); + persistedRows.put(rowKey(row), row); } String payloadJson = writeJson(rows == null ? List.of() : rows, "结果序列化失败"); payloadJson = writeJson(new ArrayList<>(persistedRows.values()), "appearance patent chunk payload merge failed"); @@ -694,7 +703,7 @@ public class AppearancePatentTaskService { continue; } for (AppearancePatentParsedRowVo sibling : siblings) { - String key = sibling.getDisplayId() + "::" + sibling.getAsin() + "::" + sibling.getCountry(); + String key = rowKey(sibling); if (!emittedKeys.add(key)) { continue; } @@ -709,11 +718,16 @@ public class AppearancePatentTaskService { if (representative == null || groupedRows == null || groupedRows.isEmpty()) { return List.of(); } - String representativeKey = rowKey(representative.getId(), representative.getAsin(), representative.getCountry()); + String representativeGroupKey = normalize(representative.getGroupKey()); + if (!representativeGroupKey.isBlank()) { + return groupedRows.getOrDefault(representativeGroupKey, List.of()); + } + String representativeKey = rowKey(representative); + String representativeLegacyKey = legacyRowKey(representative); for (List rows : groupedRows.values()) { for (AppearancePatentParsedRowVo row : rows) { - String rowKey = rowKey(row.getDisplayId(), row.getAsin(), row.getCountry()); - if (Objects.equals(representativeKey, rowKey)) { + if (Objects.equals(representativeKey, rowKey(row)) + || Objects.equals(representativeLegacyKey, legacyRowKey(row))) { return rows; } } @@ -723,13 +737,76 @@ public class AppearancePatentTaskService { private Map> loadAllRowsByBaseId(FileTaskEntity task) { try { - return groupRowsByBaseId(readParsedPayload(task).getAllItems()); + AppearancePatentParsedPayloadDto payload = readParsedPayload(task); + List rows = payload.getAllItems(); + if (rows == null || rows.isEmpty()) { + rows = payload.getItems(); + } + if ((rows == null || rows.isEmpty()) && payload.getGroups() != null) { + rows = payload.getGroups().stream() + .filter(Objects::nonNull) + .flatMap(group -> group.getItems() == null ? java.util.stream.Stream.empty() : group.getItems().stream()) + .toList(); + } + return groupRowsByBaseId(rows); } catch (Exception ex) { log.warn("[appearance-patent] read all rows failed taskId={} err={}", task.getId(), ex.getMessage()); return new LinkedHashMap<>(); } } + private List pickGroupRepresentativesForCoze(java.util.Collection rows) { + Map> groupedRows = new LinkedHashMap<>(); + if (rows == null) { + return List.of(); + } + for (AppearancePatentResultRowDto row : rows) { + if (row == null) { + continue; + } + String key = firstNonBlank(normalize(row.getGroupKey()), rowKey(row)); + groupedRows.computeIfAbsent(key, ignored -> new ArrayList<>()).add(row); + } + List representatives = new ArrayList<>(); + for (List siblings : groupedRows.values()) { + boolean alreadyResolved = siblings.stream().anyMatch(this::hasResolvedCozeFields); + if (alreadyResolved) { + continue; + } + AppearancePatentResultRowDto candidate = null; + for (AppearancePatentResultRowDto sibling : siblings) { + if (shouldInspectRow(sibling)) { + candidate = sibling; + break; + } + } + if (candidate != null) { + representatives.add(candidate); + } + } + return representatives; + } + + private List buildParsedGroups(List rows) { + List groups = new ArrayList<>(); + for (List siblings : groupRowsByBaseId(rows).values()) { + if (siblings == null || siblings.isEmpty()) { + continue; + } + AppearancePatentParsedRowVo first = siblings.getFirst(); + AppearancePatentParsedGroupVo group = new AppearancePatentParsedGroupVo(); + group.setSourceFileKey(first.getSourceFileKey()); + group.setSourceFilename(first.getSourceFilename()); + group.setGroupKey(firstNonBlank(first.getGroupKey(), buildGroupKey(first.getSourceFileKey(), baseId(first.getDisplayId()), first.getRowIndex()))); + group.setBaseId(baseId(first.getDisplayId())); + group.setDisplayId(firstNonBlank(first.getDisplayId(), first.getSourceId())); + group.setItemCount(siblings.size()); + group.setItems(new ArrayList<>(siblings)); + groups.add(group); + } + return groups; + } + private Map> groupRowsByBaseId(List rows) { Map> result = new LinkedHashMap<>(); if (rows == null) { @@ -742,9 +819,55 @@ public class AppearancePatentTaskService { return result; } + private List flattenSubmittedRows(AppearancePatentSubmitResultRequest request) { + if (request == null) { + return List.of(); + } + List groups = request.getGroups(); + if (groups != null && !groups.isEmpty()) { + List rows = new ArrayList<>(); + for (AppearancePatentResultGroupDto group : groups) { + if (group == null || group.getItems() == null || group.getItems().isEmpty()) { + continue; + } + for (AppearancePatentResultRowDto row : group.getItems()) { + if (row == null) { + continue; + } + if (normalize(row.getGroupKey()).isBlank()) { + row.setGroupKey(group.getGroupKey()); + } + if (normalize(row.getSourceFileKey()).isBlank()) { + row.setSourceFileKey(group.getSourceFileKey()); + } + if (normalize(row.getSourceFilename()).isBlank()) { + row.setSourceFilename(group.getSourceFilename()); + } + rows.add(row); + } + } + return rows; + } + return request.getItems() == null ? List.of() : request.getItems(); + } + private int allRowCount(FileTaskEntity task) { try { - return readParsedPayload(task).getAllItems().size(); + AppearancePatentParsedPayloadDto payload = readParsedPayload(task); + if (payload.getAllItems() != null && !payload.getAllItems().isEmpty()) { + return payload.getAllItems().size(); + } + if (payload.getItems() != null && !payload.getItems().isEmpty()) { + return payload.getItems().size(); + } + if (payload.getGroups() != null && !payload.getGroups().isEmpty()) { + return payload.getGroups().stream() + .map(AppearancePatentParsedGroupVo::getItems) + .filter(Objects::nonNull) + .mapToInt(List::size) + .sum(); + } + return 0; } catch (Exception ex) { log.warn("[appearance-patent] read all row count failed taskId={} err={}", task.getId(), ex.getMessage()); return 0; @@ -753,6 +876,10 @@ public class AppearancePatentTaskService { private AppearancePatentResultRowDto copyResultToSibling(AppearancePatentResultRowDto representative, AppearancePatentParsedRowVo sibling) { AppearancePatentResultRowDto row = new AppearancePatentResultRowDto(); + row.setSourceFileKey(sibling.getSourceFileKey()); + row.setSourceFilename(sibling.getSourceFilename()); + row.setRowToken(sibling.getRowToken()); + row.setGroupKey(sibling.getGroupKey()); row.setId(sibling.getDisplayId()); row.setAsin(sibling.getAsin()); row.setCountry(sibling.getCountry()); @@ -835,7 +962,11 @@ public class AppearancePatentTaskService { if (result == null || !MODULE_TYPE.equals(result.getModuleType())) { throw new BusinessException("结果记录不存在"); } + Runnable progressHook = () -> taskFileJobService.touchRunning(job.getId()); + applyCozeToPersistedChunks(task, progressHook); + progressHook.run(); assembleResultWorkbook(task, result); + progressHook.run(); fileResultMapper.updateById(result); } @@ -908,7 +1039,7 @@ public class AppearancePatentTaskService { int rowIndex = 1; for (AppearancePatentParsedRowVo parsedRow : parsed.getAllItems()) { - AppearancePatentResultRowDto resultRow = resultMap.get(rowKey(parsedRow.getDisplayId(), parsedRow.getAsin(), parsedRow.getCountry())); + AppearancePatentResultRowDto resultRow = findResultRow(parsedRow, resultMap); String missingReason = ""; if (resultRow == null) { missingReason = hasPromptFields(parsedRow) ? "未匹配到检测结果" : "未送检:缺少标题或图片"; @@ -921,10 +1052,10 @@ public class AppearancePatentTaskService { row.createCell(col++).setCellValue(readValueByHeader(parsedRow, "价格", "price")); row.createCell(col++).setCellValue(resultRow == null ? firstNonBlank(parsedRow.getTitle(), "") : firstNonBlank(resultRow.getTitle(), parsedRow.getTitle())); row.createCell(col++).setCellValue(resultRow == null ? firstNonBlank(parsedRow.getUrl(), "") : firstNonBlank(resultRow.getUrl(), parsedRow.getUrl())); - row.createCell(col++).setCellValue(resultRow == null ? missingReason : firstNonBlank(resultRow.getTitleRisk(), "")); - row.createCell(col++).setCellValue(resultRow == null ? missingReason : firstNonBlank(resultRow.getAppearanceRisk(), "")); - row.createCell(col++).setCellValue(resultRow == null ? missingReason : firstNonBlank(resultRow.getPatentRisk(), "")); - row.createCell(col).setCellValue(resultRow == null ? "未送检" : firstNonBlank(resultRow.getConclusion(), "")); + row.createCell(col++).setCellValue(resultRow == null ? missingReason : userFacingCozeCellValue(resultRow, resultRow.getTitleRisk())); + row.createCell(col++).setCellValue(resultRow == null ? missingReason : userFacingCozeCellValue(resultRow, resultRow.getAppearanceRisk())); + row.createCell(col++).setCellValue(resultRow == null ? missingReason : userFacingCozeCellValue(resultRow, resultRow.getPatentRisk())); + row.createCell(col).setCellValue(resultRow == null ? "未送检" : userFacingConclusion(resultRow)); } workbook.write(fos); workbook.dispose(); @@ -933,7 +1064,7 @@ public class AppearancePatentTaskService { } } - private ParsedWorkbook parseWorkbook(File input) { + private ParsedWorkbook parseWorkbook(File input, AppearancePatentSourceFileDto source) { DataFormatter formatter = new DataFormatter(); try (FileInputStream fis = new FileInputStream(input); Workbook workbook = WorkbookFactory.create(fis)) { Sheet sheet = workbook.getSheetAt(0); @@ -952,7 +1083,6 @@ public class AppearancePatentTaskService { int titleCol = findOptionalHeaderExact(headerMap, "标题", "title", "listing title", "product title", "商品标题", "商品名称", "产品名称"); - List accepted = new ArrayList<>(); List allRows = new ArrayList<>(); int total = 0; int dropped = 0; @@ -975,32 +1105,30 @@ public class AppearancePatentTaskService { continue; } AppearancePatentParsedRowVo vo = new AppearancePatentParsedRowVo(); + vo.setSourceFileKey(source.getFileKey()); + vo.setSourceFilename(firstNonBlank(source.getOriginalFilename(), input.getName())); vo.setRowIndex(i + 1); vo.setSourceId(id); vo.setDisplayId(normalizeDisplayId(id)); String rowBaseId = baseId(vo.getDisplayId()); if (!Objects.equals(currentBlockBaseId, rowBaseId)) { currentBlockBaseId = rowBaseId; - currentGroupKey = rowBaseId + "@" + vo.getRowIndex(); + currentGroupKey = buildGroupKey(source.getFileKey(), rowBaseId, vo.getRowIndex()); } vo.setGroupKey(currentGroupKey); + vo.setRowToken(buildRowToken(source.getFileKey(), vo.getRowIndex())); vo.setAsin(asin); vo.setCountry(country); vo.setUrl(urlCol >= 0 ? cell(row, urlCol, formatter) : ""); vo.setTitle(titleCol >= 0 ? cell(row, titleCol, formatter) : ""); vo.setValues(readRowValues(row, headers, formatter)); allRows.add(vo); - if (isAcceptedId(id)) { - accepted.add(vo); - } else { - dropped++; - } } hydratePromptFields(allRows); - if (accepted.isEmpty()) { + if (allRows.isEmpty()) { throw new BusinessException("no valid appearance patent rows"); } - return new ParsedWorkbook(total, dropped, headers, accepted, allRows); + return new ParsedWorkbook(total, dropped, headers, allRows); } catch (BusinessException ex) { throw ex; } catch (Exception ex) { @@ -1036,6 +1164,25 @@ public class AppearancePatentTaskService { return row != null && (!normalize(row.getTitle()).isBlank() || !normalize(row.getUrl()).isBlank()); } + private boolean shouldInspectRow(AppearancePatentResultRowDto row) { + return row != null && (!normalize(row.getTitle()).isBlank() || !normalize(row.getUrl()).isBlank()); + } + + private boolean hasResolvedCozeFields(AppearancePatentResultRowDto row) { + if (row == null) { + return false; + } + return hasUsableCozeField(row.getTitleRisk()) + || hasUsableCozeField(row.getAppearanceRisk()) + || hasUsableCozeField(row.getPatentRisk()) + || hasUsableCozeField(row.getConclusion()); + } + + private boolean hasUsableCozeField(String value) { + String normalized = normalize(value); + return !normalized.isBlank() && !isTechnicalCozeFailure(normalized); + } + private Map buildHeaderMap(Row header, DataFormatter formatter) { Map map = new LinkedHashMap<>(); for (int i = 0; i < header.getLastCellNum(); i++) { @@ -1104,11 +1251,6 @@ public class AppearancePatentTaskService { return col < 0 ? "" : normalize(formatter.formatCellValue(row.getCell(col))); } - private boolean isAcceptedId(String id) { - String s = id.trim(); - return s.matches("\\d+") || s.matches("\\d+_1"); - } - private String baseId(String id) { String s = normalize(id); int idx = s.indexOf('_'); @@ -1119,6 +1261,59 @@ public class AppearancePatentTaskService { return id == null ? "" : id.trim(); } + private void mergeHeaders(List mergedHeaders, List headers) { + if (mergedHeaders == null || headers == null || headers.isEmpty()) { + return; + } + Set existing = new LinkedHashSet<>(mergedHeaders); + for (String header : headers) { + if (existing.add(header)) { + mergedHeaders.add(header); + } + } + } + + private String buildAggregateScopeKey(List sourceFiles) { + List fileKeys = sourceFiles == null ? List.of() : sourceFiles.stream() + .map(AppearancePatentSourceFileDto::getFileKey) + .filter(Objects::nonNull) + .map(String::trim) + .filter(value -> !value.isBlank()) + .toList(); + if (fileKeys.isEmpty()) { + return ""; + } + if (fileKeys.size() == 1) { + return fileKeys.get(0); + } + return "aggregate:" + DigestUtil.sha256Hex(String.join("|", fileKeys)); + } + + private String buildAggregateSourceFilenameLabel(List sourceFiles) { + if (sourceFiles == null || sourceFiles.isEmpty()) { + return "appearance-patent"; + } + String firstFilename = sourceFiles.stream() + .map(AppearancePatentSourceFileDto::getOriginalFilename) + .filter(Objects::nonNull) + .map(String::trim) + .filter(value -> !value.isBlank()) + .findFirst() + .orElse("appearance-patent"); + if (sourceFiles.size() == 1) { + return firstFilename; + } + return firstFilename + " 等 " + sourceFiles.size() + " 个文件"; + } + + private String buildRowToken(String sourceFileKey, Integer rowIndex) { + return normalize(sourceFileKey) + "::row::" + (rowIndex == null ? 0 : rowIndex); + } + + private String buildGroupKey(String sourceFileKey, String rowBaseId, Integer rowIndex) { + return normalize(sourceFileKey) + "::" + normalize(rowBaseId) + "@" + (rowIndex == null ? 0 : rowIndex); + } + private long countTask(Long userId, String status) { Long count = fileTaskMapper.selectCount(new LambdaQueryWrapper() .eq(FileTaskEntity::getModuleType, MODULE_TYPE) @@ -1187,19 +1382,24 @@ public class AppearancePatentTaskService { return val == null ? "" : val.replace("\ufeff", "").replace("\u3000", " ").trim().replaceAll("\\s+", " "); } - private String buildParsedPayloadJson(String aiPrompt, List headers, List rows, List allRows) { + private String buildParsedPayloadJson(String aiPrompt, List sourceFiles, List headers, List groups, List allRows) { AppearancePatentParsedPayloadDto payload = new AppearancePatentParsedPayloadDto(); payload.setAiPrompt(normalize(aiPrompt)); + payload.setSourceFiles(sourceFiles == null ? List.of() : sourceFiles); payload.setHeaders(headers == null ? List.of() : headers); - payload.setItems(rows == null ? List.of() : rows); + payload.setItems(allRows == null ? List.of() : allRows); + payload.setGroups(groups == null ? List.of() : groups); payload.setAllItems(allRows == null ? List.of() : allRows); return writeJson(payload, "保存解析结果失败"); } - private String buildTaskResultJson(String aiPrompt, String sourceFileKey, String parsedPayloadPointer) { + private String buildTaskResultJson(String aiPrompt, List sourceFiles, String parsedPayloadPointer) { Map payload = new LinkedHashMap<>(); payload.put("aiPrompt", normalize(aiPrompt)); - payload.put("sourceFileKey", sourceFileKey); + payload.put("sourceFileKeys", sourceFiles == null ? List.of() : sourceFiles.stream() + .map(AppearancePatentSourceFileDto::getFileKey) + .filter(Objects::nonNull) + .toList()); payload.put("parsedPayloadRef", parsedPayloadPointer); return writeJson(payload, "保存任务结果索引失败"); } @@ -1238,7 +1438,7 @@ public class AppearancePatentTaskService { } for (JsonNode node : array) { AppearancePatentResultRowDto row = objectMapper.treeToValue(node, AppearancePatentResultRowDto.class); - rows.put(rowKey(row.getId(), row.getAsin(), row.getCountry()), row); + rows.put(rowKey(row), row); } } catch (Exception ex) { log.warn("[appearance-patent] read chunk payload failed taskId={} chunk={} err={}", @@ -1247,6 +1447,58 @@ public class AppearancePatentTaskService { return rows; } + private String rowKey(AppearancePatentParsedRowVo row) { + if (row == null) { + return ""; + } + String rowToken = normalize(row.getRowToken()); + if (!rowToken.isBlank()) { + return rowToken; + } + return legacyRowKey(row); + } + + private String rowKey(AppearancePatentResultRowDto row) { + if (row == null) { + return ""; + } + String rowToken = normalize(row.getRowToken()); + if (!rowToken.isBlank()) { + return rowToken; + } + return legacyRowKey(row); + } + + private AppearancePatentResultRowDto findResultRow(AppearancePatentParsedRowVo parsedRow, + Map resultMap) { + if (parsedRow == null || resultMap == null || resultMap.isEmpty()) { + return null; + } + AppearancePatentResultRowDto resultRow = resultMap.get(rowKey(parsedRow)); + if (resultRow != null) { + return resultRow; + } + String legacyKey = legacyRowKey(parsedRow); + if (legacyKey.isBlank()) { + return null; + } + return resultMap.get(legacyKey); + } + + private String legacyRowKey(AppearancePatentParsedRowVo row) { + if (row == null) { + return ""; + } + return rowKey(row.getDisplayId(), row.getAsin(), row.getCountry()); + } + + private String legacyRowKey(AppearancePatentResultRowDto row) { + if (row == null) { + return ""; + } + return rowKey(row.getId(), row.getAsin(), row.getCountry()); + } + private String rowKey(String id, String asin, String country) { return normalize(id) + "::" + normalize(asin).toUpperCase(Locale.ROOT) + "::" + normalize(country); } @@ -1267,6 +1519,40 @@ public class AppearancePatentTaskService { return ""; } + private String userFacingCozeCellValue(AppearancePatentResultRowDto row, String value) { + String normalizedValue = normalize(value); + if (!normalizedValue.isBlank() && !isTechnicalCozeFailure(normalizedValue)) { + return value; + } + if (row != null && isTechnicalCozeFailure(row.getError())) { + return "待人工复核"; + } + return firstNonBlank(value, ""); + } + + private String userFacingConclusion(AppearancePatentResultRowDto row) { + if (row == null) { + return ""; + } + String conclusion = normalize(row.getConclusion()); + if (!conclusion.isBlank() && !isTechnicalCozeFailure(conclusion)) { + return row.getConclusion(); + } + if (isTechnicalCozeFailure(row.getError())) { + return "待人工复核"; + } + return firstNonBlank(row.getConclusion(), ""); + } + + private boolean isTechnicalCozeFailure(String value) { + String normalized = normalize(value).toLowerCase(Locale.ROOT); + return normalized.contains("coze") + || normalized.contains("结果不完整") + || normalized.contains("工作流节点执行超限") + || normalized.contains("调用超时") + || normalized.contains("timeout"); + } + private String safeFileStem(String filename) { String name = filename == null || filename.isBlank() ? "appearance-patent" : filename; int idx = name.lastIndexOf('.'); @@ -1317,6 +1603,6 @@ public class AppearancePatentTaskService { String error) { } - private record ParsedWorkbook(int totalRows, int droppedRows, List headers, List acceptedRows, List allRows) { + private record ParsedWorkbook(int totalRows, int droppedRows, List headers, List allRows) { } } 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 6ced207..204beea 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 @@ -81,13 +81,32 @@ public class ShopManageGroupService { .map(ShopManageGroupEntity::getId) .filter(id -> id != null && id > 0) .collect(Collectors.toCollection(LinkedHashSet::new)); - groupIds.addAll(groupMemberMapper.selectList(new LambdaQueryWrapper() + List memberGroupIds = groupMemberMapper.selectList(new LambdaQueryWrapper() .select(ShopManageGroupMemberEntity::getGroupId) .eq(ShopManageGroupMemberEntity::getUserId, normalizedOperatorId)) .stream() .map(ShopManageGroupMemberEntity::getGroupId) .filter(id -> id != null && id > 0) - .collect(Collectors.toCollection(LinkedHashSet::new))); + .toList(); + groupIds.addAll(memberGroupIds); + if (!memberGroupIds.isEmpty()) { + LinkedHashSet leaderIds = groupMapper.selectList(new LambdaQueryWrapper() + .select(ShopManageGroupEntity::getCreatedById) + .in(ShopManageGroupEntity::getId, memberGroupIds)) + .stream() + .map(ShopManageGroupEntity::getCreatedById) + .filter(id -> id != null && id > 0) + .collect(Collectors.toCollection(LinkedHashSet::new)); + if (!leaderIds.isEmpty()) { + groupIds.addAll(groupMapper.selectList(new LambdaQueryWrapper() + .select(ShopManageGroupEntity::getId) + .in(ShopManageGroupEntity::getCreatedById, leaderIds)) + .stream() + .map(ShopManageGroupEntity::getId) + .filter(id -> id != null && id > 0) + .toList()); + } + } return groupIds; } @@ -178,9 +197,7 @@ public class ShopManageGroupService { return; } Long normalizedOperatorId = normalizePositiveId(operatorId, "操作人不能为空"); - boolean createdBySelf = entity.getCreatedById() != null && entity.getCreatedById().equals(normalizedOperatorId); - boolean memberOfGroup = isGroupMember(entity.getId(), normalizedOperatorId); - if (!createdBySelf && !memberOfGroup) { + if (!listAccessibleGroupIds(normalizedOperatorId, false).contains(entity.getId())) { throw new BusinessException("只能操作自己有权限的分组数据"); } } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskFileJobService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskFileJobService.java index 65358e7..8166c2a 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskFileJobService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/task/service/TaskFileJobService.java @@ -158,6 +158,17 @@ public class TaskFileJobService { .set(TaskFileJobEntity::getUpdatedAt, LocalDateTime.now())) > 0; } + @Transactional + public void touchRunning(Long jobId) { + if (jobId == null || jobId <= 0) { + return; + } + taskFileJobMapper.update(null, new LambdaUpdateWrapper() + .eq(TaskFileJobEntity::getId, jobId) + .eq(TaskFileJobEntity::getStatus, "RUNNING") + .set(TaskFileJobEntity::getUpdatedAt, LocalDateTime.now())); + } + @Transactional public void markSuccess(TaskFileJobEntity job, String resultFileUrl) { taskFileJobMapper.update(null, new LambdaUpdateWrapper() diff --git a/backend-java/src/main/resources/application.yml b/backend-java/src/main/resources/application.yml index 481a12a..8184634 100644 --- a/backend-java/src/main/resources/application.yml +++ b/backend-java/src/main/resources/application.yml @@ -134,7 +134,7 @@ aiimage: coze-base-url: ${AIIMAGE_APPEARANCE_PATENT_COZE_BASE_URL:https://api.coze.cn} coze-workflow-path: ${AIIMAGE_APPEARANCE_PATENT_COZE_WORKFLOW_PATH:/v1/workflow/run} coze-workflow-id: ${AIIMAGE_APPEARANCE_PATENT_COZE_WORKFLOW_ID:7632683471312355338} - coze-token: ${AIIMAGE_APPEARANCE_PATENT_COZE_TOKEN:} + coze-token: ${AIIMAGE_APPEARANCE_PATENT_COZE_TOKEN:Bearer sat_gsInckdsN0qqhnZSK7K4Zevw6neJCHmYHyIbm85oGgJIGEmSdkH5OFctSKLsAHvT} coze-batch-size: ${AIIMAGE_APPEARANCE_PATENT_COZE_BATCH_SIZE:10} coze-connect-timeout-millis: ${AIIMAGE_APPEARANCE_PATENT_COZE_CONNECT_TIMEOUT_MILLIS:10000} coze-read-timeout-millis: ${AIIMAGE_APPEARANCE_PATENT_COZE_READ_TIMEOUT_MILLIS:60000} diff --git a/backend/__pycache__/config.cpython-312.pyc b/backend/__pycache__/config.cpython-312.pyc index 82ec76926cefc97105b15f4e706f3f129fb36ea6..0afb1db6f5722ef818574e29f7577f8be796375a 100644 GIT binary patch delta 100 zcmV-q0Gt2j3+)RI%MA?*00000+ZFI>IR&u}^a2(eXmoUNIxjCYH!d+TF)lGSGcGYT zG_w-}<^ciblllZ|Ch!IT85^GpnF^l{nGVn=KF~m2(->aY7-i8IWzc46(->;d02SDi Ghy`8`NFk;G delta 93 zcmaFM{fwLMG%qg~0}yaozt23$vXSo#lb~2eNlAf~zP_Q6xt;+K8g7gmH1jk_8Q|LK!1Y8J*RtmdfI@_IgMM-{az&@VNw5?m%}gL zyWe*AdtZ3$cgp^AO5-041}%e6>kFSZY^dorx>>XFc=kBS4W6O`S z;(MA&Vvg2rdz`CEP{wxc5m#yR4Ns0c=PB`VZN6R|LpKQeFXFI1-|+mnl`n{ehWwmg z->~vGH@Uir-XlAV!dDwIpqakq9JxWD7jLq&Wn}G$(Z&>f^d@UJiyel8y5rlK2V`rQ z?co2{-{u+R-->;Ia-!1=dl!;#gD_0y)PcjK<#b2c#9H zoO7;Q<6$`Ce$8seZ>r$e;nqP_9pAEb^IhDaMjBKEnu2^OoluABTgYJxlot=GrKy?* zZcv*THRGy54KCPRlNdGy8XKh{|2DcUZwE519?~=2H5*&_ra)_rw6rPE9H0K4KxyY>USv_~fY}o_0g5LDF-A&57 z%cGMf$Lxgz_Ts*DGNl2sC}eAFTD@|Z(JGW=e-OOzCF-e3bogB4lb?g;>4;jKgX2^e zn3Q#lz}ydH%Unoj>lpIfM#upTofiLoL@PRdPVt}lX0g=gex?!Wb6-@6>64t~gbFOA zwhmmP$*2*B|7VP9HCguSP@C3-Hu=+}G9Mm=v*e?EXdq?v;A~I6nGQx2N;NTvns|k3 z;#1Um2Xo12-CMuAzN__#=D5>C>bvWE9*Q~h2b@K{eB6_KFn3>WxGd(G7WbwcoV9OO zG_yG7oiX4oIbj{4gqO#>#RJ~iC)l_z^=e3k&>=Vi%q z-kumt6IhO=z9TT4Y*Q}!0n5pofm0w|N$IUJ1nJ>aoLXRyX~cPR?8co6juGU7Vxw#| zBgn+LK8N`6KTQR7Oq+7-B!!?v7uQKklna=>s#><5sb$w^F-)6EP*FaVA=u+c3{#(G z_vFZ#HZ{)OWcB?ZrhVg6C)Ouk>PL2HaEB%|?zV|Mb4pI$0LL^(M~ zs7Ne2?lcOj(F_KRpci+h+KU9kHPW6+IV0#s)m6&^DymJj9dUHzH&l?x7MQAh3mN<> znV8eT-7fiLh<^u3{2~e~D4aw0^ecD^9j~GA5`{+)24w+`^BZ|PB{(SDN#QJo!xVZE z1`S*TAFOSy89BX)(zGMA1}-$HZ43suAYaqaPG4vm;e(;Ajje-9Ohk1-4)ahj*o?U+ z#6OOELq>$u2@mh4XQtIOwgkAE-~*cj&0LV1ka0%t{tJq7nnv0Y9CR>ogQ;WDMU}Pd zA=2L69)4yrm(a)`&@aktyL?hD@&HRVUu`Iqb-vZQ-S&$gI7d%%t< zsbg7OrR!`PQ2F8}Uk?|)Giu6-s&hV_JUeDtc4U3H@&xxr{cH6nTmQYeE0g4Q=k^r; zvaol3$C9XJ*~Qxy#4Lg1ZN05${ZIbV z5f071o{dpc)|V=Ip0Zz_-La(07*-Bz8MQO2N{gGub5124GFhM4+EE@idx){yh*Frd z2h1o1LZ>`#btV`T3p-VDowe)!eqCyK!QqDTL*>2q#WG7zY6mix#7)kg`Tu$3w@R0y*oPwL=V@M2xtbQ{BT0pHn5oltrN zMu4L%S@8t;e1hr$2%%@wc-pJ2#jHM(7PJ^_J2M?pK}_U^Ywy8}OD^*XV_uv5w(Pf=rNe=KYG%P{VYk=VgMv4w^yGwHYw#je-Hg z`c({T6DMyoYZ$@IDFqW};jH`RZ5C2wfW>!PIGdCvl{_XI!NS?4~Py+LwK1?J=aX4si=e)bHb2#Q3?KgmF zO&R4^FpeINN6K(BHok(K9^B>}uR_5nIPpim12=lcTZ>+%ZA}|HPdj=ZTFE4**(*gW z;L$f|pHe36XWLwoUcIgny;7e^lphP0pJc(srI4&fNco8gEn(WU0CST?YJv#@Uo*$F3GVsB0&7R?BuB5ak(Fj_Qxb=*Uje4}>lHDQ*|po5 z45rmOs>fEEnWbkVo5}D>V5qOJVY=8ob4T0DAGK2k%o=9TM`L?*i9&+c`P0dNn!&$< zKZ7Y%>KplY>F5=_R_ZS+dD@`zcTnOV5&Uxgb4u7s38yH0LScx)n-rvqV+8~*#EfDtcyGs!_2sO&8EW3rKcj9z{OBbnS$5B7F-X=9*i0~aXU zkR8qf%k7DEWi)P50LaPwJg2HM%g2yNsDXjC5HYg9Z z@U1+dMA{3C2%Qr5<5EiV;Ud!V*97z#CPXbdKbF0Gw| zmQb(}%PSUMlj{REV9F zRcaVsLtkkN5OR}4i_u+A7OKgoR!GwQ184r57T!!bv6Mm%`ED^h*?x%@&zQ{8 zIJ&Yr=3n2h&hAvwG8We*MRi$mTUvN#)aH-s{qfTIuP;5h;l$EdO7&|?`-;z0eo%F` zDtgb__wNhK533KUd+onAo>&@H`=Tk;*!V`(Nf&jlVOD1F4`t@`>SLKRqUN;AN=82^ znl>#uyQ056tzyXL3AgrbI9YUtiw5rR_il>W8l(Egi$(LJ-hzJ5zrA3nXhD12o)ouFj(c;kf={#dn+v;?J;q*I!R_f$ z8&3FpXGXn61NNf0C-q?7zP#`~F;BsOXIdZIrHZ?f$wS=_g>Q?w@&{b_ZO|o;o0C2? zr}mpu!}jy$?6^DSpl+Woyg24A7;qQ$L6;(Kn-rGy+cLsi@r&ws`vS^<+0zr~Hg#!- zix``0SivOa4$ovX*1g8v#(rFsUlr=E)6QuBbOXdFP|YLL@5{21NlGD z;28Nf#u5GW_A3(!Fp>78dD7+qukWvPEM-udF{ONRgiWN#PspntNVQ3ccGb};`ofpnNQZHyQG zYkJ2w6zFF{CBK{sm`&er!V>veI;j0;>8zxU>lD#I_X>2DGR=QWUQUOf>HzchHky9_ z2IQq|NG0A{utk<-z-iXQ;GCqt>r}*lP5jyLphAK3VRASd-V&dBPs6^-NZq8Iwu~Zt zoh+7~(#knGerK+@JE>iT*GrF}yrJh%a*F-zD0TJd*OL;9p0a{3z+HSHg{cUY{HKUm z+c3*Byp-XkyiULE{i<qnYxb4<4-D&KN-ps*!G*?ZkO&!LU<6~YerLdigqr+!Gell)Vb zuxFGKzM}9M<@ORCP4v!Dk07T!V9S)8fPOaeA5f6C_tVh;1(c8BW2C7Bo$5R}I~^)m z4NFoV1*d5Ki<0~~9qi;eIjG5(C1BO+aQSJf4g)cl!j8zFi{bAIp9ZP?M2@i(OZP^} z<=IeN{-d4s$MC5?PZ^i|Q_GTPOCWgy%dc-hlmi2NP%RgN}%PI zKSNelf{nak1rrG`h9YG)PI*<44;RB;Eo){;{VGVw9gF%wO>N88=2pHT7((B?7VP=- zKwSOuDwv&Op)b@6Zf=?1t$d;1viBx3LXkx3O)*x zC?r!zp^!=;jY2ww3<{YPvM5MNV*^9hZNSv<`_-^onM=ujl3IxgU^ ze((+oG?K6KDaT0^WGwmJ8mLv=j{BaAOj--aVYY#ucT4eaaSU#evqW7Dg^Ci~-xn#V zhPjG%$xxCfyzyix>_>mbtaHJW1=1I{eLn9S+M~M z4Bw&#{W|GSGyE*lvIp{|Fvggep__wTzKIz&6lTfLVn~npYT*TWfyA;DtddeBZY772 zJVbH{$p@&>rK(nd7f7m+B$oV5l2dXu$+skDlDsFK6xBniVlM8z65;FNS;hQukx0!g zXr z4?zrIA=$na)@koT+H5r{=|S?`ZpezjHgL#NB%W{S4yVYB2jQ4X$^~~aV&PRM`R+lO zqQD-ASxUa^fX^b1hu}p}E=B@hPTm$^mUbnMH;=ohpbdOKd{JEo6f5th$1Ej>Iv`oK zjE*Z<0z1G>KJEaoVl`48j^M2;<;_wYUUPU!49QkBxlCv+MzReaRzOdbO3OStx~0@K z2u6Ze^8ZB)Ik_4NEc{fuP5RrURCMQ(uO0zUA|(_N&!ezV_Y++48!9{g>Hom)L_cAT z?0*!VWM_YWdZ(~K%XAY_YHR;$5HboU)@_wXeH>_dHuBku@@p~zU-+$3~>By8l zFx^0X*smQITI&>Rk#s5Y!5&ZpY>C95g#U$h`k5&GCqkm{px;_NZTEQEMDes6;%QUC z>nP9)#nbY@(=5r;l*iLt#nV{j>5V*fU7mU>PhFFzKE+et;i;W@s!5(o%2QtWQw*8Y z1uktpzTllqC@ped7xtU8uVm^#dBtZyNX>>x!>fQ{b&sX&OzBFAL0TM4m)W%dsxM>= zYo?GsET`|oJ6Q6^XJDUG1w4#R<_^p0`>>r9Jp=B@^8_Ad+0a6g^D9_sn!yatn5VB+ J$cE&A_2n`m{)2@Hi;|sBk9u1@w2v(#%iq<0=&>qohd+%)6JgN0G=WuuC z&hNW(U-O&c*xSn5-zhO~+U*tz|1KqeR#!i-BPLP)-hMb|Ilz8x7i6J40=e*;=flvg zXz4nS|CgOWa7n6;Qy+Rr>WoaHzl#?VD*IuztOgF0cgm4v#I}usT}0T-wd!rdu#s9Ol|qO||6eHlZh7mJIEnB{A>O5xeja?n{fS)a?&Ri&Y9(w*!4& zZ%s8;tB<4ZZqjM5ThpONq;A&;Uv`gTua>a>CkI8cXB1Q&p@aamq{ zWkY36byHP;XNVsMN*(^YxWT|%Yrr46E(x9kvo5GtZ9C-_BX_33>=dIKGZ{faNp;+t zBS}nFV;ewq290VQFTWXlC8nTBb=^A?mkdD@s^bM*!I^?HH_e*eD8!$dpn8JF1Bu#{ z7t-XQnUD8^o5z-cL#dNmY(X1$rb4E+YQMo@uaaw|D*4V6lGI`k+6n0c@#EI=51VCF ztuBKsoh7p7=DV*3GhcQi7zb44v%svC1r@y-MK#WX*a5()DT8KC-{s2P4^1*is)e7u z1>CN5)qnZSsFHeBvedt$Gh5zUHLP*@vWhyD zQ3ZO<)CLs|mG#xE8Oeh8xuGD9n4s4vfOFJd6G6%daRl|>c=-7u@VMDgoUmCW+6itZ zI3H_=(n9tMTI#h#HWH>^C55@Za_Q2@R&U{)#gnKb13|uLKDhMz?W|kdbv~P)nGZ=k z_#h5D)c>KwzYN8q* z$#CD4D;?F%@XiH&SFYoxDY~xf;if5}m$IQ&UqZ=YA|xsR>!#^IK9-;^ps+Vc`$rOQ zigkX+SV;NFpJ@CXeRYIJucO#6v)5>RG%^-h!ZR1C%mP+U!*T)$i(NE|nB~)o!7H=3 z`Ps41uAIV!_Y9$Bc`#Ke_^%!Y3?rTUpa=?Mqb{*`X_pgx&uoad4%;y^@D44C@P|bn z=>%GBC2^8(Du%nP@8Q^_U{yZ{zF{JyZ<_{jq1+O9O-?>dFv{1kl(2WXX(Bve_yE@n zdD}!dVs#=)P}rrn%#!fq6-4c3c@`)tuMi)6&y4xEPn8`FsM@vg197A>E}5k z@|+3v=BR!G`jGttmXh%c3w_ayJsSB_t*R}kJ7DLn6Ce!_aKwwP$a=_hcJsH$aK@l< zz&Cw#viWSRAvQWoJ#CII@vR*&Xl+{|QfQ47g(5@p?ha4}=>`bWkZ>8t58eoaY{nK1 zwkdcS>0YZm=;qJnLY%JOM@}RPQN1%wP1|Wjg8L2$&eURTHb(>Z;oXp~Rdyzn1pH-e zEb3W4i2@R$q@t;Zwz}wX_7|)wPfvgX=;Fs>p$*>Q3!PBsSisKW$Jm|SWW%Ywa^A(` z^T5ehCxDB;Tnq-8weuVDz{8ha2T9iRXs47K>s{b2rI5w*J#cN#NuzaL%W8yWM#gQyoYwUMV3Ti6x1MrQD2smO33?n0V1+Loz`=$`7XsGC}B<>5|R0y?I~t zF;{VqwWM2La_NE}^-V?$=hZPYrCHbLL*7ZSQol-^Ai*72gSP~ha*1T328F>l$T6}GPw^l+c_^k zS`6|0pdL*8#iGv$IcW z7eOHxfE!EE*M1+>M!YH(mO`@Op9pz8w4xN&n`a2J6WJtE>eW{^)isE#@CW)(qL*EAY*lku4gV1g2Zw%$-es~5l{mN^1K z{`A`G>l*6nm)BP;V|7*4m?_ehiOW@3>or$3E^laNb=6G);~-LYp*i+7@I@7H-KtBp zPvQ{!K!n z-GPLRVgl3AP*1`@LLp%!VIpBBVIg59VIyHj!B@|R44&Qy27cdNFkgwK1t;&i3wb>S z$Hq`;CG_d7gDxHZkFAg-zYo0PZm6>Q5i|$SPSc|jFRKJU?`{Wu=)&Dd7|CCepQGkP z*f73N>t}#JR}1;p3^a5H8PX);i7^pF?mBQ7Rz+*Y;t+)u5(+nt*)BRRsWhV3)abj> zHp42wJcJfKDSB%l^`d`<=6~`3P=Nn8|4PhBbTeRO>nWggna7lZM{}G@;&_}&3|Z)I zV`x_+yrsW-;DsTMlkioviRcT_2cqy+d0Qj0aAz~vGDV~!ND-fCEzwKVJdtLx@YBsO z*^rHjT_Nvsc-%03=$VaVonEg$;>ccF3BQ1Be*c5uyYl%gwO)<8{+6ommH7v4kRI{{ z;WM2f0L&?ITPs|v%(vW zj`Q_xFxN5xKm3}uyM;S7@c(`-)X2&>RI&noxEASaO*>>5u0@5HuUZ3np%d+p^ut>? zHbSvdL}rTloQ;rXETQo=GOuieMBcU$QY@2DlW&UdylpMK7;4`H4Z2!!^aeUzgd>VY zJTv4q*iSrYI-cx{D=0vtD@IS<-+u*pc*Pbdawigg5%n59lNeP!VCAu;;Er%W5`T3I z+-SHS_47hD4PKX%uYAA;9cQ1c`9E~?^lgx0n2H}i5SqFT7Rgfv0uv|p2HO702B~60 zd_J)qieiM5mLVsEkJ|w=tkcoj21@D|lIR|Kyz+xPpc@)Ot&hQ1a1Z^bh0)`i(LCE2>xx7xSa*8~2O;OLW!z<5z7$+0A^3hQwiUJ88gQ?SGB rhijrsIbl6c!=(`V>C^C-EYF?6`}V@Ej= total or not rows: + break + group_page += 1 + all_items.sort(key=lambda item: item.get('id') or 0, reverse=True) + total = len(all_items) + offset = (page - 1) * page_size + return jsonify({ + 'success': True, + 'items': [_format_shop_manage_item(item) for item in all_items[offset:offset + page_size]], + 'total': total, + 'page': page, + 'page_size': page_size, + }) + params = {'page': page, 'pageSize': page_size} if current_row and current_row.get('id'): params['operatorId'] = current_row.get('id') @@ -1474,23 +1598,9 @@ def list_shop_manages(): if error_response is not None: return error_response, status payload = result.get('data') or {} - items = [ - { - 'id': item.get('id'), - 'group_id': item.get('groupId'), - 'group_name': item.get('groupName') or '', - 'shop_name': item.get('shopName') or '', - 'mall_name': item.get('mallName') or '', - 'account': item.get('account') or '', - 'password': item.get('passwordMasked') or '', - 'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16], - 'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16], - } - for item in (payload.get('items') or []) - ] return jsonify({ 'success': True, - 'items': items, + 'items': [_format_shop_manage_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, @@ -1611,36 +1721,10 @@ def list_shop_manage_groups(): role, current_row, denied = _ensure_backend_menu_access('shop-manage', 'skip-price-asin', 'query-asin') if denied: return denied - params = {} - if current_row and current_row.get('id'): - params['operatorId'] = current_row.get('id') - params['superAdmin'] = 'true' if role == 'super_admin' else 'false' - if role != 'super_admin' and current_row and current_row.get('id'): - params['createdById'] = current_row.get('id') - result, error_response, status = _proxy_backend_java( - 'GET', - '/api/admin/shop-manages/groups', - params=params, - ) + groups, error_response, status = _load_expanded_shop_manage_groups(role, current_row) if error_response is not None: return error_response, status - items = [ - { - 'id': item.get('id'), - 'group_name': item.get('groupName') or '', - 'leader_user_id': item.get('leaderUserId'), - 'leader_username': item.get('leaderUsername') or '', - 'member_user_ids': item.get('memberUserIds') or [], - 'member_usernames': item.get('memberUsernames') or [], - 'member_count': item.get('memberCount') or 0, - 'user_id': item.get('userId'), - 'username': item.get('username') or '', - 'created_at': (item.get('createdAt') or '').replace('T', ' ')[:16], - 'updated_at': (item.get('updatedAt') or '').replace('T', ' ')[:16], - } - for item in (result.get('data') or []) - ] - return jsonify({'success': True, 'items': items}) + return jsonify({'success': True, 'items': [_format_shop_manage_group_item(item) for item in (groups or [])]}) @admin_api.route('/shop-manage-group', methods=['POST']) diff --git a/backend/codex-flask-local.err.log b/backend/codex-flask-local.err.log deleted file mode 100644 index 9ddfccb..0000000 --- a/backend/codex-flask-local.err.log +++ /dev/null @@ -1,65 +0,0 @@ -WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:15124 - * Running on http://192.168.9.14:15124 -Press CTRL+C to quit -127.0.0.1 - - [27/Apr/2026 18:32:53] "POST /login HTTP/1.1" 302 - -127.0.0.1 - - [27/Apr/2026 18:32:54] "GET /api/admin/shop-manage-groups HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:55] "POST /api/admin/query-asins/import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:55] "GET /api/admin/query-asins/import/3bda54f728ff447f9edc6d80aa47986c HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:56] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_wide_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:57] "POST /api/admin/query-asins/import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:57] "GET /api/admin/query-asins/import/7779a5fac0c840138579f549d297e016 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:58] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_narrow_a_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:59] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_narrow_b_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:32:59] "POST /api/admin/query-asins/delete-import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:00] "GET /api/admin/query-asins/delete-import/474b72f74c414d94a534069668cdbe69 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:01] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_wide_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:01] "POST /api/admin/query-asins/delete-import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:02] "GET /api/admin/query-asins/delete-import/4cdd99881e174c638a531f0805612722 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:03] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_narrow_a_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:33:03] "GET /api/admin/query-asins?page=1&page_size=20&group_id=13&shop_name=codex_qasin_narrow_b_20260427181749 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:51] "GET /admin HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:51] "GET /api/admin/current-user HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:51] "GET /api/admin/current-user/menus HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:52] "GET /api/admin/shop-manage-groups HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:52] "GET /api/admin/users?page=1&page_size=999 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:53] "GET /api/admin/users?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:54] "GET /api/admin/columns HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:54] "GET /api/admin/skip-price-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:35:56] "GET /api/admin/columns HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:38:01] "GET /api/admin/dedupe-total-data?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:38:04] "GET /api/admin/skip-price-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:38:06] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:08] "GET /admin HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:08] "GET /api/admin/current-user HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:09] "GET /api/admin/shop-manage-groups HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:09] "GET /api/admin/current-user/menus HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:09] "GET /api/admin/users?page=1&page_size=999 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:10] "GET /api/admin/users?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:11] "GET /api/admin/columns HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:11] "GET /api/admin/skip-price-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:14] "GET /api/admin/columns HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:19] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:39:22] "GET /api/admin/skip-price-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:40:07] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:43:55] "POST /api/admin/query-asins/import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:43:55] "GET /api/admin/query-asins/import/57ff18ffe1de4c6f93a627cf163f3b99 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:43:56] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:09] "POST /api/admin/query-asins/import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:10] "GET /api/admin/query-asins/import/094bd7fc53944e2582aa6946b64f973f HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:10] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:18] "POST /api/admin/query-asins/delete-import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:19] "GET /api/admin/query-asins/delete-import/0f2e8441746f40309e77042f576842a8 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:19] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:25] "POST /api/admin/query-asins/delete-import HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:25] "GET /api/admin/query-asins/delete-import/b6369ca86d904a26ae1badbe89d512d4 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:26] "GET /api/admin/query-asins?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:31] "GET /admin HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:32] "GET /api/admin/current-user HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:32] "GET /api/admin/current-user/menus HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:32] "GET /api/admin/shop-manage-groups HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:33] "GET /api/admin/users?page=1&page_size=999 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:34] "GET /api/admin/users?page=1&page_size=15 HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:34] "GET /api/admin/columns HTTP/1.1" 200 - -127.0.0.1 - - [27/Apr/2026 18:44:38] "GET /api/admin/columns HTTP/1.1" 200 - diff --git a/backend/codex-flask-local.out.log b/backend/codex-flask-local.out.log deleted file mode 100644 index 5d577fd..0000000 --- a/backend/codex-flask-local.out.log +++ /dev/null @@ -1,2 +0,0 @@ - * Serving Flask app 'app' - * Debug mode: off diff --git a/backend/config.py b/backend/config.py index 97a3eb7..4e042f5 100644 --- a/backend/config.py +++ b/backend/config.py @@ -23,8 +23,9 @@ bucket_path = "nanri-image/" file_url_pre = f"https://{bucket}.oss-cn-hangzhou.aliyuncs.com/" import os -backend_java_base_url = os.environ.get('BACKEND_JAVA_BASE_URL', 'http://127.0.0.1:18080').rstrip('/') +# backend_java_base_url = os.environ.get('BACKEND_JAVA_BASE_URL', 'http://127.0.0.1:18080').rstrip('/') # backend_java_base_url = os.environ.get('BACKEND_JAVA_BASE_URL', 'http://8.136.19.173:18080').rstrip('/') +backend_java_base_url = os.environ.get('BACKEND_JAVA_BASE_URL', 'http://47.111.163.154:18080').rstrip('/') os.environ['OSS_ACCESS_KEY_ID'] = accessKeyId os.environ['OSS_ACCESS_KEY_SECRET'] = accessKeySecret os.environ['SECRET_KEY'] = "ddffc7c1d02121d9554d7b080b2511b6" diff --git a/frontend-vue/src/pages/brand/components/BrandAppearancePatentTab.vue b/frontend-vue/src/pages/brand/components/BrandAppearancePatentTab.vue index 1fbfb03..91a6535 100644 --- a/frontend-vue/src/pages/brand/components/BrandAppearancePatentTab.vue +++ b/frontend-vue/src/pages/brand/components/BrandAppearancePatentTab.vue @@ -9,6 +9,7 @@
选择 Excel 后点击解析,后端会提取 id、ASIN、国家,并保留整数 id 与子数据的第一条。
+
暂未选择文件 @@ -35,7 +36,7 @@
任务 ID:{{ parseResult.taskId }}
-
总行数:{{ parseResult.totalRows }},保留:{{ parseResult.acceptedRows }},过滤:{{ parseResult.droppedRows }}
+
总行数:{{ parseResult.totalRows }},有效:{{ parseResult.acceptedRows }},分组:{{ parseResult.groupCount || 0 }},过滤:{{ parseResult.droppedRows }}
{{ queuePayloadText }}
@@ -66,7 +67,7 @@
解析结果 - 显示 1 条样例 / 共 {{ parsedRows.length }} 条 + 显示首组 {{ previewRows.length }} 条 / 共 {{ parseResult?.groupCount || parsedGroups.length }} 组,{{ parsedRows.length }} 条
暂无解析结果
@@ -111,10 +112,11 @@
{{ item.resultFilename || '下载结果' }}
+
{{ pendingResultHint(item) }}
错误:{{ item.error }}
- {{ statusText(item) }} + {{ statusText(item) }}
@@ -140,6 +142,7 @@ import { getAppearancePatentResultDownloadUrl, getAppearancePatentTaskProgressBatch, parseAppearancePatent, + type AppearancePatentParsedGroup, type AppearancePatentDashboardVo, type AppearancePatentHistoryItem, type AppearancePatentParsedRow, @@ -147,13 +150,14 @@ import { type UploadedFileRef, type UploadFileVo, } from '@/shared/api/java-modules' +import { expandBrandFolderRecursive, type BrandExpandFolderItem } from '@/shared/api/brand' import { getPywebviewApi } from '@/shared/bridges/pywebview' import { getTaskPollIntervalMs } from '@/shared/task-progress-config' const selectedFileNames = ref([]) const uploadedFiles = ref([]) const parseResult = ref(null) -const parsedRows = ref([]) +const parsedGroups = ref([]) const defaultAiPrompt = `请帮我排查以下亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。 请直接给出明确结论(有侵权风险 或 未发现明显侵权风险),并严格按照以下三个维度提供精简的排查理由: 外观维度: 评估产品外形、图案设计是否与欧洲/英国常见外观专利雷同。 @@ -176,7 +180,10 @@ const dashboard = ref({ }) const historyItems = ref([]) -const previewRows = computed(() => parsedRows.value.slice(0, 1)) +const parsedRows = computed(() => + parsedGroups.value.flatMap((group) => group.items || []), +) +const previewRows = computed(() => parsedGroups.value[0]?.items || []) const currentItems = computed(() => historyItems.value.filter((i) => i.taskId != null && pollingTaskIds.value.includes(i.taskId))) const historyOnlyItems = computed(() => historyItems.value.filter((i) => (i.taskStatus || '') !== 'RUNNING')) @@ -204,6 +211,24 @@ function clearPollingIds() { stopPolling() } +async function uploadAppearancePathsToJava(paths: Array) { + const api = getPywebviewApi() + if (!api?.upload_file_to_java) { + throw new Error('当前桌面端未提供文件上传能力') + } + const files: UploadFileVo[] = [] + for (const item of paths) { + const filePath = typeof item === 'string' ? item : item.absolutePath + const relativePath = typeof item === 'string' ? undefined : item.relativePath + const uploaded = await api.upload_file_to_java(filePath, relativePath) + if (!uploaded?.success || !uploaded.data) { + throw new Error(uploaded?.error || uploaded?.message || `上传失败:${filePath}`) + } + files.push(uploaded.data) + } + return files +} + async function selectFiles() { const api = getPywebviewApi() if (!api?.select_brand_xlsx_files || !api.upload_file_to_java) { @@ -212,21 +237,40 @@ async function selectFiles() { } const paths = await api.select_brand_xlsx_files() if (!paths?.length) return - const files: UploadFileVo[] = [] - for (const path of paths) { - const uploaded = await api.upload_file_to_java(path) - if (!uploaded?.success || !uploaded.data) { - throw new Error(uploaded?.error || `上传失败:${path}`) - } - files.push(uploaded.data) - } + const files = await uploadAppearancePathsToJava(paths) uploadedFiles.value = files - selectedFileNames.value = files.map((f) => f.originalFilename || f.fileKey) + selectedFileNames.value = files.map((f) => f.relativePath || f.originalFilename || f.fileKey) parseResult.value = null - parsedRows.value = [] + parsedGroups.value = [] queuePayloadText.value = '' } +async function selectFolder() { + const api = getPywebviewApi() + if (!api?.select_brand_folder) { + ElMessage.warning('当前环境不支持文件夹选择,请在本地客户端中打开') + return + } + try { + const folder = await api.select_brand_folder() + if (!folder) return + const result = await expandBrandFolderRecursive(folder) + if (!result.success || !result.items?.length) { + ElMessage.warning(result.error || '该文件夹下没有可用的 xlsx 文件') + return + } + const files = await uploadAppearancePathsToJava(result.items) + uploadedFiles.value = files + selectedFileNames.value = result.items.map((item) => item.relativePath || item.absolutePath) + parseResult.value = null + parsedGroups.value = [] + queuePayloadText.value = '' + ElMessage.success(`已选择文件夹内 ${result.items.length} 个 Excel 文件`) + } catch (error) { + ElMessage.error(error instanceof Error ? error.message : '选择失败') + } +} + async function parseFiles() { if (!uploadedFiles.value.length) { ElMessage.warning('请先选择 Excel') @@ -241,11 +285,23 @@ async function parseFiles() { })) const res = await parseAppearancePatent(files, effectiveAiPrompt()) parseResult.value = res - parsedRows.value = res.items || [] + parsedGroups.value = res.groups?.length + ? res.groups + : (res.items?.length + ? [{ + sourceFileKey: res.items[0]?.sourceFileKey, + sourceFilename: res.items[0]?.sourceFilename, + groupKey: res.items[0]?.groupKey, + baseId: '', + displayId: res.items[0]?.displayId, + itemCount: res.items.length, + items: res.items, + }] + : []) queuePayloadText.value = '' await loadDashboard() await loadHistory() - ElMessage.success(`解析完成,保留 ${res.acceptedRows} 条`) + ElMessage.success(`解析完成,共 ${res.groupCount || 0} 组 / ${res.acceptedRows} 条`) } catch (e) { ElMessage.error(e instanceof Error ? e.message : '解析失败') } finally { @@ -272,7 +328,29 @@ async function pushToPythonQueue() { data: { taskId, prompt: parseResult.value?.aiPrompt || effectiveAiPrompt(), + groups: parsedGroups.value.map((group) => ({ + sourceFileKey: group.sourceFileKey || '', + sourceFilename: group.sourceFilename || '', + groupKey: group.groupKey || '', + baseId: group.baseId || '', + displayId: group.displayId || '', + items: (group.items || []).map((row) => ({ + sourceFileKey: row.sourceFileKey || '', + sourceFilename: row.sourceFilename || '', + rowToken: row.rowToken || '', + groupKey: row.groupKey || '', + id: row.displayId, + asin: row.asin, + country: row.country, + url: row.url || '', + title: row.title || '', + })), + })), rows: parsedRows.value.map((row) => ({ + sourceFileKey: row.sourceFileKey || '', + sourceFilename: row.sourceFilename || '', + rowToken: row.rowToken || '', + groupKey: row.groupKey || '', id: row.displayId, asin: row.asin, country: row.country, @@ -381,11 +459,49 @@ async function loadHistory() { function statusText(item: AppearancePatentHistoryItem) { const status = item.taskStatus || '' if (status === 'RUNNING') return '执行中' + if (isResultPreparing(item)) return '结果生成中' + if (isResultBuildFailed(item)) return '结果生成失败' if (status === 'SUCCESS' || item.success) return '已完成' if (status === 'FAILED') return '失败' return '等待中' } +function statusClass(item: AppearancePatentHistoryItem) { + const status = item.taskStatus || '' + if (status === 'RUNNING' || isResultPreparing(item)) return 'running' + if (isResultBuildFailed(item) || status === 'FAILED') return 'failed' + if (status === 'SUCCESS' || item.success) return 'success' + return 'running' +} + +function isResultPreparing(item: AppearancePatentHistoryItem) { + const status = item.taskStatus || '' + const fileStatus = (item.fileStatus || '').toUpperCase() + if (!(status === 'SUCCESS' || item.success)) return false + if (canDownload(item)) return false + if (fileStatus === 'FAILED' || fileStatus === 'SUCCESS') return false + return true +} + +function isResultBuildFailed(item: AppearancePatentHistoryItem) { + return (item.fileStatus || '').toUpperCase() === 'FAILED' +} + +function pendingResultHint(item: AppearancePatentHistoryItem) { + if (isResultBuildFailed(item)) { + return item.fileError || '结果文件生成失败,请稍后重试或检查后端日志' + } + if (!isResultPreparing(item)) return '' + const fileStatus = (item.fileStatus || '').toUpperCase() + if (fileStatus === 'RUNNING') { + return '任务已完成,正在请求 Coze 或组装结果文件,下载按钮稍后出现' + } + if (fileStatus === 'PENDING') { + return '任务已完成,结果文件已入队,正在等待后端生成' + } + return '任务已完成,正在生成结果文件,下载按钮稍后出现' +} + function canDownload(item: AppearancePatentHistoryItem) { return Boolean(item.resultId && (item.fileReady || item.downloadUrl)) } @@ -445,7 +561,7 @@ onUnmounted(() => stopPolling()) .link { color: #6ea8fe; text-decoration: none; } .link:hover { color: #9fc5ff; } .btns, .run-row { display: flex; gap: 10px; flex-wrap: wrap; } -.opt-btn, .btn-run, .btn-delete { border: none; cursor: pointer; border-radius: 7px; } +.opt-btn, .btn-run, .btn-delete, .download { border: none; cursor: pointer; border-radius: 7px; } .opt-btn { padding: 8px 14px; color: #ccc; background: #2a2a2a; border: 1px solid #3a3a3a; } .btn-run { padding: 10px 18px; color: #fff; background: #3498db; font-weight: 600; } .btn-queue { background: #27ae60; } @@ -478,6 +594,8 @@ onUnmounted(() => stopPolling()) .status.success { background: rgba(46, 204, 113, .18); color: #2ecc71; } .status.failed { background: rgba(231, 76, 60, .18); color: #ff6b6b; } .status.running { background: rgba(52, 152, 219, .18); color: #3498db; } +.result-hint { margin-top: 6px; color: #e0b96d; } +.download { padding: 6px 10px; color: #d6ecff; background: rgba(52, 152, 219, .18); } .btn-delete { padding: 6px 10px; color: #ff8f8f; background: rgba(231, 76, 60, .12); } @media (max-width: 1100px) { .main-content { flex-direction: column; height: auto; } diff --git a/frontend-vue/src/shared/api/java-modules.ts b/frontend-vue/src/shared/api/java-modules.ts index 9546074..443fbe1 100644 --- a/frontend-vue/src/shared/api/java-modules.ts +++ b/frontend-vue/src/shared/api/java-modules.ts @@ -1390,22 +1390,39 @@ export function deleteQueryAsinHistory(resultId: number) { export interface AppearancePatentParsedRow { rowIndex: number; + sourceFileKey?: string; + sourceFilename?: string; sourceId: string; displayId: string; + rowToken?: string; + groupKey?: string; asin: string; country: string; url?: string; title?: string; } +export interface AppearancePatentParsedGroup { + sourceFileKey?: string; + sourceFilename?: string; + groupKey?: string; + baseId?: string; + displayId?: string; + itemCount?: number; + items: AppearancePatentParsedRow[]; +} + export interface AppearancePatentParseVo { taskId: number; sourceFilename?: string; + sourceFileCount?: number; totalRows: number; acceptedRows: number; droppedRows: number; + groupCount?: number; aiPrompt?: string; items: AppearancePatentParsedRow[]; + groups?: AppearancePatentParsedGroup[]; } export interface AppearancePatentDashboardVo {