添加后端代码、数据库文档和FRP配置

This commit is contained in:
2026-01-30 08:59:06 +08:00
parent 37a6b409ed
commit c09ce065fe
210 changed files with 8560 additions and 0 deletions

View File

@@ -0,0 +1,313 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:16:50.735 INFO 6824 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6824 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:16:50.740 INFO 6824 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:16:56.239 INFO 6824 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:16:56.265 INFO 6824 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:16:56.266 INFO 6824 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:16:56.426 INFO 6824 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:16:56.426 INFO 6824 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5611 ms
2026-01-29 12:16:56.484 INFO 6824 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:16:57.245 INFO 6824 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:16:57.269 INFO 6824 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:21
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:16:59.759 WARN 6824 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 926319ab-f1b3-4bae-8d73-5c7dc57ed41e
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:17:00.150 INFO 6824 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@26be9a6, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4d518c66, org.springframework.security.web.context.SecurityContextPersistenceFilter@5a4dda2, org.springframework.security.web.header.HeaderWriterFilter@6df4af5, org.springframework.security.web.authentication.logout.LogoutFilter@582e9152, com.gpf.pethospital.security.JwtAuthenticationFilter@411fa0ce, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@34045582, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1edccfd4, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@251d7fdd, org.springframework.security.web.session.SessionManagementFilter@250d440, org.springframework.security.web.access.ExceptionTranslationFilter@4966bab1, org.springframework.security.web.access.intercept.AuthorizationFilter@60b5e80d]
2026-01-29 12:17:01.506 INFO 6824 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:17:01.520 INFO 6824 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.044 seconds (JVM running for 12.638)
2026-01-29 12:17:06.961 INFO 6824 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:17:06.961 INFO 6824 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:17:06.963 INFO 6824 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c9c63df] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@598865562 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), admin123(String), admin123(String)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c9c63df]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@66aeebc4] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@947374894 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), 13900139001(String), customer@example.com(String)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@66aeebc4]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@407d98a4] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@952904848 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO `user` ( username, phone, email, password, role, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: customer(String), 13900139001(String), customer@example.com(String), $2a$10$xQOy/03sZQwPYhFu613TA.pfqYWVVwm8ObpQ7qnhuiW4vHpbEN7fy(String), CUSTOMER(String), 1(Integer), 2026-01-29T12:17:11.108203849(LocalDateTime), 2026-01-29T12:17:11.108203849(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@407d98a4]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7038ac66] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2130660369 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, customer, 13900139001, customer@example.com, $2a$10$xQOy/03sZQwPYhFu613TA.pfqYWVVwm8ObpQ7qnhuiW4vHpbEN7fy, CUSTOMER, 1, null, 2026-01-29 12:17:11.108204, 2026-01-29 12:17:11.108204, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7038ac66]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79f8c3da] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1968400554 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO pet ( owner_id, name, breed, gender, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 小黄(String), 拉布拉多(String), F(String), 2026-01-29T12:17:18.870163031(LocalDateTime), 2026-01-29T12:17:18.870163031(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@79f8c3da]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70112bd5] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1858967151 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70112bd5]
2026-01-29 12:17:23.261 ERROR 6824 --- [nio-8081-exec-8] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
### The error may exist in com/gpf/pethospital/mapper/AppointmentMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.AppointmentMapper.insert
### The error occurred while executing an update
### SQL: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.getColumn(Table.java:749) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumn(Parser.java:1256) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumnList(Parser.java:1241) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseInsert(Parser.java:1641) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1099) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:84) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy77.insert(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:60) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.AppointmentServiceImpl$$EnhancerBySpringCGLIB$$4a795df8.save(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController.create(AppointmentController.java:33) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController$$FastClassBySpringCGLIB$$4329551c.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.AppointmentController$$EnhancerBySpringCGLIB$$e7e92bd4.create(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@337f2551] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1035521358 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), admin123(String), admin123(String)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@337f2551]
2026-01-29 12:17:30.582 INFO 6824 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:17:30.584 INFO 6824 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 49.018 s
[INFO] Finished at: 2026-01-29T12:17:30+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

79
backend/backend_final.log Normal file
View File

@@ -0,0 +1,79 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:09:25.156 INFO 6050 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6050 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:09:25.161 INFO 6050 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:09:30.848 INFO 6050 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:09:30.873 INFO 6050 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:09:30.873 INFO 6050 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:09:31.043 INFO 6050 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:09:31.043 INFO 6050 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5806 ms
2026-01-29 12:09:31.101 INFO 6050 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:09:31.897 INFO 6050 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:09:31.923 INFO 6050 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:6
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:09:34.317 WARN 6050 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 332a46eb-449c-42d8-94b3-6f0bba3c5735
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:09:34.688 INFO 6050 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@21edd891, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@de579ff, org.springframework.security.web.context.SecurityContextPersistenceFilter@7abeabe9, org.springframework.security.web.header.HeaderWriterFilter@22d477c2, org.springframework.security.web.authentication.logout.LogoutFilter@bb3ecfe, com.gpf.pethospital.security.JwtAuthenticationFilter@7971c2a9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1b52699c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@250d440, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2fd39436, org.springframework.security.web.session.SessionManagementFilter@448c92fc, org.springframework.security.web.access.ExceptionTranslationFilter@79ecc507, org.springframework.security.web.access.intercept.AuthorizationFilter@582e9152]
2026-01-29 12:09:36.166 INFO 6050 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:09:36.179 INFO 6050 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.27 seconds (JVM running for 12.892)
2026-01-29 12:09:53.265 INFO 6050 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:09:53.269 INFO 6050 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.310 s
[INFO] Finished at: 2026-01-29T12:09:53+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,276 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:17:52.260 INFO 6984 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6984 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:17:52.265 INFO 6984 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:17:57.768 INFO 6984 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:17:57.795 INFO 6984 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:17:57.796 INFO 6984 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:17:57.957 INFO 6984 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:17:57.957 INFO 6984 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5612 ms
2026-01-29 12:17:58.012 INFO 6984 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:17:58.796 INFO 6984 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:17:58.826 INFO 6984 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:16
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:18:01.177 WARN 6984 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 26737b8f-8750-49cd-b844-01692eface7e
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:18:01.533 INFO 6984 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@435e416c, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@6af310c7, org.springframework.security.web.context.SecurityContextPersistenceFilter@21edd891, org.springframework.security.web.header.HeaderWriterFilter@340cb97f, org.springframework.security.web.authentication.logout.LogoutFilter@370c9018, com.gpf.pethospital.security.JwtAuthenticationFilter@4aed311e, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7971c2a9, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@60b5e80d, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4c38cd16, org.springframework.security.web.session.SessionManagementFilter@582e9152, org.springframework.security.web.access.ExceptionTranslationFilter@291a4791, org.springframework.security.web.access.intercept.AuthorizationFilter@482c351d]
2026-01-29 12:18:03.110 INFO 6984 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:18:03.124 INFO 6984 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.261 seconds (JVM running for 12.885)
2026-01-29 12:18:11.902 INFO 6984 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:18:11.902 INFO 6984 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:18:11.903 INFO 6984 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f20fef4] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@208105529 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:17:59.555682, 2026-01-29 12:17:59.555682, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f20fef4]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b030f70] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1718503198 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b030f70]
2026-01-29 12:18:20.043 ERROR 6984 --- [nio-8081-exec-3] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
### The error may exist in com/gpf/pethospital/mapper/AppointmentMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.AppointmentMapper.insert
### The error occurred while executing an update
### SQL: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.getColumn(Table.java:749) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumn(Parser.java:1256) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumnList(Parser.java:1241) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseInsert(Parser.java:1641) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1099) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:84) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy77.insert(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:60) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.AppointmentServiceImpl$$EnhancerBySpringCGLIB$$cb78fdc9.save(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController.create(AppointmentController.java:33) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController$$FastClassBySpringCGLIB$$4329551c.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.AppointmentController$$EnhancerBySpringCGLIB$$29d26cb5.create(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:18:53.316 INFO 6984 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:18:53.318 INFO 6984 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:10 min
[INFO] Finished at: 2026-01-29T12:18:53+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,188 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:23:12.006 INFO 7496 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 7496 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:23:12.011 INFO 7496 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:23:17.378 INFO 7496 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:23:17.408 INFO 7496 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:23:17.408 INFO 7496 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:23:17.592 INFO 7496 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:23:17.593 INFO 7496 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5498 ms
2026-01-29 12:23:17.652 INFO 7496 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:23:18.530 INFO 7496 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:23:18.554 INFO 7496 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:11
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:23:19.273 WARN 7496 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentController' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/controller/AppointmentController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentMapper' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/mapper/AppointmentMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
2026-01-29 12:23:19.274 INFO 7496 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:23:19.275 INFO 7496 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2026-01-29 12:23:19.280 INFO 7496 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2026-01-29 12:23:19.294 INFO 7496 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2026-01-29 12:23:19.381 ERROR 7496 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentController' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/controller/AppointmentController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentMapper' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/mapper/AppointmentMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:224) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:929) ~[spring-context-5.3.31.jar:5.3.31]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) ~[spring-context-5.3.31.jar:5.3.31]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:409) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289) ~[spring-boot-2.7.18.jar:2.7.18]
at com.gpf.pethospital.PetHospitalApplication.main(PetHospitalApplication.java:15) ~[classes/:na]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentMapper' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/mapper/AppointmentMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:408) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ~[spring-beans-5.3.31.jar:5.3.31]
... 19 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appointmentMapper' defined in file [/mnt/d/bs/gpf_pet_hospital/backend/target/classes/com/gpf/pethospital/mapper/AppointmentMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1534) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1417) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:710) ~[spring-beans-5.3.31.jar:5.3.31]
... 34 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1519) ~[spring-beans-5.3.31.jar:5.3.31]
... 45 common frames omitted
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #4 of URL [file:/mnt/d/bs/gpf_pet_hospital/backend/target/classes/data.sql]: INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:282) ~[spring-jdbc-5.3.31.jar:5.3.31]
at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:254) ~[spring-jdbc-5.3.31.jar:5.3.31]
at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:54) ~[spring-jdbc-5.3.31.jar:5.3.31]
at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:90) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:145) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:107) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyDataScripts(AbstractScriptDatabaseInitializer.java:101) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:65) ~[spring-boot-2.7.18.jar:2.7.18]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.31.jar:5.3.31]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.31.jar:5.3.31]
... 57 common frames omitted
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "AGE" not found; SQL statement:
INSERT INTO pet (name, species, breed, gender, age, owner_id, health_status) VALUES ('小白', '狗', '金毛', 'M', 3, 3, '健康') [42122-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.getColumn(Table.java:749) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumn(Parser.java:1256) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumnList(Parser.java:1241) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseInsert(Parser.java:1641) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-4.0.3.jar:na]
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:261) ~[spring-jdbc-5.3.31.jar:5.3.31]
... 67 common frames omitted
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.764 s
[INFO] Finished at: 2026-01-29T12:23:19+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,344 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:21:46.885 INFO 7324 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 7324 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:21:46.888 INFO 7324 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:21:52.609 INFO 7324 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:21:52.633 INFO 7324 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:21:52.634 INFO 7324 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:21:52.800 INFO 7324 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:21:52.801 INFO 7324 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5830 ms
2026-01-29 12:21:52.855 INFO 7324 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:21:53.685 INFO 7324 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:21:53.707 INFO 7324 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:15
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:21:56.382 WARN 7324 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 3ae24633-3a04-4e91-9dd2-f686ccd8de18
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:21:56.775 INFO 7324 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@240f350a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@706f6d26, org.springframework.security.web.context.SecurityContextPersistenceFilter@6a1568d6, org.springframework.security.web.header.HeaderWriterFilter@40df6090, org.springframework.security.web.authentication.logout.LogoutFilter@6b27b2d0, com.gpf.pethospital.security.JwtAuthenticationFilter@3af2f846, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1b37fbec, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@bb3ecfe, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6af65f29, org.springframework.security.web.session.SessionManagementFilter@291a4791, org.springframework.security.web.access.ExceptionTranslationFilter@11a3a45f, org.springframework.security.web.access.intercept.AuthorizationFilter@62b6c045]
2026-01-29 12:21:58.151 INFO 7324 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:21:58.168 INFO 7324 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.599 seconds (JVM running for 13.252)
2026-01-29 12:22:05.764 INFO 7324 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:22:05.765 INFO 7324 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:22:05.766 INFO 7324 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b23466] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@155985460 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, ADMIN, 1, null, 2026-01-29 12:21:54.441399, 2026-01-29 12:21:54.441399, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b23466]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11618e07] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1428743376 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 1(Long), DRAFT(String), 2026-01-29T12:22:11.451463382(LocalDateTime), 2026-01-29T12:22:11.451463382(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@11618e07]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eccf175] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1908255895 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM appointment WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1eccf175]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@530348d5] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1397845812 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM appointment WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@530348d5]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@773e0205] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2046423698 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:21:54.449498, 2026-01-29 12:21:54.449498, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@773e0205]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1402ee31] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@449123009 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, ADMIN, 1, null, 2026-01-29 12:21:54.441399, 2026-01-29 12:21:54.441399, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1402ee31]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@393abbd] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@503935856 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM appointment WHERE deleted = 0 AND (customer_id = ?)
==> Parameters: 3(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@393abbd]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22dbff1c] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@126819480 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM appointment WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22dbff1c]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27695f1d] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1044329755 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 1
<== Total: 1
==> Preparing: SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ?
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27695f1d]
2026-01-29 12:22:42.469 ERROR 7324 --- [nio-8081-exec-6] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "BIRTHDAY" not found; SQL statement:
SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ? [42122-214]
### The error may exist in com/gpf/pethospital/mapper/PetMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.PetMapper.selectList
### The error occurred while executing a query
### SQL: SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ?
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "BIRTHDAY" not found; SQL statement:
SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ? [42122-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "BIRTHDAY" not found; SQL statement:
SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ? [42122-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "BIRTHDAY" not found; SQL statement:
SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 LIMIT ? [42122-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:244) ~[h2-2.1.214.jar:2.1.214]
at org.h2.expression.ExpressionColumn.optimizeOther(ExpressionColumn.java:226) ~[h2-2.1.214.jar:2.1.214]
at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:213) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.query.Select.optimizeExpressionsAndPreserveAliases(Select.java:1285) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.query.Select.prepareExpressions(Select.java:1167) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.query.Query.prepare(Query.java:218) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:575) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:88) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.query(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:164) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy85.selectList(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectPage(BaseMapper.java:348) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732) ~[na:na]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:166) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy85.selectPage(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.page(IService.java:448) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.PetServiceImpl$$EnhancerBySpringCGLIB$$e0f570e.page(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.PetController.list(PetController.java:33) ~[classes/:na]
at com.gpf.pethospital.controller.PetController$$FastClassBySpringCGLIB$$78a1db9c.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.PetController$$EnhancerBySpringCGLIB$$28c5e4ba.list(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:22:57.837 INFO 7324 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:22:57.838 INFO 7324 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:20 min
[INFO] Finished at: 2026-01-29T12:22:57+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,429 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:11:44.343 INFO 6533 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6533 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:11:44.348 INFO 6533 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:11:49.720 INFO 6533 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:11:49.746 INFO 6533 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:11:49.746 INFO 6533 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:11:49.915 INFO 6533 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:11:49.915 INFO 6533 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5483 ms
2026-01-29 12:11:49.970 INFO 6533 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:11:50.790 INFO 6533 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:11:50.821 INFO 6533 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:16
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:11:53.249 WARN 6533 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 609d260c-f511-4bb7-8d09-763961b92f36
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:11:53.571 INFO 6533 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@797fcf9, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@16bd7ae1, org.springframework.security.web.context.SecurityContextPersistenceFilter@69796bd0, org.springframework.security.web.header.HeaderWriterFilter@7abeabe9, org.springframework.security.web.authentication.logout.LogoutFilter@46394f65, com.gpf.pethospital.security.JwtAuthenticationFilter@15d114ce, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@8c0a23f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@26c8b296, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@3312f4f4, org.springframework.security.web.session.SessionManagementFilter@8c43966, org.springframework.security.web.access.ExceptionTranslationFilter@251c8145, org.springframework.security.web.access.intercept.AuthorizationFilter@391515c7]
2026-01-29 12:11:55.004 INFO 6533 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:11:55.018 INFO 6533 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 11.983 seconds (JVM running for 12.531)
2026-01-29 12:12:01.117 INFO 6533 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:12:01.118 INFO 6533 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:12:01.120 INFO 6533 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c9c63df] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@598865562 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3c9c63df]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d78424f] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@905814132 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), 13800138000(String), admin@example.com(String)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d78424f]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bd3eccd] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1551126099 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO `user` ( username, phone, email, password, role, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: admin(String), 13800138000(String), admin@example.com(String), $2a$10$m3/z7X3iQBgyaxxexhuKFuELrtYEWeWp819vohmW3WrY6pWj/R5HK(String), CUSTOMER(String), 1(Integer), 2026-01-29T12:12:05.326822806(LocalDateTime), 2026-01-29T12:12:05.326822806(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5bd3eccd]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@35fa3ce5] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@993903658 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$m3/z7X3iQBgyaxxexhuKFuELrtYEWeWp819vohmW3WrY6pWj/R5HK, CUSTOMER, 1, null, 2026-01-29 12:12:05.326823, 2026-01-29 12:12:05.326823, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@35fa3ce5]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fbe9fd8] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1098479711 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$m3/z7X3iQBgyaxxexhuKFuELrtYEWeWp819vohmW3WrY6pWj/R5HK, CUSTOMER, 1, null, 2026-01-29 12:12:05.326823, 2026-01-29 12:12:05.326823, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4fbe9fd8]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f3cfa05] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@142534824 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$m3/z7X3iQBgyaxxexhuKFuELrtYEWeWp819vohmW3WrY6pWj/R5HK, CUSTOMER, 1, null, 2026-01-29 12:12:05.326823, 2026-01-29 12:12:05.326823, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2f3cfa05]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@337f2551] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2089142133 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$m3/z7X3iQBgyaxxexhuKFuELrtYEWeWp819vohmW3WrY6pWj/R5HK, CUSTOMER, 1, null, 2026-01-29 12:12:05.326823, 2026-01-29 12:12:05.326823, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@337f2551]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58aced53] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1449859126 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), 13800138000(String), admin@example.com(String)
<== Columns: TOTAL
<== Row: 1
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@58aced53]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6153cf09] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1871986003 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), 13900139000(String), admin123@example.com(String)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6153cf09]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6baba479] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@782841704 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO `user` ( username, phone, email, password, role, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: admin123(String), 13900139000(String), admin123@example.com(String), $2a$10$/.neXm.CfrMpzxtwb9/nqeKxVQwOaim7Y77IUqmMH4XtlRVdgcNr.(String), CUSTOMER(String), 1(Integer), 2026-01-29T12:14:01.189417382(LocalDateTime), 2026-01-29T12:14:01.189417382(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6baba479]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7038ac66] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2130660369 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), admin123(String), admin123(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 2, admin123, 13900139000, admin123@example.com, $2a$10$/.neXm.CfrMpzxtwb9/nqeKxVQwOaim7Y77IUqmMH4XtlRVdgcNr., CUSTOMER, 1, null, 2026-01-29 12:14:01.189417, 2026-01-29 12:14:01.189417, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7038ac66]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57e83702] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1496302479 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), admin123(String), admin123(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 2, admin123, 13900139000, admin123@example.com, $2a$10$/.neXm.CfrMpzxtwb9/nqeKxVQwOaim7Y77IUqmMH4XtlRVdgcNr., CUSTOMER, 1, null, 2026-01-29 12:14:01.189417, 2026-01-29 12:14:01.189417, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@57e83702]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@234e6504] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1656828531 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0 AND (owner_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@234e6504]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a43436d] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2100380753 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0 AND (owner_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1a43436d]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@649b7e0d] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@67890336 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM report WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@649b7e0d]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@63c52e8c] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1349410361 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM order_info WHERE deleted = 0 AND (customer_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@63c52e8c]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39c88552] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@912272537 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM order_info WHERE deleted = 0 AND (customer_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39c88552]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27aa8fcf] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@22254561 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin123(String), admin123(String), admin123(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 2, admin123, 13900139000, admin123@example.com, $2a$10$/.neXm.CfrMpzxtwb9/nqeKxVQwOaim7Y77IUqmMH4XtlRVdgcNr., CUSTOMER, 1, null, 2026-01-29 12:14:01.189417, 2026-01-29 12:14:01.189417, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27aa8fcf]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67592afd] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@111282002 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO pet ( owner_id, name, breed, gender, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )
==> Parameters: 2(Long), 小白(String), 金毛(String), M(String), 2026-01-29T12:16:24.527753394(LocalDateTime), 2026-01-29T12:16:24.527753394(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67592afd]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b91672] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2134699660 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2b91672]
2026-01-29 12:16:30.731 ERROR 6533 --- [nio-8081-exec-8] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
### The error may exist in com/gpf/pethospital/mapper/AppointmentMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.AppointmentMapper.insert
### The error occurred while executing an update
### SQL: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "TIME_SLOT" not found; SQL statement:
INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [42122-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.getColumn(Table.java:749) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumn(Parser.java:1256) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseColumnList(Parser.java:1241) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseInsert(Parser.java:1641) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1099) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:372) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:84) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.internal.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy77.insert(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:60) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.AppointmentServiceImpl$$EnhancerBySpringCGLIB$$4448a06d.save(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController.create(AppointmentController.java:33) ~[classes/:na]
at com.gpf.pethospital.controller.AppointmentController$$FastClassBySpringCGLIB$$4329551c.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.AppointmentController$$EnhancerBySpringCGLIB$$181e5b83.create(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:16:37.467 INFO 6533 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:16:37.469 INFO 6533 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:02 min
[INFO] Finished at: 2026-01-29T12:16:37+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

454
backend/backend_output.log Normal file
View File

@@ -0,0 +1,454 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:04:47.805 INFO 5373 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 5373 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:04:47.811 INFO 5373 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:04:53.186 INFO 5373 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:04:53.211 INFO 5373 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:04:53.212 INFO 5373 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:04:53.398 INFO 5373 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:04:53.398 INFO 5373 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5482 ms
2026-01-29 12:04:53.460 INFO 5373 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:04:54.407 INFO 5373 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:04:54.438 INFO 5373 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:11
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:04:56.741 WARN 5373 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: bcbf67e6-f301-431f-9886-fb2c36acea73
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:04:57.057 INFO 5373 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@35145874, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@77524ca7, org.springframework.security.web.context.SecurityContextPersistenceFilter@fbe70d8, org.springframework.security.web.header.HeaderWriterFilter@265c1a7c, org.springframework.security.web.authentication.logout.LogoutFilter@49580ca8, com.gpf.pethospital.security.JwtAuthenticationFilter@11df2829, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7d2c345d, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5db948c9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@18e4674d, org.springframework.security.web.session.SessionManagementFilter@78c262ba, org.springframework.security.web.access.ExceptionTranslationFilter@740a0d5e, org.springframework.security.web.access.intercept.AuthorizationFilter@5b733ef7]
2026-01-29 12:04:58.379 INFO 5373 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:04:58.391 INFO 5373 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 11.994 seconds (JVM running for 12.596)
2026-01-29 12:05:12.695 INFO 5373 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:05:12.695 INFO 5373 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:05:12.696 INFO 5373 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5dfce1d1] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@61730178 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5dfce1d1]
2026-01-29 12:05:13.662 ERROR 5373 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
### The error may exist in com/gpf/pethospital/mapper/UserMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.UserMapper.selectList
### The error occurred while executing a query
### SQL: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getSyntaxError(DbException.java:261) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readIdentifier(Parser.java:5656) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTablePrimary(Parser.java:1814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTableReference(Parser.java:2334) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2772) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelect(Parser.java:2878) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryPrimary(Parser.java:2762) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryTerm(Parser.java:2633) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2612) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2605) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpression(Parser.java:2598) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQuery(Parser.java:2567) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:724) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:88) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.query(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:164) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy78.selectList(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne(BaseMapper.java:222) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732) ~[na:na]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:166) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy78.selectOne(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:242) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:327) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$1dbf3365.getOne(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AuthController.login(AuthController.java:67) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d886b99] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1331623698 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4d886b99]
2026-01-29 12:05:38.384 ERROR 5373 --- [nio-8081-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT COUNT( * ) AS total FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
### The error may exist in com/gpf/pethospital/mapper/UserMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.UserMapper.selectCount
### The error occurred while executing a query
### SQL: SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT COUNT( * ) AS total FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT COUNT( * ) AS total FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT COUNT( * ) AS total FROM [*]user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)"; expected "identifier"; SQL statement:
SELECT COUNT( * ) AS total FROM user WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42001-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getSyntaxError(DbException.java:261) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readIdentifier(Parser.java:5656) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTablePrimary(Parser.java:1814) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTableReference(Parser.java:2334) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2772) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelect(Parser.java:2878) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryPrimary(Parser.java:2762) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryTerm(Parser.java:2633) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2612) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2605) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpression(Parser.java:2598) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQuery(Parser.java:2567) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:724) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:88) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.query(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.selectOne(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:87) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy78.selectCount(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.count(IService.java:397) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$1dbf3365.count(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AuthController.register(AuthController.java:45) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:07:30.955 INFO 5373 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:07:30.957 INFO 5373 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:52 min
[INFO] Finished at: 2026-01-29T12:07:31+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,271 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 89 source files to /mnt/d/bs/gpf_pet_hospital/backend/target/classes
[INFO] /mnt/d/bs/gpf_pet_hospital/backend/src/main/java/com/gpf/pethospital/util/JwtUtil.java: /mnt/d/bs/gpf_pet_hospital/backend/src/main/java/com/gpf/pethospital/util/JwtUtil.java uses or overrides a deprecated API.
[INFO] /mnt/d/bs/gpf_pet_hospital/backend/src/main/java/com/gpf/pethospital/util/JwtUtil.java: Recompile with -Xlint:deprecation for details.
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:07:59.679 INFO 5891 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 5891 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:07:59.683 INFO 5891 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:08:05.074 INFO 5891 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:08:05.099 INFO 5891 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:08:05.099 INFO 5891 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:08:05.262 INFO 5891 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:08:05.263 INFO 5891 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5506 ms
2026-01-29 12:08:05.337 INFO 5891 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:08:06.177 INFO 5891 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:08:06.202 INFO 5891 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:12
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:08:08.609 WARN 5891 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 07eb8acb-7b5d-4e82-b3ad-dce7bd7d3078
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:08:08.986 INFO 5891 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@626b639e, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@273fa9e, org.springframework.security.web.context.SecurityContextPersistenceFilter@3b35798, org.springframework.security.web.header.HeaderWriterFilter@7d2c345d, org.springframework.security.web.authentication.logout.LogoutFilter@39e53bef, com.gpf.pethospital.security.JwtAuthenticationFilter@527a8665, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@4702e7a5, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@73bb1337, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7ab2a07e, org.springframework.security.web.session.SessionManagementFilter@7d1c164a, org.springframework.security.web.access.ExceptionTranslationFilter@fbe70d8, org.springframework.security.web.access.intercept.AuthorizationFilter@4b957db0]
2026-01-29 12:08:10.363 INFO 5891 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:08:10.378 INFO 5891 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 11.89 seconds (JVM running for 12.459)
2026-01-29 12:08:41.327 INFO 5891 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:08:41.328 INFO 5891 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:08:41.330 INFO 5891 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@121856cf] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@754552516 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@121856cf]
2026-01-29 12:08:42.218 ERROR 5891 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER" not found (this database is empty); SQL statement:
SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42104-214]
### The error may exist in com/gpf/pethospital/mapper/UserMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.UserMapper.selectCount
### The error occurred while executing a query
### SQL: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER" not found (this database is empty); SQL statement:
SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42104-214]
; bad SQL grammar []; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER" not found (this database is empty); SQL statement:
SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42104-214]] with root cause
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER" not found (this database is empty); SQL statement:
SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?) [42104-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8385) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8369) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTableOrView(Parser.java:8358) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTablePrimary(Parser.java:1863) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.readTableReference(Parser.java:2334) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2772) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseSelect(Parser.java:2878) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryPrimary(Parser.java:2762) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryTerm(Parser.java:2633) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2612) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2605) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQueryExpression(Parser.java:2598) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parseQuery(Parser.java:2567) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parsePrepared(Parser.java:724) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) ~[h2-2.1.214.jar:2.1.214]
at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:53) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy64.prepareStatement(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:88) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:60) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy107.prepare(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:90) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.query(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.selectOne(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:87) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy78.selectCount(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.count(IService.java:397) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$4a59e45d.count(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.AuthController.register(AuthController.java:45) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:08:51.001 INFO 5891 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:08:51.003 INFO 5891 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:16 min
[INFO] Finished at: 2026-01-29T12:08:51+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,218 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:10:45.802 INFO 6379 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6379 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:10:45.807 INFO 6379 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:10:51.211 INFO 6379 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:10:51.236 INFO 6379 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:10:51.236 INFO 6379 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:10:51.393 INFO 6379 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:10:51.394 INFO 6379 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5501 ms
2026-01-29 12:10:51.447 INFO 6379 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:10:52.275 INFO 6379 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:10:52.301 INFO 6379 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:16
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:10:54.594 WARN 6379 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 65907ba7-9111-4082-a03f-e9415af71a0f
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:10:54.914 INFO 6379 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@26be9a6, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4d518c66, org.springframework.security.web.context.SecurityContextPersistenceFilter@5a4dda2, org.springframework.security.web.header.HeaderWriterFilter@6df4af5, org.springframework.security.web.authentication.logout.LogoutFilter@582e9152, com.gpf.pethospital.security.JwtAuthenticationFilter@411fa0ce, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@34045582, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1edccfd4, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@251d7fdd, org.springframework.security.web.session.SessionManagementFilter@250d440, org.springframework.security.web.access.ExceptionTranslationFilter@4966bab1, org.springframework.security.web.access.intercept.AuthorizationFilter@60b5e80d]
2026-01-29 12:10:56.356 INFO 6379 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:10:56.372 INFO 6379 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 11.887 seconds (JVM running for 12.549)
2026-01-29 12:11:04.613 INFO 6379 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:11:04.614 INFO 6379 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:11:04.616 INFO 6379 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4643f176] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1864698444 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), 13800138000(String), admin@example.com(String)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4643f176]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ec2f335] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1531731496 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO `user` ( username, phone, email, password, role, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: admin(String), 13800138000(String), admin@example.com(String), $2a$10$u68s2dGuJN0ETaIThD74HeDNq9hkdpKQ2aNxQjPW7jTG8/yr.ZId.(String), CUSTOMER(String), 1(Integer), 2026-01-29T12:11:05.481399469(LocalDateTime), 2026-01-29T12:11:05.481399469(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ec2f335]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d12e787] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1057347592 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$u68s2dGuJN0ETaIThD74HeDNq9hkdpKQ2aNxQjPW7jTG8/yr.ZId., CUSTOMER, 1, null, 2026-01-29 12:11:05.481399, 2026-01-29 12:11:05.481399, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d12e787]
2026-01-29 12:11:08.292 ERROR 6379 --- [nio-8081-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is io.jsonwebtoken.io.DecodingException: Illegal base64 character: '-'] with root cause
io.jsonwebtoken.io.DecodingException: Illegal base64 character: '-'
at io.jsonwebtoken.io.Base64.ctoi(Base64.java:221) ~[jjwt-api-0.11.5.jar:0.11.5]
at io.jsonwebtoken.io.Base64.decodeFast(Base64.java:270) ~[jjwt-api-0.11.5.jar:0.11.5]
at io.jsonwebtoken.io.Base64Decoder.decode(Base64Decoder.java:36) ~[jjwt-api-0.11.5.jar:0.11.5]
at io.jsonwebtoken.io.Base64Decoder.decode(Base64Decoder.java:23) ~[jjwt-api-0.11.5.jar:0.11.5]
at io.jsonwebtoken.io.ExceptionPropagatingDecoder.decode(ExceptionPropagatingDecoder.java:36) ~[jjwt-api-0.11.5.jar:0.11.5]
at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:132) ~[jjwt-impl-0.11.5.jar:0.11.5]
at com.gpf.pethospital.util.JwtUtil.generateToken(JwtUtil.java:31) ~[classes/:na]
at com.gpf.pethospital.controller.AuthController.login(AuthController.java:74) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9b849ba] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@125810429 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT( * ) AS total FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), 13800138000(String), admin@example.com(String)
<== Columns: TOTAL
<== Row: 1
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@9b849ba]
2026-01-29 12:11:28.228 INFO 6379 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:11:28.231 INFO 6379 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 51.530 s
[INFO] Finished at: 2026-01-29T12:11:28+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,489 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:19:06.333 INFO 7141 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 7141 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:19:06.337 INFO 7141 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:19:11.871 INFO 7141 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:19:11.896 INFO 7141 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:19:11.896 INFO 7141 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:19:12.057 INFO 7141 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:19:12.058 INFO 7141 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5645 ms
2026-01-29 12:19:12.111 INFO 7141 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:19:12.854 INFO 7141 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:19:12.876 INFO 7141 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:8
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:19:15.314 WARN 7141 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 77b1aeeb-4e18-4223-9721-ff793ec89ea1
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:19:15.635 INFO 7141 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@240f350a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@706f6d26, org.springframework.security.web.context.SecurityContextPersistenceFilter@6a1568d6, org.springframework.security.web.header.HeaderWriterFilter@40df6090, org.springframework.security.web.authentication.logout.LogoutFilter@6b27b2d0, com.gpf.pethospital.security.JwtAuthenticationFilter@3af2f846, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1b37fbec, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@bb3ecfe, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6af65f29, org.springframework.security.web.session.SessionManagementFilter@291a4791, org.springframework.security.web.access.ExceptionTranslationFilter@11a3a45f, org.springframework.security.web.access.intercept.AuthorizationFilter@62b6c045]
2026-01-29 12:19:16.997 INFO 7141 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:19:17.013 INFO 7141 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.033 seconds (JVM running for 12.689)
2026-01-29 12:19:22.832 INFO 7141 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:19:22.832 INFO 7141 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:19:22.833 INFO 7141 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b23466] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@155985460 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:19:13.654131, 2026-01-29 12:19:13.654131, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@31b23466]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1562f046] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@495463010 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 3(Long), 1(Long), 2026-02-01(LocalDate), 09:00-10:00(String), PENDING(String), 常规检查(String), 2026-01-29T12:19:31.025850900(LocalDateTime), 2026-01-29T12:19:31.025850900(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1562f046]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7e0b09b] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@153570839 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, ADMIN, 1, null, 2026-01-29 12:19:13.645158, 2026-01-29 12:19:13.645158, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7e0b09b]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14fac782] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2084292749 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 1(Long), DRAFT(String), 2026-01-29T12:19:48.104064819(LocalDateTime), 2026-01-29T12:19:48.104064819(LocalDateTime)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@14fac782]
2026-01-29 12:19:48.218 ERROR 7141 --- [nio-8081-exec-9] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "CUSTOMER_ID"; SQL statement:
INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? ) [23502-214]
### The error may exist in com/gpf/pethospital/mapper/PrescriptionMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.PrescriptionMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? )
### Cause: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "CUSTOMER_ID"; SQL statement:
INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? ) [23502-214]
; NULL not allowed for column "CUSTOMER_ID"; SQL statement:
INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? ) [23502-214]; nested exception is org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "CUSTOMER_ID"; SQL statement:
INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? ) [23502-214]] with root cause
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "CUSTOMER_ID"; SQL statement:
INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? ) [23502-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:508) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Column.validateConvertUpdateSequence(Column.java:365) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.convertInsertRow(Table.java:926) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.dml.Insert.insertRows(Insert.java:167) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.dml.Insert.update(Insert.java:135) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.CommandContainer.executeUpdateWithGeneratedKeys(CommandContainer.java:242) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.CommandContainer.update(CommandContainer.java:163) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Command.executeUpdate(Command.java:252) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:254) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy107.execute(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.update(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy86.insert(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:60) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.PrescriptionServiceImpl$$EnhancerBySpringCGLIB$$834c711.save(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.PrescriptionController.create(PrescriptionController.java:28) ~[classes/:na]
at com.gpf.pethospital.controller.PrescriptionController$$FastClassBySpringCGLIB$$6a1d26f5.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:162) ~[spring-security-core-5.7.11.jar:5.7.11]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:707) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.PrescriptionController$$EnhancerBySpringCGLIB$$a4312665.create(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1402ee31] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@449123009 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:19:13.654131, 2026-01-29 12:19:13.654131, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1402ee31]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d3345fe] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@503378629 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM prescription WHERE deleted = 0
==> Parameters:
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@d3345fe]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22dbff1c] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@543824485 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? )
==> Parameters: DRAFT(String), 2026-01-29T12:20:41.789304708(LocalDateTime), 2026-01-29T12:20:41.789304708(LocalDateTime)
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@22dbff1c]
2026-01-29 12:20:41.792 ERROR 7141 --- [nio-8081-exec-4] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/api] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "VISIT_ID"; SQL statement:
INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? ) [23502-214]
### The error may exist in com/gpf/pethospital/mapper/PrescriptionMapper.java (best guess)
### The error may involve com.gpf.pethospital.mapper.PrescriptionMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? )
### Cause: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "VISIT_ID"; SQL statement:
INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? ) [23502-214]
; NULL not allowed for column "VISIT_ID"; SQL statement:
INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? ) [23502-214]; nested exception is org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "VISIT_ID"; SQL statement:
INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? ) [23502-214]] with root cause
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "VISIT_ID"; SQL statement:
INSERT INTO prescription ( status, create_time, update_time ) VALUES ( ?, ?, ? ) [23502-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:508) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Column.validateConvertUpdateSequence(Column.java:365) ~[h2-2.1.214.jar:2.1.214]
at org.h2.table.Table.convertInsertRow(Table.java:926) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.dml.Insert.insertRows(Insert.java:167) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.dml.Insert.update(Insert.java:135) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.CommandContainer.executeUpdateWithGeneratedKeys(CommandContainer.java:242) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.CommandContainer.update(CommandContainer.java:163) ~[h2-2.1.214.jar:2.1.214]
at org.h2.command.Command.executeUpdate(Command.java:252) ~[h2-2.1.214.jar:2.1.214]
at org.h2.jdbc.JdbcPreparedStatement.execute(JdbcPreparedStatement.java:254) ~[h2-2.1.214.jar:2.1.214]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-4.0.3.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy3/jdk.proxy3.$Proxy107.execute(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy106.update(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.15.jar:3.5.15]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.15.jar:3.5.15]
at jdk.proxy2/jdk.proxy2.$Proxy105.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.15.jar:3.5.15]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.15.jar:3.5.15]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-2.1.2.jar:2.1.2]
at jdk.proxy2/jdk.proxy2.$Proxy71.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.1.2.jar:2.1.2]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]
at jdk.proxy2/jdk.proxy2.$Proxy86.insert(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.save(IService.java:60) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>) ~[mybatis-plus-extension-3.5.5.jar:3.5.5]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.service.impl.PrescriptionServiceImpl$$EnhancerBySpringCGLIB$$834c711.save(<generated>) ~[classes/:na]
at com.gpf.pethospital.controller.PrescriptionController.create(PrescriptionController.java:28) ~[classes/:na]
at com.gpf.pethospital.controller.PrescriptionController$$FastClassBySpringCGLIB$$6a1d26f5.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:162) ~[spring-security-core-5.7.11.jar:5.7.11]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762) ~[spring-aop-5.3.31.jar:5.3.31]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:707) ~[spring-aop-5.3.31.jar:5.3.31]
at com.gpf.pethospital.controller.PrescriptionController$$EnhancerBySpringCGLIB$$a4312665.create(<generated>) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.31.jar:5.3.31]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.31.jar:5.3.31]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[tomcat-embed-core-9.0.83.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:96) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at com.gpf.pethospital.security.JwtAuthenticationFilter.doFilterInternal(JwtAuthenticationFilter.java:45) ~[classes/:na]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.31.jar:5.3.31]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.31.jar:5.3.31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.83.jar:9.0.83]
at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
2026-01-29 12:21:21.609 INFO 7141 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:21:21.611 INFO 7141 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:24 min
[INFO] Finished at: 2026-01-29T12:21:21+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

View File

@@ -0,0 +1,2 @@
Error: Could not find or load main class org.springframework.boot.loader.PropertiesLauncher
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.loader.PropertiesLauncher

View File

@@ -0,0 +1,79 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:10:07.544 INFO 6203 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 6203 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:10:07.549 INFO 6203 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:10:13.073 INFO 6203 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:10:13.103 INFO 6203 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:10:13.104 INFO 6203 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:10:13.299 INFO 6203 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:10:13.300 INFO 6203 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5675 ms
2026-01-29 12:10:13.353 INFO 6203 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:10:14.132 INFO 6203 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:10:14.158 INFO 6203 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:16
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:10:16.530 WARN 6203 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: a12500af-8981-4b37-ac7e-b23ca72f676d
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:10:16.846 INFO 6203 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@46394f65, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@31aab981, org.springframework.security.web.context.SecurityContextPersistenceFilter@76c86567, org.springframework.security.web.header.HeaderWriterFilter@4966bab1, org.springframework.security.web.authentication.logout.LogoutFilter@357f6391, com.gpf.pethospital.security.JwtAuthenticationFilter@26be9a6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5a4dda2, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@34045582, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4d518c66, org.springframework.security.web.session.SessionManagementFilter@1b52699c, org.springframework.security.web.access.ExceptionTranslationFilter@38e83838, org.springframework.security.web.access.intercept.AuthorizationFilter@7971c2a9]
2026-01-29 12:10:18.165 INFO 6203 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:10:18.180 INFO 6203 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.026 seconds (JVM running for 12.681)
2026-01-29 12:10:28.895 INFO 6203 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2026-01-29 12:10:28.897 INFO 6203 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.614 s
[INFO] Finished at: 2026-01-29T12:10:28+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.7.18:run (default-cli) on project pet-hospital: Application finished with exit code: 143 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

180
backend/backend_working.log Normal file
View File

@@ -0,0 +1,180 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.gpf:pet-hospital >------------------------
[INFO] Building 爱维宠物医院管理平台 1.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> spring-boot-maven-plugin:2.7.18:run (default-cli) > test-compile @ pet-hospital >>>
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 2 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ pet-hospital ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ pet-hospital ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /mnt/d/bs/gpf_pet_hospital/backend/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ pet-hospital ---
[INFO] No sources to compile
[INFO]
[INFO] <<< spring-boot-maven-plugin:2.7.18:run (default-cli) < test-compile @ pet-hospital <<<
[INFO]
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.18:run (default-cli) @ pet-hospital ---
[INFO] Attaching agents: []
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.18)
2026-01-29 12:24:05.772 INFO 7628 --- [ main] c.g.pethospital.PetHospitalApplication : Starting PetHospitalApplication using Java 17.0.17 on LAPTOP-FS8K5GSO with PID 7628 (/mnt/d/bs/gpf_pet_hospital/backend/target/classes started by wangzq in /mnt/d/bs/gpf_pet_hospital/backend)
2026-01-29 12:24:05.778 INFO 7628 --- [ main] c.g.pethospital.PetHospitalApplication : The following 1 profile is active: "dev"
2026-01-29 12:24:11.364 INFO 7628 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2026-01-29 12:24:11.390 INFO 7628 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2026-01-29 12:24:11.390 INFO 7628 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.83]
2026-01-29 12:24:11.547 INFO 7628 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring embedded WebApplicationContext
2026-01-29 12:24:11.547 INFO 7628 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 5683 ms
2026-01-29 12:24:11.602 INFO 7628 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2026-01-29 12:24:12.451 INFO 7628 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2026-01-29 12:24:12.476 INFO 7628 --- [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Initialization Sequence datacenterId:1 workerId:22
_ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\
/ |
3.5.5
2026-01-29 12:24:14.953 WARN 7628 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 894a2f39-1097-4906-9582-c51d7962caac
This generated password is for development use only. Your security configuration must be updated before running your application in production.
2026-01-29 12:24:15.337 INFO 7628 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4aed311e, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4c38cd16, org.springframework.security.web.context.SecurityContextPersistenceFilter@7971c2a9, org.springframework.security.web.header.HeaderWriterFilter@11c88cca, org.springframework.security.web.authentication.logout.LogoutFilter@111c229c, com.gpf.pethospital.security.JwtAuthenticationFilter@7ddcb0dc, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@60b5e80d, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@31aab981, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@f5bf288, org.springframework.security.web.session.SessionManagementFilter@349c4d1c, org.springframework.security.web.access.ExceptionTranslationFilter@340cb97f, org.springframework.security.web.access.intercept.AuthorizationFilter@320be73]
2026-01-29 12:24:16.661 INFO 7628 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/api'
2026-01-29 12:24:16.675 INFO 7628 --- [ main] c.g.pethospital.PetHospitalApplication : Started PetHospitalApplication in 12.299 seconds (JVM running for 12.864)
2026-01-29 12:24:21.966 INFO 7628 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2026-01-29 12:24:21.966 INFO 7628 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2026-01-29 12:24:21.968 INFO 7628 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f20fef4] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@208105529 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:24:13.2463, 2026-01-29 12:24:13.2463, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1f20fef4]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75e8fc76] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1168243154 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0 AND (owner_id = ?)
==> Parameters: 3(Long)
<== Columns: TOTAL
<== Row: 1
<== Total: 1
==> Preparing: SELECT id,owner_id,name,breed,gender,birthday,weight,photo,remark,create_time,update_time,deleted FROM pet WHERE deleted=0 AND (owner_id = ?) LIMIT ?
==> Parameters: 3(Long), 10(Long)
<== Columns: ID, OWNER_ID, NAME, BREED, GENDER, BIRTHDAY, WEIGHT, PHOTO, REMARK, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, 3, 小白, 金毛, MALE, 2023-01-01, null, null, null, 2026-01-29 12:24:13.247041, 2026-01-29 12:24:13.247041, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@75e8fc76]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41493577] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@2016262451 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO appointment ( customer_id, pet_id, appointment_date, time_slot, status, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 3(Long), 1(Long), 2026-02-01(LocalDate), 09:00-10:00(String), PENDING(String), 常规检查(String), 2026-01-29T12:24:32.546247898(LocalDateTime), 2026-01-29T12:24:32.546247898(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@41493577]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bf1d89a] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@87439252 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: admin(String), admin(String), admin(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 1, admin, 13800138000, admin@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, ADMIN, 1, null, 2026-01-29 12:24:13.23867, 2026-01-29 12:24:13.23867, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@bf1d89a]
2026-01-29 12:24:40.495 WARN 7628 --- [nio-8081-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'status' for method parameter type String is not present]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c2f1f92] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1931573387 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: UPDATE appointment SET status=?, update_time=? WHERE id=? AND deleted=0
==> Parameters: ARRIVED(String), 2026-01-29T12:24:45.469184613(LocalDateTime), 1(Long)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c2f1f92]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cd992d5] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1326776275 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT id,username,phone,email,password,role,status,avatar,create_time,update_time,deleted FROM `user` WHERE deleted=0 AND (username = ? OR phone = ? OR email = ?)
==> Parameters: customer(String), customer(String), customer(String)
<== Columns: ID, USERNAME, PHONE, EMAIL, PASSWORD, ROLE, STATUS, AVATAR, CREATE_TIME, UPDATE_TIME, DELETED
<== Row: 3, customer, 13900139000, customer@example.com, $2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi, CUSTOMER, 1, null, 2026-01-29 12:24:13.2463, 2026-01-29 12:24:13.2463, 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2cd992d5]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47af24ef] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@630841539 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO visit ( appointment_id, customer_id, pet_id, doctor_id, status, payment_status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 3(Long), 1(Long), 1(Long), COMPLETED(String), UNPAID(String), 2026-01-29T12:24:49.989305686(LocalDateTime), 2026-01-29T12:24:49.989305686(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@47af24ef]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15774d6c] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1399738390 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO prescription ( visit_id, doctor_id, status, create_time, update_time ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 1(Long), SUBMITTED(String), 2026-01-29T12:24:54.704878297(LocalDateTime), 2026-01-29T12:24:54.704878297(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@15774d6c]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f2e9c5] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1704824955 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: INSERT INTO order_info ( visit_id, customer_id, amount, status, payment_method, remark, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 3(Long), 50.00(BigDecimal), PAID(String), WECHAT(String), 支付处方费用(String), 2026-01-29T12:24:58.817900417(LocalDateTime), 2026-01-29T12:24:58.817900417(LocalDateTime)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3f2e9c5]
Creating a new SqlSession
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48c4f857] was not registered for synchronization because synchronization is not active
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6b5f95] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1731465716 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
JDBC Connection [HikariProxyConnection@1306442745 wrapping conn1: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM order_info WHERE deleted = 0 AND (customer_id = ?)
==> Preparing: SELECT COUNT(*) AS total FROM visit WHERE deleted = 0 AND (customer_id = ?)
==> Parameters: 2(Long)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Columns: TOTAL
<== Total: 1
<== Row: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7b6b5f95]
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@48c4f857]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@338fc1da] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@46490719 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0 AND (owner_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@338fc1da]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5490b9c8] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1309118785 wrapping conn0: url=jdbc:h2:mem:testdb user=SA] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM pet WHERE deleted = 0 AND (owner_id = ?)
==> Parameters: 2(Long)
<== Columns: TOTAL
<== Row: 0
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5490b9c8]

131
backend/pom.xml Normal file
View File

@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/>
</parent>
<groupId>com.gpf</groupId>
<artifactId>pet-hospital</artifactId>
<version>1.0.0</version>
<name>爱维宠物医院管理平台</name>
<description>爱维宠物医院管理平台后端服务</description>
<properties>
<java.version>17</java.version>
<mysql.version>8.0.33</mysql.version>
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<jwt.version>0.11.5</jwt.version>
</properties>
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Spring Boot Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- Jakarta Validation API -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>${jwt.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>${jwt.version}</version>
<scope>runtime</scope>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot Security Test -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,17 @@
package com.gpf.pethospital;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 爱维宠物医院管理平台主应用
*/
@SpringBootApplication
@MapperScan("com.gpf.pethospital.mapper")
public class PetHospitalApplication {
public static void main(String[] args) {
SpringApplication.run(PetHospitalApplication.class, args);
}
}

View File

@@ -0,0 +1,37 @@
package com.gpf.pethospital.common;
public class ApiResponse<T> {
private final int code;
private final String message;
private final T data;
private ApiResponse(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public static <T> ApiResponse<T> success(T data) {
return new ApiResponse<>(0, "ok", data);
}
public static <T> ApiResponse<T> success(String message, T data) {
return new ApiResponse<>(0, message, data);
}
public static <T> ApiResponse<T> error(int code, String message) {
return new ApiResponse<>(code, message, null);
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
public T getData() {
return data;
}
}

View File

@@ -0,0 +1,37 @@
package com.gpf.pethospital.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
strictInsertFill(metaObject, "createTime", LocalDateTime.class, now);
strictInsertFill(metaObject, "updateTime", LocalDateTime.class, now);
}
@Override
public void updateFill(MetaObject metaObject) {
strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
};
}
}

View File

@@ -0,0 +1,49 @@
package com.gpf.pethospital.config;
import com.gpf.pethospital.security.JwtAuthenticationFilter;
import com.gpf.pethospital.util.JwtUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
@Value("${jwt.secret}")
private String jwtSecret;
@Value("${jwt.expiration}")
private long jwtExpiration;
@Bean
public JwtUtil jwtUtil() {
return new JwtUtil(jwtSecret, jwtExpiration);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http, JwtUtil jwtUtil) throws Exception {
http
.csrf(csrf -> csrf.disable())
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers(new AntPathRequestMatcher("/auth/**")).permitAll()
.requestMatchers(new AntPathRequestMatcher("/public/**")).permitAll()
.anyRequest().authenticated()
)
.addFilterBefore(new JwtAuthenticationFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
}

View File

@@ -0,0 +1,17 @@
package com.gpf.pethospital.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH")
.allowedHeaders("*")
.maxAge(3600);
}
}

View File

@@ -0,0 +1,72 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Appointment;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.AppointmentService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
@RestController
@RequestMapping("/appointments")
public class AppointmentController {
private final AppointmentService appointmentService;
public AppointmentController(AppointmentService appointmentService) {
this.appointmentService = appointmentService;
}
@PostMapping
public ApiResponse<?> create(@RequestBody Appointment appointment) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
appointment.setCustomerId(user.getId());
}
if (appointment.getStatus() == null) {
appointment.setStatus("PENDING");
}
appointmentService.save(appointment);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Appointment> wrapper = new LambdaQueryWrapper<>();
if (user != null && "CUSTOMER".equals(user.getRole())) {
wrapper.eq(Appointment::getCustomerId, user.getId());
}
return ApiResponse.success(appointmentService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@GetMapping("/admin")
public ApiResponse<?> adminList(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) String status) {
LambdaQueryWrapper<Appointment> wrapper = new LambdaQueryWrapper<>();
if (status != null && !status.isBlank()) {
wrapper.eq(Appointment::getStatus, status);
}
return ApiResponse.success(appointmentService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}/status")
public ApiResponse<?> updateStatus(@PathVariable Long id, @RequestParam String status) {
Appointment update = new Appointment();
update.setId(id);
update.setStatus(status);
if ("CANCELLED".equals(status)) {
update.setCancelTime(LocalDateTime.now());
}
appointmentService.updateById(update);
return ApiResponse.success("updated", null);
}
}

View File

@@ -0,0 +1,82 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.dto.LoginRequest;
import com.gpf.pethospital.dto.RegisterRequest;
import com.gpf.pethospital.entity.User;
import com.gpf.pethospital.service.UserService;
import com.gpf.pethospital.util.JwtUtil;
import jakarta.validation.Valid;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/auth")
public class AuthController {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
private final JwtUtil jwtUtil;
public AuthController(UserService userService, PasswordEncoder passwordEncoder, JwtUtil jwtUtil) {
this.userService = userService;
this.passwordEncoder = passwordEncoder;
this.jwtUtil = jwtUtil;
}
@PostMapping("/register")
public ApiResponse<?> register(@Valid @RequestBody RegisterRequest request) {
if ((request.getPhone() == null || request.getPhone().isBlank())
&& (request.getEmail() == null || request.getEmail().isBlank())) {
return ApiResponse.error(400, "phone or email is required");
}
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, request.getUsername())
.or()
.eq(request.getPhone() != null && !request.getPhone().isBlank(), User::getPhone, request.getPhone())
.or()
.eq(request.getEmail() != null && !request.getEmail().isBlank(), User::getEmail, request.getEmail());
if (userService.count(wrapper) > 0) {
return ApiResponse.error(409, "user already exists");
}
User user = new User();
user.setUsername(request.getUsername());
user.setPhone(request.getPhone());
user.setEmail(request.getEmail());
user.setPassword(passwordEncoder.encode(request.getPassword()));
user.setRole("CUSTOMER");
user.setStatus(1);
userService.save(user);
return ApiResponse.success("registered", null);
}
@PostMapping("/login")
public ApiResponse<?> login(@Valid @RequestBody LoginRequest request) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, request.getAccount())
.or()
.eq(User::getPhone, request.getAccount())
.or()
.eq(User::getEmail, request.getAccount());
User user = userService.getOne(wrapper);
if (user == null || user.getStatus() != null && user.getStatus() == 0) {
return ApiResponse.error(401, "invalid account or disabled");
}
if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
return ApiResponse.error(401, "invalid account or password");
}
String token = jwtUtil.generateToken(user.getId(), user.getRole(), user.getUsername());
Map<String, Object> data = new HashMap<>();
data.put("token", token);
data.put("role", user.getRole());
data.put("userId", user.getId());
data.put("username", user.getUsername());
return ApiResponse.success(data);
}
}

View File

@@ -0,0 +1,58 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.service.DrugService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/drugs")
public class DrugController {
private final DrugService drugService;
public DrugController(DrugService drugService) {
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) String keyword) {
LambdaQueryWrapper<Drug> wrapper = new LambdaQueryWrapper<>();
if (keyword != null && !keyword.isBlank()) {
wrapper.like(Drug::getName, keyword)
.or()
.like(Drug::getSpecification, keyword);
}
return ApiResponse.success(drugService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@PostMapping
public ApiResponse<?> create(@RequestBody Drug drug) {
if (drug.getStatus() == null) {
drug.setStatus(1);
}
drugService.save(drug);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Drug drug) {
drug.setId(id);
drugService.updateById(drug);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
drugService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,50 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.MedicalRecord;
import com.gpf.pethospital.service.MedicalRecordService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/medical-records")
public class MedicalRecordController {
private final MedicalRecordService medicalRecordService;
public MedicalRecordController(MedicalRecordService medicalRecordService) {
this.medicalRecordService = medicalRecordService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody MedicalRecord record) {
if (record.getStatus() == null) {
record.setStatus("DRAFT");
}
medicalRecordService.save(record);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam Long visitId) {
LambdaQueryWrapper<MedicalRecord> wrapper = new LambdaQueryWrapper<MedicalRecord>()
.eq(MedicalRecord::getVisitId, visitId);
return ApiResponse.success(medicalRecordService.list(wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody MedicalRecord record) {
record.setId(id);
medicalRecordService.updateById(record);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
medicalRecordService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,65 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.dto.ReplyRequest;
import com.gpf.pethospital.entity.Message;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.MessageService;
import com.gpf.pethospital.util.SecurityUtils;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
@RestController
@RequestMapping("/messages")
public class MessageController {
private final MessageService messageService;
public MessageController(MessageService messageService) {
this.messageService = messageService;
}
@PostMapping
public ApiResponse<?> create(@RequestBody Message message) {
AuthUser user = SecurityUtils.currentUser();
if (user != null) {
message.setUserId(user.getId());
message.setUserName(user.getUsername());
}
message.setStatus("PENDING");
messageService.save(message);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) String status) {
LambdaQueryWrapper<Message> wrapper = new LambdaQueryWrapper<>();
if (status != null && !status.isBlank()) {
wrapper.eq(Message::getStatus, status);
}
return ApiResponse.success(messageService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@PutMapping("/admin/{id}/reply")
public ApiResponse<?> reply(@PathVariable Long id, @Valid @RequestBody ReplyRequest request) {
AuthUser user = SecurityUtils.currentUser();
Message update = new Message();
update.setId(id);
update.setReply(request.getReply());
update.setStatus("PROCESSED");
update.setReplyTime(LocalDateTime.now());
if (user != null) {
update.setReplyUserId(user.getId());
}
messageService.updateById(update);
return ApiResponse.success("updated", null);
}
}

View File

@@ -0,0 +1,66 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Notice;
import com.gpf.pethospital.service.NoticeService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping
public class NoticeController {
private final NoticeService noticeService;
public NoticeController(NoticeService noticeService) {
this.noticeService = noticeService;
}
@GetMapping("/public/notices")
public ApiResponse<?> publicList(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
LambdaQueryWrapper<Notice> wrapper = new LambdaQueryWrapper<Notice>()
.eq(Notice::getStatus, 1)
.orderByDesc(Notice::getIsTop)
.orderByDesc(Notice::getCreateTime);
return ApiResponse.success(noticeService.page(new Page<>(page, size), wrapper));
}
@GetMapping("/public/notices/{id}")
public ApiResponse<?> publicDetail(@PathVariable Long id) {
return ApiResponse.success(noticeService.getById(id));
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/notices")
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
return ApiResponse.success(noticeService.page(new Page<>(page, size)));
}
@PreAuthorize("hasRole('ADMIN')")
@PostMapping("/notices")
public ApiResponse<?> create(@RequestBody Notice notice) {
if (notice.getStatus() == null) {
notice.setStatus(1);
}
noticeService.save(notice);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@PutMapping("/notices/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Notice notice) {
notice.setId(id);
noticeService.updateById(notice);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/notices/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
noticeService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,53 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Order;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.OrderService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/orders")
public class OrderController {
private final OrderService orderService;
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
@PostMapping
public ApiResponse<?> create(@RequestBody Order order) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
order.setCustomerId(user.getId());
}
if (order.getStatus() == null) {
order.setStatus("UNPAID");
}
orderService.save(order);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
if (user != null && "CUSTOMER".equals(user.getRole())) {
wrapper.eq(Order::getCustomerId, user.getId());
}
return ApiResponse.success(orderService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Order order) {
order.setId(id);
orderService.updateById(order);
return ApiResponse.success("updated", null);
}
}

View File

@@ -0,0 +1,79 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Pet;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.PetService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/pets")
public class PetController {
private final PetService petService;
public PetController(PetService petService) {
this.petService = petService;
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) Long ownerId) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Pet> wrapper = new LambdaQueryWrapper<>();
if (user != null && "CUSTOMER".equals(user.getRole())) {
wrapper.eq(Pet::getOwnerId, user.getId());
} else if (ownerId != null) {
wrapper.eq(Pet::getOwnerId, ownerId);
}
return ApiResponse.success(petService.page(new Page<>(page, size), wrapper));
}
@PostMapping
public ApiResponse<?> create(@RequestBody Pet pet) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
pet.setOwnerId(user.getId());
}
petService.save(pet);
return ApiResponse.success("created", null);
}
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Pet pet) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
Pet existing = petService.getById(id);
if (existing == null || !existing.getOwnerId().equals(user.getId())) {
return ApiResponse.error(403, "forbidden");
}
}
pet.setId(id);
petService.updateById(pet);
return ApiResponse.success("updated", null);
}
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
Pet existing = petService.getById(id);
if (existing == null || !existing.getOwnerId().equals(user.getId())) {
return ApiResponse.error(403, "forbidden");
}
}
petService.removeById(id);
return ApiResponse.success("deleted", null);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin/all")
public ApiResponse<?> adminList(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
return ApiResponse.success(petService.page(new Page<>(page, size)));
}
}

View File

@@ -0,0 +1,54 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Prescription;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.PrescriptionService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/prescriptions")
public class PrescriptionController {
private final PrescriptionService prescriptionService;
public PrescriptionController(PrescriptionService prescriptionService) {
this.prescriptionService = prescriptionService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Prescription prescription) {
if (prescription.getStatus() == null) {
prescription.setStatus("DRAFT");
}
prescriptionService.save(prescription);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) Long visitId) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Prescription> wrapper = new LambdaQueryWrapper<>();
if (visitId != null) {
wrapper.eq(Prescription::getVisitId, visitId);
}
if (user != null && "DOCTOR".equals(user.getRole())) {
wrapper.eq(Prescription::getDoctorId, user.getId());
}
return ApiResponse.success(prescriptionService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Prescription prescription) {
prescription.setId(id);
prescriptionService.updateById(prescription);
return ApiResponse.success("updated", null);
}
}

View File

@@ -0,0 +1,47 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.PrescriptionItem;
import com.gpf.pethospital.service.PrescriptionItemService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/prescription-items")
public class PrescriptionItemController {
private final PrescriptionItemService prescriptionItemService;
public PrescriptionItemController(PrescriptionItemService prescriptionItemService) {
this.prescriptionItemService = prescriptionItemService;
}
@GetMapping
public ApiResponse<?> list(@RequestParam Long prescriptionId) {
LambdaQueryWrapper<PrescriptionItem> wrapper = new LambdaQueryWrapper<PrescriptionItem>()
.eq(PrescriptionItem::getPrescriptionId, prescriptionId);
return ApiResponse.success(prescriptionItemService.list(wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody PrescriptionItem item) {
prescriptionItemService.save(item);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody PrescriptionItem item) {
item.setId(id);
prescriptionItemService.updateById(item);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
prescriptionItemService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,58 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Report;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.ReportService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/reports")
public class ReportController {
private final ReportService reportService;
public ReportController(ReportService reportService) {
this.reportService = reportService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Report report) {
reportService.save(report);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) Long petId) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Report> wrapper = new LambdaQueryWrapper<>();
if (petId != null) {
wrapper.eq(Report::getPetId, petId);
}
if (user != null && "DOCTOR".equals(user.getRole())) {
wrapper.eq(Report::getDoctorId, user.getId());
}
return ApiResponse.success(reportService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Report report) {
report.setId(id);
reportService.updateById(report);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
reportService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,64 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Order;
import com.gpf.pethospital.entity.User;
import com.gpf.pethospital.service.AppointmentService;
import com.gpf.pethospital.service.OrderService;
import com.gpf.pethospital.service.PetService;
import com.gpf.pethospital.service.UserService;
import com.gpf.pethospital.service.VisitService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/admin/stats")
public class StatsController {
private final OrderService orderService;
private final AppointmentService appointmentService;
private final VisitService visitService;
private final PetService petService;
private final UserService userService;
public StatsController(OrderService orderService,
AppointmentService appointmentService,
VisitService visitService,
PetService petService,
UserService userService) {
this.orderService = orderService;
this.appointmentService = appointmentService;
this.visitService = visitService;
this.petService = petService;
this.userService = userService;
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> summary() {
Map<String, Object> data = new HashMap<>();
data.put("orders", orderService.count());
data.put("appointments", appointmentService.count());
data.put("visits", visitService.count());
data.put("pets", petService.count());
data.put("customers", userService.count(new LambdaQueryWrapper<User>().eq(User::getRole, "CUSTOMER")));
QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("SUM(amount) AS total");
List<Map<String, Object>> result = orderService.listMaps(wrapper);
BigDecimal total = BigDecimal.ZERO;
if (!result.isEmpty() && result.get(0).get("total") != null) {
total = new BigDecimal(result.get(0).get("total").toString());
}
data.put("orderAmountTotal", total);
return ApiResponse.success(data);
}
}

View File

@@ -0,0 +1,52 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.entity.StockIn;
import com.gpf.pethospital.service.DrugService;
import com.gpf.pethospital.service.StockInService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/stock-in")
public class StockInController {
private final StockInService stockInService;
private final DrugService drugService;
public StockInController(StockInService stockInService, DrugService drugService) {
this.stockInService = stockInService;
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) Long drugId) {
LambdaQueryWrapper<StockIn> wrapper = new LambdaQueryWrapper<>();
if (drugId != null) {
wrapper.eq(StockIn::getDrugId, drugId);
}
return ApiResponse.success(stockInService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@PostMapping
@Transactional
public ApiResponse<?> create(@RequestBody StockIn stockIn) {
stockInService.save(stockIn);
if (stockIn.getDrugId() != null && stockIn.getQuantity() != null) {
Drug drug = drugService.getById(stockIn.getDrugId());
if (drug != null) {
int current = drug.getStock() == null ? 0 : drug.getStock();
drug.setStock(current + stockIn.getQuantity());
drugService.updateById(drug);
}
}
return ApiResponse.success("created", null);
}
}

View File

@@ -0,0 +1,52 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.entity.StockOut;
import com.gpf.pethospital.service.DrugService;
import com.gpf.pethospital.service.StockOutService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/stock-out")
public class StockOutController {
private final StockOutService stockOutService;
private final DrugService drugService;
public StockOutController(StockOutService stockOutService, DrugService drugService) {
this.stockOutService = stockOutService;
this.drugService = drugService;
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) Long drugId) {
LambdaQueryWrapper<StockOut> wrapper = new LambdaQueryWrapper<>();
if (drugId != null) {
wrapper.eq(StockOut::getDrugId, drugId);
}
return ApiResponse.success(stockOutService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasRole('ADMIN')")
@PostMapping
@Transactional
public ApiResponse<?> create(@RequestBody StockOut stockOut) {
stockOutService.save(stockOut);
if (stockOut.getDrugId() != null && stockOut.getQuantity() != null) {
Drug drug = drugService.getById(stockOut.getDrugId());
if (drug != null) {
int current = drug.getStock() == null ? 0 : drug.getStock();
drug.setStock(Math.max(0, current - stockOut.getQuantity()));
drugService.updateById(drug);
}
}
return ApiResponse.success("created", null);
}
}

View File

@@ -0,0 +1,115 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.User;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.UserService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
public UserController(UserService userService, PasswordEncoder passwordEncoder) {
this.userService = userService;
this.passwordEncoder = passwordEncoder;
}
@GetMapping("/me")
public ApiResponse<?> me() {
AuthUser authUser = SecurityUtils.currentUser();
if (authUser == null) {
return ApiResponse.error(401, "unauthorized");
}
User user = userService.getById(authUser.getId());
if (user != null) {
user.setPassword(null);
}
return ApiResponse.success(user);
}
@PutMapping("/me")
public ApiResponse<?> updateMe(@RequestBody User payload) {
AuthUser authUser = SecurityUtils.currentUser();
if (authUser == null) {
return ApiResponse.error(401, "unauthorized");
}
User update = new User();
update.setId(authUser.getId());
update.setUsername(payload.getUsername());
update.setPhone(payload.getPhone());
update.setEmail(payload.getEmail());
update.setAvatar(payload.getAvatar());
userService.updateById(update);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size,
@RequestParam(required = false) String role) {
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
if (role != null && !role.isBlank()) {
wrapper.eq(User::getRole, role);
}
Page<User> result = userService.page(new Page<>(page, size), wrapper);
result.getRecords().forEach(u -> u.setPassword(null));
return ApiResponse.success(result);
}
@PreAuthorize("hasRole('ADMIN')")
@PostMapping
public ApiResponse<?> create(@RequestBody User user) {
if (user.getPassword() == null || user.getPassword().isBlank()) {
return ApiResponse.error(400, "password required");
}
user.setPassword(passwordEncoder.encode(user.getPassword()));
if (user.getStatus() == null) {
user.setStatus(1);
}
userService.save(user);
return ApiResponse.success("created", null);
}
@PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}/status")
public ApiResponse<?> updateStatus(@PathVariable Long id, @RequestParam Integer status) {
User update = new User();
update.setId(id);
update.setStatus(status);
userService.updateById(update);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@PutMapping("/{id}/reset-password")
public ApiResponse<?> resetPassword(@PathVariable Long id, @RequestParam String newPassword) {
User update = new User();
update.setId(id);
update.setPassword(passwordEncoder.encode(newPassword));
userService.updateById(update);
return ApiResponse.success("updated", null);
}
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/stats")
public ApiResponse<?> stats() {
Map<String, Object> data = new HashMap<>();
data.put("total", userService.count());
data.put("admins", userService.count(new LambdaQueryWrapper<User>().eq(User::getRole, "ADMIN")));
data.put("doctors", userService.count(new LambdaQueryWrapper<User>().eq(User::getRole, "DOCTOR")));
data.put("customers", userService.count(new LambdaQueryWrapper<User>().eq(User::getRole, "CUSTOMER")));
return ApiResponse.success(data);
}
}

View File

@@ -0,0 +1,59 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Pet;
import com.gpf.pethospital.entity.VaccineRecord;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.PetService;
import com.gpf.pethospital.service.VaccineRecordService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/vaccines")
public class VaccineRecordController {
private final VaccineRecordService vaccineRecordService;
private final PetService petService;
public VaccineRecordController(VaccineRecordService vaccineRecordService, PetService petService) {
this.vaccineRecordService = vaccineRecordService;
this.petService = petService;
}
@GetMapping
public ApiResponse<?> list(@RequestParam Long petId,
@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
AuthUser user = SecurityUtils.currentUser();
if (user != null && "CUSTOMER".equals(user.getRole())) {
Pet pet = petService.getById(petId);
if (pet == null || !pet.getOwnerId().equals(user.getId())) {
return ApiResponse.error(403, "forbidden");
}
}
LambdaQueryWrapper<VaccineRecord> wrapper = new LambdaQueryWrapper<VaccineRecord>()
.eq(VaccineRecord::getPetId, petId);
return ApiResponse.success(vaccineRecordService.page(new Page<>(page, size), wrapper));
}
@PostMapping
public ApiResponse<?> create(@RequestBody VaccineRecord record) {
vaccineRecordService.save(record);
return ApiResponse.success("created", null);
}
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody VaccineRecord record) {
record.setId(id);
vaccineRecordService.updateById(record);
return ApiResponse.success("updated", null);
}
@DeleteMapping("/{id}")
public ApiResponse<?> delete(@PathVariable Long id) {
vaccineRecordService.removeById(id);
return ApiResponse.success("deleted", null);
}
}

View File

@@ -0,0 +1,57 @@
package com.gpf.pethospital.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gpf.pethospital.common.ApiResponse;
import com.gpf.pethospital.entity.Visit;
import com.gpf.pethospital.security.AuthUser;
import com.gpf.pethospital.service.VisitService;
import com.gpf.pethospital.util.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/visits")
public class VisitController {
private final VisitService visitService;
public VisitController(VisitService visitService) {
this.visitService = visitService;
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PostMapping
public ApiResponse<?> create(@RequestBody Visit visit) {
if (visit.getStatus() == null) {
visit.setStatus("IN_PROGRESS");
}
if (visit.getPaymentStatus() == null) {
visit.setPaymentStatus("UNPAID");
}
visitService.save(visit);
return ApiResponse.success("created", null);
}
@GetMapping
public ApiResponse<?> list(@RequestParam(defaultValue = "1") long page,
@RequestParam(defaultValue = "10") long size) {
AuthUser user = SecurityUtils.currentUser();
LambdaQueryWrapper<Visit> wrapper = new LambdaQueryWrapper<>();
if (user != null) {
if ("CUSTOMER".equals(user.getRole())) {
wrapper.eq(Visit::getCustomerId, user.getId());
} else if ("DOCTOR".equals(user.getRole())) {
wrapper.eq(Visit::getDoctorId, user.getId());
}
}
return ApiResponse.success(visitService.page(new Page<>(page, size), wrapper));
}
@PreAuthorize("hasAnyRole('ADMIN','DOCTOR')")
@PutMapping("/{id}")
public ApiResponse<?> update(@PathVariable Long id, @RequestBody Visit visit) {
visit.setId(id);
visitService.updateById(visit);
return ApiResponse.success("updated", null);
}
}

View File

@@ -0,0 +1,26 @@
package com.gpf.pethospital.dto;
import jakarta.validation.constraints.NotBlank;
public class LoginRequest {
@NotBlank
private String account;
@NotBlank
private String password;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

View File

@@ -0,0 +1,46 @@
package com.gpf.pethospital.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
public class RegisterRequest {
@NotBlank
private String username;
private String phone;
@Email
private String email;
@NotBlank
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

View File

@@ -0,0 +1,16 @@
package com.gpf.pethospital.dto;
import jakarta.validation.constraints.NotBlank;
public class ReplyRequest {
@NotBlank
private String reply;
public String getReply() {
return reply;
}
public void setReply(String reply) {
this.reply = reply;
}
}

View File

@@ -0,0 +1,83 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 门诊预约实体
*/
@Data
@Accessors(chain = true)
@TableName("appointment")
public class Appointment {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 顾客ID
*/
private Long customerId;
/**
* 宠物ID
*/
private Long petId;
/**
* 预约医生ID可为空表示不指定医生
*/
private Long doctorId;
/**
* 科室
*/
private String department;
/**
* 预约日期
*/
private LocalDate appointmentDate;
/**
* 预约时段例如09:00-10:00
*/
private String timeSlot;
/**
* 预约状态PENDING-待确认, CONFIRMED-已确认, ARRIVED-已到诊, CANCELLED-已取消, NO_SHOW-爽约
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 取消时间
*/
private LocalDateTime cancelTime;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,93 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 药品实体
*/
@Data
@Accessors(chain = true)
@TableName("drug")
public class Drug {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 药品名称
*/
private String name;
/**
* 规格
*/
private String specification;
/**
* 单位(如:片、盒、瓶)
*/
private String unit;
/**
* 当前库存数量
*/
private Integer stock;
/**
* 预警阈值
*/
private Integer alertThreshold;
/**
* 进价
*/
private BigDecimal purchasePrice;
/**
* 售价
*/
private BigDecimal salePrice;
/**
* 生产厂家
*/
private String manufacturer;
/**
* 批准文号
*/
private String approvalNumber;
/**
* 有效期
*/
private LocalDateTime expiryDate;
/**
* 状态0-禁用, 1-启用
*/
private Integer status;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,82 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 病历实体
*/
@Data
@Accessors(chain = true)
@TableName("medical_record")
public class MedicalRecord {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 就诊记录ID
*/
private Long visitId;
/**
* 主诉
*/
private String chiefComplaint;
/**
* 现病史
*/
private String presentIllness;
/**
* 体格检查
*/
private String physicalExamination;
/**
* 检查结果
*/
private String examinationResults;
/**
* 诊断结论
*/
private String diagnosis;
/**
* 治疗方案
*/
private String treatmentPlan;
/**
* 医嘱
*/
private String advice;
/**
* 状态DRAFT-草稿, COMPLETED-已完成
*/
private String status;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,82 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 留言实体
*/
@Data
@Accessors(chain = true)
@TableName("message")
public class Message {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 留言人ID
*/
private Long userId;
/**
* 留言人姓名
*/
private String userName;
/**
* 联系方式
*/
private String contact;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* 处理状态PENDING-待处理, PROCESSED-已处理
*/
private String status;
/**
* 回复内容
*/
private String reply;
/**
* 回复时间
*/
private LocalDateTime replyTime;
/**
* 回复者ID
*/
private Long replyUserId;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,62 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 公告实体
*/
@Data
@Accessors(chain = true)
@TableName("notice")
public class Notice {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* 是否置顶0-否, 1-是
*/
private Integer isTop;
/**
* 状态0-下架, 1-上架
*/
private Integer status;
/**
* 发布者ID
*/
private Long publisherId;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,78 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单实体
*/
@Data
@Accessors(chain = true)
@TableName("order_info")
public class Order {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 就诊记录ID
*/
private Long visitId;
/**
* 顾客ID
*/
private Long customerId;
/**
* 订单金额
*/
private BigDecimal amount;
/**
* 订单状态UNPAID-未支付, PAID-已支付, CANCELLED-已取消, REFUNDING-退款中, REFUNDED-已退款
*/
private String status;
/**
* 支付方式OFFLINE-线下支付, ALIPAY-支付宝, WECHAT-微信支付
*/
private String paymentMethod;
/**
* 支付时间
*/
private LocalDateTime paymentTime;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,78 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 宠物实体
*/
@Data
@Accessors(chain = true)
@TableName("pet")
public class Pet {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 宠物主人ID
*/
private Long ownerId;
/**
* 宠物名称
*/
private String name;
/**
* 品种
*/
private String breed;
/**
* 性别MALE-雄性, FEMALE-雌性
*/
private String gender;
/**
* 生日
*/
private LocalDate birthday;
/**
* 体重(kg)
*/
private Double weight;
/**
* 照片URL
*/
private String photo;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,57 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 处方实体
*/
@Data
@Accessors(chain = true)
@TableName("prescription")
public class Prescription {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 就诊记录ID
*/
private Long visitId;
/**
* 医生ID
*/
private Long doctorId;
/**
* 处方状态DRAFT-草稿, SUBMITTED-已提交, ISSUED-已发药, VOIDED-已作废
*/
private String status;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,83 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 处方明细实体
*/
@Data
@Accessors(chain = true)
@TableName("prescription_item")
public class PrescriptionItem {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 处方ID
*/
private Long prescriptionId;
/**
* 药品ID
*/
private Long drugId;
/**
* 药品名称(冗余字段,方便查询)
*/
private String drugName;
/**
* 规格
*/
private String specification;
/**
* 数量
*/
private Integer quantity;
/**
* 用法用量
*/
private String usage;
/**
* 用药天数
*/
private Integer days;
/**
* 单价
*/
private BigDecimal unitPrice;
/**
* 小计
*/
private BigDecimal subtotal;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,72 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 检查报告实体
*/
@Data
@Accessors(chain = true)
@TableName("report")
public class Report {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 就诊记录ID
*/
private Long visitId;
/**
* 宠物ID
*/
private Long petId;
/**
* 报告类型血常规、X光、B超等
*/
private String type;
/**
* 报告名称
*/
private String title;
/**
* 报告内容摘要
*/
private String summary;
/**
* 附件URL图片或PDF
*/
private String attachmentUrl;
/**
* 检查医生ID
*/
private Long doctorId;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,67 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 入库流水实体
*/
@Data
@Accessors(chain = true)
@TableName("stock_in")
public class StockIn {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 药品ID
*/
private Long drugId;
/**
* 入库数量
*/
private Integer quantity;
/**
* 经办人ID
*/
private Long operatorId;
/**
* 入库时间
*/
private LocalDateTime stockInTime;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,72 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 出库/消耗流水实体
*/
@Data
@Accessors(chain = true)
@TableName("stock_out")
public class StockOut {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 药品ID
*/
private Long drugId;
/**
* 处方ID可为空
*/
private Long prescriptionId;
/**
* 出库数量
*/
private Integer quantity;
/**
* 经办人ID
*/
private Long operatorId;
/**
* 出库时间
*/
private LocalDateTime stockOutTime;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,72 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* 用户实体
*/
@Data
@Accessors(chain = true)
@TableName("`user`")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 用户名/姓名
*/
private String username;
/**
* 手机号
*/
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 密码(加密后)
*/
private String password;
/**
* 角色ADMIN-管理员, DOCTOR-医生, CUSTOMER-顾客
*/
private String role;
/**
* 状态0-禁用, 1-启用
*/
private Integer status;
/**
* 头像URL
*/
private String avatar;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,68 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 疫苗/驱虫记录实体
*/
@Data
@Accessors(chain = true)
@TableName("vaccine_record")
public class VaccineRecord {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 宠物ID
*/
private Long petId;
/**
* 记录类型VACCINE-疫苗, DEWORMING-驱虫
*/
private String type;
/**
* 项目名称(如:狂犬疫苗、体内驱虫等)
*/
private String itemName;
/**
* 执行日期
*/
private LocalDate executeDate;
/**
* 下次提醒日期
*/
private LocalDate nextReminderDate;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,93 @@
package com.gpf.pethospital.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 就诊记录实体
*/
@Data
@Accessors(chain = true)
@TableName("visit")
public class Visit {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 预约ID可为空现场挂号无预约
*/
private Long appointmentId;
/**
* 顾客ID
*/
private Long customerId;
/**
* 宠物ID
*/
private Long petId;
/**
* 接诊医生ID
*/
private Long doctorId;
/**
* 就诊状态IN_PROGRESS-就诊中, COMPLETED-已完成
*/
private String status;
/**
* 总费用
*/
private BigDecimal totalAmount;
/**
* 支付状态UNPAID-未支付, PAID-已支付, REFUNDING-退款中, REFUNDED-已退款
*/
private String paymentStatus;
/**
* 支付方式OFFLINE-线下支付, ALIPAY-支付宝, WECHAT-微信支付
*/
private String paymentMethod;
/**
* 支付时间
*/
private LocalDateTime paymentTime;
/**
* 开始就诊时间
*/
private LocalDateTime startTime;
/**
* 结束就诊时间
*/
private LocalDateTime endTime;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 删除标记0-未删除, 1-已删除
*/
@TableLogic
private Integer deleted;
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Appointment;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AppointmentMapper extends BaseMapper<Appointment> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Drug;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DrugMapper extends BaseMapper<Drug> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.MedicalRecord;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MedicalRecordMapper extends BaseMapper<MedicalRecord> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Message;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MessageMapper extends BaseMapper<Message> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Notice;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface NoticeMapper extends BaseMapper<Notice> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Order;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Pet;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PetMapper extends BaseMapper<Pet> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.PrescriptionItem;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PrescriptionItemMapper extends BaseMapper<PrescriptionItem> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Prescription;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface PrescriptionMapper extends BaseMapper<Prescription> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Report;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ReportMapper extends BaseMapper<Report> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.StockIn;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StockInMapper extends BaseMapper<StockIn> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.StockOut;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StockOutMapper extends BaseMapper<StockOut> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.VaccineRecord;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VaccineRecordMapper extends BaseMapper<VaccineRecord> {
}

View File

@@ -0,0 +1,9 @@
package com.gpf.pethospital.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpf.pethospital.entity.Visit;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface VisitMapper extends BaseMapper<Visit> {
}

View File

@@ -0,0 +1,25 @@
package com.gpf.pethospital.security;
public class AuthUser {
private final Long id;
private final String username;
private final String role;
public AuthUser(Long id, String username, String role) {
this.id = id;
this.username = username;
this.role = role;
}
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public String getRole() {
return role;
}
}

View File

@@ -0,0 +1,55 @@
package com.gpf.pethospital.security;
import com.gpf.pethospital.util.JwtUtil;
import io.jsonwebtoken.Claims;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtUtil jwtUtil;
public JwtAuthenticationFilter(JwtUtil jwtUtil) {
this.jwtUtil = jwtUtil;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String token = resolveToken(request);
if (StringUtils.hasText(token)) {
try {
Claims claims = jwtUtil.parseToken(token);
String username = claims.get("username", String.class);
String role = claims.get("role", String.class);
Number uid = claims.get("uid", Number.class);
Long userId = uid == null ? null : uid.longValue();
SimpleGrantedAuthority authority = new SimpleGrantedAuthority("ROLE_" + role);
AuthUser principal = new AuthUser(userId, username, role);
Authentication auth = new UsernamePasswordAuthenticationToken(principal, null, Collections.singleton(authority));
SecurityContextHolder.getContext().setAuthentication(auth);
} catch (Exception ignored) {
}
}
filterChain.doFilter(request, response);
}
private String resolveToken(HttpServletRequest request) {
String bearer = request.getHeader("Authorization");
if (StringUtils.hasText(bearer) && bearer.startsWith("Bearer ")) {
return bearer.substring(7);
}
return null;
}
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Appointment;
public interface AppointmentService extends IService<Appointment> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Drug;
public interface DrugService extends IService<Drug> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.MedicalRecord;
public interface MedicalRecordService extends IService<MedicalRecord> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Message;
public interface MessageService extends IService<Message> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Notice;
public interface NoticeService extends IService<Notice> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Order;
public interface OrderService extends IService<Order> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Pet;
public interface PetService extends IService<Pet> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.PrescriptionItem;
public interface PrescriptionItemService extends IService<PrescriptionItem> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Prescription;
public interface PrescriptionService extends IService<Prescription> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Report;
public interface ReportService extends IService<Report> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.StockIn;
public interface StockInService extends IService<StockIn> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.StockOut;
public interface StockOutService extends IService<StockOut> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.User;
public interface UserService extends IService<User> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.VaccineRecord;
public interface VaccineRecordService extends IService<VaccineRecord> {
}

View File

@@ -0,0 +1,7 @@
package com.gpf.pethospital.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gpf.pethospital.entity.Visit;
public interface VisitService extends IService<Visit> {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Appointment;
import com.gpf.pethospital.mapper.AppointmentMapper;
import com.gpf.pethospital.service.AppointmentService;
import org.springframework.stereotype.Service;
@Service
public class AppointmentServiceImpl extends ServiceImpl<AppointmentMapper, Appointment> implements AppointmentService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Drug;
import com.gpf.pethospital.mapper.DrugMapper;
import com.gpf.pethospital.service.DrugService;
import org.springframework.stereotype.Service;
@Service
public class DrugServiceImpl extends ServiceImpl<DrugMapper, Drug> implements DrugService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.MedicalRecord;
import com.gpf.pethospital.mapper.MedicalRecordMapper;
import com.gpf.pethospital.service.MedicalRecordService;
import org.springframework.stereotype.Service;
@Service
public class MedicalRecordServiceImpl extends ServiceImpl<MedicalRecordMapper, MedicalRecord> implements MedicalRecordService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Message;
import com.gpf.pethospital.mapper.MessageMapper;
import com.gpf.pethospital.service.MessageService;
import org.springframework.stereotype.Service;
@Service
public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements MessageService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Notice;
import com.gpf.pethospital.mapper.NoticeMapper;
import com.gpf.pethospital.service.NoticeService;
import org.springframework.stereotype.Service;
@Service
public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements NoticeService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Order;
import com.gpf.pethospital.mapper.OrderMapper;
import com.gpf.pethospital.service.OrderService;
import org.springframework.stereotype.Service;
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Pet;
import com.gpf.pethospital.mapper.PetMapper;
import com.gpf.pethospital.service.PetService;
import org.springframework.stereotype.Service;
@Service
public class PetServiceImpl extends ServiceImpl<PetMapper, Pet> implements PetService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.PrescriptionItem;
import com.gpf.pethospital.mapper.PrescriptionItemMapper;
import com.gpf.pethospital.service.PrescriptionItemService;
import org.springframework.stereotype.Service;
@Service
public class PrescriptionItemServiceImpl extends ServiceImpl<PrescriptionItemMapper, PrescriptionItem> implements PrescriptionItemService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Prescription;
import com.gpf.pethospital.mapper.PrescriptionMapper;
import com.gpf.pethospital.service.PrescriptionService;
import org.springframework.stereotype.Service;
@Service
public class PrescriptionServiceImpl extends ServiceImpl<PrescriptionMapper, Prescription> implements PrescriptionService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.Report;
import com.gpf.pethospital.mapper.ReportMapper;
import com.gpf.pethospital.service.ReportService;
import org.springframework.stereotype.Service;
@Service
public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.StockIn;
import com.gpf.pethospital.mapper.StockInMapper;
import com.gpf.pethospital.service.StockInService;
import org.springframework.stereotype.Service;
@Service
public class StockInServiceImpl extends ServiceImpl<StockInMapper, StockIn> implements StockInService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.StockOut;
import com.gpf.pethospital.mapper.StockOutMapper;
import com.gpf.pethospital.service.StockOutService;
import org.springframework.stereotype.Service;
@Service
public class StockOutServiceImpl extends ServiceImpl<StockOutMapper, StockOut> implements StockOutService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.User;
import com.gpf.pethospital.mapper.UserMapper;
import com.gpf.pethospital.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

View File

@@ -0,0 +1,11 @@
package com.gpf.pethospital.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gpf.pethospital.entity.VaccineRecord;
import com.gpf.pethospital.mapper.VaccineRecordMapper;
import com.gpf.pethospital.service.VaccineRecordService;
import org.springframework.stereotype.Service;
@Service
public class VaccineRecordServiceImpl extends ServiceImpl<VaccineRecordMapper, VaccineRecord> implements VaccineRecordService {
}

Some files were not shown because too many files have changed in this diff Show More