From 8fb3cdb4b7f30faf47384767fb56338a6d914be4 Mon Sep 17 00:00:00 2001 From: qiube <18969599531@163.com> Date: Thu, 25 Dec 2025 16:25:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(product):=20=E6=B7=BB=E5=8A=A0=E5=95=86?= =?UTF-8?q?=E5=93=81=E4=B8=8B=E6=9E=B6=E5=92=8C=E5=A4=9A=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现商品下架功能,下架后商品所有SKU库存改为0,链接失效无法访问 - 添加商品多条件查询接口,支持名称、链接码、商品状态、发售地区查询 - 新增ProductQueryRequestDTO用于商品查询条件传递 - 优化商品详情访问逻辑,下架商品无法访问 - 优化库存验证逻辑,库存为0时不能创建订单 - 优化订单创建流程,添加商品状态验证,下架商品不能创建订单 --- logs/mt-pay-error.2025-12-25.log | 736 ++++++++ logs/mt-pay.2025-12-25.log | 1603 +++++++++++++++++ .../mtpay/controller/ProductController.java | 25 +- .../dto/request/ProductQueryRequestDTO.java | 31 + .../mtkj/mtpay/service/ProductService.java | 15 + .../impl/CustomerOrderServiceImpl.java | 16 +- .../service/impl/ProductServiceImpl.java | 240 +++ 7 files changed, 2663 insertions(+), 3 deletions(-) create mode 100644 mt-pay/src/main/java/com/mtkj/mtpay/dto/request/ProductQueryRequestDTO.java diff --git a/logs/mt-pay-error.2025-12-25.log b/logs/mt-pay-error.2025-12-25.log index 797b855..e79e257 100644 --- a/logs/mt-pay-error.2025-12-25.log +++ b/logs/mt-pay-error.2025-12-25.log @@ -4618,6 +4618,742 @@ Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongPrope ║ ║ ╚══════════════════════════════════════════════════════════╝ +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 15:58:59.342 [main] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException: null + at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:92) + at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:179) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:532) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:98) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:51) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:149) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:137) + at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) + at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:75) + at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:54) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) + at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:54) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) +2025-12-25 16:15:23.581 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:23.584 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:59.072 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:59.073 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:16:47.340 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:16:47.341 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:17:30.362 [main] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException: null + at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:92) + at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:179) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:532) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:98) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:51) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:149) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:137) + at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) + at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:75) + at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:54) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) + at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:54) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) +2025-12-25 16:22:35.603 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:35.606 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:41.794 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:41.796 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:24:14.762 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:24:14.762 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) diff --git a/logs/mt-pay.2025-12-25.log b/logs/mt-pay.2025-12-25.log index 22317f2..64cfb55 100644 --- a/logs/mt-pay.2025-12-25.log +++ b/logs/mt-pay.2025-12-25.log @@ -11165,3 +11165,1606 @@ Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongPrope - 图片上传接口: http://localhost:8082//api/product/upload/image - 商品管理接口: http://localhost:8082//api/product +2025-12-25 15:54:46.401 [Thread-10] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:46.535 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 15:54:46.600 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29216 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 15:54:46.600 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 15:54:47.149 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:47.150 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 15:54:47.150 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 15:54:47.173 [restartedMain] INFO o.a.c.c.ContainerBase.[Tomcat-1].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 15:54:47.192 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:54:47.192 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 15:54:47.193 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:54:47.205 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 15:54:47.206 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 15:54:47.210 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 15:54:47.210 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 15:54:47.211 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 15:54:47.763 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 15:54:47.768 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 15:54:47.838 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 15:54:47.888 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 15:54:47.888 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 15:54:48.033 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:48.042 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 1.497 seconds (process running for 851.38) +2025-12-25 15:54:48.045 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 15:54:48.045 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 15:54:49.753 [Thread-33] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:50.977 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 15:54:51.047 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29216 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 15:54:51.047 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 15:54:51.803 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:51.803 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 15:54:51.804 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 15:54:51.998 [restartedMain] INFO o.a.c.c.ContainerBase.[Tomcat-1].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 15:54:52.098 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:54:52.098 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 15:54:52.099 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:54:52.108 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 15:54:52.109 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 15:54:52.114 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 15:54:52.114 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 15:54:52.114 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 15:54:55.249 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 15:54:55.258 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 15:54:55.266 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 15:54:55.494 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 15:54:55.496 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 15:54:55.822 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 15:54:55.852 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 4.868 seconds (process running for 859.19) +2025-12-25 15:54:55.857 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 15:54:55.857 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 15:58:56.014 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final +2025-12-25 15:58:56.055 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 15:58:56.056 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 15:58:57.718 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 15:58:57.721 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 15:58:57.721 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 15:58:57.792 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 15:58:57.866 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:58:57.866 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 15:58:57.866 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 15:58:57.866 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 15:58:57.867 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 15:58:57.867 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 15:58:57.867 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 15:58:57.867 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 15:58:57.867 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 15:58:57.887 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 15:58:57.890 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 15:58:57.894 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 15:58:57.894 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 15:58:57.922 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 15:58:58.780 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 15:58:58.927 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 15:58:58.933 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 15:58:58.990 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 15:58:58.993 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 15:58:59.318 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 15:58:59.338 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 3.956 seconds (process running for 5.17) +2025-12-25 15:58:59.340 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 15:58:59.340 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 15:58:59.342 [main] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException: null + at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:92) + at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:179) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:532) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:98) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:51) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:149) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:137) + at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) + at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:75) + at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:54) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) + at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:54) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) +2025-12-25 16:05:59.140 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-25 16:05:59.169 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:05:59.170 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:06:01.091 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:06:01.105 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:06:01.158 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-25 16:06:01.160 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-25 16:06:01.162 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?)) +2025-12-25 16:06:01.162 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long) +2025-12-25 16:06:01.256 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:06:01.256 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 48, 涉及商品数: 1 +2025-12-25 16:06:01.258 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:06:01.259 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String), 2025-12-25T16:06:01.257492(LocalDateTime) +2025-12-25 16:06:01.297 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-25 16:06:01.300 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 1, 涉及商品数: 1 +2025-12-25 16:06:01.323 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1, 耗时: 2153ms +2025-12-25 16:13:05.790 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:13:05.790 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:13:05.843 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:13:05.844 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:13:05.881 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-25 16:13:05.881 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-25 16:13:05.881 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?)) +2025-12-25 16:13:05.882 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long) +2025-12-25 16:13:05.925 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:13:05.925 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 48, 涉及商品数: 1 +2025-12-25 16:13:05.928 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:13:05.928 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String), 2025-12-25T16:13:05.925603600(LocalDateTime) +2025-12-25 16:13:05.966 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-25 16:13:05.966 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 1, 涉及商品数: 1 +2025-12-25 16:13:05.967 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1, 耗时: 177ms +2025-12-25 16:13:13.574 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:13:13.574 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:13:13.576 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:13:13.576 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:13:13.596 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.controller.ProductController - 获取商品详情,商品ID:8 +2025-12-25 16:13:13.596 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 8 +2025-12-25 16:13:13.614 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-25 16:13:13.614 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-25 16:13:13.615 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?)) +2025-12-25 16:13:13.615 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long) +2025-12-25 16:13:13.638 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:13:13.639 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 8(Long) +2025-12-25 16:13:13.660 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:13:13.660 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 48, 涉及商品数: 1 +2025-12-25 16:13:13.662 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:13:13.662 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String), 2025-12-25T16:13:13.660518800(LocalDateTime) +2025-12-25 16:13:13.678 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:13:13.681 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ? AND status = ?) +2025-12-25 16:13:13.682 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String) +2025-12-25 16:13:13.700 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-25 16:13:13.701 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 1, 涉及商品数: 1 +2025-12-25 16:13:13.704 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1, 耗时: 130ms +2025-12-25 16:13:13.779 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:13:13.780 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 48, 商品ID: 8 +2025-12-25 16:13:13.782 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 8, 商品名称: 迷你保温杯男女精致学生简约便携可爱少女心ins儿童水杯子304, SKU数量: 48, 主图数量: 5 +2025-12-25 16:15:23.178 [Thread-8] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 16:15:23.265 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:15:23.330 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:15:23.331 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:15:23.548 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:15:23.581 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:23.584 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:29.208 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:15:29.247 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:15:29.247 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:15:29.622 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:15:29.622 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:15:29.622 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:15:29.675 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:15:29.685 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:15:29.687 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:15:29.693 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:15:29.693 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:15:29.696 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:15:29.697 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:15:29.697 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:15:30.113 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:15:30.115 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:15:30.121 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:15:30.156 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:15:30.157 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:15:30.262 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:15:30.270 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 1.058 seconds (process running for 996.103) +2025-12-25 16:15:30.273 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:15:30.273 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:15:58.688 [Thread-10] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 16:15:58.792 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:15:58.846 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:15:58.847 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:15:59.062 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:15:59.072 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:15:59.073 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:16:04.903 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:04.940 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:16:04.940 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:16:05.302 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:05.302 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:16:05.302 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:16:05.320 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:16:05.332 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:05.332 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:16:05.333 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:05.339 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:16:05.339 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:16:05.342 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:16:05.342 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:16:05.342 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:16:05.718 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:16:05.721 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:16:05.726 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:16:05.755 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:16:05.756 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:16:05.831 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:05.837 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 0.93 seconds (process running for 1031.67) +2025-12-25 16:16:05.839 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:05.839 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:16:07.273 [Thread-22] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:07.345 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:07.383 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:16:07.383 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:16:07.726 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:07.726 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:16:07.726 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:16:07.782 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:16:07.793 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:16:07.795 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:07.800 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:16:07.800 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:16:07.802 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:16:07.802 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:16:07.802 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:16:08.198 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:16:08.240 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:16:08.245 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:16:08.277 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:16:08.277 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:16:08.371 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:08.380 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 1.03 seconds (process running for 1034.213) +2025-12-25 16:16:08.382 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:08.382 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:16:47.009 [Thread-34] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:47.077 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:47.130 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:16:47.130 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:16:47.333 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:16:47.340 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:16:47.341 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:16:53.172 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:53.204 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 29876 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:16:53.204 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:16:53.520 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:53.520 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:16:53.520 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:16:53.539 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:16:53.549 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:53.549 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:16:53.549 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:16:53.550 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:16:53.555 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:16:53.555 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:16:53.557 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:16:53.557 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:16:53.557 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:16:53.902 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:16:53.906 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:16:53.909 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:16:53.937 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:16:53.937 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:16:54.012 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:16:54.020 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 0.844 seconds (process running for 1079.852) +2025-12-25 16:16:54.021 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:16:54.021 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:17:06.584 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-25 16:17:06.590 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:17:06.591 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品详情,商品ID:8 +2025-12-25 16:17:06.591 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 8 +2025-12-25 16:17:06.591 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:17:08.373 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:17:08.373 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:17:08.373 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:17:08.373 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 8(Long) +2025-12-25 16:17:08.412 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:17:08.414 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ? AND status = ?) +2025-12-25 16:17:08.414 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-25 16:17:08.415 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String) +2025-12-25 16:17:08.415 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-25 16:17:08.416 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?)) +2025-12-25 16:17:08.416 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long) +2025-12-25 16:17:08.499 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:17:08.499 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 48, 商品ID: 8 +2025-12-25 16:17:08.500 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:17:08.501 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 48, 涉及商品数: 1 +2025-12-25 16:17:08.505 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:17:08.505 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String), 2025-12-25T16:17:08.502894500(LocalDateTime) +2025-12-25 16:17:08.510 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 8, 商品名称: 迷你保温杯男女精致学生简约便携可爱少女心ins儿童水杯子304, SKU数量: 48, 主图数量: 5 +2025-12-25 16:17:08.550 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-25 16:17:08.552 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 1, 涉及商品数: 1 +2025-12-25 16:17:08.554 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1, 耗时: 1963ms +2025-12-25 16:17:27.339 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final +2025-12-25 16:17:27.405 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 27800 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:17:27.406 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:17:28.905 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:17:28.906 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:17:28.906 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:17:28.958 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:17:29.025 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:17:29.041 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:17:29.045 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:17:29.049 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:17:29.049 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:17:29.068 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:17:29.732 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:17:29.864 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:17:29.873 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:17:29.963 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:17:29.966 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:17:30.337 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:17:30.358 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 3.904 seconds (process running for 4.944) +2025-12-25 16:17:30.360 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:17:30.361 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:17:30.362 [main] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +org.springframework.boot.devtools.restart.SilentExitExceptionHandler$SilentExitException: null + at org.springframework.boot.devtools.restart.SilentExitExceptionHandler.exitCurrentThread(SilentExitExceptionHandler.java:92) + at org.springframework.boot.devtools.restart.Restarter.immediateRestart(Restarter.java:179) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:163) + at org.springframework.boot.devtools.restart.Restarter.initialize(Restarter.java:532) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationStartingEvent(RestartApplicationListener.java:98) + at org.springframework.boot.devtools.restart.RestartApplicationListener.onApplicationEvent(RestartApplicationListener.java:51) + at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178) + at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:149) + at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:137) + at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) + at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:75) + at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:54) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) + at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:54) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) +2025-12-25 16:17:46.650 [http-nio-8082-exec-2] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-25 16:17:47.176 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg +2025-12-25 16:17:47.178 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-25_11-20-47.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg +2025-12-25 16:17:47.180 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg +2025-12-25 16:17:47.181 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-25_11-20-43.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg +2025-12-25 16:18:07.903 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/25/77c9a89f-e370-459b-b594-5870db52fe60.jpg +2025-12-25 16:18:07.905 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-25_11-20-30.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/77c9a89f-e370-459b-b594-5870db52fe60.jpg +2025-12-25 16:18:20.952 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.controller.ProductController - 创建商品请求:CreateProductRequestDTO(name=222222222222222222222222222222222222222222222, price=22, mainImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg, mainImages=[https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg], status=ACTIVE, shopId=1000001, skus=[CreateProductRequestDTO.CreateProductSkuDTO(sku=21334255467547, price=22, currency=CNY, stock=999999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/77c9a89f-e370-459b-b594-5870db52fe60.jpg, weight=22, size={"length":2,"width":2,"height":2,"unit":"cm"}, specification=null, status=ACTIVE)]) +2025-12-25 16:18:22.966 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 开始创建商品,商品名称: 222222222222222222222222222222222222222222222, 店铺ID: 1000001, SKU数量: 1 +2025-12-25 16:18:22.968 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品主图(多图): ["https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg"] +2025-12-25 16:18:23.022 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-25 16:18:23.032 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.insert - ==> Preparing: INSERT INTO mt_product ( name, price, main_image, status, shop_id, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ? ) +2025-12-25 16:18:23.049 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.insert - ==> Parameters: 222222222222222222222222222222222222222222222(String), 22(BigDecimal), ["https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg"](String), ACTIVE(String), 1000001(Long), 2025-12-25T16:18:23.022234500(LocalDateTime), 2025-12-25T16:18:23.024293100(LocalDateTime) +2025-12-25 16:18:23.129 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.insert - <== Updates: 1 +2025-12-25 16:18:23.134 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品基础信息插入成功,商品ID: 9 +2025-12-25 16:18:23.135 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 开始创建SKU,数量: 1 +2025-12-25 16:18:23.419 [pool-2-thread-1] DEBUG com.mtkj.mtpay.util.BaiduTranslatorUtils - 翻译成功,原文: 21334255467547, 译文: 21334255467547, 目标语言: zh +2025-12-25 16:18:23.423 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-25 16:18:23.423 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.insertBatch - ==> Preparing: INSERT INTO mt_product_sku (product_id, sku, price, currency, stock, sales_attrs, sku_image, weight, size, specification, status, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW()) +2025-12-25 16:18:23.424 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.insertBatch - ==> Parameters: 9(Long), 21334255467547(String), 22(BigDecimal), CNY(String), 999999(Integer), null, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/77c9a89f-e370-459b-b594-5870db52fe60.jpg(String), 22(BigDecimal), {"length":2,"width":2,"height":2,"unit":"cm"}(String), null, ACTIVE(String) +2025-12-25 16:18:23.501 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.insertBatch - <== Updates: 1 +2025-12-25 16:18:23.501 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU批量创建成功,商品ID: 9, SKU数量: 1, 耗时: 366ms +2025-12-25 16:18:23.501 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 9, 有效期: 90天 +2025-12-25 16:18:23.533 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id = ? AND status = ? AND expire_time > ?) ORDER BY create_time DESC LIMIT 1 +2025-12-25 16:18:23.533 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), ACTIVE(String), 2025-12-25T16:18:23.511840100(LocalDateTime) +2025-12-25 16:18:23.593 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 0 +2025-12-25 16:18:23.596 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-25 16:18:23.597 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductLinkMapper.insert - ==> Preparing: INSERT INTO mt_product_link ( product_id, link_code, full_url, expire_days, expire_time, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-25 16:18:23.597 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductLinkMapper.insert - ==> Parameters: 9(Long), bb3b1c8b78614f9c8201e5c314c38a8c(String), http://localhost:3000/product/bb3b1c8b78614f9c8201e5c314c38a8c(String), 90(Integer), 2026-03-25T16:18:23.595483200(LocalDateTime), ACTIVE(String), 2025-12-25T16:18:23.597512800(LocalDateTime), 2025-12-25T16:18:23.597512800(LocalDateTime) +2025-12-25 16:18:23.672 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductLinkMapper.insert - <== Updates: 1 +2025-12-25 16:18:23.672 [http-nio-8082-exec-4] INFO c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建商品链接成功,商品ID: 9, 链接码: bb3b1c8b78614f9c8201e5c314c38a8c, 过期时间: 2026-03-25T16:18:23.595483200 +2025-12-25 16:18:23.672 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品链接创建成功,商品ID: 9, 链接码: bb3b1c8b78614f9c8201e5c314c38a8c, URL: http://localhost:3000/product/bb3b1c8b78614f9c8201e5c314c38a8c +2025-12-25 16:18:23.672 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品创建成功,商品ID: 9, 商品名称: 222222222222222222222222222222222222222222222, SKU数量: 1, 总耗时: 706ms +2025-12-25 16:18:23.672 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 9 +2025-12-25 16:18:23.673 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:18:23.673 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 9(Long) +2025-12-25 16:18:23.715 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:18:23.718 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ? AND status = ?) +2025-12-25 16:18:23.719 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), ACTIVE(String) +2025-12-25 16:18:23.757 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 1 +2025-12-25 16:18:23.757 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 1, 商品ID: 9 +2025-12-25 16:18:23.760 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 9, 商品名称: 222222222222222222222222222222222222222222222, SKU数量: 1, 主图数量: 2 +2025-12-25 16:18:24.074 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:18:24.075 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:18:24.083 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:18:24.084 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:18:24.123 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:18:24.123 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:18:24.125 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:18:24.125 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:18:24.212 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:18:24.212 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:18:24.215 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:18:24.215 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:18:24.213922800(LocalDateTime) +2025-12-25 16:18:24.254 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:18:24.255 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:18:24.260 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 185ms +2025-12-25 16:18:27.333 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.controller.ProductController - 下架商品请求,商品ID:9 +2025-12-25 16:18:27.371 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 下架商品,商品ID: 9 +2025-12-25 16:18:27.372 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:18:27.372 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 9(Long) +2025-12-25 16:18:27.411 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:18:27.414 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始更新填充... +2025-12-25 16:18:27.414 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.updateById - ==> Preparing: UPDATE mt_product SET name=?, price=?, main_image=?, status=?, shop_id=?, create_time=?, update_time=? WHERE id=? +2025-12-25 16:18:27.415 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.updateById - ==> Parameters: 222222222222222222222222222222222222222222222(String), 22.00(BigDecimal), ["https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/443833fd-34b5-49b0-a6ca-fef0ec2b0b06.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/f2c92ce9-ab4d-4074-a200-3d22fc8f4d68.jpg"](String), INACTIVE(String), 1000001(Long), 2025-12-25T16:18:23(LocalDateTime), 2025-12-25T16:18:23(LocalDateTime), 9(Long) +2025-12-25 16:18:27.491 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.updateById - <== Updates: 1 +2025-12-25 16:18:27.491 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品状态已更新为下架,商品ID: 9 +2025-12-25 16:18:27.492 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ?) +2025-12-25 16:18:27.492 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long) +2025-12-25 16:18:27.531 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 1 +2025-12-25 16:18:27.534 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始更新填充... +2025-12-25 16:18:27.534 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.updateById - ==> Preparing: UPDATE mt_product_sku SET product_id=?, sku=?, price=?, currency=?, stock=?, sku_image=?, weight=?, size=?, status=?, create_time=?, update_time=? WHERE id=? +2025-12-25 16:18:27.535 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.updateById - ==> Parameters: 9(Long), 21334255467547(String), 22.00(BigDecimal), CNY(String), 0(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/25/77c9a89f-e370-459b-b594-5870db52fe60.jpg(String), 22.00(BigDecimal), {"length":2,"width":2,"height":2,"unit":"cm"}(String), ACTIVE(String), 2025-12-25T16:18:18(LocalDateTime), 2025-12-25T16:18:18(LocalDateTime), 239(Long) +2025-12-25 16:18:27.610 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.updateById - <== Updates: 1 +2025-12-25 16:18:27.610 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品所有SKU库存已设置为0,商品ID: 9, SKU数量: 1 +2025-12-25 16:18:27.611 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品下架成功,商品ID: 9, SKU数量: 1 +2025-12-25 16:18:27.700 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:18:27.700 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:18:27.702 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:18:27.702 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:18:27.748 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:18:27.748 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:18:27.749 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:18:27.749 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:18:27.792 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:18:27.792 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:18:27.794 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:18:27.795 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:18:27.793689600(LocalDateTime) +2025-12-25 16:18:27.833 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:18:27.833 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:18:27.835 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 135ms +2025-12-25 16:21:45.042 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.controller.ProductController - 获取商品详情,商品ID:8 +2025-12-25 16:21:45.043 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 8 +2025-12-25 16:21:45.045 [http-nio-8082-exec-9] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:21:45.045 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:21:45.093 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:21:45.094 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:21:45.095 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:21:45.096 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 8(Long) +2025-12-25 16:21:45.134 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:21:45.134 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:21:45.134 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:21:45.135 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:21:45.135 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ? AND status = ?) +2025-12-25 16:21:45.135 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:21:45.135 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String) +2025-12-25 16:21:45.178 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:21:45.178 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:21:45.180 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:21:45.180 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:21:45.179610600(LocalDateTime) +2025-12-25 16:21:45.219 [http-nio-8082-exec-9] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:21:45.219 [http-nio-8082-exec-9] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:21:45.221 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:21:45.222 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 48, 商品ID: 8 +2025-12-25 16:21:45.223 [http-nio-8082-exec-9] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 178ms +2025-12-25 16:21:45.224 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 8, 商品名称: 迷你保温杯男女精致学生简约便携可爱少女心ins儿童水杯子304, SKU数量: 48, 主图数量: 5 +2025-12-25 16:22:03.291 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:22:03.292 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:22:03.292 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:22:03.292 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:22:03.339 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:22:03.339 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:22:03.340 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:22:03.341 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:22:03.403 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:22:03.403 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:22:03.409 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:22:03.410 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:22:03.406303400(LocalDateTime) +2025-12-25 16:22:03.455 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:22:03.456 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:22:03.458 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 166ms +2025-12-25 16:22:13.170 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:22:13.170 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:22:13.172 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:22:13.173 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:22:13.212 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:22:13.213 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:22:13.213 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:22:13.213 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:22:13.257 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:22:13.257 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:22:13.258 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:22:13.259 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:22:13.257403900(LocalDateTime) +2025-12-25 16:22:13.298 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:22:13.298 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:22:13.300 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 130ms +2025-12-25 16:22:34.482 [Thread-8] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-25 16:22:34.943 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:22:35.067 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 27800 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:22:35.078 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:22:35.541 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:22:35.603 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:35.606 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:41.598 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:22:41.644 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 27800 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:22:41.644 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:22:41.790 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:22:41.794 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:22:41.796 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:24:14.519 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:24:14.571 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 27800 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:24:14.571 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:24:14.754 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] +2025-12-25 16:24:14.762 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:24:14.762 [restartedMain] ERROR com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +java.lang.IllegalArgumentException: Could not find class [com.mtkj.mtpay.config.PingPongProperties] + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:355) + at org.springframework.core.annotation.TypeMappedAnnotation.adapt(TypeMappedAnnotation.java:465) + at org.springframework.core.annotation.TypeMappedAnnotation.getValue(TypeMappedAnnotation.java:390) + at org.springframework.core.annotation.TypeMappedAnnotation.getAttributeValue(TypeMappedAnnotation.java:371) + at org.springframework.core.annotation.AbstractMergedAnnotation.getRequiredAttributeValue(AbstractMergedAnnotation.java:215) + at org.springframework.core.annotation.AbstractMergedAnnotation.getClassArray(AbstractMergedAnnotation.java:153) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.lambda$getTypes$0(EnableConfigurationPropertiesRegistrar.java:55) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) + at org.springframework.core.annotation.MergedAnnotationsCollection$AnnotationsSpliterator.tryAdvance(MergedAnnotationsCollection.java:254) + at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.getTypes(EnableConfigurationPropertiesRegistrar.java:57) + at org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.registerBeanDefinitions(EnableConfigurationPropertiesRegistrar.java:49) + at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:376) + at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:375) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) + at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:428) + at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:289) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:349) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:118) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:775) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:597) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) + at com.mtkj.mtkjpay.MtkjpayApplication.main(MtkjpayApplication.java:42) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: java.lang.ClassNotFoundException: com.mtkj.mtpay.config.PingPongProperties + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:467) + at org.springframework.util.ClassUtils.forName(ClassUtils.java:304) + at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:345) + ... 38 common frames omitted +2025-12-25 16:24:19.632 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:24:19.664 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 27800 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-25 16:24:19.664 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-25 16:24:20.023 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-25 16:24:20.024 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-25 16:24:20.024 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-25 16:24:20.055 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - PayPal配置加载验证: +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client ID: ✅ 已配置 (AdGYUZpvLuHR30dybOAp...) +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Client Secret: ✅ 已配置 (ENblspyRmwsOU_PWFurl...) +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Mode: sandbox +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Enabled: true +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Base URL: https://api-m.sandbox.paypal.com +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - - Webhook URL: ✅ https://2646b437.r33.cpolar.top/api/paypal/webhook +2025-12-25 16:24:20.081 [restartedMain] INFO com.mtkj.mtpay.config.PayPalProperties - ═══════════════════════════════════════════════════════════ +2025-12-25 16:24:20.096 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-25 16:24:20.097 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-25 16:24:20.101 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-25 16:24:20.101 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 配置属性 - URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, Username: mtkj2025 +2025-12-25 16:24:20.102 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - Druid主数据源配置完成,URL: jdbc:mysql://rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com:3306/mtpay?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai +2025-12-25 16:24:20.947 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-25 16:24:20.950 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-25 16:24:20.955 [restartedMain] INFO com.mtkj.mtpay.config.AsyncConfig - PayPal Webhook异步处理线程池初始化完成 +2025-12-25 16:24:20.996 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-25 16:24:20.996 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-25 16:24:21.105 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-25 16:24:21.114 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 1.479 seconds (process running for 415.701) +2025-12-25 16:24:21.117 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-25 16:24:21.117 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +📌 提示: + - 前端代理地址: http://localhost:3000 + - 后端API地址: http://localhost:8082//api + - 图片上传接口: http://localhost:8082//api/product/upload/image + - 商品管理接口: http://localhost:8082//api/product + +2025-12-25 16:24:34.959 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-25 16:24:34.963 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品详情,商品ID:8 +2025-12-25 16:24:34.963 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 8 +2025-12-25 16:24:35.157 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-25 16:24:35.158 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-25 16:24:36.729 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE (status <> ?) ORDER BY create_time DESC +2025-12-25 16:24:36.729 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Preparing: SELECT id,name,price,main_image,status,shop_id,create_time,update_time FROM mt_product WHERE id=? +2025-12-25 16:24:36.730 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 8(Long) +2025-12-25 16:24:36.730 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-25 16:24:36.768 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 2 +2025-12-25 16:24:36.768 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 2 +2025-12-25 16:24:36.769 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-25 16:24:36.770 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id IN (?,?)) +2025-12-25 16:24:36.771 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 9(Long), 8(Long) +2025-12-25 16:24:36.771 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Preparing: SELECT id,product_id,sku,price,currency,stock,sales_attrs,sku_image,weight,size,specification,status,create_time,update_time FROM mt_product_sku WHERE (product_id = ? AND status = ?) +2025-12-25 16:24:36.771 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 8(Long), ACTIVE(String) +2025-12-25 16:24:36.856 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 48 +2025-12-25 16:24:36.856 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 48, 商品ID: 8 +2025-12-25 16:24:36.856 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 49 +2025-12-25 16:24:36.857 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到SKU数量: 49, 涉及商品数: 2 +2025-12-25 16:24:36.860 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Preparing: SELECT id,product_id,link_code,full_url,expire_days,expire_time,status,create_time,update_time FROM mt_product_link WHERE (product_id IN (?,?) AND status = ? AND expire_time > ?) ORDER BY create_time DESC +2025-12-25 16:24:36.861 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 9(Long), 8(Long), ACTIVE(String), 2025-12-25T16:24:36.858952800(LocalDateTime) +2025-12-25 16:24:36.865 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 8, 商品名称: 迷你保温杯男女精致学生简约便携可爱少女心ins儿童水杯子304, SKU数量: 48, 主图数量: 5 +2025-12-25 16:24:36.900 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 2 +2025-12-25 16:24:36.901 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 批量查询到商品链接数量: 2, 涉及商品数: 2 +2025-12-25 16:24:36.902 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 2, 耗时: 1745ms diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/controller/ProductController.java b/mt-pay/src/main/java/com/mtkj/mtpay/controller/ProductController.java index 93d040e..ab1db3c 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/controller/ProductController.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/controller/ProductController.java @@ -2,6 +2,7 @@ package com.mtkj.mtpay.controller; import com.mtkj.mtpay.common.Result; import com.mtkj.mtpay.dto.request.CreateProductRequestDTO; +import com.mtkj.mtpay.dto.request.ProductQueryRequestDTO; import com.mtkj.mtpay.dto.response.ProductResponseDTO; import com.mtkj.mtpay.service.ProductService; import jakarta.validation.Valid; @@ -68,7 +69,7 @@ public class ProductController { } /** - * 获取商品列表 + * 获取商品列表(无查询条件) */ @GetMapping("/list") public Result> listProducts() { @@ -77,6 +78,17 @@ public class ProductController { return Result.success(products); } + /** + * 查询商品列表(支持多条件查询) + * 支持:名称查询、链接查询、商品状态查询、发售地区查询 + */ + @PostMapping("/query") + public Result> queryProducts(@RequestBody ProductQueryRequestDTO query) { + log.info("查询商品列表,查询条件:{}", query); + List products = productService.queryProducts(query); + return Result.success(products); + } + /** * 获取商品详情页URL */ @@ -218,6 +230,17 @@ public class ProductController { } } + /** + * 下架商品 + * 下架后商品所有SKU库存改为0,链接失效无法再被访问 + */ + @PutMapping("/{id}/off-shelf") + public Result offShelfProduct(@PathVariable Long id) { + log.info("下架商品请求,商品ID:{}", id); + productService.offShelfProduct(id); + return Result.success("商品下架成功"); + } + /** * 判断是否为图片文件 */ diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/ProductQueryRequestDTO.java b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/ProductQueryRequestDTO.java new file mode 100644 index 0000000..d3290db --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/ProductQueryRequestDTO.java @@ -0,0 +1,31 @@ +package com.mtkj.mtpay.dto.request; + +import lombok.Data; + +/** + * 商品查询请求DTO + */ +@Data +public class ProductQueryRequestDTO { + + /** + * 商品名称(模糊查询) + */ + private String name; + + /** + * 商品链接码(精确查询) + */ + private String linkCode; + + /** + * 商品状态(ACTIVE-上架,INACTIVE-下架) + */ + private String status; + + /** + * 发售地区(通过SKU的currency查询,如:MYR, PHP, THB, VND, SGD, CNY, USD等) + */ + private String salesRegion; +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/ProductService.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/ProductService.java index 695e442..c3138d1 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/ProductService.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/ProductService.java @@ -1,6 +1,7 @@ package com.mtkj.mtpay.service; import com.mtkj.mtpay.dto.request.CreateProductRequestDTO; +import com.mtkj.mtpay.dto.request.ProductQueryRequestDTO; import com.mtkj.mtpay.dto.response.ProductResponseDTO; import java.util.List; @@ -43,5 +44,19 @@ public interface ProductService { * @return 商品列表 */ List listProducts(); + + /** + * 下架商品 + * 下架后商品所有SKU库存改为0,链接失效无法再被访问 + * @param id 商品ID + */ + void offShelfProduct(Long id); + + /** + * 查询商品列表(支持多条件查询) + * @param query 查询条件 + * @return 商品列表 + */ + List queryProducts(ProductQueryRequestDTO query); } diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java index 6761fdc..57e210e 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java @@ -2,6 +2,7 @@ package com.mtkj.mtpay.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mtkj.mtpay.common.ResultCode; +import com.mtkj.mtpay.common.enums.ProductStatus; import com.mtkj.mtpay.dto.request.CreateCustomerOrderRequestDTO; import com.mtkj.mtpay.dto.response.CustomerOrderResponseDTO; import com.mtkj.mtpay.entity.CustomerOrder; @@ -52,6 +53,12 @@ public class CustomerOrderServiceImpl implements CustomerOrderService { throw new BusinessException(ResultCode.DATA_NOT_FOUND, "商品不存在"); } + // 验证商品状态:下架商品不能创建订单 + if (ProductStatus.INACTIVE.getCode().equals(product.getStatus())) { + log.warn("商品已下架,无法创建订单,商品ID: {}", request.getProductId()); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "商品已下架,无法创建订单"); + } + // 验证SKU是否存在 MtProductSku sku = productSkuMapper.selectById(request.getSkuId()); if (sku == null || !sku.getProductId().equals(request.getProductId())) { @@ -60,8 +67,13 @@ public class CustomerOrderServiceImpl implements CustomerOrderService { throw new BusinessException(ResultCode.DATA_NOT_FOUND, "SKU不存在"); } - // 验证库存 - if (sku.getStock() == null || sku.getStock() < request.getQuantity()) { + // 验证库存:库存为0或不足时不能创建订单 + if (sku.getStock() == null || sku.getStock() <= 0) { + log.warn("库存为0,无法创建订单,SKU ID: {}, 库存: {}", + request.getSkuId(), sku.getStock()); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "商品库存为0,无法创建订单"); + } + if (sku.getStock() < request.getQuantity()) { log.warn("库存不足,SKU ID: {}, 库存: {}, 需要: {}", request.getSkuId(), sku.getStock(), request.getQuantity()); throw new BusinessException(ResultCode.BUSINESS_ERROR, "库存不足"); diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/ProductServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/ProductServiceImpl.java index 67b2645..a2ae1d9 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/ProductServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/ProductServiceImpl.java @@ -7,6 +7,7 @@ import com.mtkj.mtpay.common.ResultCode; import com.mtkj.mtpay.common.enums.ProductStatus; import com.mtkj.mtpay.common.enums.SkuStatus; import com.mtkj.mtpay.dto.request.CreateProductRequestDTO; +import com.mtkj.mtpay.dto.request.ProductQueryRequestDTO; import com.mtkj.mtpay.dto.response.ProductResponseDTO; import com.mtkj.mtpay.entity.MtProduct; import com.mtkj.mtpay.entity.MtProductSku; @@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -252,6 +254,12 @@ public class ProductServiceImpl implements ProductService { throw new BusinessException(ResultCode.DATA_NOT_FOUND, "商品不存在"); } + // 检查商品状态:下架商品不能访问 + if (ProductStatus.INACTIVE.getCode().equals(product.getStatus())) { + log.warn("商品已下架,无法访问,商品ID: {}", id); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "商品已下架,无法访问"); + } + // 查询SKU列表 LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); skuWrapper.eq(MtProductSku::getProductId, id); @@ -317,9 +325,62 @@ public class ProductServiceImpl implements ProductService { } log.debug("根据链接码获取商品ID成功,链接码: {}, 商品ID: {}", linkCode, productId); + + // 检查商品状态:下架商品不能通过链接访问 + MtProduct product = productMapper.selectById(productId); + if (product != null && ProductStatus.INACTIVE.getCode().equals(product.getStatus())) { + log.warn("商品已下架,链接失效,链接码: {}, 商品ID: {}", linkCode, productId); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "商品已下架,链接失效"); + } + return productId; } + @Override + @Transactional(rollbackFor = Exception.class) + public void offShelfProduct(Long id) { + log.info("下架商品,商品ID: {}", id); + + // 检查商品是否存在 + MtProduct product = productMapper.selectById(id); + if (product == null) { + log.warn("商品不存在,无法下架,商品ID: {}", id); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "商品不存在"); + } + + // 检查商品是否已经下架 + if (ProductStatus.INACTIVE.getCode().equals(product.getStatus())) { + log.warn("商品已经下架,商品ID: {}", id); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "商品已经下架"); + } + + // 更新商品状态为下架 + product.setStatus(ProductStatus.INACTIVE.getCode()); + int updateCount = productMapper.updateById(product); + if (updateCount <= 0) { + log.error("更新商品状态失败,商品ID: {}", id); + throw new BusinessException(ResultCode.SYSTEM_ERROR, "下架商品失败"); + } + log.info("商品状态已更新为下架,商品ID: {}", id); + + // 将该商品所有SKU的库存改为0 + LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); + skuWrapper.eq(MtProductSku::getProductId, id); + List skus = productSkuMapper.selectList(skuWrapper); + + if (!skus.isEmpty()) { + for (MtProductSku sku : skus) { + sku.setStock(0); + productSkuMapper.updateById(sku); + } + log.info("商品所有SKU库存已设置为0,商品ID: {}, SKU数量: {}", id, skus.size()); + } else { + log.info("商品没有SKU,商品ID: {}", id); + } + + log.info("商品下架成功,商品ID: {}, SKU数量: {}", id, skus.size()); + } + @Override public List listProducts() { long startTime = System.currentTimeMillis(); @@ -596,5 +657,184 @@ public class ProductServiceImpl implements ProductService { } } + @Override + public List queryProducts(ProductQueryRequestDTO query) { + long startTime = System.currentTimeMillis(); + log.info("查询商品列表,查询条件: {}", query); + + // 1. 构建商品查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ne(MtProduct::getStatus, "DELETED"); // 排除已删除的商品 + + // 商品名称模糊查询 + if (query.getName() != null && !query.getName().trim().isEmpty()) { + queryWrapper.like(MtProduct::getName, query.getName().trim()); + log.debug("添加商品名称查询条件: {}", query.getName()); + } + + // 商品状态查询 + if (query.getStatus() != null && !query.getStatus().trim().isEmpty()) { + queryWrapper.eq(MtProduct::getStatus, query.getStatus().trim()); + log.debug("添加商品状态查询条件: {}", query.getStatus()); + } + + // 如果指定了链接码,先通过链接码获取商品ID + List productIdsByLink = null; + if (query.getLinkCode() != null && !query.getLinkCode().trim().isEmpty()) { + try { + Long productId = productLinkService.getProductIdByLinkCode(query.getLinkCode().trim()); + if (productId != null) { + productIdsByLink = new ArrayList<>(); + productIdsByLink.add(productId); + log.debug("通过链接码查询到商品ID: {}", productId); + } else { + log.debug("链接码无效,未找到商品: {}", query.getLinkCode()); + // 如果链接码无效,返回空列表 + return new ArrayList<>(); + } + } catch (Exception e) { + log.warn("通过链接码查询商品失败,链接码: {}", query.getLinkCode(), e); + // 链接码无效,返回空列表 + return new ArrayList<>(); + } + } + + // 如果指定了发售地区(通过SKU的currency查询),先查询符合条件的商品ID + List productIdsByRegion = null; + if (query.getSalesRegion() != null && !query.getSalesRegion().trim().isEmpty()) { + String currency = query.getSalesRegion().trim().toUpperCase(); + LambdaQueryWrapper skuQueryWrapper = new LambdaQueryWrapper<>(); + skuQueryWrapper.eq(MtProductSku::getCurrency, currency); + List skus = productSkuMapper.selectList(skuQueryWrapper); + if (!skus.isEmpty()) { + productIdsByRegion = skus.stream() + .map(MtProductSku::getProductId) + .distinct() + .collect(Collectors.toList()); + log.debug("通过发售地区查询到商品ID数量: {}, 货币: {}", productIdsByRegion.size(), currency); + } else { + log.debug("发售地区无匹配商品,货币: {}", currency); + // 如果发售地区无匹配,返回空列表 + return new ArrayList<>(); + } + } + + // 合并链接码和发售地区的商品ID条件 + if (productIdsByLink != null && productIdsByRegion != null) { + // 两个条件都指定,取交集 + productIdsByLink.retainAll(productIdsByRegion); + if (productIdsByLink.isEmpty()) { + log.debug("链接码和发售地区条件无交集,返回空列表"); + return new ArrayList<>(); + } + queryWrapper.in(MtProduct::getId, productIdsByLink); + } else if (productIdsByLink != null) { + // 只指定了链接码 + queryWrapper.in(MtProduct::getId, productIdsByLink); + } else if (productIdsByRegion != null) { + // 只指定了发售地区 + queryWrapper.in(MtProduct::getId, productIdsByRegion); + } + + queryWrapper.orderByDesc(MtProduct::getCreateTime); + List products = productMapper.selectList(queryWrapper); + + log.debug("查询到商品数量: {}", products.size()); + + if (products.isEmpty()) { + log.info("商品列表为空,耗时: {}ms", System.currentTimeMillis() - startTime); + return new ArrayList<>(); + } + + // 2. 批量查询所有商品的SKU - 1次查询(优化N+1问题) + List productIds = products.stream() + .map(MtProduct::getId) + .collect(Collectors.toList()); + + LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); + skuWrapper.in(MtProductSku::getProductId, productIds); + List allSkus = productSkuMapper.selectList(skuWrapper); + + // 3. 按productId分组SKU(在内存中分组,避免N+1查询) + Map> skuMap = allSkus.stream() + .collect(Collectors.groupingBy(MtProductSku::getProductId)); + + log.debug("批量查询到SKU数量: {}, 涉及商品数: {}", allSkus.size(), skuMap.size()); + + // 4. 批量查询所有商品的链接(优化N+1查询) + Map productUrlMap = new HashMap<>(); + try { + if (!productIds.isEmpty()) { + LambdaQueryWrapper linkWrapper = new LambdaQueryWrapper<>(); + linkWrapper.in(com.mtkj.mtpay.entity.MtProductLink::getProductId, productIds) + .eq(com.mtkj.mtpay.entity.MtProductLink::getStatus, "ACTIVE") + .gt(com.mtkj.mtpay.entity.MtProductLink::getExpireTime, java.time.LocalDateTime.now()) + .orderByDesc(com.mtkj.mtpay.entity.MtProductLink::getCreateTime); + + List allLinks = productLinkMapper.selectList(linkWrapper); + + // 按productId分组,每个商品取最新的有效链接(已按createTime降序排序) + Map> linkGroupMap = allLinks.stream() + .collect(Collectors.groupingBy( + com.mtkj.mtpay.entity.MtProductLink::getProductId, + LinkedHashMap::new, + Collectors.toList() + )); + + for (Map.Entry> entry : linkGroupMap.entrySet()) { + Long pid = entry.getKey(); + List links = entry.getValue(); + if (!links.isEmpty()) { + productUrlMap.put(pid, links.get(0).getFullUrl()); + } + } + + log.debug("批量查询到商品链接数量: {}", productUrlMap.size()); + } + } catch (Exception e) { + log.warn("批量查询商品链接失败", e); + } + + // 5. 组装响应数据 + List result = new ArrayList<>(); + for (MtProduct product : products) { + ProductResponseDTO dto = new ProductResponseDTO(); + BeanUtils.copyProperties(product, dto); + + // 处理主图 + processMainImage(product, dto); + + // 设置SKU列表 + List productSkus = skuMap.getOrDefault(product.getId(), new ArrayList<>()); + List skuDTOs = productSkus.stream().map(sku -> { + ProductResponseDTO.ProductSkuResponseDTO skuDTO = new ProductResponseDTO.ProductSkuResponseDTO(); + BeanUtils.copyProperties(sku, skuDTO); + return skuDTO; + }).collect(Collectors.toList()); + dto.setSkus(skuDTOs); + + // 设置商品链接 + String productUrl = productUrlMap.get(product.getId()); + if (productUrl == null) { + // 如果没有找到有效链接,尝试创建新链接 + try { + com.mtkj.mtpay.entity.MtProductLink link = productLinkService.createOrGetProductLink(product.getId(), 90); + productUrl = link.getFullUrl(); + } catch (Exception e) { + log.warn("创建商品链接失败,商品ID: {}", product.getId(), e); + } + } + dto.setProductUrl(productUrl); + + result.add(dto); + } + + long endTime = System.currentTimeMillis(); + log.info("查询商品列表完成,查询条件: {}, 结果数量: {}, 耗时: {}ms", + query, result.size(), endTime - startTime); + + return result; + } + }