diff --git a/logs/mt-pay-error.2025-12-22.log b/logs/mt-pay-error.2025-12-22.log index a7137b2..f5422b7 100644 --- a/logs/mt-pay-error.2025-12-22.log +++ b/logs/mt-pay-error.2025-12-22.log @@ -1080,3 +1080,364 @@ Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No q at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:769) ... 23 common frames omitted +2025-12-22 13:15:34.660 [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:33) +2025-12-22 13:39:14.468 [http-nio-8082-exec-1] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:39:19.318 [http-nio-8082-exec-2] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:40:27.113 [http-nio-8082-exec-3] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:40:56.127 [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:33) +2025-12-22 13:52:53.760 [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:33) +2025-12-22 14:07:53.745 [http-nio-8082-exec-9] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 系统异常 +org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order. + at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585) + at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +2025-12-22 14:08:05.752 [http-nio-8082-exec-10] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 系统异常 +org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order. + at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585) + at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) diff --git a/logs/mt-pay.2025-12-22.log b/logs/mt-pay.2025-12-22.log index f669e9a..3630e3b 100644 --- a/logs/mt-pay.2025-12-22.log +++ b/logs/mt-pay.2025-12-22.log @@ -1834,3 +1834,909 @@ Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No q - 图片上传接口: http://localhost:8082//api/product/upload/image - 商品管理接口: http://localhost:8082//api/product +2025-12-22 13:11:00.333 [Thread-10] INFO org.apache.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-8082"] +2025-12-22 13:11:00.418 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ MTKJ PAY 支付系统正在启动... ║ +║ ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-22 13:11:00.465 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 25772 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-22 13:11:00.465 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-22 13:11:00.818 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-22 13:11:00.818 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-22 13:11:00.818 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-22 13:11:00.834 [restartedMain] INFO o.a.c.c.ContainerBase.[Tomcat-1].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-22 13:11:00.854 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-22 13:11:00.854 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-22 13:11:00.858 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-22 13:11:00.858 [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-22 13:11:00.858 [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-22 13:11:01.060 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-22 13:11:01.062 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-22 13:11:01.138 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-22 13:11:01.138 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-22 13:11:01.202 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-22 13:11:01.208 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 0.783 seconds (process running for 10988.155) +2025-12-22 13:11:01.211 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-22 13:11:01.211 [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-22 13:15:32.189 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final +2025-12-22 13:15:32.228 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 14820 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-22 13:15:32.229 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-22 13:15:33.350 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-22 13:15:33.351 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-22 13:15:33.352 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-22 13:15:33.407 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-22 13:15:33.492 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-22 13:15:33.497 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-22 13:15:33.501 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-22 13:15:33.502 [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-22 13:15:33.529 [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-22 13:15:34.044 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-22 13:15:34.192 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-22 13:15:34.330 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-22 13:15:34.332 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-22 13:15:34.633 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-22 13:15:34.655 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 3.016 seconds (process running for 3.845) +2025-12-22 13:15:34.658 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-22 13:15:34.658 [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-22 13:15:34.660 [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:33) +2025-12-22 13:39:14.431 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-22 13:39:14.468 [http-nio-8082-exec-1] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:39:14.524 [http-nio-8082-exec-1] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list"] +2025-12-22 13:39:19.318 [http-nio-8082-exec-2] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:39:19.321 [http-nio-8082-exec-2] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list"] +2025-12-22 13:40:27.113 [http-nio-8082-exec-3] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 运行时异常 +org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list" + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:292) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:135) + at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) + at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:218) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:171) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +Caused by: java.lang.NumberFormatException: For input string: "list" + at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) + at java.base/java.lang.Long.parseLong(Long.java:711) + at java.base/java.lang.Long.valueOf(Long.java:1163) + at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206) + at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) + at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:438) + at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:411) + at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:160) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:80) + at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:53) + at org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:860) + at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:284) + ... 48 common frames omitted +2025-12-22 13:40:27.115 [http-nio-8082-exec-3] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "list"] +2025-12-22 13:40:54.043 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final +2025-12-22 13:40:54.082 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 5156 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-22 13:40:54.082 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-22 13:40:55.138 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-22 13:40:55.140 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-22 13:40:55.140 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-22 13:40:55.182 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-22 13:40:55.246 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-22 13:40:55.249 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-22 13:40:55.252 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-22 13:40:55.252 [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-22 13:40:55.270 [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-22 13:40:55.628 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-22 13:40:55.746 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-22 13:40:55.853 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-22 13:40:55.854 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-22 13:40:56.105 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-22 13:40:56.123 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 2.569 seconds (process running for 3.346) +2025-12-22 13:40:56.125 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-22 13:40:56.125 [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-22 13:40:56.127 [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:33) +2025-12-22 13:41:03.210 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-22 13:41:03.250 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 13:41:03.251 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 13:41:05.425 [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-22 13:41:05.443 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 13:41:05.505 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 0 +2025-12-22 13:41:05.508 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 0 +2025-12-22 13:41:05.509 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 0 +2025-12-22 13:41:30.775 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/ddf3415e-1b42-43c0-ae97-6646ad44071f.jpg +2025-12-22 13:41:30.777 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-19-43.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/ddf3415e-1b42-43c0-ae97-6646ad44071f.jpg +2025-12-22 13:41:30.780 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg +2025-12-22 13:41:30.780 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-18-56.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg +2025-12-22 13:41:30.783 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/736a7ed0-41be-4967-8a8f-1376b332871b.jpg +2025-12-22 13:41:30.786 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-19-30.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/736a7ed0-41be-4967-8a8f-1376b332871b.jpg +2025-12-22 13:41:30.786 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/16619195-c401-49db-a6f4-7a3d6784bae8.jpg +2025-12-22 13:41:30.787 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-19-21.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/16619195-c401-49db-a6f4-7a3d6784bae8.jpg +2025-12-22 13:41:30.788 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/22fce301-6259-47eb-b0d5-b0ca36969667.jpg +2025-12-22 13:41:30.789 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-19-38.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/22fce301-6259-47eb-b0d5-b0ca36969667.jpg +2025-12-22 13:41:56.872 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg +2025-12-22 13:41:56.873 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-19-58.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg +2025-12-22 13:42:06.443 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg +2025-12-22 13:42:06.445 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-20-05.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg +2025-12-22 13:42:18.858 [http-nio-8082-exec-9] INFO com.mtkj.mtpay.service.impl.OssServiceImpl - 文件上传成功,objectName: 2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg +2025-12-22 13:42:18.859 [http-nio-8082-exec-9] INFO com.mtkj.mtpay.controller.ProductController - 图片上传成功,文件名: Snipaste_2025-12-22_11-20-11.jpg, URL: https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg +2025-12-22 13:44:23.240 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.controller.ProductController - 创建商品请求:CreateProductRequestDTO(name=名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, price=22.98, mainImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg, mainImages=[https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/ddf3415e-1b42-43c0-ae97-6646ad44071f.jpg, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/736a7ed0-41be-4967-8a8f-1376b332871b.jpg, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/16619195-c401-49db-a6f4-7a3d6784bae8.jpg, https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/22fce301-6259-47eb-b0d5-b0ca36969667.jpg], status=ACTIVE, shopId=10001, skus=[CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, price=13.31, currency=MYR, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, price=191.63, currency=PHP, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, price=101.9, currency=THB, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, price=85774.69, currency=VND, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, price=4.22, currency=SGD, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, price=13.31, currency=MYR, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, price=191.63, currency=PHP, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, price=101.9, currency=THB, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, price=85774.69, currency=VND, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, price=4.22, currency=SGD, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, price=13.31, currency=MYR, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, price=191.63, currency=PHP, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, price=101.9, currency=THB, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, price=85774.69, currency=VND, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE), CreateProductRequestDTO.CreateProductSkuDTO(sku=【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, price=4.22, currency=SGD, stock=9999, salesAttrs=null, skuImage=https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg, weight=200, size={"length":25,"width":25,"height":25,"unit":"cm"}, specification=null, status=ACTIVE)]) +2025-12-22 13:44:23.339 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 开始创建商品,商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, 店铺ID: 10001, SKU数量: 15 +2025-12-22 13:44:23.340 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品主图(多图): ["https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/ddf3415e-1b42-43c0-ae97-6646ad44071f.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/736a7ed0-41be-4967-8a8f-1376b332871b.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/16619195-c401-49db-a6f4-7a3d6784bae8.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/22fce301-6259-47eb-b0d5-b0ca36969667.jpg"] +2025-12-22 13:44:23.344 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.347 [http-nio-8082-exec-10] 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-22 13:44:23.347 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.insert - ==> Parameters: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人(String), 22.98(BigDecimal), ["https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/96442d89-0ce3-458e-9e23-e44cab5128d8.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/ddf3415e-1b42-43c0-ae97-6646ad44071f.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/736a7ed0-41be-4967-8a8f-1376b332871b.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/16619195-c401-49db-a6f4-7a3d6784bae8.jpg","https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/22fce301-6259-47eb-b0d5-b0ca36969667.jpg"](String), ACTIVE(String), 10001(Long), 2025-12-22T13:44:23.344855800(LocalDateTime), 2025-12-22T13:44:23.347273600(LocalDateTime) +2025-12-22 13:44:23.431 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.433 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品基础信息插入成功,商品ID: 1 +2025-12-22 13:44:23.433 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 开始创建SKU,数量: 15 +2025-12-22 13:44:23.435 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.435 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.435 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】(String), 13.31(BigDecimal), MYR(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.435674800(LocalDateTime), 2025-12-22T13:44:23.435674800(LocalDateTime) +2025-12-22 13:44:23.524 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.524 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, SKU ID: 1 +2025-12-22 13:44:23.525 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.525 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.526 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】(String), 191.63(BigDecimal), PHP(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.525708500(LocalDateTime), 2025-12-22T13:44:23.525708500(LocalDateTime) +2025-12-22 13:44:23.615 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.615 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, SKU ID: 2 +2025-12-22 13:44:23.616 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.616 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.617 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】(String), 101.9(BigDecimal), THB(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.616855300(LocalDateTime), 2025-12-22T13:44:23.616855300(LocalDateTime) +2025-12-22 13:44:23.701 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.701 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, SKU ID: 3 +2025-12-22 13:44:23.702 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.702 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.702 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】(String), 85774.69(BigDecimal), VND(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.702296800(LocalDateTime), 2025-12-22T13:44:23.702296800(LocalDateTime) +2025-12-22 13:44:23.787 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.787 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, SKU ID: 4 +2025-12-22 13:44:23.788 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.788 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.788 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】(String), 4.22(BigDecimal), SGD(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/a45567dd-f1f8-4fdf-9db2-31925ba38f60.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.788457300(LocalDateTime), 2025-12-22T13:44:23.788457300(LocalDateTime) +2025-12-22 13:44:23.875 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.875 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】, SKU ID: 5 +2025-12-22 13:44:23.878 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.878 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.878 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】(String), 13.31(BigDecimal), MYR(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.878562400(LocalDateTime), 2025-12-22T13:44:23.878562400(LocalDateTime) +2025-12-22 13:44:23.962 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:23.962 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, SKU ID: 6 +2025-12-22 13:44:23.962 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:23.963 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:23.964 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】(String), 191.63(BigDecimal), PHP(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:23.962487500(LocalDateTime), 2025-12-22T13:44:23.963705600(LocalDateTime) +2025-12-22 13:44:24.043 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.043 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, SKU ID: 7 +2025-12-22 13:44:24.045 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.045 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.046 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】(String), 101.9(BigDecimal), THB(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.045805400(LocalDateTime), 2025-12-22T13:44:24.045805400(LocalDateTime) +2025-12-22 13:44:24.131 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.131 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, SKU ID: 8 +2025-12-22 13:44:24.132 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.132 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.134 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】(String), 85774.69(BigDecimal), VND(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.132974700(LocalDateTime), 2025-12-22T13:44:24.132974700(LocalDateTime) +2025-12-22 13:44:24.219 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.219 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, SKU ID: 9 +2025-12-22 13:44:24.219 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.221 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.221 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】(String), 4.22(BigDecimal), SGD(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/2528ed1f-450e-4854-8f62-c42161156f4e.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.220568500(LocalDateTime), 2025-12-22T13:44:24.220568500(LocalDateTime) +2025-12-22 13:44:24.320 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.321 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水蓝【⭐️毛巾实惠3条装】, SKU ID: 10 +2025-12-22 13:44:24.322 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.322 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.323 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】(String), 13.31(BigDecimal), MYR(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.322278(LocalDateTime), 2025-12-22T13:44:24.322278(LocalDateTime) +2025-12-22 13:44:24.412 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.412 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, SKU ID: 11 +2025-12-22 13:44:24.414 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.414 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.414 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】(String), 191.63(BigDecimal), PHP(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.414015(LocalDateTime), 2025-12-22T13:44:24.414015(LocalDateTime) +2025-12-22 13:44:24.493 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.494 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, SKU ID: 12 +2025-12-22 13:44:24.494 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.494 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.495 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】(String), 101.9(BigDecimal), THB(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.494791600(LocalDateTime), 2025-12-22T13:44:24.494791600(LocalDateTime) +2025-12-22 13:44:24.581 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.581 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, SKU ID: 13 +2025-12-22 13:44:24.581 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.583 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.583 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】(String), 85774.69(BigDecimal), VND(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.581462100(LocalDateTime), 2025-12-22T13:44:24.582461200(LocalDateTime) +2025-12-22 13:44:24.674 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.675 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, SKU ID: 14 +2025-12-22 13:44:24.677 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.677 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Preparing: INSERT INTO mt_product_sku ( product_id, sku, price, currency, stock, sku_image, weight, size, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:44:24.678 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - ==> Parameters: 1(Long), 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】(String), 4.22(BigDecimal), SGD(String), 9999(Integer), https://mtkj2025.oss-cn-hangzhou.aliyuncs.com/2025/12/22/bb638682-2985-4910-ad51-f3f051dd3363.jpg(String), 200(BigDecimal), {"length":25,"width":25,"height":25,"unit":"cm"}(String), ACTIVE(String), 2025-12-22T13:44:24.677028300(LocalDateTime), 2025-12-22T13:44:24.677028300(LocalDateTime) +2025-12-22 13:44:24.762 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductSkuMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.763 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - SKU创建成功,商品ID: 1, SKU编码: 【✅性价比首选】米白色+米白色+浅水灰【⭐️毛巾实惠3条装】, SKU ID: 15 +2025-12-22 13:44:24.763 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 13:44:24.768 [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 = ? AND status = ? AND expire_time > ?) ORDER BY create_time DESC LIMIT 1 +2025-12-22 13:44:24.768 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T13:44:24.763461(LocalDateTime) +2025-12-22 13:44:24.814 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 0 +2025-12-22 13:44:24.817 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:44:24.817 [http-nio-8082-exec-10] 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-22 13:44:24.819 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductLinkMapper.insert - ==> Parameters: 1(Long), 3582a1dfbb174d84aac9f465b7180b50(String), http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50(String), 90(Integer), 2026-03-22T13:44:24.815798500(LocalDateTime), ACTIVE(String), 2025-12-22T13:44:24.817834(LocalDateTime), 2025-12-22T13:44:24.817834(LocalDateTime) +2025-12-22 13:44:24.923 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductLinkMapper.insert - <== Updates: 1 +2025-12-22 13:44:24.924 [http-nio-8082-exec-10] INFO c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建商品链接成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, 过期时间: 2026-03-22T13:44:24.815798500 +2025-12-22 13:44:24.924 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品链接创建成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:44:24.924 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 商品创建成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15 +2025-12-22 13:44:24.924 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 13:44:24.924 [http-nio-8082-exec-10] 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-22 13:44:24.925 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:44:24.975 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:44:24.977 [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 = ? AND status = ?) +2025-12-22 13:44:24.977 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 13:44:25.049 [http-nio-8082-exec-10] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:44:25.049 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 13:44:25.053 [http-nio-8082-exec-10] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 13:44:25.054 [http-nio-8082-exec-10] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 13:44:25.280 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 13:44:25.281 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 13:44:25.282 [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-22 13:44:25.283 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 13:44:25.364 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-22 13:44:25.364 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-22 13:44:25.367 [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 = ?) +2025-12-22 13:44:25.367 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long) +2025-12-22 13:44:25.428 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:44:25.433 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1 +2025-12-22 13:44:25.445 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 获取商品URL,商品ID:1 +2025-12-22 13:44:25.447 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL,商品ID: 1 +2025-12-22 13:44:25.447 [http-nio-8082-exec-2] 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-22 13:44:25.447 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:44:25.496 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:44:25.549 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 13:44:25.551 [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 = ? AND status = ? AND expire_time > ?) ORDER BY create_time DESC LIMIT 1 +2025-12-22 13:44:25.551 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T13:44:25.550461300(LocalDateTime) +2025-12-22 13:44:25.597 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 13:44:25.597 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 找到现有有效链接,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 13:44:25.678 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:44:39.312 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.controller.ProductController - 根据链接码获取商品详情,链接码:3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:44:39.312 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:44:39.313 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 根据链接码获取商品链接,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:44:39.314 [http-nio-8082-exec-6] 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 (link_code = ?) LIMIT 1 +2025-12-22 13:44:39.314 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 3582a1dfbb174d84aac9f465b7180b50(String) +2025-12-22 13:44:39.354 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 13:44:39.354 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID成功,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 13:44:39.354 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 13:44:39.355 [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-22 13:44:39.355 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:44:39.400 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:44:39.400 [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 = ? AND status = ?) +2025-12-22 13:44:39.400 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 13:44:39.448 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:44:39.448 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 13:44:39.448 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 13:44:39.449 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 13:48:45.313 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 13:48:45.313 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 13:48:45.397 [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-22 13:48:45.403 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 13:48:45.438 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-22 13:48:45.438 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-22 13:48:45.445 [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 = ?) +2025-12-22 13:48:45.446 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long) +2025-12-22 13:48:45.529 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:48:45.529 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1 +2025-12-22 13:48:45.536 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.controller.ProductController - 获取商品URL,商品ID:1 +2025-12-22 13:48:45.536 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL,商品ID: 1 +2025-12-22 13:48:45.536 [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-22 13:48:45.543 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:48:45.585 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:48:45.626 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 13:48:45.628 [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-22 13:48:45.628 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T13:48:45.627531600(LocalDateTime) +2025-12-22 13:48:45.668 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 13:48:45.668 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 找到现有有效链接,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 13:48:45.744 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:48:52.716 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.controller.ProductController - 根据链接码获取商品详情,链接码:3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:48:52.716 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:48:52.716 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 根据链接码获取商品链接,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:48:52.716 [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 (link_code = ?) LIMIT 1 +2025-12-22 13:48:52.717 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 3582a1dfbb174d84aac9f465b7180b50(String) +2025-12-22 13:48:52.760 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 13:48:52.760 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID成功,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 13:48:52.760 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 13:48:52.761 [http-nio-8082-exec-5] 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-22 13:48:52.761 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:48:52.800 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:48:52.802 [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 = ? AND status = ?) +2025-12-22 13:48:52.802 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 13:48:52.844 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:48:52.844 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 13:48:52.844 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 13:48:52.845 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 13:48:54.604 [http-nio-8082-exec-7] WARN com.mtkj.mtpay.exception.GlobalExceptionHandler - 参数验证失败: {sign=签名不能为空, accId=商户店铺编号不能为空} +2025-12-22 13:48:54.604 [http-nio-8082-exec-7] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity>> com.mtkj.mtpay.controller.PaymentController.checkout(com.mtkj.mtpay.dto.request.CheckoutRequestDTO) with 2 errors: [Field error in object 'checkoutRequestDTO' on field 'sign': rejected value [null]; codes [NotBlank.checkoutRequestDTO.sign,NotBlank.sign,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [checkoutRequestDTO.sign,sign]; arguments []; default message [sign]]; default message [签名不能为空]] [Field error in object 'checkoutRequestDTO' on field 'accId': rejected value [null]; codes [NotBlank.checkoutRequestDTO.accId,NotBlank.accId,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [checkoutRequestDTO.accId,accId]; arguments []; default message [accId]]; default message [商户店铺编号不能为空]] ] +2025-12-22 13:49:06.666 [http-nio-8082-exec-8] WARN com.mtkj.mtpay.exception.GlobalExceptionHandler - 参数验证失败: {sign=签名不能为空, accId=商户店铺编号不能为空} +2025-12-22 13:49:06.666 [http-nio-8082-exec-8] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity>> com.mtkj.mtpay.controller.PaymentController.checkout(com.mtkj.mtpay.dto.request.CheckoutRequestDTO) with 2 errors: [Field error in object 'checkoutRequestDTO' on field 'sign': rejected value [null]; codes [NotBlank.checkoutRequestDTO.sign,NotBlank.sign,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [checkoutRequestDTO.sign,sign]; arguments []; default message [sign]]; default message [签名不能为空]] [Field error in object 'checkoutRequestDTO' on field 'accId': rejected value [null]; codes [NotBlank.checkoutRequestDTO.accId,NotBlank.accId,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [checkoutRequestDTO.accId,accId]; arguments []; default message [accId]]; default message [商户店铺编号不能为空]] ] +2025-12-22 13:52:51.685 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.1.Final +2025-12-22 13:52:51.720 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Starting MtkjpayApplication using Java 17.0.12 with PID 19528 (E:\MTKJPAY\mt-startup\target\classes started by 18969 in E:\MTKJPAY) +2025-12-22 13:52:51.721 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - The following 1 profile is active: "dev" +2025-12-22 13:52:52.765 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8082"] +2025-12-22 13:52:52.766 [restartedMain] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] +2025-12-22 13:52:52.767 [restartedMain] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.16] +2025-12-22 13:52:52.810 [restartedMain] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-12-22 13:52:52.874 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - 初始化MyBatis-Plus分页插件,数据库类型: MYSQL +2025-12-22 13:52:52.877 [restartedMain] INFO com.mtkj.mtpay.config.MyBatisPlusConfig - MyBatis-Plus分页插件配置完成 +2025-12-22 13:52:52.879 [restartedMain] INFO com.mtkj.mtpay.config.DruidDataSourceConfig - 初始化Druid主数据源 +2025-12-22 13:52:52.879 [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-22 13:52:52.898 [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-22 13:52:53.252 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - 初始化RestClient,配置JSON消息转换器 +2025-12-22 13:52:53.371 [restartedMain] INFO com.mtkj.mtpay.config.RestClientConfig - RestClient配置完成 +2025-12-22 13:52:53.478 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 配置跨域访问,路径: /api/**, 允许所有来源 +2025-12-22 13:52:53.480 [restartedMain] INFO com.mtkj.mtpay.config.WebConfig - 跨域配置完成 +2025-12-22 13:52:53.739 [restartedMain] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8082"] +2025-12-22 13:52:53.755 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - Started MtkjpayApplication in 2.529 seconds (process running for 3.212) +2025-12-22 13:52:53.757 [restartedMain] INFO com.mtkj.mtkjpay.MtkjpayApplication - +╔══════════════════════════════════════════════════════════╗ +║ ║ +║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║ +║ ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用信息 ║ +╠══════════════════════════════════════════════════════════╣ +║ 应用名称: {:<45} ║ +║ 运行环境: {:<45} ║ +║ 服务端口: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 访问地址 ║ +╠══════════════════════════════════════════════════════════╣ +║ 后端服务: {:<45} ║ +║ API接口: {:<45} ║ +║ Druid监控: {:<45} ║ +╠══════════════════════════════════════════════════════════╣ +║ 状态: 🟢 服务运行中,可以接收请求 ║ +╚══════════════════════════════════════════════════════════╝ + +2025-12-22 13:52:53.758 [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-22 13:52:53.760 [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:33) +2025-12-22 13:53:01.923 [http-nio-8082-exec-1] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-12-22 13:53:02.193 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.PaymentController - 收到创建支付订单请求,商户订单号: MTN17663827818302382 +2025-12-22 13:53:04.159 [http-nio-8082-exec-1] INFO c.mtkj.mtpay.service.impl.PaymentOrderServiceImpl - 创建支付订单,商户订单号: MTN17663827818302382 +2025-12-22 13:53:04.246 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.PaymentOrderMapper.selectList - ==> Preparing: SELECT id,merchant_transaction_id,transaction_id,client_id,acc_id,amount,currency,payment_type,payment_brand,status,token,payment_url,merchant_user_id,shopper_result_url,shopper_cancel_url,notification_url,remark,create_time,update_time FROM payment_order WHERE (merchant_transaction_id = ?) +2025-12-22 13:53:04.266 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.PaymentOrderMapper.selectList - ==> Parameters: MTN17663827818302382(String) +2025-12-22 13:53:04.320 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.PaymentOrderMapper.selectList - <== Total: 0 +2025-12-22 13:53:04.322 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.service.impl.PaymentOrderServiceImpl - 使用配置中的accId: your-acc-id +2025-12-22 13:53:04.322 [http-nio-8082-exec-1] INFO c.mtkj.mtpay.service.impl.PingPongPayServiceImpl - 创建支付订单,商户订单号: MTN17663827818302382 +2025-12-22 13:53:04.344 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.SignatureServiceImpl - 签名串: your-secret-keyaccId=your-acc-id&amount=13.31¤cy=MYR&merchantTransactionId=MTN17663827818302382¬ificationUrl=http://localhost:3000/api/callback/pingpong&shopperResultUrl=http://localhost:3000/result&signType=MD5 +2025-12-22 13:53:04.344 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.SignatureServiceImpl - 生成的签名: 79D5E90ED660D63976FC6D9B75312C56 +2025-12-22 13:53:04.344 [http-nio-8082-exec-1] INFO c.mtkj.mtpay.service.impl.PingPongPayServiceImpl - 调用PingPong API: https://sandbox-acquirer-payment.pingpongx.com/v2/checkout +2025-12-22 13:53:04.349 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.service.impl.PingPongPayServiceImpl - 请求体: {"notificationUrl":"http://localhost:3000/api/callback/pingpong","amount":"13.31","riskInfo":{"device":null,"customer":{"customerId":null,"firstName":"","lastName":"","email":"","domain":null,"phone":"","mobile":null,"workPhone":null,"identificationType":null,"identificationId":null,"registerTime":"20251222T055301","registerIp":"","registerTerminal":"PC","registerCountry":null,"registerRange":"1","orderTime":"20251222T055301","orderIp":"","orderCountry":"US","payIp":null,"payCountry":null,"loginTime":null,"loginIp":null,"lastPayTime":null,"acquisitionChannel":null,"firstOrder":null,"nonMemberOrder":null,"preferentialOrder":null,"birthDate":null,"customerStatus":null},"goods":[{"name":"名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人","description":"【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】","sku":"【✅性价比首选】米白色+浅水蓝+天空灰【⭐️毛巾实惠3条装】","averageUnitPrice":"13.31","number":"1","virtualProduct":"N","imgUrl":null}],"shipping":{"firstName":"","lastName":"","phone":null,"email":null,"street":"","postcode":"","city":"","state":"","country":"US","lastModifierStreetTime":null,"lastModifierPhoneTime":null},"billing":{"firstName":"","lastName":"","phone":null,"email":null,"street":"","postcode":"","city":"","state":"","country":"US"},"ecommerce":null,"airline":null,"reCharge":null,"carRental":null},"shopperCancelUrl":"http://localhost:3000/result","shopperResultUrl":"http://localhost:3000/result","threeDSecure":"N","sign":"79D5E90ED660D63976FC6D9B75312C56","language":"zh","paymentType":"SALE","merchantTransactionId":"MTN17663827818302382","accId":"your-acc-id","signType":"MD5","currency":"MYR"} +2025-12-22 13:53:04.962 [http-nio-8082-exec-1] INFO c.mtkj.mtpay.service.impl.PingPongPayServiceImpl - PingPong API响应,code: 500, description: null +2025-12-22 13:53:04.963 [http-nio-8082-exec-1] WARN com.mtkj.mtpay.service.impl.SignatureServiceImpl - 签名参数为空 +2025-12-22 13:53:04.964 [http-nio-8082-exec-1] WARN c.mtkj.mtpay.service.impl.PingPongPayServiceImpl - PingPong响应签名验证失败 +2025-12-22 13:53:04.964 [http-nio-8082-exec-1] WARN c.mtkj.mtpay.service.impl.PaymentOrderServiceImpl - PingPong返回错误,code: 500, description: null +2025-12-22 13:53:04.968 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:53:04.969 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentOrderMapper.insert - ==> Preparing: INSERT INTO payment_order ( merchant_transaction_id, acc_id, amount, currency, payment_type, status, merchant_user_id, shopper_result_url, shopper_cancel_url, notification_url, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) +2025-12-22 13:53:04.970 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentOrderMapper.insert - ==> Parameters: MTN17663827818302382(String), your-acc-id(String), 13.31(BigDecimal), MYR(String), SALE(String), FAILED(String), (String), http://localhost:3000/result(String), http://localhost:3000/result(String), http://localhost:3000/api/callback/pingpong(String), 2025-12-22T13:53:04.968540100(LocalDateTime), 2025-12-22T13:53:04.969543(LocalDateTime) +2025-12-22 13:53:05.059 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentOrderMapper.insert - <== Updates: 1 +2025-12-22 13:53:05.062 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.config.MyMetaObjectHandler - 开始插入填充... +2025-12-22 13:53:05.062 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentRecordMapper.insert - ==> Preparing: INSERT INTO payment_record ( merchant_transaction_id, record_type, status, code, create_time ) VALUES ( ?, ?, ?, ?, ? ) +2025-12-22 13:53:05.062 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentRecordMapper.insert - ==> Parameters: MTN17663827818302382(String), CHECKOUT(String), FAILED(String), 500(String), 2025-12-22T13:53:05.062233900(LocalDateTime) +2025-12-22 13:53:05.142 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.PaymentRecordMapper.insert - <== Updates: 1 +2025-12-22 13:53:05.143 [http-nio-8082-exec-1] INFO c.mtkj.mtpay.service.impl.PaymentOrderServiceImpl - 支付订单创建成功,订单ID: 1 +2025-12-22 13:55:19.601 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 根据链接码获取商品详情,链接码:3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:55:19.602 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:55:19.602 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 根据链接码获取商品链接,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 13:55:19.653 [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 (link_code = ?) LIMIT 1 +2025-12-22 13:55:19.653 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 3582a1dfbb174d84aac9f465b7180b50(String) +2025-12-22 13:55:19.703 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 13:55:19.704 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID成功,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 13:55:19.704 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 13:55:19.705 [http-nio-8082-exec-2] 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-22 13:55:19.706 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 13:55:19.749 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 13:55:19.754 [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 = ? AND status = ?) +2025-12-22 13:55:19.756 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 13:55:19.801 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 13:55:19.802 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 13:55:19.805 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 13:55:19.807 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 14:04:39.836 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 14:04:39.836 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 14:04:39.880 [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-22 14:04:39.881 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 14:04:39.921 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-22 14:04:39.921 [http-nio-8082-exec-3] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-22 14:04:39.923 [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 = ?) +2025-12-22 14:04:39.923 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long) +2025-12-22 14:04:39.980 [http-nio-8082-exec-3] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 14:04:39.989 [http-nio-8082-exec-3] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1 +2025-12-22 14:04:40.004 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.controller.ProductController - 获取商品URL,商品ID:1 +2025-12-22 14:04:40.004 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL,商品ID: 1 +2025-12-22 14:04:40.005 [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-22 14:04:40.005 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 14:04:40.045 [http-nio-8082-exec-4] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 14:04:40.083 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 14:04:40.085 [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-22 14:04:40.086 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T14:04:40.083041600(LocalDateTime) +2025-12-22 14:04:40.125 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 14:04:40.125 [http-nio-8082-exec-4] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 找到现有有效链接,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 14:04:40.203 [http-nio-8082-exec-4] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:05:44.576 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 14:05:44.576 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 14:05:44.618 [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-22 14:05:44.619 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 14:05:44.658 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-22 14:05:44.658 [http-nio-8082-exec-5] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-22 14:05:44.660 [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 = ?) +2025-12-22 14:05:44.660 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long) +2025-12-22 14:05:44.702 [http-nio-8082-exec-5] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 14:05:44.702 [http-nio-8082-exec-5] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1 +2025-12-22 14:05:44.706 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.controller.ProductController - 获取商品URL,商品ID:1 +2025-12-22 14:05:44.706 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL,商品ID: 1 +2025-12-22 14:05:44.706 [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-22 14:05:44.706 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 14:05:44.760 [http-nio-8082-exec-6] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 14:05:44.792 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 14:05:44.792 [http-nio-8082-exec-6] 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-22 14:05:44.792 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T14:05:44.792944900(LocalDateTime) +2025-12-22 14:05:44.838 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 14:05:44.838 [http-nio-8082-exec-6] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 找到现有有效链接,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 14:05:44.920 [http-nio-8082-exec-6] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:21.180 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.controller.ProductController - 根据链接码获取商品详情,链接码:3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:21.180 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:21.181 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 根据链接码获取商品链接,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:21.182 [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 (link_code = ?) LIMIT 1 +2025-12-22 14:06:21.182 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 3582a1dfbb174d84aac9f465b7180b50(String) +2025-12-22 14:06:21.223 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 14:06:21.223 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID成功,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 14:06:21.223 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 14:06:21.223 [http-nio-8082-exec-7] 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-22 14:06:21.223 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 14:06:21.267 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 14:06:21.267 [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 = ? AND status = ?) +2025-12-22 14:06:21.267 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 14:06:21.313 [http-nio-8082-exec-7] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 14:06:21.313 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 14:06:21.313 [http-nio-8082-exec-7] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 14:06:21.313 [http-nio-8082-exec-7] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 14:06:23.167 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.controller.ProductController - 根据链接码获取商品详情,链接码:3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:23.167 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:23.167 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 根据链接码获取商品链接,链接码: 3582a1dfbb174d84aac9f465b7180b50 +2025-12-22 14:06:23.169 [http-nio-8082-exec-8] 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 (link_code = ?) LIMIT 1 +2025-12-22 14:06:23.170 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 3582a1dfbb174d84aac9f465b7180b50(String) +2025-12-22 14:06:23.220 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 14:06:23.222 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 根据链接码获取商品ID成功,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 14:06:23.222 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品详情,商品ID: 1 +2025-12-22 14:06:23.223 [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-22 14:06:23.223 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 14:06:23.264 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 14:06:23.265 [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-22 14:06:23.265 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String) +2025-12-22 14:06:23.307 [http-nio-8082-exec-8] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 14:06:23.307 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品SKU数量: 15, 商品ID: 1 +2025-12-22 14:06:23.307 [http-nio-8082-exec-8] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 解析商品主图(多图),数量: 5 +2025-12-22 14:06:23.307 [http-nio-8082-exec-8] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品详情成功,商品ID: 1, 商品名称: 名创优品毛巾女2025新款洗澡男士浴巾比全棉100纯棉吸水干发成人, SKU数量: 15, 主图数量: 5 +2025-12-22 14:07:53.745 [http-nio-8082-exec-9] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 系统异常 +org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order. + at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585) + at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +2025-12-22 14:07:53.748 [http-nio-8082-exec-9] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order.] +2025-12-22 14:08:05.752 [http-nio-8082-exec-10] ERROR com.mtkj.mtpay.exception.GlobalExceptionHandler - 系统异常 +org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order. + at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585) + at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.base/java.lang.Thread.run(Thread.java:842) +2025-12-22 14:08:05.753 [http-nio-8082-exec-10] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolved [org.springframework.web.servlet.resource.NoResourceFoundException: No static resource api/order.] +2025-12-22 15:06:06.771 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.controller.ProductController - 获取商品列表 +2025-12-22 15:06:06.773 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询商品列表 +2025-12-22 15:06:07.187 [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-22 15:06:07.190 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - ==> Parameters: DELETED(String) +2025-12-22 15:06:07.219 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectList - <== Total: 1 +2025-12-22 15:06:07.219 [http-nio-8082-exec-1] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 查询到商品数量: 1 +2025-12-22 15:06:07.235 [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 = ?) +2025-12-22 15:06:07.235 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - ==> Parameters: 1(Long) +2025-12-22 15:06:07.276 [http-nio-8082-exec-1] DEBUG c.mtkj.mtpay.mapper.MtProductSkuMapper.selectList - <== Total: 15 +2025-12-22 15:06:07.278 [http-nio-8082-exec-1] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品列表成功,商品数量: 1 +2025-12-22 15:06:07.293 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.controller.ProductController - 获取商品URL,商品ID:1 +2025-12-22 15:06:07.293 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL,商品ID: 1 +2025-12-22 15:06:07.294 [http-nio-8082-exec-2] 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-22 15:06:07.294 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - ==> Parameters: 1(Long) +2025-12-22 15:06:07.334 [http-nio-8082-exec-2] DEBUG com.mtkj.mtpay.mapper.MtProductMapper.selectById - <== Total: 1 +2025-12-22 15:06:07.372 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 创建或获取商品链接,商品ID: 1, 有效期: 90天 +2025-12-22 15:06:07.381 [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 = ? AND status = ? AND expire_time > ?) ORDER BY create_time DESC LIMIT 1 +2025-12-22 15:06:07.382 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - ==> Parameters: 1(Long), ACTIVE(String), 2025-12-22T15:06:07.372499200(LocalDateTime) +2025-12-22 15:06:07.417 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.mapper.MtProductLinkMapper.selectList - <== Total: 1 +2025-12-22 15:06:07.417 [http-nio-8082-exec-2] DEBUG c.mtkj.mtpay.service.impl.ProductLinkServiceImpl - 找到现有有效链接,链接码: 3582a1dfbb174d84aac9f465b7180b50, 商品ID: 1 +2025-12-22 15:06:07.480 [http-nio-8082-exec-2] INFO com.mtkj.mtpay.service.impl.ProductServiceImpl - 获取商品URL成功,商品ID: 1, 链接码: 3582a1dfbb174d84aac9f465b7180b50, URL: http://localhost:3000/product/3582a1dfbb174d84aac9f465b7180b50 diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/common/ResultCode.java b/mt-pay/src/main/java/com/mtkj/mtpay/common/ResultCode.java index 65e3374..01eae7c 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/common/ResultCode.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/common/ResultCode.java @@ -83,7 +83,12 @@ public enum ResultCode { /** * 服务不可用 */ - SERVICE_UNAVAILABLE("5001", "服务不可用"); + SERVICE_UNAVAILABLE("5001", "服务不可用"), + + /** + * 业务错误 + */ + BUSINESS_ERROR("6000", "业务错误"); /** * 响应码 diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/controller/CustomerOrderController.java b/mt-pay/src/main/java/com/mtkj/mtpay/controller/CustomerOrderController.java new file mode 100644 index 0000000..0b4047d --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/controller/CustomerOrderController.java @@ -0,0 +1,53 @@ +package com.mtkj.mtpay.controller; + +import com.mtkj.mtpay.common.Result; +import com.mtkj.mtpay.dto.request.CreateCustomerOrderRequestDTO; +import com.mtkj.mtpay.dto.response.CustomerOrderResponseDTO; +import com.mtkj.mtpay.service.CustomerOrderService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +/** + * 客户订单控制器 + */ +@Slf4j +@RestController +@RequestMapping("/api/order") +@RequiredArgsConstructor +public class CustomerOrderController { + + private final CustomerOrderService customerOrderService; + + /** + * 创建客户订单 + */ + @PostMapping + public Result createOrder(@Valid @RequestBody CreateCustomerOrderRequestDTO request) { + log.info("创建客户订单请求:{}", request); + CustomerOrderResponseDTO order = customerOrderService.createOrder(request); + return Result.success("订单创建成功", order); + } + + /** + * 根据订单号获取订单详情 + */ + @GetMapping("/{orderNo}") + public Result getOrderByOrderNo(@PathVariable String orderNo) { + log.info("获取订单详情,订单号:{}", orderNo); + CustomerOrderResponseDTO order = customerOrderService.getOrderByOrderNo(orderNo); + return Result.success(order); + } + + /** + * 根据ID获取订单详情 + */ + @GetMapping("/id/{id}") + public Result getOrderById(@PathVariable Long id) { + log.info("获取订单详情,订单ID:{}", id); + CustomerOrderResponseDTO order = customerOrderService.getOrderById(id); + return Result.success(order); + } +} + 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 4619d5a..93d040e 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 @@ -67,6 +67,16 @@ public class ProductController { } } + /** + * 获取商品列表 + */ + @GetMapping("/list") + public Result> listProducts() { + log.info("获取商品列表"); + List products = productService.listProducts(); + return Result.success(products); + } + /** * 获取商品详情页URL */ diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CheckoutRequestDTO.java b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CheckoutRequestDTO.java index a30612f..db6ae65 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CheckoutRequestDTO.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CheckoutRequestDTO.java @@ -13,9 +13,8 @@ import java.io.Serializable; @Data public class CheckoutRequestDTO implements Serializable { - @NotBlank(message = "商户店铺编号不能为空") @Size(max = 64, message = "商户店铺编号长度不能超过64") - private String accId; + private String accId; // 可选,后端会自动从配置中获取 @NotBlank(message = "交易金额不能为空") @Pattern(regexp = "^\\d+(\\.\\d{2})?$", message = "交易金额格式不正确,需保留两位小数") @@ -49,9 +48,8 @@ public class CheckoutRequestDTO implements Serializable { @Pattern(regexp = "^(MD5|SHA256)$", message = "签名类型必须为MD5或SHA256") private String signType; - @NotBlank(message = "签名不能为空") @Size(max = 255, message = "签名长度不能超过255") - private String sign; + private String sign; // 可选,后端会自动生成 @Size(max = 64, message = "商户用户ID长度不能超过64") private String merchantUserId; diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateCustomerOrderRequestDTO.java b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateCustomerOrderRequestDTO.java new file mode 100644 index 0000000..70a7fa1 --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateCustomerOrderRequestDTO.java @@ -0,0 +1,68 @@ +package com.mtkj.mtpay.dto.request; + +import jakarta.validation.constraints.*; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 创建客户订单请求DTO + */ +@Data +public class CreateCustomerOrderRequestDTO implements Serializable { + + @NotNull(message = "商品ID不能为空") + private Long productId; + + @NotNull(message = "SKU ID不能为空") + private Long skuId; + + @NotNull(message = "购买数量不能为空") + @Min(value = 1, message = "购买数量至少为1") + private Integer quantity; + + // 客户信息 + @NotBlank(message = "客户姓名不能为空") + @Size(max = 100, message = "客户姓名长度不能超过100") + private String customerName; + + @NotBlank(message = "客户电话不能为空") + @Size(max = 20, message = "客户电话长度不能超过20") + private String customerPhone; + + @Email(message = "邮箱格式不正确") + @Size(max = 100, message = "邮箱长度不能超过100") + private String customerEmail; + + // 收货地址 + @NotBlank(message = "收货人姓名不能为空") + @Size(max = 100, message = "收货人姓名长度不能超过100") + private String shippingName; + + @NotBlank(message = "收货人电话不能为空") + @Size(max = 20, message = "收货人电话长度不能超过20") + private String shippingPhone; + + @NotBlank(message = "收货国家不能为空") + @Size(max = 50, message = "收货国家长度不能超过50") + private String shippingCountry; + + @Size(max = 50, message = "收货州/省长度不能超过50") + private String shippingState; + + @NotBlank(message = "收货城市不能为空") + @Size(max = 50, message = "收货城市长度不能超过50") + private String shippingCity; + + @NotBlank(message = "收货街道地址不能为空") + @Size(max = 200, message = "收货街道地址长度不能超过200") + private String shippingStreet; + + @Size(max = 20, message = "收货邮编长度不能超过20") + private String shippingPostcode; + + @Size(max = 500, message = "订单备注长度不能超过500") + private String remark; +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/dto/response/CustomerOrderResponseDTO.java b/mt-pay/src/main/java/com/mtkj/mtpay/dto/response/CustomerOrderResponseDTO.java new file mode 100644 index 0000000..e8af2cc --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/dto/response/CustomerOrderResponseDTO.java @@ -0,0 +1,42 @@ +package com.mtkj.mtpay.dto.response; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 客户订单响应DTO + */ +@Data +public class CustomerOrderResponseDTO implements Serializable { + + private Long id; + private String orderNo; + private Long productId; + private String productName; + private Long skuId; + private String skuName; + private Integer quantity; + private BigDecimal unitPrice; + private BigDecimal totalAmount; + private String currency; + private String status; + private String customerName; + private String customerPhone; + private String customerEmail; + private String shippingName; + private String shippingPhone; + private String shippingCountry; + private String shippingState; + private String shippingCity; + private String shippingStreet; + private String shippingPostcode; + private Long paymentOrderId; + private String paymentStatus; + private String remark; + private LocalDateTime createTime; + private LocalDateTime updateTime; +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/entity/CustomerOrder.java b/mt-pay/src/main/java/com/mtkj/mtpay/entity/CustomerOrder.java new file mode 100644 index 0000000..52877ff --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/entity/CustomerOrder.java @@ -0,0 +1,172 @@ +package com.mtkj.mtpay.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 客户订单实体类 + */ +@TableName(value = "customer_order") +@Data +public class CustomerOrder { + + /** + * 主键ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 订单号(全局唯一) + */ + @TableField(value = "order_no", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String orderNo; + + /** + * 商品ID + */ + @TableField(value = "product_id", jdbcType = org.apache.ibatis.type.JdbcType.BIGINT) + private Long productId; + + /** + * 商品名称 + */ + @TableField(value = "product_name", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String productName; + + /** + * SKU ID + */ + @TableField(value = "sku_id", jdbcType = org.apache.ibatis.type.JdbcType.BIGINT) + private Long skuId; + + /** + * SKU名称/描述 + */ + @TableField(value = "sku_name", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String skuName; + + /** + * 购买数量 + */ + @TableField(value = "quantity", jdbcType = org.apache.ibatis.type.JdbcType.INTEGER) + private Integer quantity; + + /** + * 单价 + */ + @TableField(value = "unit_price", jdbcType = org.apache.ibatis.type.JdbcType.DECIMAL) + private BigDecimal unitPrice; + + /** + * 订单总金额 + */ + @TableField(value = "total_amount", jdbcType = org.apache.ibatis.type.JdbcType.DECIMAL) + private BigDecimal totalAmount; + + /** + * 货币代码 + */ + @TableField(value = "currency", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String currency; + + /** + * 订单状态:PENDING-待支付,PAID-已支付,SHIPPED-已发货,COMPLETED-已完成,CANCELLED-已取消 + */ + @TableField(value = "status", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String status; + + /** + * 客户姓名 + */ + @TableField(value = "customer_name", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String customerName; + + /** + * 客户电话 + */ + @TableField(value = "customer_phone", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String customerPhone; + + /** + * 客户邮箱 + */ + @TableField(value = "customer_email", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String customerEmail; + + /** + * 收货人姓名 + */ + @TableField(value = "shipping_name", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingName; + + /** + * 收货人电话 + */ + @TableField(value = "shipping_phone", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingPhone; + + /** + * 收货国家 + */ + @TableField(value = "shipping_country", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingCountry; + + /** + * 收货州/省 + */ + @TableField(value = "shipping_state", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingState; + + /** + * 收货城市 + */ + @TableField(value = "shipping_city", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingCity; + + /** + * 收货街道地址 + */ + @TableField(value = "shipping_street", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingStreet; + + /** + * 收货邮编 + */ + @TableField(value = "shipping_postcode", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String shippingPostcode; + + /** + * 关联的支付订单ID + */ + @TableField(value = "payment_order_id", jdbcType = org.apache.ibatis.type.JdbcType.BIGINT) + private Long paymentOrderId; + + /** + * 支付状态:UNPAID-未支付,PAID-已支付,FAILED-支付失败 + */ + @TableField(value = "payment_status", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String paymentStatus; + + /** + * 订单备注 + */ + @TableField(value = "remark", jdbcType = org.apache.ibatis.type.JdbcType.VARCHAR) + private String remark; + + /** + * 创建时间 + */ + @TableField(value = "create_time", fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/mapper/CustomerOrderMapper.java b/mt-pay/src/main/java/com/mtkj/mtpay/mapper/CustomerOrderMapper.java new file mode 100644 index 0000000..523901a --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/mapper/CustomerOrderMapper.java @@ -0,0 +1,13 @@ +package com.mtkj.mtpay.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mtkj.mtpay.entity.CustomerOrder; +import org.apache.ibatis.annotations.Mapper; + +/** + * 客户订单Mapper接口 + */ +@Mapper +public interface CustomerOrderMapper extends BaseMapper { +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java new file mode 100644 index 0000000..1c8e796 --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java @@ -0,0 +1,32 @@ +package com.mtkj.mtpay.service; + +import com.mtkj.mtpay.dto.request.CreateCustomerOrderRequestDTO; +import com.mtkj.mtpay.dto.response.CustomerOrderResponseDTO; + +/** + * 客户订单服务接口 + */ +public interface CustomerOrderService { + + /** + * 创建客户订单 + * @param request 创建订单请求 + * @return 订单响应 + */ + CustomerOrderResponseDTO createOrder(CreateCustomerOrderRequestDTO request); + + /** + * 根据订单号获取订单详情 + * @param orderNo 订单号 + * @return 订单响应 + */ + CustomerOrderResponseDTO getOrderByOrderNo(String orderNo); + + /** + * 根据ID获取订单详情 + * @param id 订单ID + * @return 订单响应 + */ + CustomerOrderResponseDTO getOrderById(Long id); +} + 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 ffa9524..695e442 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 @@ -3,6 +3,8 @@ package com.mtkj.mtpay.service; import com.mtkj.mtpay.dto.request.CreateProductRequestDTO; import com.mtkj.mtpay.dto.response.ProductResponseDTO; +import java.util.List; + /** * 商品服务接口 */ @@ -35,5 +37,11 @@ public interface ProductService { * @return 商品ID */ Long getProductIdByLinkCode(String linkCode); + + /** + * 获取商品列表 + * @return 商品列表 + */ + List listProducts(); } 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 new file mode 100644 index 0000000..237cd61 --- /dev/null +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java @@ -0,0 +1,141 @@ +package com.mtkj.mtpay.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.mtkj.mtpay.common.ResultCode; +import com.mtkj.mtpay.dto.request.CreateCustomerOrderRequestDTO; +import com.mtkj.mtpay.dto.response.CustomerOrderResponseDTO; +import com.mtkj.mtpay.entity.CustomerOrder; +import com.mtkj.mtpay.entity.MtProduct; +import com.mtkj.mtpay.entity.MtProductSku; +import com.mtkj.mtpay.exception.BusinessException; +import com.mtkj.mtpay.mapper.CustomerOrderMapper; +import com.mtkj.mtpay.mapper.MtProductMapper; +import com.mtkj.mtpay.mapper.MtProductSkuMapper; +import com.mtkj.mtpay.service.CustomerOrderService; +import com.mtkj.mtpay.util.OrderIdGenerator; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +/** + * 客户订单服务实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CustomerOrderServiceImpl implements CustomerOrderService { + + private final CustomerOrderMapper customerOrderMapper; + private final MtProductMapper productMapper; + private final MtProductSkuMapper productSkuMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public CustomerOrderResponseDTO createOrder(CreateCustomerOrderRequestDTO request) { + log.info("创建客户订单,商品ID: {}, SKU ID: {}, 数量: {}", + request.getProductId(), request.getSkuId(), request.getQuantity()); + + // 验证商品是否存在 + MtProduct product = productMapper.selectById(request.getProductId()); + if (product == null) { + log.warn("商品不存在,商品ID: {}", request.getProductId()); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "商品不存在"); + } + + // 验证SKU是否存在 + MtProductSku sku = productSkuMapper.selectById(request.getSkuId()); + if (sku == null || !sku.getProductId().equals(request.getProductId())) { + log.warn("SKU不存在或不属于该商品,SKU ID: {}, 商品ID: {}", + request.getSkuId(), request.getProductId()); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "SKU不存在"); + } + + // 验证库存 + if (sku.getStock() == null || sku.getStock() < request.getQuantity()) { + log.warn("库存不足,SKU ID: {}, 库存: {}, 需要: {}", + request.getSkuId(), sku.getStock(), request.getQuantity()); + throw new BusinessException(ResultCode.BUSINESS_ERROR, "库存不足"); + } + + // 创建订单 + CustomerOrder order = new CustomerOrder(); + order.setOrderNo(OrderIdGenerator.generateMerchantTransactionId()); + order.setProductId(request.getProductId()); + order.setProductName(product.getName()); + order.setSkuId(request.getSkuId()); + order.setSkuName(sku.getSku()); + order.setQuantity(request.getQuantity()); + order.setUnitPrice(sku.getPrice()); + order.setTotalAmount(sku.getPrice().multiply(new BigDecimal(request.getQuantity()))); + order.setCurrency(sku.getCurrency()); + order.setStatus("PENDING"); + order.setPaymentStatus("UNPAID"); + + // 客户信息 + order.setCustomerName(request.getCustomerName()); + order.setCustomerPhone(request.getCustomerPhone()); + order.setCustomerEmail(request.getCustomerEmail()); + + // 收货地址 + order.setShippingName(request.getShippingName()); + order.setShippingPhone(request.getShippingPhone()); + order.setShippingCountry(request.getShippingCountry()); + order.setShippingState(request.getShippingState()); + order.setShippingCity(request.getShippingCity()); + order.setShippingStreet(request.getShippingStreet()); + order.setShippingPostcode(request.getShippingPostcode()); + order.setRemark(request.getRemark()); + + // 保存订单 + int result = customerOrderMapper.insert(order); + if (result <= 0) { + log.error("创建订单失败,商品ID: {}", request.getProductId()); + throw new BusinessException(ResultCode.SYSTEM_ERROR, "创建订单失败"); + } + + log.info("客户订单创建成功,订单ID: {}, 订单号: {}", order.getId(), order.getOrderNo()); + + // 转换为响应DTO + CustomerOrderResponseDTO response = new CustomerOrderResponseDTO(); + BeanUtils.copyProperties(order, response); + + return response; + } + + @Override + public CustomerOrderResponseDTO getOrderByOrderNo(String orderNo) { + log.debug("查询订单,订单号: {}", orderNo); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CustomerOrder::getOrderNo, orderNo); + CustomerOrder order = customerOrderMapper.selectOne(queryWrapper); + + if (order == null) { + log.warn("订单不存在,订单号: {}", orderNo); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "订单不存在"); + } + + CustomerOrderResponseDTO response = new CustomerOrderResponseDTO(); + BeanUtils.copyProperties(order, response); + return response; + } + + @Override + public CustomerOrderResponseDTO getOrderById(Long id) { + log.debug("查询订单,订单ID: {}", id); + CustomerOrder order = customerOrderMapper.selectById(id); + + if (order == null) { + log.warn("订单不存在,订单ID: {}", id); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "订单不存在"); + } + + CustomerOrderResponseDTO response = new CustomerOrderResponseDTO(); + BeanUtils.copyProperties(order, response); + return response; + } +} + diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java index 2b77b51..929fa44 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java @@ -2,6 +2,7 @@ package com.mtkj.mtpay.service.impl; import com.mtkj.mtpay.common.ResultCode; import com.mtkj.mtpay.common.constants.PaymentConstants; +import com.mtkj.mtpay.config.PingPongProperties; import com.mtkj.mtpay.dto.request.CheckoutRequestDTO; import com.mtkj.mtpay.dto.response.CheckoutResponseDTO; import com.mtkj.mtpay.entity.PaymentOrder; @@ -15,6 +16,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.Optional; @@ -30,6 +32,7 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { private final PaymentOrderMapper paymentOrderMapper; private final PaymentRecordMapper paymentRecordMapper; private final PingPongPayService pingPongPayService; + private final PingPongProperties pingPongProperties; @Override @Transactional @@ -45,6 +48,17 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { throw new BusinessException(ResultCode.ORDER_EXISTS); } + // 填充accId和signType(如果前端未提供,从配置中获取) + if (!StringUtils.hasText(request.getAccId())) { + request.setAccId(pingPongProperties.getAccId()); + log.debug("使用配置中的accId: {}", request.getAccId()); + } + if (!StringUtils.hasText(request.getSignType())) { + request.setSignType(pingPongProperties.getSignType()); + log.debug("使用配置中的signType: {}", request.getSignType()); + } + // sign字段由PingPongPayService自动生成,不需要前端提供 + // 创建订单实体 PaymentOrder order = new PaymentOrder(); order.setMerchantTransactionId(request.getMerchantTransactionId()); @@ -58,6 +72,7 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { order.setNotificationUrl(request.getNotificationUrl()); order.setRemark(request.getRemark()); order.setStatus(PaymentConstants.DEFAULT_ORDER_STATUS); + order.setAccId(request.getAccId()); // 调用PingPong API创建支付 CheckoutResponseDTO response = pingPongPayService.checkout(request); 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 ef467af..02aa6ed 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 @@ -245,5 +245,73 @@ public class ProductServiceImpl implements ProductService { log.debug("根据链接码获取商品ID成功,链接码: {}, 商品ID: {}", linkCode, productId); return productId; } + + @Override + public List listProducts() { + log.debug("查询商品列表"); + + // 查询所有商品(排除已删除的) + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.ne(MtProduct::getStatus, "DELETED"); + queryWrapper.orderByDesc(MtProduct::getCreateTime); + List products = productMapper.selectList(queryWrapper); + + log.debug("查询到商品数量: {}", products.size()); + + // 转换为响应DTO列表 + List result = new ArrayList<>(); + for (MtProduct product : products) { + ProductResponseDTO dto = new ProductResponseDTO(); + BeanUtils.copyProperties(product, dto); + + // 处理主图:解析JSON数组或使用单个URL + if (StringUtils.hasText(product.getMainImage())) { + try { + // 尝试解析为JSON数组 + if (product.getMainImage().trim().startsWith("[")) { + List mainImages = objectMapper.readValue( + product.getMainImage(), + new TypeReference>() {} + ); + dto.setMainImages(mainImages); + // 兼容:第一个作为mainImage + if (!mainImages.isEmpty()) { + dto.setMainImage(mainImages.get(0)); + } + } else { + // 单个URL + dto.setMainImage(product.getMainImage()); + List singleImageList = new ArrayList<>(); + singleImageList.add(product.getMainImage()); + dto.setMainImages(singleImageList); + } + } catch (Exception e) { + log.warn("解析商品主图失败,使用原始值,商品ID: {}", product.getId(), e); + dto.setMainImage(product.getMainImage()); + List singleImageList = new ArrayList<>(); + singleImageList.add(product.getMainImage()); + dto.setMainImages(singleImageList); + } + } + + // 查询SKU列表(用于获取销售地区信息) + LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); + skuWrapper.eq(MtProductSku::getProductId, product.getId()); + List skus = productSkuMapper.selectList(skuWrapper); + + // 转换SKU为DTO(列表页需要SKU的currency信息来显示销售地区) + List skuDTOs = skus.stream().map(sku -> { + ProductResponseDTO.ProductSkuResponseDTO skuDTO = new ProductResponseDTO.ProductSkuResponseDTO(); + BeanUtils.copyProperties(sku, skuDTO); + return skuDTO; + }).collect(Collectors.toList()); + dto.setSkus(skuDTOs); + + result.add(dto); + } + + log.info("获取商品列表成功,商品数量: {}", result.size()); + return result; + } }